From a051aace376492a48c10615106dda222a7136300 Mon Sep 17 00:00:00 2001 From: 1024x2 Date: Thu, 1 Nov 2018 21:16:16 +0000 Subject: new fancy webpack stuff --- src/api.js | 260 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 src/api.js (limited to 'src/api.js') diff --git a/src/api.js b/src/api.js new file mode 100644 index 0000000..8acc8e2 --- /dev/null +++ b/src/api.js @@ -0,0 +1,260 @@ +var errbar = "[---------------------------------------------------] ERR! !"; +// thanks robbie! sauce: https://gist.github.com/robbie0630/e1386fb10676598e7d60d4f406a41042 +// NOTE: this is a modified version +var _abarpkg93uses = (width, percent) => { + if (percent > 1) percent = 1; + let barwidth = width - 9; + let ticker = "\\"; + switch (Math.floor(percent * 100) % 4) { + case 1: + ticker = "|"; + break; + case 2: + ticker = "/"; + break; + case 3: + ticker = "-"; + break; + default: + ticker = "\\"; + break; + } + ticker = Math.floor(percent) == 1 ? "✔️" : ticker; + let pbar = "["; + for (let i = 0; i < Math.floor(percent*barwidth); ++i) pbar += "="; + pbar += ""; + for (let i = 0; i < Math.ceil((1-percent)*barwidth); ++i) pbar += "-"; + pbar += "] " + Math.floor(percent * 100) + "% " + ticker.padStart(4 - (percent * 100).toFixed().length); + return pbar; +}; + +var pkg93 = { + getConfig: function() { + try { + return JSON.parse(localStorage[".pkg93/config.json"]); + } catch (err) { + return err; + } + }, + pull: async function(cli) { + cli = cli || {log: (i) => {$log(i);}}; + var config = pkg93.getConfig(); + config.pkglist = []; + return new Promise(async (res, rej) => { + for (let source of config.repos) { + await new Promise(async (reso) => { + try { + cli.log("GET " + source + "/repo.json"); + var bardiv = cli.log(_abarpkg93uses(60, 0)); + var xhr = new XMLHttpRequest(); + xhr.open("GET", source + "/repo.json", true); + xhr.onprogress = e => { + bardiv.innerHTML = _abarpkg93uses(60, e.loaded / e.total); + }; + xhr.onerror = () => { + bardiv.innerHTML = errbar; + cli.log("ERR Fatal error while retriving package.json."); + if (xhr.status != 0) { + cli.log("ERR " + xhr.status + " " + xhr.statusText); + } + }; + xhr.onload = () => { + try { + var json = JSON.parse(xhr.responseText); + cli.log("NAME " + json.name); + cli.log("MSG " + json.msg); + for (let item of json.packages) { + try { + config.pkglist.push(item + "@" + source); + cli.log("OK " + item + "@" + source); + } catch (err) { + cli.log("ERR " + err.message); + } + } + reso(); + } catch (err) { + console.error(err); + cli.log("ERR " + err.message); + rej(); + } + }; + xhr.send(); + } catch (err) { + cli.log("ERR " + err.message); + rej(); + } + }); + } + localStorage[".pkg93/config.json"] = JSON.stringify(config); + res(); + }); + }, + get: async function(pkg, version, cli) { + cli = cli || {log: (i) => {$log(i);}}; + version = version || "latest"; + 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]; + var dest = pkgsource + "/" + pkgname + "/package.json"; + cli.log("GET " + dest); + var bardiv = cli.log(_abarpkg93uses(60, 0)); + var xhr = new XMLHttpRequest(); + xhr.open("GET", dest, true); + xhr.onprogress = e => { + try { + bardiv.innerHTML = _abarpkg93uses(60, e.loaded / e.total); + } catch (err) { + // fail silently + } + }; + return new Promise((res, rej) => { + xhr.onerror = () => { + bardiv.innerHTML = errbar; + cli.log("ERR Fatal error while retriving package.json."); + if (xhr.status == 0) { + cli.log("ERR " + xhr.status + " " + xhr.statusText); + } + rej(); + }; + xhr.onload = () => { + try { + cli.log("DONE " + dest); + var json = JSON.parse(xhr.responseText); + localStorage[".pkg93/packages/" + pkgname + ".json"] = JSON.stringify(json); + if (!json.versions) { + cli.log("WARN This package does not support versioning, using latest\n version instead."); + } else { + version = (version == "latest") ? json.versions[0] : version; + } + var dest2 = pkgsource + "/" + pkgname + "/" + (json.versions ? version + "/" : "") + json.inject; + cli.log("GET " + dest2); + var bardiv2 = cli.log(_abarpkg93uses(60, 0)); + var xhr2 = new XMLHttpRequest(); + xhr2.open("GET", dest2, true); + xhr2.onprogress = e => { + try { + bardiv2.innerHTML = _abarpkg93uses(60, e.loaded / e.total); + } catch (err) { + // fail silently + } + }; + xhr2.onerror = () => { + bardiv2.innerHTML = errbar; + cli.log("ERR Fatal error while retriving " + dest2); + if (xhr2.status != 0) { + cli.log("ERR " + xhr2.status + " " + xhr2.statusText); + } + rej(); + }; + xhr2.onload = async () => { + try { + if (xhr2.status != 200) { + throw new Error("Got status " + xhr2.status + " from server."); + } + cli.log("DONE " + dest2); + var script = xhr2.responseText; + localStorage[".pkg93/packages/" + pkgname + ".js"] = script; + eval(script); + if (json.uninstall) { + // no xhr this time + var uninst = await (await (fetch(pkgsource + "/" + pkgname + "/" + (json.versions ? version + "/" : "") + json.uninstall))).text(); + localStorage[".pkg93/packages/" + pkgname + ".rm.js"] = uninst; + } + if (!config.installed.includes(pkgname)) { + config.installed.push(pkgname); + } + localStorage[".pkg93/config.json"] = JSON.stringify(config); + res(); + // can i go home now + } catch (err) { + cli.log("ERR " + err.message); + rej(err); + } + }; + xhr2.send(); + } catch (err) { + cli.log("ERR " + err.message); + rej(err); + } + }; + try { + xhr.send(); + } catch (err) { + cli.log("ERR " + err.message); + rej(err); + } + }); + } + }, + rm: function(pkg, cli) { + cli = cli || {log: (i) => {$log(i);}}; + 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!"); + return true; + } else { + try { + 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 err; + } + }, + shutUp: { + log: ()=>{}, + arg: {arguments:[]} + }, + version: "v2.0.0beta2" +}; + +export { pkg93 }; -- cgit v1.2.3