@kosko/cli
Version:
Organize Kubernetes manifests in JavaScript.
52 lines • 1.45 kB
JavaScript
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