@kosko/cli
Version:
Organize Kubernetes manifests in JavaScript.
61 lines • 1.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = exports.wrapCommand = exports.wrapHandler = exports.setLogger = exports.getLogger = void 0;
const tslib_1 = require("tslib");
const error_1 = require("./error.js");
const signale_1 = tslib_1.__importDefault(require("signale"));
const RESOLVE = Symbol("resolve");
const REJECT = Symbol("reject");
const HANDLED = Symbol("executed");
const LOGGER = Symbol("logger");
function getLogger(ctx) {
const logger = ctx[LOGGER];
if (logger)
return logger;
throw new Error("Logger is not set in the context");
}
exports.getLogger = getLogger;
function setLogger(ctx, logger) {
return {
...ctx,
[LOGGER]: logger
};
}
exports.setLogger = setLogger;
function wrapHandler(handler) {
return async (args) => {
const logger = new signale_1.default.Signale({
stream: process.stderr,
disabled: args.silent
});
args[HANDLED] = true;
args = setLogger(args, logger);
handler(args).then(args[RESOLVE]).catch(args[REJECT]);
};
}
exports.wrapHandler = wrapHandler;
function wrapCommand(cmd) {
return {
...cmd,
handler: wrapHandler(cmd.handler)
};
}
exports.wrapCommand = wrapCommand;
function handleParse(err, args, output) {
const ctx = args;
if (err || output) {
const msg = err ? err.message : "CLI error";
return ctx[REJECT](new error_1.CLIError(msg, { output, code: err ? 1 : 0 }));
}
if (!ctx[HANDLED]) {
ctx[RESOLVE]();
}
}
function parse(input, argv) {
return new Promise((resolve, reject) => {
const ctx = { [RESOLVE]: resolve, [REJECT]: reject };
input.parse(argv, ctx, handleParse);
});
}
exports.parse = parse;
//# sourceMappingURL=command.js.map