diff options
-rw-r--r-- | .eslintrc.js | 2 | ||||
-rw-r--r-- | README.md | 34 | ||||
-rw-r--r-- | pkg93.js | 61 |
3 files changed, 58 insertions, 39 deletions
diff --git a/.eslintrc.js b/.eslintrc.js index a882e02..05f6b6e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -19,7 +19,7 @@ module.exports = { "globals": { "$log": function(){}, "le": { - apps: {} + "_apps": {} }, "$window": function(){}, "$alert": function(){} @@ -40,15 +40,15 @@ Here's an example: Finally put all the packages in seperate folders named after the package. The end result should look like this: ``` -example-repo +example-repo/ ├── repo.json -├── examplepkg1 +├── examplepkg1/ │ │ (package files go here) │ └── package.json -├── examplepkg2 +├── examplepkg2/ │ │ (package files go here) │ └── package.json -└── examplepkg3 +└── examplepkg3/ │ (package files go here) └── package.json ``` @@ -59,28 +59,32 @@ Then, you want to make a file called package.json in the folder. In it, there should be 4 keys. - `name`: **Must be the same as the folder name and command name!** (unless you've provided a uninstaller) - `description` A description of your package. +- `versions` All versions of your package, newest version goes first, oldest version goes last. - `inject`: It should be the name of the injection script. - `uninstall`: Optional, It should be the name of the uninstaller script, if it doesn't exist pkg93 will simply delete the command for you. -- `dependencies`: Optional, Packages this package depends on. These will be automatically installed. Here's a example: ```json { "name": "examplepkg", "description": "my kewl pakeg!!11", + "versions": [ + "1.0.0", + "0.9.0" + ], "inject": "installer.js", - "uninstall": "optionaluninstaller.js", - "dependencies": [ - "anoptionaldependency", - "anotherone" - ] + "uninstall": "optionaluninstaller.js" } ``` And the directory structure: ``` -examplepkg +examplepkg/ ├── package.json -├── installer.js -└── optionaluninstaller.js +├── 1.0.0/ +│ ├── installer.js +│ └── optionaluninstaller.js +└── 0.9.9/ + ├── installer.js + └── optionaluninstaller.js ``` ## API @@ -137,10 +141,10 @@ if (succeded) { ``` ### `pkg93.pkginfo(package)` -Returns the package.json of `package` or `false` if it failed. +Returns the package.json of `package` or an error if it failed. ```js package = await pkg93.pkgInfo("wget93"); -if (package == false) { +if (package instanceof Error) { alert("Something went wrong..."); } else { alert("wget93's description is: " + package.description); @@ -29,7 +29,7 @@ async function wrap(f) { var originalPrompt = this.cli.prompt.innerHTML; var originalOnenter = this.cli.onenter; - try { + try { this.cli.prompt.innerHTML = ""; this.cli.onenter = () => false; var lastLog = $log(""); @@ -42,6 +42,10 @@ async function wrap(f) { }, arg: this.arg }); + } catch (err) { + console.error(err); + this.cli.prompt.innerHTML = originalPrompt; + this.cli.onenter = originalOnenter; } finally { this.cli.prompt.innerHTML = originalPrompt; this.cli.onenter = originalOnenter; @@ -65,19 +69,15 @@ try { $alert({ title: "Couldn't load pkg93!", msg: "<pre style='text-align: left'>" + (err.stack || err.toString()) + "</pre>", - btnOk: "Send a bug report", btnCancel: "OK" - }, function(ok) { - if (ok) { - window.open("https://github.com/pkg93/pkg93/issues/new" + - "?title=" + encodeURIComponent(err.toString()) + - "&body=Type what you were doing here...%0A%0A```%0A" + encodeURIComponent(err.stack) + "%0A```", - "_blank"); - } + img: "/c/sys/skins/w93/error.png", + icon: "//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png" }); } console.log("%c[pkg93]%c Done!", "font-weight:bold", "font-weight:normal"); console.groupEnd(); + +var errbar = "[<span style=\"color:#0f0\"></span><span style=\"color:#555\">---------------------------------------------------</span>] ERR! <span style=\"color:#f00\">!</span>"; // thanks robbie! sauce: https://gist.github.com/robbie0630/e1386fb10676598e7d60d4f406a41042 // NOTE: this is a modified version var _abarpkg93uses = (width, percent) => { @@ -131,7 +131,11 @@ var pkg93 = { bardiv.innerHTML = _abarpkg93uses(60, e.loaded / e.total); }; xhr.onerror = () => { + bardiv.innerHTML = errbar; cli.log("<b><span style='color:#f00'>ERR</span></b> Fatal error while retriving package.json."); + if (xhr.status != 0) { + cli.log("<b><span style='color:#f00'>ERR</span></b> " + xhr.status + " " + xhr.statusText); + } }; xhr.onload = () => { try { @@ -164,8 +168,9 @@ var pkg93 = { res(); }); }, - get: async function(pkg, cli) { + get: async function(pkg, version, cli) { cli = cli || {log: (i) => {$log(i);}}; + version = version || "latest"; var config = pkg93.getConfig(); cli.log("<b><span style='color:#f0f'>SRCH</span></b> " + pkg); var index = config.pkglist.findIndex(function(string) { @@ -193,18 +198,24 @@ var pkg93 = { }; return new Promise((res, rej) => { xhr.onerror = () => { + bardiv.innerHTML = errbar; cli.log("<b><span style='color:#f00'>ERR</span></b> Fatal error while retriving package.json."); + if (xhr.status == 0) { + cli.log("<b><span style='color:#f00'>ERR</span></b> " + xhr.status + " " + xhr.statusText); + } rej(); }; xhr.onload = () => { try { - if (xhr.status != 200) { - throw new Error("Got status " + xhr.status + " from server."); - } cli.log("<b><span style='color:#0f0'>DONE</span></b> " + dest); var json = JSON.parse(xhr.responseText); localStorage[".pkg93/packages/" + pkgname + ".json"] = JSON.stringify(json); - var dest2 = pkgsource + "/" + pkgname + "/" + json.inject; + if (!json.versions) { + cli.log("<b><span style='color:#ff0'>WARN</span></b> This package does not support versioning, using latest\n<b> </b> version instead."); + } else { + version = (version == "latest") ? json.versions[0] : version; + } + var dest2 = pkgsource + "/" + pkgname + "/" + (json.versions ? version + "/" : "") + json.inject; cli.log("<b><span style='color:#f0f'>GET</span></b> " + dest2); var bardiv2 = cli.log(_abarpkg93uses(60, 0)); var xhr2 = new XMLHttpRequest(); @@ -218,7 +229,11 @@ var pkg93 = { } }; xhr2.onerror = () => { + bardiv2.innerHTML = errbar; cli.log("<b><span style='color:#f00'>ERR</span></b> Fatal error while retriving " + dest2); + if (xhr2.status != 0) { + cli.log("<b><span style='color:#f00'>ERR</span></b> " + xhr2.status + " " + xhr2.statusText); + } rej(); }; xhr2.onload = async () => { @@ -232,10 +247,9 @@ var pkg93 = { eval(script); if (json.uninstall) { // no xhr this time - var uninst = await (await (fetch(pkgsource + "/" + pkgname + "/" + json.uninstall))).text(); + var uninst = await (await (fetch(pkgsource + "/" + pkgname + "/" + (json.versions ? version + "/" : "") + json.uninstall))).text(); localStorage[".pkg93/packages/" + pkgname + ".rm.js"] = uninst; } - cli.log("<b><span style='color:#0f0'>OK</span></b> Injected package!"); if (!config.installed.includes(pkgname)) { config.installed.push(pkgname); } @@ -344,7 +358,6 @@ async function _pkg93execdonotcallplsusetheapi(cli) { <span style="color:#0f0">info</span> <span style="color:#77f">[pkg]</span> Gets information on a package <span style="color:#0f0">ls</span> <span style="color:#77f">[pkgs|installed|repos]</span> Lists packages, installed packages or repositories. -<span style="color:#0f0">credits</span> Displays the credits <b><u>Color meanings</u></b> <b><span style="color:#f0f">Executing</span> <span style="color:#0f0">OK</span> <span style="color:#f00">Error</span> <span style="color:#ff0">Warning</span> <span style="color:#00f">Info</span></b> @@ -369,7 +382,9 @@ If you find my software useful, consider donating <a style="color: #00f;" href=" } else if (protected.includes(args[1])) { cli.log("<b><span style='color:#f00'>ERR</span></b> You're trying to modify a pre-installed Windows93 app.\n <b>Don't do that!</b>"); } else { - await pkg93.get(args[1], cli); + var name = args[1].split("@")[0]; + var version = args[1].split("@")[1]; + await pkg93.get(name, version, cli); } } else if (args[0] == "rm") { if (args.length < 2) { @@ -430,11 +445,11 @@ If you find my software useful, consider donating <a style="color: #00f;" href=" if (!pkgInfo) { cli.log("<b><span style='color:#f00'>ERR</span></b> Package not found."); } else { - var depends = pkgInfo.dependencies ? pkgInfo.dependencies.join(" , ") : "<i><span style='color:#444'>None!</span></i>"; var description = pkgInfo.description ? pkgInfo.description : "<i><span style='color:#444'>None!</span></i>"; - cli.log(`<b><u>${pkgInfo.name}</u></b> - Description: ${description} - Dependencies: ${depends}`); + var vers = pkgInfo.versions ? pkgInfo.versions.join(", ") : "<i><span style='color:#444'>None!</span></i>"; + cli.log(`<b><u>${args[1]}</u></b> +Description: ${description} +Versions: ${vers}`); } } catch (err) { cli.log("<b><span style='color:#f00'>ERR</span></b> Error while getting package info.\n" + err.stack); @@ -454,7 +469,7 @@ If you find my software useful, consider donating <a style="color: #00f;" href=" le._apps.pkg93 = { exec: function() { wrap.call(this, _pkg93execdonotcallplsusetheapi); }, - icon: "//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png", + icon: "//cdn.rawgit.com/pkg93/pkg93/70039c02/pkg.png", terminal: true, hascli: true, categories: "Network;Utility;Settings;PackageManager" |