UNPKG

@kosko/cli

Version:

Organize Kubernetes manifests in JavaScript.

52 lines 1.45 kB
import { CLIError } from "./error.mjs"; import signale from "signale"; const RESOLVE = Symbol("resolve"); const REJECT = Symbol("reject"); const HANDLED = Symbol("executed"); const LOGGER = Symbol("logger"); export function getLogger(ctx) { const logger = ctx[LOGGER]; if (logger) return logger; throw new Error("Logger is not set in the context"); } export function setLogger(ctx, logger) { return { ...ctx, [LOGGER]: logger }; } export function wrapHandler(handler) { return async (args) => { const logger = new signale.Signale({ stream: process.stderr, disabled: args.silent }); args[HANDLED] = true; args = setLogger(args, logger); handler(args).then(args[RESOLVE]).catch(args[REJECT]); }; } export function wrapCommand(cmd) { return { ...cmd, handler: wrapHandler(cmd.handler) }; } function handleParse(err, args, output) { const ctx = args; if (err || output) { const msg = err ? err.message : "CLI error"; return ctx[REJECT](new CLIError(msg, { output, code: err ? 1 : 0 })); } if (!ctx[HANDLED]) { ctx[RESOLVE](); } } export function parse(input, argv) { return new Promise((resolve, reject) => { const ctx = { [RESOLVE]: resolve, [REJECT]: reject }; input.parse(argv, ctx, handleParse); }); } //# sourceMappingURL=command.mjs.map