Skip to content

Commit

Permalink
refactor(bin): improve commands options to match documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
fraxken committed Aug 17, 2024
1 parent 34b0c47 commit 4fffd84
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 31 deletions.
23 changes: 13 additions & 10 deletions bin/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,22 +46,25 @@ defaultScannerCommand("cwd", { strategy: vulnera.strategies.GITHUB_ADVISORY })
.describe(i18n.getTokenSync("cli.commands.cwd.desc"))
.option("-n, --nolock", i18n.getTokenSync("cli.commands.cwd.option_nolock"), false)
.option("-f, --full", i18n.getTokenSync("cli.commands.cwd.option_full"), false)
.action(async(...options) => {
.action(async(options) => {
checkNodeSecureToken();
await commands.scanner.cwd(...options);
await commands.scanner.cwd(options);
});

defaultScannerCommand("from <package>")
defaultScannerCommand("from <spec>")
.describe(i18n.getTokenSync("cli.commands.from.desc"))
.action(async(...options) => {
.action(async(spec, options) => {
checkNodeSecureToken();
await commands.scanner.from(...options);
await commands.scanner.from(spec, options);
});

defaultScannerCommand("auto [package]", { includeOutput: false, strategy: vulnera.strategies.GITHUB_ADVISORY })
defaultScannerCommand("auto [spec]", { includeOutput: false, strategy: vulnera.strategies.GITHUB_ADVISORY })
.describe(i18n.getTokenSync("cli.commands.auto.desc"))
.option("-k, --keep", i18n.getTokenSync("cli.commands.auto.option_keep"), false)
.action(commands.scanner.auto);
.action(async(spec, options) => {
checkNodeSecureToken();
await commands.scanner.auto(spec, options);
});

prog
.command("open [json]")
Expand All @@ -70,12 +73,12 @@ prog
.action(commands.http.start);

prog
.command("verify [package]")
.command("verify [spec]")
.describe(i18n.getTokenSync("cli.commands.verify.desc"))
.option("-j, --json", i18n.getTokenSync("cli.commands.verify.option_json"), false)
.action(async(...options) => {
.action(async(spec, options) => {
checkNodeSecureToken();
await commands.verify.main(...options);
await commands.verify.main(spec, options);
});

prog
Expand Down
55 changes: 34 additions & 21 deletions src/commands/scanner.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Import Node.js Dependencies
import fs from "node:fs/promises";
import fs from "node:fs";
import path from "node:path";
import events from "node:events";

Expand All @@ -14,12 +14,14 @@ import * as Scanner from "@nodesecure/scanner";
// Import Internal Dependencies
import * as http from "./http.js";

export async function auto(packageName, opts) {
const keep = Boolean(opts.keep);
delete opts.keep;
delete opts.k;
export async function auto(spec, options) {
const { keep, ...commandOptions } = options;

const payloadFile = await (typeof packageName === "string" ? from(packageName, opts) : cwd(opts));
const payloadFile = await (
typeof spec === "string" ?
from(spec, commandOptions) :
cwd(commandOptions)
);
try {
if (payloadFile !== null) {
await http.start();
Expand All @@ -29,7 +31,7 @@ export async function auto(packageName, opts) {
finally {
if (!keep && payloadFile !== null) {
try {
await fs.unlink(payloadFile);
fs.unlinkSync(payloadFile);
}
catch (error) {
if (error.code !== "ENOENT") {
Expand All @@ -41,29 +43,38 @@ export async function auto(packageName, opts) {
}
}

export async function cwd(opts) {
export async function cwd(options) {
const {
depth: maxDepth = 4, output, nolock, full, vulnerabilityStrategy, silent
} = opts;
depth: maxDepth = Infinity,
output,
nolock,
full,
vulnerabilityStrategy,
silent
} = options;

const payload = await Scanner.cwd(
process.cwd(),
{ maxDepth, usePackageLock: !nolock, fullLockMode: full, vulnerabilityStrategy },
initLogger(void 0, !silent)
);

return await logAndWrite(payload, output);
return logAndWrite(payload, output);
}

export async function from(packageName, opts) {
const { depth: maxDepth = 4, output, silent } = opts;
export async function from(spec, options) {
const { depth: maxDepth = Infinity, output, silent } = options;

const payload = await Scanner.from(packageName, { maxDepth }, initLogger(packageName, !silent));
const payload = await Scanner.from(
spec,
{ maxDepth },
initLogger(spec, !silent)
);

return await logAndWrite(payload, output);
return logAndWrite(payload, output);
}

function initLogger(packageName, verbose = true) {
function initLogger(spec, verbose = true) {
const spinner = {
walkTree: new Spinner({ verbose }),
tarball: new Spinner({ verbose }),
Expand Down Expand Up @@ -97,7 +108,7 @@ function initLogger(packageName, verbose = true) {

if (eventName === "fetchManifest") {
spinner[eventName]
.start(kleur.white().bold(i18n.getTokenSync(spinner.i18n.start[eventName], kleur.green().bold(packageName))));
.start(kleur.white().bold(i18n.getTokenSync(spinner.i18n.start[eventName], kleur.green().bold(spec))));
}
else {
spinner[eventName]
Expand Down Expand Up @@ -134,15 +145,15 @@ function initLogger(packageName, verbose = true) {
spin.succeed(kleur.white().bold(i18n.getTokenSync(tokenName, kleur.green().bold(logger.count("walkTree")), execTime)));
}
else if (eventName === "fetchManifest") {
spin.succeed(kleur.white().bold(i18n.getTokenSync(tokenName, kleur.green().bold(packageName), execTime)));
spin.succeed(kleur.white().bold(i18n.getTokenSync(tokenName, kleur.green().bold(spec), execTime)));
console.log("");
}
});

return logger;
}

async function logAndWrite(payload, output = "nsecure-result") {
function logAndWrite(payload, output = "nsecure-result") {
if (payload === null) {
console.log(i18n.getTokenSync("cli.no_dep_to_proceed"));

Expand All @@ -158,9 +169,11 @@ async function logAndWrite(payload, output = "nsecure-result") {

const ret = JSON.stringify(payload, null, 2);

const fileName = path.extname(output) === ".json" ? filenamify(output) : `${filenamify(output)}.json`;
const fileName = path.extname(output) === ".json" ?
filenamify(output) :
`${filenamify(output)}.json`;
const filePath = path.join(process.cwd(), fileName);
await fs.writeFile(filePath, ret);
fs.writeFileSync(filePath, ret);

console.log("");
console.log(kleur.white().bold(i18n.getTokenSync("cli.successfully_written_json", kleur.green().bold(filePath))));
Expand Down

0 comments on commit 4fffd84

Please sign in to comment.