async function wrap(f) { var originalPrompt = this.cli.prompt.innerHTML var originalOnenter = this.cli.onenter try { this.cli.prompt.innerHTML = '' this.cli.onenter = l => false var lastLog = $log('') await f({ log: (...args) => { var newLog = $log(...args) newLog.parentElement.insertBefore(newLog, lastLog.nextSibling) lastLog = newLog }, arg: this.arg }) } finally { this.cli.prompt.innerHTML = originalPrompt this.cli.onenter = originalOnenter } } console.group("[pkg93]"); console.log("[pkg93] Injecting packages..."); try { if (localStorage[".pkg93/config.json"] === undefined) { console.log("[pkg93] You seem new. Creating config..."); localStorage[".pkg93/config.json"] = '{"repos": ["http://codinggamerhd.com/main-repo"], "installed": [], "pkglist": []}'; } var config = JSON.parse(localStorage[".pkg93/config.json"]); for (let pkg of config.installed) { eval(localStorage[".pkg93/packages/" + pkg + ".js"]); } } catch (err) { console.error("[pkg93] Couldn't load package information."); } console.log("[pkg93] Done!"); console.groupEnd(); var pkg93 = { getConfig: function() { try { return JSON.parse(localStorage[".pkg93/config.json"]); } catch (err) { return false; } }, pull: async function(cli) { var config = pkg93.getConfig(); cli.log("WARN Windows93 may lag while getting packages.\n This is a normal thing."); config.pkglist = []; for (let source of config.repos) { cli.log("GET " + source); try { var json = await (await (fetch(source + "/repo.json"))).json() cli.log("NAME " + json.name); cli.log("MSG " + json.msg); for (let item of json.packages) { try { cli.log("OK " + item + "@" + source); config.pkglist.push(item + "@" + source); } catch (err) { cli.log("ERR " + err.message); } } } catch (err) { cli.log("ERR " + err.message); } } localStorage[".pkg93/config.json"] = JSON.stringify(config); }, get: async function(pkg, cli) { var config = pkg93.getConfig(); cli.log("SRCH " + pkg); var index = config.pkglist.findIndex(function(string) { return string.split("@")[0] == pkg; }); if (index < 0) { cli.log("ERR Not found."); return false; } else { cli.log("OK Found!"); var pkgname = config.pkglist[index].split("@")[0]; var pkgsource = config.pkglist[index].split("@")[1]; try { var json = await (await (fetch(pkgsource + "/" + pkgname + "/package.json"))).json() localStorage[".pkg93/packages/" + pkgname + ".json"] = JSON.stringify(json); if (json.dependencies) { for (let pkg of json.dependencies) { try { cli.log("DPND Getting dependency \"" + pkg + "\""); output = await pkg93.get(pkg, cli); if (!output) { throw new Error("Dependency \"" + pkg + "\" failed to install. Current package may not work!"); } } catch (err) { cli.log("ERR " + err.message); } } } var script = await (await (fetch(pkgsource + "/" + pkgname + "/" + json.inject))).text() localStorage[".pkg93/packages/" + pkgname + ".js"] = script; eval(script); if (json.uninstall) { var uninst = await (await (fetch(pkgsource + "/" + pkgname + "/" + json.uninstall))).text() localStorage[".pkg93/packages/" + pkgname + ".rm.js"] = uninst; } cli.log("OK Injected package!"); if (!config.installed.includes(pkgname)) { config.installed.push(pkgname); } localStorage[".pkg93/config.json"] = JSON.stringify(config); return true; } catch (err) { cli.log("ERR " + err.message); return false; } } }, rm: function(pkg, cli) { var config = pkg93.getConfig(); var index = config.installed.indexOf(pkg); if (index < 0) { cli.log("ERR Not found."); return false; } else if (!!localStorage[".pkg93/packages/" + pkg + ".rm.js"]) { eval(localStorage[".pkg93/packages/" + pkg + ".rm.js"]); // Typing eval makes me feel dirty. delete le._apps[config.installed[index]]; delete localStorage[".pkg93/packages/" + pkg + ".rm.js"] delete localStorage[".pkg93/packages/" + pkg + ".js"] delete localStorage[".pkg93/packages/" + pkg + ".json"] config.installed.splice(index, 1); cli.log("OK Removed!"); } else { try { if (le._apps[config.installed[index]] === null) { cli.log("ERR Already removed."); return false; } else { delete le._apps[config.installed[index]]; delete localStorage[".pkg93/packages/" + config.installed[index] + ".js"]; delete localStorage[".pkg93/packages/" + config.installed[index] + ".json"]; config.installed.splice(index, 1); cli.log("OK Removed!"); } localStorage[".pkg93/config.json"] = JSON.stringify(config); return true; } catch (err) { cli.log("ERR " + err.message); return false; } } }, pkgInfo: async function(pkg, onlineOnly) { var config = pkg93.getConfig(); try { if (localStorage[".pkg93/packages/" + pkg + ".json"] && !onlineOnly) { return JSON.parse(localStorage[".pkg93/packages/" + pkg + ".json"]); } else { var index = config.pkglist.findIndex(function(string) { return string.split("@")[0] == pkg; }); if (index < 0) { return false; } else { var pkgname = config.pkglist[index].split("@")[0]; var pkgsource = config.pkglist[index].split("@")[1]; var json = await (await (fetch(pkgsource + "/" + pkgname + "/package.json"))).json() localStorage[".pkg93/packages/" + pkgname + ".json"] = JSON.stringify(json); // save it for later return json; } } } catch (err) { console.error("[pkg93] " + err.stack); return false; } }, version: "v1.2.1" } if (localStorage[".pkg93/userscript"] && localStorage["desktop/Load pkg93.lnk42"] != '{"icon":"//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png","exe":"js https://cdn.rawgit.com/1024x2/pkg93/' + pkg93.version + '/pkg93.js","title":"pkg93"}') { $notif("Since you're not using the pkg93 userscript, a shortcut for installing pkg93 has been placed on your desktop."); localStorage["desktop/Load pkg93.lnk42"] = '{"icon":"//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png","exe":"js https://cdn.rawgit.com/1024x2/pkg93/' + pkg93.version + '/pkg93.js","title":"Load pkg93"}'; $explorer.refresh(); } async function exec(cli) { pkg93.version = "v1.2.1"; var protected = ["3d", "acid", "acidbox", "ansi", "anthology", "arena93", "bananamp", "base64", "bytebeat", "calc", "castlegafa", "catex", "cd", "clear", "clearhist", "clippy", "code", "contact", "crazy", "defrag", "dmg", "do a barrel roll", "doctor", "download", "find", "font", "format", "fullscreen", "fx", "gameoflife", "glitch", "global thermonuclear war", "gravity", "hampster", "hello", "help", "hexed", "history", "hl3", "hydra", "ie6", "iframe", "img", "info", "js", "key", "killall", "layer", "lenna", "lisa", "ls", "manifesto", "marburg", "messenger", "mines", "necronomicoin", "pd", "piskel", "pkg93", "pony", "potato", "progressquest", "pwd", "reboot", "robby", "rotate", "shutdown", "skifree", "solitude", "speech", "starwars", "superplayer", "takethis", "terminal", "textarea", "tree", "trollbox", "vega", "virtualpc", "vm", "wat", "whatif", "whois", "win", "zkype"]; var args = cli.arg.arguments; var help = `pkg93 ${pkg93.version} Usage: pkg93 [command] List of Commands pull Updates package listing get [package] Installs a package rm [package] Uninstalls a package add-repo [url] Adds a repository rm-repo [id] Removes a repository info [pkg] Gets information on a package ls [pkgs|installed|repos] Lists packages, installed packages or repositories. Color meanings Executing OK Error Warning Info Examples pkg93 get gud pkg93 rm kebab `; if (localStorage[".pkg93/config.json"] === undefined) { localStorage[".pkg93/config.json"] = '{"repos": ["http://codinggamerhd.com/main-repo"], "installed": [], "pkglist": []}'; } if (localStorage[".pkg93/packages/"] === undefined) { localStorage[".pkg93/packages/"] = ""; } localStorage[".pkg93/README.txt"] = "WARNING!\nThis folder contains important data about pkg93. Do not edit anything in here unless you want pkg93 to not work!\n\n~1024x2"; var config = pkg93.getConfig(); if (args.length === 0) { cli.log(help); } else if (args[0] == "pull") { await pkg93.pull(cli); } else if (args[0] == "get") { if (args.length < 2) { cli.log("ERR No package specified."); } else if (protected.includes(args[1])) { cli.log("ERR You're trying to modify a pre-installed Windows93 app.\n Don't do that!"); } else { await pkg93.get(args[1], cli); } } else if (args[0] == "rm") { if (args.length < 2) { cli.log("ERR No package specified."); } else if (protected.includes(args[1])) { cli.log("ERR You're trying to modify a pre-installed Windows93 app.\n Don't do that!"); } else { pkg93.rm(args[1], cli); } } else if (args[0] == "add-repo") { if (args.length < 2) { cli.log("ERR No repository specified."); } else { try { config.repos.push(args[1]); // well, that was easy localStorage[".pkg93/config.json"] = JSON.stringify(config); cli.log("OK Done!\n Run \"pkg93 pull\" to update the package listing."); } catch (err) { cli.log("ERR " + err.message); } } } else if (args[0] == "rm-repo") { if (args.length < 2) { cli.log("ERR No repository specified."); } else { try { config.repos.splice(parseInt(args[1]), 1); localStorage[".pkg93/config.json"] = JSON.stringify(config); cli.log("OK Done!\n Run \"pkg93 pull\" to update the package listing."); } catch (err) { cli.log("ERR " + err.message); } } } else if (args[0] == "ls") { if (args[1] == "pkgs") { cli.log(config.pkglist.join("\n")); } else if (args[1] == "installed") { cli.log(config.installed.join("\n")); } else if (args[1] == "repos") { lerepos = ""; for (let index in config.repos) { lerepos += "[" + index + "] " + config.repos[index] + "
"; } cli.log(lerepos); } else { cli.log("ERR You must select either pkgs, installed, or repos."); } } else if (args[0] == "info") { if (args.length > 2) { cli.log("ERR No package specified."); } else { var pkgInfo = JSON.parse(await pkg93.pkgInfo(args[1])); if (!pkgInfo) { cli.log("ERR Either the package doesn't exist, or an error occoured.") } else { depends = pkgInfo.dependencies ? pkgInfo.dependencies.join(" , ") : "None!"; console.log(pkgInfo); cli.log(`${pkgInfo.name} Description: ${pkgInfo.description} Dependencies: ${depends}`); } } } else if (args[0] == "help") { cli.log(help); } else if (args[0] == "wtf") { // for teh lulz new Audio("/c/sys/sounds/QUACK.ogg").play(); wtf = ["mudkipz", "pkg93", "memes", "linux", "javascript", "git", "cpu", "windows93", "discord", "kirb", "apt93", "delays", /* those last 2 go well together */ "trash", "kernel panic", "bash", "package manager", "recusion"]; cli.log("WTF? " + wtf[Math.floor(Math.random() * wtf.length)] + " + " + wtf[Math.floor(Math.random() * wtf.length)] + " = " + wtf[Math.floor(Math.random() * wtf.length)]); } else { cli.log("ERR Invalid command. Type \"pkg93\" without any arguments for help."); } } le._apps.pkg93 = { exec: function() { wrap.call(this, exec) }, icon: "//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png", terminal: true, hascli: true, categories: "Network;Utility;Settings;PackageManager" };