1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | const error_1 = require("./error");
|
5 | const signale_1 = require("signale");
|
6 | const RESOLVE = Symbol("resolve");
|
7 | const REJECT = Symbol("reject");
|
8 | const HANDLED = Symbol("executed");
|
9 | const LOGGER = Symbol("logger");
|
10 | function getLogger(ctx) {
|
11 | const logger = ctx[LOGGER];
|
12 | if (logger)
|
13 | return logger;
|
14 | throw new Error("Logger is not set in the context");
|
15 | }
|
16 | exports.getLogger = getLogger;
|
17 | function setLogger(ctx, logger) {
|
18 | return Object.assign({}, ctx, { [LOGGER]: logger });
|
19 | }
|
20 | exports.setLogger = setLogger;
|
21 | function wrapHandler(handler) {
|
22 | return (args) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
23 | const logger = new signale_1.Signale({
|
24 | stream: process.stderr,
|
25 | disabled: args.silent
|
26 | });
|
27 | args[HANDLED] = true;
|
28 | args = setLogger(args, logger);
|
29 | handler(args)
|
30 | .then(args[RESOLVE])
|
31 | .catch(args[REJECT]);
|
32 | });
|
33 | }
|
34 | exports.wrapHandler = wrapHandler;
|
35 | function wrapCommand(cmd) {
|
36 | return Object.assign({}, cmd, { handler: wrapHandler(cmd.handler) });
|
37 | }
|
38 | exports.wrapCommand = wrapCommand;
|
39 | function handleParse(err, args, output) {
|
40 | const ctx = args;
|
41 | if (err || output) {
|
42 | const msg = err ? err.message : "CLI error";
|
43 | return ctx[REJECT](new error_1.CLIError(msg, { output, code: err ? 1 : 0 }));
|
44 | }
|
45 | if (!ctx[HANDLED]) {
|
46 | ctx[RESOLVE]();
|
47 | }
|
48 | }
|
49 | function parse(input, argv) {
|
50 | return new Promise((resolve, reject) => {
|
51 | const ctx = { [RESOLVE]: resolve, [REJECT]: reject };
|
52 | input.parse(argv, ctx, handleParse);
|
53 | });
|
54 | }
|
55 | exports.parse = parse;
|
56 |
|
\ | No newline at end of file |