diff options
Diffstat (limited to 'commands/info.js')
-rw-r--r-- | commands/info.js | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/commands/info.js b/commands/info.js new file mode 100644 index 0000000..125c198 --- /dev/null +++ b/commands/info.js @@ -0,0 +1,120 @@ +module.exports = async (argv) => { + const installed = JSON.parse(fs.readFileSync(home + "/installed.json").toString()); + let pkgInstalled = false + if (installed.map(i => i.id).includes(argv.package)) { + pkgInstalled = true; + } + + let packages = JSON.parse(fs.readFileSync(home + "/repository/list.json").toString()); + + if (!packages.includes(argv.package)) { + die(c.red("error: ") + "package '" + argv.package + "' not in repository"); + } + + let dir = argv.package.substring(0, 1).replace(/[^a-zA-Z0-9]/gm, "#"); + let pkg = JSON.parse(fs.readFileSync(home + "/repository/" + dir + "/" + argv.package + ".json").toString()); + + let compatible = true; + let replacement = null; + if (os.platform() === "win32" && pkg.platforms.windows === 0) { + compatible = false; + if (typeof pkg.replaced.windows === "string") { + replacement = pkg.replaced.windows + } + } else if (os.platform() === "linux" && pkg.platforms.linux === 0) { + compatible = false; + if (typeof pkg.replaced.linux === "string") { + replacement = pkg.replaced.linux + } + } else if (os.platform() === "darwin" && pkg.platforms.mac === 0) { + compatible = false; + if (typeof pkg.replaced.mac === "string") { + replacement = pkg.replaced.mac + } + } + + let experimental = false; + if (os.platform() === "win32" && pkg.platforms.windows === 1) { + experimental = true; + } else if (os.platform() === "linux" && pkg.platforms.linux === 1) { + experimental = true; + } else if (os.platform() === "darwin" && pkg.platforms.mac === 1) { + experimental = true; + } + + let version = pkg.verdata.latest; + let publisher = pkg.verdata.publisher.name; + let publisherMail = pkg.verdata.publisher.email; + let date = moment(pkg.verdata.date).fromNow(); + + let signed = false; + let signInfo = ""; + let verified = false; + + if (pkg.sign.signed) { + signed = true; + verified = pkg.sign.verified; + if (pkg.sign.signer.name && pkg.sign.signer.email && pkg.sign.key) { + signInfo = pkg.sign.signer.name + " <" + pkg.sign.signer.email + "> " + c.gray("(" + pkg.sign.key + ")"); + } else if (pkg.sign.signer.name && pkg.sign.key) { + signInfo = pkg.sign.signer.name + c.gray(" (" + pkg.sign.key + ")"); + } else if (pkg.sign.signer.email && pkg.sign.key) { + signInfo = pkg.sign.signer.email + c.gray(" (" + pkg.sign.key + ")"); + } else if (pkg.sign.key) { + signInfo = pkg.sign.key; + } + } + + console.log(c.bold(pkg.name + ": " + pkg.description)) + console.log(" " + c.magentaBright("version:") + " " + version); + console.log(" " + c.magentaBright("last update:") + " " + date); + console.log(" " + c.magentaBright("publisher:") + " " + publisher + " <" + publisherMail + ">"); + + if (signed) { + if (verified) { + console.log(" " + c.magentaBright("security:") + " " + c.green("verified") + "\n " + signInfo); + } else { + console.log(" " + c.magentaBright("security:") + " " + c.yellow("unverified") + "\n " + signInfo); + } + } else { + console.log(" " + c.magentaBright("security:") + " " + c.red.inverse("unsafe")); + } + + if (pkgInstalled) { + if (experimental) { + console.log(" " + c.magentaBright("state:") + " " + c.cyan("installed") + " (" + moment(installed.filter(i => i.id === pkg.id)[0].date).fromNow() + "), " + c.yellow("experimental")) + } else { + console.log(" " + c.magentaBright("state:") + " " + c.cyan("installed") + " (" + moment(installed.filter(i => i.id === pkg.id)[0].date).fromNow() + ")") + } + } else { + if (compatible) { + if (experimental) { + console.log(" " + c.magentaBright("state:") + " " + c.green("compatible") + ", " + c.yellow("experimental")); + } else { + console.log(" " + c.magentaBright("state:") + " " + c.green("compatible")); + } + } else { + if (typeof replacement === "string") { + console.log(" " + c.magentaBright("state:") + " " + c.red("incompatible") + " (replaced by: " + replacement + ")"); + } else { + console.log(" " + c.magentaBright("state:") + " " + c.red("incompatible") + " (no replacement)"); + } + } + } + + if (typeof pkg.deprecated === "string") { + if (pkg.deprecated.toString().trim() !== "") { + console.log(" " + c.magentaBright("support:") + " " + c.red("unsupported") + " (" + pkg.deprecated + ")"); + } else { + console.log(" " + c.magentaBright("support:") + " " + c.red("unsupported")); + } + } else if (typeof pkg.extended === "string") { + if (pkg.extended.toString().trim() !== "") { + console.log(" " + c.magentaBright("support:") + " " + c.yellow("extended") + " (" + pkg.extended + ")"); + } else { + console.log(" " + c.magentaBright("support:") + " " + c.yellow("extended")); + } + } else { + console.log(" " + c.magentaBright("support:") + " " + c.green("supported")); + } +}
\ No newline at end of file |