@oclif/core 3.0.0-beta.8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/flush.d.ts +3 -0
- package/flush.js +1 -0
- package/handle.js +1 -0
- package/lib/args.d.ts +2 -2
- package/lib/args.js +17 -18
- package/lib/{ux → cli-ux}/action/base.d.ts +19 -21
- package/lib/{ux → cli-ux}/action/base.js +126 -120
- package/lib/{ux → cli-ux}/action/simple.js +25 -30
- package/lib/{ux → cli-ux}/action/spinner.d.ts +9 -7
- package/lib/{ux → cli-ux}/action/spinner.js +45 -37
- package/lib/{ux → cli-ux}/action/spinners.js +187 -187
- package/lib/cli-ux/action/types.d.ts +5 -0
- package/lib/cli-ux/action/types.js +2 -0
- package/lib/{ux → cli-ux}/config.d.ts +5 -5
- package/lib/{ux → cli-ux}/config.js +17 -17
- package/lib/{ux → cli-ux}/exit.js +3 -0
- package/lib/cli-ux/flush.d.ts +1 -0
- package/lib/cli-ux/flush.js +28 -0
- package/lib/cli-ux/index.d.ts +39 -0
- package/lib/{ux → cli-ux}/index.js +74 -97
- package/lib/{ux → cli-ux}/list.js +3 -3
- package/lib/{ux → cli-ux}/prompt.d.ts +3 -3
- package/lib/{ux → cli-ux}/prompt.js +35 -25
- package/lib/{ux → cli-ux}/stream.d.ts +6 -6
- package/lib/{ux → cli-ux}/stream.js +11 -10
- package/lib/cli-ux/styled/index.d.ts +4 -0
- package/lib/cli-ux/styled/index.js +11 -0
- package/lib/{ux → cli-ux}/styled/object.js +7 -9
- package/lib/{ux → cli-ux}/styled/table.d.ts +10 -10
- package/lib/{ux → cli-ux}/styled/table.js +130 -133
- package/lib/{ux → cli-ux}/styled/tree.js +11 -13
- package/lib/cli-ux/wait.js +5 -0
- package/lib/command.d.ts +82 -88
- package/lib/command.js +196 -175
- package/lib/config/config.d.ts +89 -90
- package/lib/config/config.js +466 -566
- package/lib/config/index.d.ts +0 -1
- package/lib/config/index.js +1 -3
- package/lib/config/plugin-loader.d.ts +12 -12
- package/lib/config/plugin-loader.js +72 -56
- package/lib/config/plugin.d.ts +25 -24
- package/lib/config/plugin.js +188 -154
- package/lib/config/ts-node.d.ts +2 -1
- package/lib/config/ts-node.js +71 -58
- package/lib/config/util.d.ts +1 -11
- package/lib/config/util.js +6 -59
- package/lib/errors/config.d.ts +1 -1
- package/lib/errors/config.js +6 -6
- package/lib/errors/errors/cli.d.ts +7 -7
- package/lib/errors/errors/cli.js +20 -16
- package/lib/errors/errors/exit.d.ts +1 -4
- package/lib/errors/errors/exit.js +1 -1
- package/lib/errors/errors/module-load.d.ts +1 -4
- package/lib/errors/errors/module-load.js +1 -1
- package/lib/errors/errors/pretty-print.d.ts +1 -1
- package/lib/errors/errors/pretty-print.js +12 -10
- package/lib/errors/handle.d.ts +12 -2
- package/lib/errors/handle.js +26 -14
- package/lib/errors/index.d.ts +10 -10
- package/lib/errors/index.js +25 -24
- package/lib/errors/logger.d.ts +2 -2
- package/lib/errors/logger.js +14 -13
- package/lib/execute.d.ts +6 -6
- package/lib/execute.js +10 -9
- package/lib/flags.d.ts +103 -32
- package/lib/flags.js +79 -45
- package/lib/help/command.d.ts +16 -14
- package/lib/help/command.js +178 -163
- package/lib/help/docopts.d.ts +5 -5
- package/lib/help/docopts.js +50 -54
- package/lib/help/formatter.d.ts +37 -37
- package/lib/help/formatter.js +66 -55
- package/lib/help/index.d.ts +25 -21
- package/lib/help/index.js +169 -147
- package/lib/help/root.d.ts +1 -1
- package/lib/help/root.js +15 -17
- package/lib/help/util.d.ts +2 -8
- package/lib/help/util.js +8 -28
- package/lib/index.d.ts +19 -20
- package/lib/index.js +37 -43
- package/lib/interfaces/config.d.ts +67 -66
- package/lib/interfaces/errors.d.ts +5 -5
- package/lib/interfaces/help.d.ts +17 -17
- package/lib/interfaces/hooks.d.ts +49 -49
- package/lib/interfaces/index.d.ts +7 -7
- package/lib/interfaces/manifest.d.ts +1 -1
- package/lib/interfaces/parser.d.ts +175 -51
- package/lib/interfaces/pjson.d.ts +41 -41
- package/lib/interfaces/plugin.d.ts +47 -41
- package/lib/interfaces/s3-manifest.d.ts +7 -7
- package/lib/interfaces/topic.d.ts +1 -1
- package/lib/interfaces/ts-config.d.ts +7 -7
- package/lib/main.d.ts +2 -2
- package/lib/main.js +16 -16
- package/lib/module-loader.d.ts +67 -77
- package/lib/module-loader.js +183 -150
- package/lib/parser/errors.d.ts +7 -7
- package/lib/parser/errors.js +29 -22
- package/lib/parser/help.js +5 -5
- package/lib/parser/index.js +2 -2
- package/lib/parser/parse.d.ts +9 -6
- package/lib/parser/parse.js +253 -221
- package/lib/parser/validate.js +53 -33
- package/lib/performance.d.ts +43 -32
- package/lib/performance.js +133 -91
- package/lib/screen.js +2 -2
- package/lib/settings.d.ts +11 -12
- package/lib/settings.js +2 -2
- package/lib/util/aggregate-flags.d.ts +2 -0
- package/lib/util/aggregate-flags.js +13 -0
- package/lib/util/cache-command.d.ts +3 -0
- package/lib/util/cache-command.js +109 -0
- package/lib/util/cache-default-value.d.ts +2 -0
- package/lib/util/cache-default-value.js +28 -0
- package/lib/util/ensure-arg-object.d.ts +12 -0
- package/lib/util/ensure-arg-object.js +14 -0
- package/lib/util/fs.d.ts +7 -0
- package/lib/util/fs.js +54 -0
- package/lib/util/os.d.ts +19 -0
- package/lib/util/os.js +28 -0
- package/lib/{util.d.ts → util/util.d.ts} +7 -16
- package/lib/util/util.js +98 -0
- package/package.json +35 -37
- package/lib/util.js +0 -126
- package/lib/ux/flush.d.ts +0 -1
- package/lib/ux/flush.js +0 -27
- package/lib/ux/index.d.ts +0 -64
- package/lib/ux/styled/index.d.ts +0 -6
- package/lib/ux/styled/index.js +0 -13
- package/lib/ux/styled/json.d.ts +0 -1
- package/lib/ux/styled/json.js +0 -15
- package/lib/ux/wait.js +0 -7
- package/lib/{ux → cli-ux}/action/simple.d.ts +4 -4
- package/lib/{ux → cli-ux}/action/spinners.d.ts +117 -117
- package/lib/{ux → cli-ux}/exit.d.ts +2 -2
- package/lib/{ux → cli-ux}/list.d.ts +0 -0
- package/lib/{ux → cli-ux}/styled/object.d.ts +0 -0
- package/lib/{ux → cli-ux}/styled/progress.d.ts +0 -0
- package/lib/{ux → cli-ux}/styled/progress.js +0 -0
- package/lib/{ux → cli-ux}/styled/tree.d.ts +1 -1
- /package/lib/{ux → cli-ux}/wait.d.ts +0 -0
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.config = exports.Config = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = require("../util/fs");
|
|
6
|
+
const simple_1 = tslib_1.__importDefault(require("./action/simple"));
|
|
7
|
+
const spinner_1 = tslib_1.__importDefault(require("./action/spinner"));
|
|
7
8
|
const g = global;
|
|
8
9
|
const globals = g.ux || (g.ux = {});
|
|
9
10
|
const actionType = (Boolean(process.stderr.isTTY) &&
|
|
10
11
|
!process.env.CI &&
|
|
11
12
|
!['dumb', 'emacs-color'].includes(process.env.TERM) &&
|
|
12
|
-
'spinner') ||
|
|
13
|
-
|
|
13
|
+
'spinner') ||
|
|
14
|
+
'simple';
|
|
15
|
+
const Action = actionType === 'spinner' ? spinner_1.default : simple_1.default;
|
|
14
16
|
class Config {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
action = new Action();
|
|
18
|
+
errorsHandled = false;
|
|
19
|
+
outputLevel = 'info';
|
|
20
|
+
showStackTrace = true;
|
|
21
|
+
get context() {
|
|
22
|
+
return globals.context || {};
|
|
23
|
+
}
|
|
24
|
+
set context(v) {
|
|
25
|
+
globals.context = v;
|
|
20
26
|
}
|
|
21
27
|
get debug() {
|
|
22
28
|
return globals.debug || process.env.DEBUG === '*';
|
|
@@ -24,16 +30,10 @@ class Config {
|
|
|
24
30
|
set debug(v) {
|
|
25
31
|
globals.debug = v;
|
|
26
32
|
}
|
|
27
|
-
get context() {
|
|
28
|
-
return globals.context || {};
|
|
29
|
-
}
|
|
30
|
-
set context(v) {
|
|
31
|
-
globals.context = v;
|
|
32
|
-
}
|
|
33
33
|
}
|
|
34
34
|
exports.Config = Config;
|
|
35
35
|
function fetch() {
|
|
36
|
-
const major = (0,
|
|
36
|
+
const major = (0, fs_1.requireJson)(__dirname, '..', '..', 'package.json').version.split('.')[0];
|
|
37
37
|
if (globals[major])
|
|
38
38
|
return globals[major];
|
|
39
39
|
globals[major] = new Config();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function flush(ms?: number): Promise<void>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flush = void 0;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
const stream_1 = require("./stream");
|
|
6
|
+
function timeout(p, ms) {
|
|
7
|
+
function wait(ms, unref = false) {
|
|
8
|
+
return new Promise((resolve) => {
|
|
9
|
+
const t = setTimeout(() => resolve(null), ms);
|
|
10
|
+
if (unref)
|
|
11
|
+
t.unref();
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return Promise.race([p, wait(ms, true).then(() => (0, errors_1.error)('timed out'))]);
|
|
15
|
+
}
|
|
16
|
+
async function _flush() {
|
|
17
|
+
const p = new Promise((resolve) => {
|
|
18
|
+
stream_1.stdout.once('drain', () => resolve(null));
|
|
19
|
+
});
|
|
20
|
+
const flushed = stream_1.stdout.write('');
|
|
21
|
+
if (flushed)
|
|
22
|
+
return;
|
|
23
|
+
return p;
|
|
24
|
+
}
|
|
25
|
+
async function flush(ms = 10000) {
|
|
26
|
+
await timeout(_flush(), ms);
|
|
27
|
+
}
|
|
28
|
+
exports.flush = flush;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as Errors from '../errors';
|
|
2
|
+
import { ActionBase } from './action/base';
|
|
3
|
+
import { Config } from './config';
|
|
4
|
+
import * as uxPrompt from './prompt';
|
|
5
|
+
import * as styled from './styled';
|
|
6
|
+
import uxWait from './wait';
|
|
7
|
+
export declare class ux {
|
|
8
|
+
static config: Config;
|
|
9
|
+
static get action(): ActionBase;
|
|
10
|
+
static annotation(text: string, annotation: string): void;
|
|
11
|
+
/**
|
|
12
|
+
* "press anykey to continue"
|
|
13
|
+
*/
|
|
14
|
+
static get anykey(): typeof uxPrompt.anykey;
|
|
15
|
+
static get confirm(): typeof uxPrompt.confirm;
|
|
16
|
+
static debug(format: string, ...args: string[]): void;
|
|
17
|
+
static done(): Promise<void>;
|
|
18
|
+
static flush(ms?: number): Promise<void>;
|
|
19
|
+
static info(format: string, ...args: string[]): void;
|
|
20
|
+
static log(format?: string, ...args: string[]): void;
|
|
21
|
+
static get progress(): typeof styled.progress;
|
|
22
|
+
static get prompt(): typeof uxPrompt.prompt;
|
|
23
|
+
static styledHeader(header: string): void;
|
|
24
|
+
static styledJSON(obj: unknown): void;
|
|
25
|
+
static styledObject(obj: any, keys?: string[]): void;
|
|
26
|
+
static get table(): typeof styled.Table.table;
|
|
27
|
+
static trace(format: string, ...args: string[]): void;
|
|
28
|
+
static get tree(): typeof styled.tree;
|
|
29
|
+
static url(text: string, uri: string, params?: {}): void;
|
|
30
|
+
static get wait(): typeof uxWait;
|
|
31
|
+
}
|
|
32
|
+
declare const action: ActionBase, annotation: typeof ux.annotation, anykey: typeof uxPrompt.anykey, confirm: typeof uxPrompt.confirm, debug: typeof ux.debug, done: typeof ux.done, flush: typeof ux.flush, info: typeof ux.info, log: typeof ux.log, progress: typeof styled.progress, prompt: typeof uxPrompt.prompt, styledHeader: typeof ux.styledHeader, styledJSON: typeof ux.styledJSON, styledObject: typeof ux.styledObject, table: typeof styled.Table.table, trace: typeof ux.trace, tree: typeof styled.tree, url: typeof ux.url, wait: (ms?: number) => Promise<void>;
|
|
33
|
+
declare const error: typeof Errors.error, exit: typeof Errors.exit, warn: typeof Errors.warn;
|
|
34
|
+
export { action, annotation, anykey, confirm, debug, done, error, exit, flush, info, log, progress, prompt, styledHeader, styledJSON, styledObject, table, trace, tree, url, wait, warn, };
|
|
35
|
+
export { ActionBase } from './action/base';
|
|
36
|
+
export { Config, config } from './config';
|
|
37
|
+
export { ExitError } from './exit';
|
|
38
|
+
export { IPromptOptions } from './prompt';
|
|
39
|
+
export { Table } from './styled';
|
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Table = exports.ExitError = exports.
|
|
3
|
+
exports.Table = exports.ExitError = exports.config = exports.Config = exports.ActionBase = exports.warn = exports.wait = exports.url = exports.tree = exports.trace = exports.table = exports.styledObject = exports.styledJSON = exports.styledHeader = exports.prompt = exports.progress = exports.log = exports.info = exports.flush = exports.exit = exports.error = exports.done = exports.debug = exports.confirm = exports.anykey = exports.annotation = exports.action = exports.ux = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const base_1 = require("./action/base");
|
|
9
|
-
Object.defineProperty(exports, "ActionBase", { enumerable: true, get: function () { return base_1.ActionBase; } });
|
|
5
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
+
const node_util_1 = require("node:util");
|
|
7
|
+
const Errors = tslib_1.__importStar(require("../errors"));
|
|
10
8
|
const config_1 = require("./config");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const exit_1 = require("./exit");
|
|
14
|
-
Object.defineProperty(exports, "ExitError", { enumerable: true, get: function () { return exit_1.ExitError; } });
|
|
15
|
-
const styled = require("./styled");
|
|
16
|
-
const styled_1 = require("./styled");
|
|
17
|
-
Object.defineProperty(exports, "Table", { enumerable: true, get: function () { return styled_1.Table; } });
|
|
18
|
-
tslib_1.__exportStar(require("./styled/table"), exports);
|
|
19
|
-
const uxPrompt = require("./prompt");
|
|
20
|
-
const wait_1 = require("./wait");
|
|
9
|
+
const flush_1 = require("./flush");
|
|
10
|
+
const uxPrompt = tslib_1.__importStar(require("./prompt"));
|
|
21
11
|
const stream_1 = require("./stream");
|
|
22
|
-
const
|
|
12
|
+
const styled = tslib_1.__importStar(require("./styled"));
|
|
13
|
+
const wait_1 = tslib_1.__importDefault(require("./wait"));
|
|
23
14
|
const hyperlinker = require('hyperlinker');
|
|
24
15
|
class ux {
|
|
25
|
-
static
|
|
26
|
-
|
|
16
|
+
static config = config_1.config;
|
|
17
|
+
static get action() {
|
|
18
|
+
return config_1.config.action;
|
|
19
|
+
}
|
|
20
|
+
static annotation(text, annotation) {
|
|
21
|
+
const supports = require('supports-hyperlinks');
|
|
22
|
+
if (supports.stdout) {
|
|
23
|
+
// \u001b]8;;https://google.com\u0007sometext\u001b]8;;\u0007
|
|
24
|
+
this.log(`\u001B]1337;AddAnnotation=${text.length}|${annotation}\u0007${text}`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.log(text);
|
|
28
|
+
}
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
31
|
* "press anykey to continue"
|
|
@@ -34,49 +36,55 @@ class ux {
|
|
|
34
36
|
static get confirm() {
|
|
35
37
|
return uxPrompt.confirm;
|
|
36
38
|
}
|
|
37
|
-
static
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
static styledObject(obj, keys) {
|
|
42
|
-
this.log(styled.styledObject(obj, keys));
|
|
43
|
-
}
|
|
44
|
-
static styledHeader(header) {
|
|
45
|
-
this.log(chalk.dim('=== ') + chalk.bold(header) + '\n');
|
|
39
|
+
static debug(format, ...args) {
|
|
40
|
+
if (['debug', 'trace'].includes(this.config.outputLevel)) {
|
|
41
|
+
stream_1.stdout.write((0, node_util_1.format)(format, ...args) + '\n');
|
|
42
|
+
}
|
|
46
43
|
}
|
|
47
|
-
static
|
|
48
|
-
|
|
44
|
+
static async done() {
|
|
45
|
+
config_1.config.action.stop();
|
|
49
46
|
}
|
|
50
|
-
static
|
|
51
|
-
|
|
47
|
+
static async flush(ms = 10000) {
|
|
48
|
+
await (0, flush_1.flush)(ms);
|
|
52
49
|
}
|
|
53
|
-
static
|
|
54
|
-
|
|
50
|
+
static info(format, ...args) {
|
|
51
|
+
stream_1.stdout.write((0, node_util_1.format)(format, ...args) + '\n');
|
|
55
52
|
}
|
|
56
|
-
static
|
|
57
|
-
|
|
53
|
+
static log(format, ...args) {
|
|
54
|
+
this.info(format || '', ...args);
|
|
58
55
|
}
|
|
59
56
|
static get progress() {
|
|
60
57
|
return styled.progress;
|
|
61
58
|
}
|
|
62
|
-
static
|
|
63
|
-
|
|
59
|
+
static get prompt() {
|
|
60
|
+
return uxPrompt.prompt;
|
|
64
61
|
}
|
|
65
|
-
static
|
|
66
|
-
|
|
67
|
-
stream_1.stdout.write(util.format(format, ...args) + '\n');
|
|
68
|
-
}
|
|
62
|
+
static styledHeader(header) {
|
|
63
|
+
this.info(chalk_1.default.dim('=== ') + chalk_1.default.bold(header) + '\n');
|
|
69
64
|
}
|
|
70
|
-
static
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
static styledJSON(obj) {
|
|
66
|
+
const json = JSON.stringify(obj, null, 2);
|
|
67
|
+
if (!chalk_1.default.level) {
|
|
68
|
+
info(json);
|
|
69
|
+
return;
|
|
73
70
|
}
|
|
71
|
+
const cardinal = require('cardinal');
|
|
72
|
+
const theme = require('cardinal/themes/jq');
|
|
73
|
+
this.info(cardinal.highlight(json, { json: true, theme }));
|
|
74
74
|
}
|
|
75
|
-
static
|
|
76
|
-
|
|
75
|
+
static styledObject(obj, keys) {
|
|
76
|
+
this.info(styled.styledObject(obj, keys));
|
|
77
77
|
}
|
|
78
|
-
static
|
|
79
|
-
|
|
78
|
+
static get table() {
|
|
79
|
+
return styled.Table.table;
|
|
80
|
+
}
|
|
81
|
+
static trace(format, ...args) {
|
|
82
|
+
if (this.config.outputLevel === 'trace') {
|
|
83
|
+
stream_1.stdout.write((0, node_util_1.format)(format, ...args) + '\n');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
static get tree() {
|
|
87
|
+
return styled.tree;
|
|
80
88
|
}
|
|
81
89
|
static url(text, uri, params = {}) {
|
|
82
90
|
const supports = require('supports-hyperlinks');
|
|
@@ -87,74 +95,34 @@ class ux {
|
|
|
87
95
|
this.log(uri);
|
|
88
96
|
}
|
|
89
97
|
}
|
|
90
|
-
static
|
|
91
|
-
|
|
92
|
-
if (supports.stdout) {
|
|
93
|
-
// \u001b]8;;https://google.com\u0007sometext\u001b]8;;\u0007
|
|
94
|
-
this.log(`\u001B]1337;AddAnnotation=${text.length}|${annotation}\u0007${text}`);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
this.log(text);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
static async flush(ms = 10000) {
|
|
101
|
-
await _flush.default(ms);
|
|
102
|
-
}
|
|
103
|
-
static error(err, options = {}) {
|
|
104
|
-
throw Errors.error(err, options);
|
|
105
|
-
}
|
|
106
|
-
static exit(code = 0) {
|
|
107
|
-
throw Errors.exit(code);
|
|
108
|
-
}
|
|
109
|
-
static warn(err) {
|
|
110
|
-
Errors.warn(err);
|
|
98
|
+
static get wait() {
|
|
99
|
+
return wait_1.default;
|
|
111
100
|
}
|
|
112
101
|
}
|
|
113
|
-
exports.
|
|
114
|
-
|
|
115
|
-
const action = ux.action;
|
|
102
|
+
exports.ux = ux;
|
|
103
|
+
const { action, annotation, anykey, confirm, debug, done, flush, info, log, progress, prompt, styledHeader, styledJSON, styledObject, table, trace, tree, url, wait, } = ux;
|
|
116
104
|
exports.action = action;
|
|
117
|
-
const annotation = ux.annotation;
|
|
118
105
|
exports.annotation = annotation;
|
|
119
|
-
const anykey = ux.anykey;
|
|
120
106
|
exports.anykey = anykey;
|
|
121
|
-
const confirm = ux.confirm;
|
|
122
107
|
exports.confirm = confirm;
|
|
123
|
-
const debug = ux.debug;
|
|
124
108
|
exports.debug = debug;
|
|
125
|
-
const done = ux.done;
|
|
126
109
|
exports.done = done;
|
|
127
|
-
const error = Errors.error;
|
|
128
|
-
exports.error = error;
|
|
129
|
-
const exit = Errors.exit;
|
|
130
|
-
exports.exit = exit;
|
|
131
|
-
const flush = ux.flush;
|
|
132
110
|
exports.flush = flush;
|
|
133
|
-
const info = ux.info;
|
|
134
111
|
exports.info = info;
|
|
135
|
-
const log = ux.log;
|
|
136
112
|
exports.log = log;
|
|
137
|
-
const progress = ux.progress;
|
|
138
113
|
exports.progress = progress;
|
|
139
|
-
const prompt = ux.prompt;
|
|
140
114
|
exports.prompt = prompt;
|
|
141
|
-
const styledHeader = ux.styledHeader;
|
|
142
115
|
exports.styledHeader = styledHeader;
|
|
143
|
-
const styledJSON = ux.styledJSON;
|
|
144
116
|
exports.styledJSON = styledJSON;
|
|
145
|
-
const styledObject = ux.styledObject;
|
|
146
117
|
exports.styledObject = styledObject;
|
|
147
|
-
const table = ux.table;
|
|
148
118
|
exports.table = table;
|
|
149
|
-
const trace = ux.trace;
|
|
150
119
|
exports.trace = trace;
|
|
151
|
-
const tree = ux.tree;
|
|
152
120
|
exports.tree = tree;
|
|
153
|
-
const url = ux.url;
|
|
154
121
|
exports.url = url;
|
|
155
|
-
const wait = ux.wait;
|
|
156
122
|
exports.wait = wait;
|
|
157
|
-
const warn = Errors
|
|
123
|
+
const { error, exit, warn } = Errors;
|
|
124
|
+
exports.error = error;
|
|
125
|
+
exports.exit = exit;
|
|
158
126
|
exports.warn = warn;
|
|
159
127
|
const uxProcessExitHandler = async () => {
|
|
160
128
|
try {
|
|
@@ -167,7 +135,16 @@ const uxProcessExitHandler = async () => {
|
|
|
167
135
|
};
|
|
168
136
|
// to avoid MaxListenersExceededWarning
|
|
169
137
|
// only attach named listener once
|
|
170
|
-
const uxListener = process.listeners('exit').find(fn => fn.name === uxProcessExitHandler.name);
|
|
138
|
+
const uxListener = process.listeners('exit').find((fn) => fn.name === uxProcessExitHandler.name);
|
|
171
139
|
if (!uxListener) {
|
|
172
140
|
process.once('exit', uxProcessExitHandler);
|
|
173
141
|
}
|
|
142
|
+
var base_1 = require("./action/base");
|
|
143
|
+
Object.defineProperty(exports, "ActionBase", { enumerable: true, get: function () { return base_1.ActionBase; } });
|
|
144
|
+
var config_2 = require("./config");
|
|
145
|
+
Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return config_2.Config; } });
|
|
146
|
+
Object.defineProperty(exports, "config", { enumerable: true, get: function () { return config_2.config; } });
|
|
147
|
+
var exit_1 = require("./exit");
|
|
148
|
+
Object.defineProperty(exports, "ExitError", { enumerable: true, get: function () { return exit_1.ExitError; } });
|
|
149
|
+
var styled_1 = require("./styled");
|
|
150
|
+
Object.defineProperty(exports, "Table", { enumerable: true, get: function () { return styled_1.Table; } });
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.renderList = void 0;
|
|
4
4
|
const screen_1 = require("../screen");
|
|
5
|
-
const util_1 = require("../util");
|
|
5
|
+
const util_1 = require("../util/util");
|
|
6
6
|
const wordwrap = require('wordwrap');
|
|
7
7
|
function linewrap(length, s) {
|
|
8
8
|
return wordwrap(length, screen_1.stdtermwidth, {
|
|
@@ -13,8 +13,8 @@ function renderList(items) {
|
|
|
13
13
|
if (items.length === 0) {
|
|
14
14
|
return '';
|
|
15
15
|
}
|
|
16
|
-
const maxLength = (0, util_1.maxBy)(items, item => item[0].length)?.[0].length ?? 0;
|
|
17
|
-
const lines = items.map(i => {
|
|
16
|
+
const maxLength = (0, util_1.maxBy)(items, (item) => item[0].length)?.[0].length ?? 0;
|
|
17
|
+
const lines = items.map((i) => {
|
|
18
18
|
let left = i[0];
|
|
19
19
|
let right = i[1];
|
|
20
20
|
if (!right) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export interface IPromptOptions {
|
|
2
|
+
default?: string;
|
|
2
3
|
prompt?: string;
|
|
3
|
-
type?: 'normal' | 'mask' | 'hide' | 'single';
|
|
4
|
-
timeout?: number;
|
|
5
4
|
/**
|
|
6
5
|
* Requires user input if true, otherwise allows empty input
|
|
7
6
|
*/
|
|
8
7
|
required?: boolean;
|
|
9
|
-
|
|
8
|
+
timeout?: number;
|
|
9
|
+
type?: 'hide' | 'mask' | 'normal' | 'single';
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* prompt for input
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.anykey = exports.confirm = exports.prompt = void 0;
|
|
4
|
-
const
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
+
const Errors = tslib_1.__importStar(require("../errors"));
|
|
5
7
|
const config_1 = require("./config");
|
|
6
|
-
const chalk = require("chalk");
|
|
7
8
|
const stream_1 = require("./stream");
|
|
8
9
|
function normal(options, retries = 100) {
|
|
9
10
|
if (retries < 0)
|
|
@@ -20,7 +21,7 @@ function normal(options, retries = 100) {
|
|
|
20
21
|
process.stdin.setEncoding('utf8');
|
|
21
22
|
stream_1.stderr.write(options.prompt);
|
|
22
23
|
process.stdin.resume();
|
|
23
|
-
process.stdin.once('data', b => {
|
|
24
|
+
process.stdin.once('data', (b) => {
|
|
24
25
|
if (timer)
|
|
25
26
|
clearTimeout(timer);
|
|
26
27
|
process.stdin.pause();
|
|
@@ -40,7 +41,7 @@ function getPrompt(name, type, defaultValue) {
|
|
|
40
41
|
defaultValue = '*'.repeat(defaultValue.length);
|
|
41
42
|
}
|
|
42
43
|
if (name && defaultValue)
|
|
43
|
-
prompt = name + ' ' +
|
|
44
|
+
prompt = name + ' ' + chalk_1.default.yellow('[' + defaultValue + ']') + ': ';
|
|
44
45
|
else if (name)
|
|
45
46
|
prompt = `${name}: `;
|
|
46
47
|
return prompt;
|
|
@@ -57,43 +58,53 @@ async function single(options) {
|
|
|
57
58
|
}
|
|
58
59
|
function replacePrompt(prompt) {
|
|
59
60
|
const ansiEscapes = require('ansi-escapes');
|
|
60
|
-
stream_1.stderr.write(ansiEscapes.cursorHide +
|
|
61
|
-
ansiEscapes.
|
|
61
|
+
stream_1.stderr.write(ansiEscapes.cursorHide +
|
|
62
|
+
ansiEscapes.cursorUp(1) +
|
|
63
|
+
ansiEscapes.cursorLeft +
|
|
64
|
+
prompt +
|
|
65
|
+
ansiEscapes.cursorDown(1) +
|
|
66
|
+
ansiEscapes.cursorLeft +
|
|
67
|
+
ansiEscapes.cursorShow);
|
|
62
68
|
}
|
|
63
69
|
async function _prompt(name, inputOptions = {}) {
|
|
64
70
|
const prompt = getPrompt(name, inputOptions.type, inputOptions.default);
|
|
65
71
|
const options = {
|
|
72
|
+
default: '',
|
|
66
73
|
isTTY: Boolean(process.env.TERM !== 'dumb' && process.stdin.isTTY),
|
|
67
74
|
name,
|
|
68
75
|
prompt,
|
|
69
|
-
type: 'normal',
|
|
70
76
|
required: true,
|
|
71
|
-
|
|
77
|
+
type: 'normal',
|
|
72
78
|
...inputOptions,
|
|
73
79
|
};
|
|
74
80
|
const passwordPrompt = require('password-prompt');
|
|
75
81
|
switch (options.type) {
|
|
76
|
-
case 'normal':
|
|
82
|
+
case 'normal': {
|
|
77
83
|
return normal(options);
|
|
78
|
-
|
|
84
|
+
}
|
|
85
|
+
case 'single': {
|
|
79
86
|
return single(options);
|
|
80
|
-
|
|
87
|
+
}
|
|
88
|
+
case 'mask': {
|
|
81
89
|
return passwordPrompt(options.prompt, {
|
|
90
|
+
default: options.default,
|
|
82
91
|
method: options.type,
|
|
83
92
|
required: options.required,
|
|
84
|
-
default: options.default,
|
|
85
93
|
}).then((value) => {
|
|
86
94
|
replacePrompt(getPrompt(name, 'hide', inputOptions.default));
|
|
87
95
|
return value;
|
|
88
96
|
});
|
|
89
|
-
|
|
97
|
+
}
|
|
98
|
+
case 'hide': {
|
|
90
99
|
return passwordPrompt(options.prompt, {
|
|
100
|
+
default: options.default,
|
|
91
101
|
method: options.type,
|
|
92
102
|
required: options.required,
|
|
93
|
-
default: options.default,
|
|
94
103
|
});
|
|
95
|
-
|
|
104
|
+
}
|
|
105
|
+
default: {
|
|
96
106
|
throw new Error(`unexpected type ${options.type}`);
|
|
107
|
+
}
|
|
97
108
|
}
|
|
98
109
|
}
|
|
99
110
|
/**
|
|
@@ -103,9 +114,7 @@ async function _prompt(name, inputOptions = {}) {
|
|
|
103
114
|
* @returns Promise<string>
|
|
104
115
|
*/
|
|
105
116
|
async function prompt(name, options = {}) {
|
|
106
|
-
return config_1.
|
|
107
|
-
return _prompt(name, options);
|
|
108
|
-
}, chalk.cyan('?'));
|
|
117
|
+
return config_1.config.action.pauseAsync(() => _prompt(name, options), chalk_1.default.cyan('?'));
|
|
109
118
|
}
|
|
110
119
|
exports.prompt = prompt;
|
|
111
120
|
/**
|
|
@@ -114,9 +123,10 @@ exports.prompt = prompt;
|
|
|
114
123
|
* @returns Promise<boolean>
|
|
115
124
|
*/
|
|
116
125
|
function confirm(message) {
|
|
117
|
-
return config_1.
|
|
126
|
+
return config_1.config.action.pauseAsync(async () => {
|
|
118
127
|
const confirm = async () => {
|
|
119
|
-
const
|
|
128
|
+
const raw = await _prompt(message);
|
|
129
|
+
const response = raw.toLowerCase();
|
|
120
130
|
if (['n', 'no'].includes(response))
|
|
121
131
|
return false;
|
|
122
132
|
if (['y', 'yes'].includes(response))
|
|
@@ -124,7 +134,7 @@ function confirm(message) {
|
|
|
124
134
|
return confirm();
|
|
125
135
|
};
|
|
126
136
|
return confirm();
|
|
127
|
-
},
|
|
137
|
+
}, chalk_1.default.cyan('?'));
|
|
128
138
|
}
|
|
129
139
|
exports.confirm = confirm;
|
|
130
140
|
/**
|
|
@@ -135,11 +145,11 @@ exports.confirm = confirm;
|
|
|
135
145
|
async function anykey(message) {
|
|
136
146
|
const tty = Boolean(process.stdin.setRawMode);
|
|
137
147
|
if (!message) {
|
|
138
|
-
message = tty
|
|
139
|
-
`Press any key to continue or ${
|
|
140
|
-
`Press enter to continue or ${
|
|
148
|
+
message = tty
|
|
149
|
+
? `Press any key to continue or ${chalk_1.default.yellow('q')} to exit`
|
|
150
|
+
: `Press enter to continue or ${chalk_1.default.yellow('q')} to exit`;
|
|
141
151
|
}
|
|
142
|
-
const char = await prompt(message, { type: 'single'
|
|
152
|
+
const char = await prompt(message, { required: false, type: 'single' });
|
|
143
153
|
if (tty)
|
|
144
154
|
stream_1.stderr.write('\n');
|
|
145
155
|
if (char === 'q')
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
* A wrapper around process.stdout and process.stderr that allows us to mock out the streams for testing.
|
|
3
3
|
*/
|
|
4
4
|
declare class Stream {
|
|
5
|
-
channel: '
|
|
6
|
-
constructor(channel: '
|
|
7
|
-
|
|
5
|
+
channel: 'stderr' | 'stdout';
|
|
6
|
+
constructor(channel: 'stderr' | 'stdout');
|
|
7
|
+
emit(event: string, ...args: any[]): boolean;
|
|
8
8
|
getWindowSize(): number[];
|
|
9
|
-
write(data: string): boolean;
|
|
10
|
-
read(): boolean;
|
|
11
9
|
on(event: string, listener: (...args: any[]) => void): Stream;
|
|
12
10
|
once(event: string, listener: (...args: any[]) => void): Stream;
|
|
13
|
-
|
|
11
|
+
read(): boolean;
|
|
12
|
+
write(data: string): boolean;
|
|
13
|
+
get isTTY(): boolean;
|
|
14
14
|
}
|
|
15
15
|
export declare const stdout: Stream;
|
|
16
16
|
export declare const stderr: Stream;
|
|
@@ -5,21 +5,16 @@ exports.stderr = exports.stdout = void 0;
|
|
|
5
5
|
* A wrapper around process.stdout and process.stderr that allows us to mock out the streams for testing.
|
|
6
6
|
*/
|
|
7
7
|
class Stream {
|
|
8
|
+
channel;
|
|
8
9
|
constructor(channel) {
|
|
9
10
|
this.channel = channel;
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
return process[this.channel].
|
|
12
|
+
emit(event, ...args) {
|
|
13
|
+
return process[this.channel].emit(event, ...args);
|
|
13
14
|
}
|
|
14
15
|
getWindowSize() {
|
|
15
16
|
return process[this.channel].getWindowSize();
|
|
16
17
|
}
|
|
17
|
-
write(data) {
|
|
18
|
-
return process[this.channel].write(data);
|
|
19
|
-
}
|
|
20
|
-
read() {
|
|
21
|
-
return process[this.channel].read();
|
|
22
|
-
}
|
|
23
18
|
on(event, listener) {
|
|
24
19
|
process[this.channel].on(event, listener);
|
|
25
20
|
return this;
|
|
@@ -28,8 +23,14 @@ class Stream {
|
|
|
28
23
|
process[this.channel].once(event, listener);
|
|
29
24
|
return this;
|
|
30
25
|
}
|
|
31
|
-
|
|
32
|
-
return process[this.channel].
|
|
26
|
+
read() {
|
|
27
|
+
return process[this.channel].read();
|
|
28
|
+
}
|
|
29
|
+
write(data) {
|
|
30
|
+
return process[this.channel].write(data);
|
|
31
|
+
}
|
|
32
|
+
get isTTY() {
|
|
33
|
+
return process[this.channel].isTTY;
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
exports.stdout = new Stream('stdout');
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tree = exports.Table = exports.progress = exports.styledObject = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
var object_1 = require("./object");
|
|
6
|
+
Object.defineProperty(exports, "styledObject", { enumerable: true, get: function () { return tslib_1.__importDefault(object_1).default; } });
|
|
7
|
+
var progress_1 = require("./progress");
|
|
8
|
+
Object.defineProperty(exports, "progress", { enumerable: true, get: function () { return tslib_1.__importDefault(progress_1).default; } });
|
|
9
|
+
exports.Table = tslib_1.__importStar(require("./table"));
|
|
10
|
+
var tree_1 = require("./tree");
|
|
11
|
+
Object.defineProperty(exports, "tree", { enumerable: true, get: function () { return tslib_1.__importDefault(tree_1).default; } });
|