UNPKG

4.19 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const tslib_1 = require("tslib");
4const Errors = tslib_1.__importStar(require("@oclif/errors"));
5const util = tslib_1.__importStar(require("util"));
6const base_1 = require("./action/base");
7exports.ActionBase = base_1.ActionBase;
8const config_1 = require("./config");
9exports.config = config_1.config;
10exports.Config = config_1.Config;
11const deps_1 = tslib_1.__importDefault(require("./deps"));
12const exit_1 = require("./exit");
13exports.ExitError = exit_1.ExitError;
14const Table = tslib_1.__importStar(require("./styled/table"));
15exports.Table = Table;
16exports.ux = {
17 config: config_1.config,
18 warn: Errors.warn,
19 error: Errors.error,
20 exit: Errors.exit,
21 get prompt() {
22 return deps_1.default.prompt.prompt;
23 },
24 /**
25 * "press anykey to continue"
26 */
27 get anykey() {
28 return deps_1.default.prompt.anykey;
29 },
30 get confirm() {
31 return deps_1.default.prompt.confirm;
32 },
33 get action() {
34 return config_1.config.action;
35 },
36 get prideAction() {
37 return config_1.config.prideAction;
38 },
39 styledObject(obj, keys) {
40 exports.ux.info(deps_1.default.styledObject(obj, keys));
41 },
42 get styledHeader() {
43 return deps_1.default.styledHeader;
44 },
45 get styledJSON() {
46 return deps_1.default.styledJSON;
47 },
48 get table() {
49 return deps_1.default.table;
50 },
51 get tree() {
52 return deps_1.default.tree;
53 },
54 get open() {
55 return deps_1.default.open;
56 },
57 get wait() {
58 return deps_1.default.wait;
59 },
60 get progress() {
61 return deps_1.default.progress;
62 },
63 async done() {
64 config_1.config.action.stop();
65 // await flushStdout()
66 },
67 trace(format, ...args) {
68 if (this.config.outputLevel === 'trace') {
69 process.stdout.write(util.format(format, ...args) + '\n');
70 }
71 },
72 debug(format, ...args) {
73 if (['trace', 'debug'].includes(this.config.outputLevel)) {
74 process.stdout.write(util.format(format, ...args) + '\n');
75 }
76 },
77 info(format, ...args) {
78 process.stdout.write(util.format(format, ...args) + '\n');
79 },
80 log(format, ...args) {
81 this.info(format || '', ...args);
82 },
83 url(text, uri, params = {}) {
84 const supports = require('supports-hyperlinks');
85 if (supports.stdout) {
86 const hyperlinker = require('hyperlinker');
87 this.log(hyperlinker(text, uri, params));
88 }
89 else {
90 this.log(uri);
91 }
92 },
93 annotation(text, annotation) {
94 const supports = require('supports-hyperlinks');
95 if (supports.stdout) {
96 // \u001b]8;;https://google.com\u0007sometext\u001b]8;;\u0007
97 this.log(`\u001B]1337;AddAnnotation=${text.length}|${annotation}\u0007${text}`);
98 }
99 else {
100 this.log(text);
101 }
102 },
103 async flush() {
104 function timeout(p, ms) {
105 function wait(ms, unref = false) {
106 return new Promise(resolve => {
107 const t = setTimeout(() => resolve(), ms);
108 if (unref)
109 t.unref();
110 });
111 }
112 return Promise.race([p, wait(ms, true).then(() => exports.ux.error('timed out'))]);
113 }
114 async function flush() {
115 const p = new Promise(resolve => process.stdout.once('drain', () => resolve()));
116 process.stdout.write('');
117 return p;
118 }
119 await timeout(flush(), 10000);
120 },
121};
122exports.default = exports.ux;
123exports.cli = exports.ux;
124const cliuxProcessExitHandler = async () => {
125 try {
126 await exports.ux.done();
127 }
128 catch (error) {
129 // tslint:disable no-console
130 console.error(error);
131 process.exitCode = 1;
132 }
133};
134// to avoid MaxListenersExceededWarning
135// only attach named listener once
136const cliuxListener = process.listeners('exit').find(fn => fn.name === cliuxProcessExitHandler.name);
137if (!cliuxListener) {
138 process.once('exit', cliuxProcessExitHandler);
139}