UNPKG

14.3 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const tslib_1 = require("tslib");
4const utils_1 = require("@neo-one/utils");
5const chalk_1 = tslib_1.__importDefault(require("chalk"));
6const cli_truncate_1 = tslib_1.__importDefault(require("cli-truncate"));
7const elegant_spinner_1 = tslib_1.__importDefault(require("elegant-spinner"));
8const figures_1 = tslib_1.__importDefault(require("figures"));
9const logSymbols = tslib_1.__importStar(require("log-symbols"));
10const log_update_1 = tslib_1.__importDefault(require("log-update"));
11const rxjs_1 = require("rxjs");
12const operators_1 = require("rxjs/operators");
13const displayUtils_1 = require("./displayUtils");
14const tasks_1 = require("./tasks");
15const pointer = chalk_1.default.yellow(figures_1.default.pointer);
16const skipped = chalk_1.default.yellow(figures_1.default.arrowDown);
17const getSymbol = (task, mutableSpinners) => {
18 if (mutableSpinners[task.id] == undefined) {
19 mutableSpinners[task.id] = elegant_spinner_1.default();
20 }
21 const hasSubtasks = task.subtasks !== undefined && task.subtasks.length > 0;
22 if (task.pending) {
23 return hasSubtasks ? pointer : chalk_1.default.yellow(mutableSpinners[task.id]());
24 }
25 if (task.complete) {
26 return logSymbols.success;
27 }
28 if (task.error !== undefined) {
29 return hasSubtasks ? pointer : logSymbols.error;
30 }
31 if (task.skipped !== undefined) {
32 return skipped;
33 }
34 return ' ';
35};
36const renderTasks = (tasks, spinners, level = 0) => {
37 let mutableOutput = [];
38 tasks.forEach((task) => {
39 const skippedStr = task.skipped !== undefined ? ` ${chalk_1.default.dim('[skipped]')}` : '';
40 mutableOutput.push(displayUtils_1.indentString(` ${getSymbol(task, spinners)} ${task.title}${skippedStr}`, level, { indent: ' ' }));
41 if ((task.pending && task.message !== undefined) ||
42 task.skipped !== false ||
43 task.error !== undefined ||
44 task.message !== undefined) {
45 let data = task.error;
46 if (data === undefined && task.skipped !== false) {
47 if (typeof task.skipped === 'string') {
48 data = task.skipped;
49 }
50 }
51 else if (data === undefined) {
52 data = task.message;
53 }
54 if (data !== undefined) {
55 data = displayUtils_1.stripAnsi(data
56 .trim()
57 .split('\n')
58 .filter(utils_1.utils.notNull)[0]);
59 const out = displayUtils_1.indentString(`${figures_1.default.arrowRight} ${data}`, level, { indent: ' ' });
60 mutableOutput.push(` ${chalk_1.default.gray(cli_truncate_1.default(out, process.stdout.columns - 3))}`);
61 }
62 }
63 if ((task.pending || task.error !== undefined || !task.collapse) &&
64 task.subtasks !== undefined &&
65 task.subtasks.length > 0) {
66 mutableOutput = mutableOutput.concat(renderTasks(task.subtasks, spinners, level + 1));
67 }
68 });
69 return mutableOutput.join('\n');
70};
71exports.handleCLITaskList = async ({ cli, response$, progress, cancel$, }) => {
72 const spinners = {};
73 await response$
74 .pipe(operators_1.switchMap(({ tasks }) => {
75 if (tasks_1.areTasksDone(tasks)) {
76 if (progress) {
77 log_update_1.default(renderTasks(tasks, spinners));
78 log_update_1.default.done();
79 }
80 else {
81 cli.print(renderTasks(tasks, spinners));
82 }
83 cancel$.complete();
84 const error = tasks_1.getTasksError(tasks);
85 if (error !== undefined) {
86 throw new Error(error);
87 }
88 return rxjs_1.EMPTY;
89 }
90 if (progress) {
91 return rxjs_1.timer(0, 50).pipe(operators_1.map(() => {
92 log_update_1.default(renderTasks(tasks, spinners));
93 }));
94 }
95 return rxjs_1.EMPTY;
96 }))
97 .toPromise();
98};
99
100//# sourceMappingURL=data:application/json;charset=utf8;base64,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dmVyLXBsdWdpbi9zcmMvaGFuZGxlQ0xJVGFza0xpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlscyB9IGZyb20gJ0BuZW8tb25lL3V0aWxzJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgY2xpVHJ1bmNhdGUgZnJvbSAnY2xpLXRydW5jYXRlJztcbmltcG9ydCBlbGVnYW50U3Bpbm5lciBmcm9tICdlbGVnYW50LXNwaW5uZXInO1xuaW1wb3J0IGZpZ3VyZXMgZnJvbSAnZmlndXJlcyc7XG5pbXBvcnQgKiBhcyBsb2dTeW1ib2xzIGZyb20gJ2xvZy1zeW1ib2xzJztcbmltcG9ydCBsb2dVcGRhdGUgZnJvbSAnbG9nLXVwZGF0ZSc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaW5kZW50U3RyaW5nLCBzdHJpcEFuc2kgfSBmcm9tICcuL2Rpc3BsYXlVdGlscyc7XG5pbXBvcnQgeyBhcmVUYXNrc0RvbmUsIGdldFRhc2tzRXJyb3IgfSBmcm9tICcuL3Rhc2tzJztcbmltcG9ydCB7IEludGVyYWN0aXZlQ0xJLCBUYXNrU3RhdHVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbnR5cGUgU3Bpbm5lcnMgPSBhbnk7XG5cbmNvbnN0IHBvaW50ZXIgPSBjaGFsay55ZWxsb3coZmlndXJlcy5wb2ludGVyKTtcbmNvbnN0IHNraXBwZWQgPSBjaGFsay55ZWxsb3coZmlndXJlcy5hcnJvd0Rvd24pO1xuXG5jb25zdCBnZXRTeW1ib2wgPSAodGFzazogVGFza1N0YXR1cywgbXV0YWJsZVNwaW5uZXJzOiBTcGlubmVycykgPT4ge1xuICBpZiAobXV0YWJsZVNwaW5uZXJzW3Rhc2suaWRdID09IHVuZGVmaW5lZCkge1xuICAgIG11dGFibGVTcGlubmVyc1t0YXNrLmlkXSA9IGVsZWdhbnRTcGlubmVyKCk7XG4gIH1cblxuICBjb25zdCBoYXNTdWJ0YXNrcyA9IHRhc2suc3VidGFza3MgIT09IHVuZGVmaW5lZCAmJiB0YXNrLnN1YnRhc2tzLmxlbmd0aCA+IDA7XG4gIGlmICh0YXNrLnBlbmRpbmcpIHtcbiAgICByZXR1cm4gaGFzU3VidGFza3MgPyBwb2ludGVyIDogY2hhbGsueWVsbG93KG11dGFibGVTcGlubmVyc1t0YXNrLmlkXSgpKTtcbiAgfVxuXG4gIGlmICh0YXNrLmNvbXBsZXRlKSB7XG4gICAgcmV0dXJuIGxvZ1N5bWJvbHMuc3VjY2VzcztcbiAgfVxuXG4gIGlmICh0YXNrLmVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaGFzU3VidGFza3MgPyBwb2ludGVyIDogbG9nU3ltYm9scy5lcnJvcjtcbiAgfVxuXG4gIGlmICh0YXNrLnNraXBwZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBza2lwcGVkO1xuICB9XG5cbiAgcmV0dXJuICcgJztcbn07XG5cbmNvbnN0IHJlbmRlclRhc2tzID0gKHRhc2tzOiBSZWFkb25seUFycmF5PFRhc2tTdGF0dXM+LCBzcGlubmVyczogU3Bpbm5lcnMsIGxldmVsID0gMCk6IHN0cmluZyA9PiB7XG4gIGxldCBtdXRhYmxlT3V0cHV0OiBzdHJpbmdbXSA9IFtdO1xuXG4gIHRhc2tzLmZvckVhY2goKHRhc2spID0+IHtcbiAgICBjb25zdCBza2lwcGVkU3RyID0gdGFzay5za2lwcGVkICE9PSB1bmRlZmluZWQgPyBgICR7Y2hhbGsuZGltKCdbc2tpcHBlZF0nKX1gIDogJyc7XG5cbiAgICBtdXRhYmxlT3V0cHV0LnB1c2goXG4gICAgICBpbmRlbnRTdHJpbmcoYCAke2dldFN5bWJvbCh0YXNrLCBzcGlubmVycyl9ICR7dGFzay50aXRsZX0ke3NraXBwZWRTdHJ9YCwgbGV2ZWwsIHsgaW5kZW50OiAnICAnIH0pLFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICAodGFzay5wZW5kaW5nICYmIHRhc2subWVzc2FnZSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgdGFzay5za2lwcGVkICE9PSBmYWxzZSB8fFxuICAgICAgdGFzay5lcnJvciAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICB0YXNrLm1lc3NhZ2UgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgbGV0IGRhdGEgPSB0YXNrLmVycm9yO1xuICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCAmJiB0YXNrLnNraXBwZWQgIT09IGZhbHNlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFzay5za2lwcGVkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGRhdGEgPSB0YXNrLnNraXBwZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRhdGEgPSB0YXNrLm1lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGF0YSA9IHN0cmlwQW5zaShcbiAgICAgICAgICBkYXRhXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAuZmlsdGVyKHV0aWxzLm5vdE51bGwpWzBdLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG91dCA9IGluZGVudFN0cmluZyhgJHtmaWd1cmVzLmFycm93UmlnaHR9ICR7ZGF0YX1gLCBsZXZlbCwgeyBpbmRlbnQ6ICcgICcgfSk7XG4gICAgICAgIG11dGFibGVPdXRwdXQucHVzaChgICAgJHtjaGFsay5ncmF5KGNsaVRydW5jYXRlKG91dCwgKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgYXMgbnVtYmVyKSAtIDMpKX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAodGFzay5wZW5kaW5nIHx8IHRhc2suZXJyb3IgIT09IHVuZGVmaW5lZCB8fCAhdGFzay5jb2xsYXBzZSkgJiZcbiAgICAgIHRhc2suc3VidGFza3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGFzay5zdWJ0YXNrcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBtdXRhYmxlT3V0cHV0ID0gbXV0YWJsZU91dHB1dC5jb25jYXQocmVuZGVyVGFza3ModGFzay5zdWJ0YXNrcywgc3Bpbm5lcnMsIGxldmVsICsgMSkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG11dGFibGVPdXRwdXQuam9pbignXFxuJyk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlQ0xJVGFza0xpc3QgPSBhc3luYyAoe1xuICBjbGksXG4gIHJlc3BvbnNlJCxcbiAgcHJvZ3Jlc3MsXG4gIGNhbmNlbCQsXG59OiB7XG4gIHJlYWRvbmx5IGNsaTogSW50ZXJhY3RpdmVDTEk7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgcmVhZG9ubHkgcmVzcG9uc2UkOiBPYnNlcnZhYmxlPGFueT47XG4gIHJlYWRvbmx5IHByb2dyZXNzOiBib29sZWFuO1xuICByZWFkb25seSBjYW5jZWwkOiBTdWJqZWN0PHZvaWQ+O1xufSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBzcGlubmVycyA9IHt9O1xuICBhd2FpdCByZXNwb25zZSRcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeyB0YXNrcyB9KSA9PiB7XG4gICAgICAgIGlmIChhcmVUYXNrc0RvbmUodGFza3MpKSB7XG4gICAgICAgICAgaWYgKHByb2dyZXNzKSB7XG4gICAgICAgICAgICBsb2dVcGRhdGUocmVuZGVyVGFza3ModGFza3MsIHNwaW5uZXJzKSk7XG4gICAgICAgICAgICBsb2dVcGRhdGUuZG9uZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGkucHJpbnQocmVuZGVyVGFza3ModGFza3MsIHNwaW5uZXJzKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FuY2VsJC5jb21wbGV0ZSgpO1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZ2V0VGFza3NFcnJvcih0YXNrcyk7XG4gICAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2dyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIHRpbWVyKDAsIDUwKS5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgbG9nVXBkYXRlKHJlbmRlclRhc2tzKHRhc2tzLCBzcGlubmVycykpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pLFxuICAgIClcbiAgICAudG9Qcm9taXNlKCk7XG59O1xuIl19