@neo-one/server-plugin
Version:
NEO•ONE Server plugin API.
102 lines (100 loc) • 14.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const utils_1 = require("@neo-one/utils");
const chalk_1 = tslib_1.__importDefault(require("chalk"));
const cli_truncate_1 = tslib_1.__importDefault(require("cli-truncate"));
const figures_1 = tslib_1.__importDefault(require("figures"));
const logSymbols = tslib_1.__importStar(require("log-symbols"));
const log_update_1 = tslib_1.__importDefault(require("log-update"));
const ora_1 = tslib_1.__importDefault(require("ora"));
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const displayUtils_1 = require("./displayUtils");
const tasks_1 = require("./tasks");
const pointer = chalk_1.default.yellow(figures_1.default.pointer);
const skipped = chalk_1.default.yellow(figures_1.default.arrowDown);
const getSymbol = (task, mutableSpinners) => {
if (mutableSpinners[task.id] == undefined) {
const spinner = ora_1.default({ color: 'yellow' });
mutableSpinners[task.id] = spinner;
}
const hasSubtasks = task.subtasks !== undefined && task.subtasks.length > 0;
if (task.pending) {
return hasSubtasks ? pointer : chalk_1.default.yellow(mutableSpinners[task.id].frame().trim());
}
if (task.complete) {
return logSymbols.success;
}
if (task.error !== undefined) {
return hasSubtasks ? pointer : logSymbols.error;
}
if (task.skipped !== undefined) {
return skipped;
}
return ' ';
};
const renderTasks = (tasks, spinners, level = 0) => {
let mutableOutput = [];
tasks.forEach((task) => {
const skippedStr = task.skipped !== undefined ? ` ${chalk_1.default.dim('[skipped]')}` : '';
mutableOutput.push(displayUtils_1.indentString(` ${getSymbol(task, spinners)} ${task.title}${skippedStr}`, level, { indent: ' ' }));
if ((task.pending && task.message !== undefined) ||
task.skipped !== false ||
task.error !== undefined ||
task.message !== undefined) {
let data = task.error;
if (data === undefined && task.skipped !== false) {
if (typeof task.skipped === 'string') {
data = task.skipped;
}
}
else if (data === undefined) {
data = task.message;
}
if (data !== undefined) {
data = displayUtils_1.stripAnsi(data
.trim()
.split('\n')
.filter(utils_1.utils.notNull)[0]);
const out = displayUtils_1.indentString(`${figures_1.default.arrowRight} ${data}`, level, { indent: ' ' });
mutableOutput.push(` ${chalk_1.default.gray(cli_truncate_1.default(out, process.stdout.columns - 3))}`);
}
}
if ((task.pending || task.error !== undefined || !task.collapse) &&
task.subtasks !== undefined &&
task.subtasks.length > 0) {
mutableOutput = mutableOutput.concat(renderTasks(task.subtasks, spinners, level + 1));
}
});
return mutableOutput.join('\n');
};
exports.handleCLITaskList = async ({ cli, response$, progress, cancel$, }) => {
const spinners = {};
await response$
.pipe(operators_1.switchMap(({ tasks }) => {
if (tasks_1.areTasksDone(tasks)) {
if (progress) {
log_update_1.default(renderTasks(tasks, spinners));
log_update_1.default.done();
}
else {
cli.print(renderTasks(tasks, spinners));
}
cancel$.complete();
const error = tasks_1.getTasksError(tasks);
if (error !== undefined) {
throw new Error(error);
}
return rxjs_1.EMPTY;
}
if (progress) {
return rxjs_1.timer(0, 50).pipe(operators_1.map(() => {
log_update_1.default(renderTasks(tasks, spinners));
}));
}
return rxjs_1.EMPTY;
}))
.toPromise();
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFLLENBQUM7SUFDZixDQUFDLENBQUMsQ0FDSDtTQUNBLFNBQVMsRUFBRSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsImZpbGUiOiJuZW8tb25lLXNlcnZlci1wbHVnaW4vc3JjL2hhbmRsZUNMSVRhc2tMaXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbHMgfSBmcm9tICdAbmVvLW9uZS91dGlscyc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGNsaVRydW5jYXRlIGZyb20gJ2NsaS10cnVuY2F0ZSc7XG5pbXBvcnQgZmlndXJlcyBmcm9tICdmaWd1cmVzJztcbmltcG9ydCAqIGFzIGxvZ1N5bWJvbHMgZnJvbSAnbG9nLXN5bWJvbHMnO1xuaW1wb3J0IGxvZ1VwZGF0ZSBmcm9tICdsb2ctdXBkYXRlJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpbmRlbnRTdHJpbmcsIHN0cmlwQW5zaSB9IGZyb20gJy4vZGlzcGxheVV0aWxzJztcbmltcG9ydCB7IGFyZVRhc2tzRG9uZSwgZ2V0VGFza3NFcnJvciB9IGZyb20gJy4vdGFza3MnO1xuaW1wb3J0IHsgSW50ZXJhY3RpdmVDTEksIFRhc2tTdGF0dXMgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxudHlwZSBTcGlubmVycyA9IGFueTtcblxuY29uc3QgcG9pbnRlciA9IGNoYWxrLnllbGxvdyhmaWd1cmVzLnBvaW50ZXIpO1xuY29uc3Qgc2tpcHBlZCA9IGNoYWxrLnllbGxvdyhmaWd1cmVzLmFycm93RG93bik7XG5cbmNvbnN0IGdldFN5bWJvbCA9ICh0YXNrOiBUYXNrU3RhdHVzLCBtdXRhYmxlU3Bpbm5lcnM6IFNwaW5uZXJzKSA9PiB7XG4gIGlmIChtdXRhYmxlU3Bpbm5lcnNbdGFzay5pZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgc3Bpbm5lciA9IG9yYSh7IGNvbG9yOiAneWVsbG93JyB9KTtcbiAgICBtdXRhYmxlU3Bpbm5lcnNbdGFzay5pZF0gPSBzcGlubmVyO1xuICB9XG5cbiAgY29uc3QgaGFzU3VidGFza3MgPSB0YXNrLnN1YnRhc2tzICE9PSB1bmRlZmluZWQgJiYgdGFzay5zdWJ0YXNrcy5sZW5ndGggPiAwO1xuICBpZiAodGFzay5wZW5kaW5nKSB7XG4gICAgcmV0dXJuIGhhc1N1YnRhc2tzID8gcG9pbnRlciA6IGNoYWxrLnllbGxvdyhtdXRhYmxlU3Bpbm5lcnNbdGFzay5pZF0uZnJhbWUoKS50cmltKCkpO1xuICB9XG5cbiAgaWYgKHRhc2suY29tcGxldGUpIHtcbiAgICByZXR1cm4gbG9nU3ltYm9scy5zdWNjZXNzO1xuICB9XG5cbiAgaWYgKHRhc2suZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBoYXNTdWJ0YXNrcyA/IHBvaW50ZXIgOiBsb2dTeW1ib2xzLmVycm9yO1xuICB9XG5cbiAgaWYgKHRhc2suc2tpcHBlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHNraXBwZWQ7XG4gIH1cblxuICByZXR1cm4gJyAnO1xufTtcblxuY29uc3QgcmVuZGVyVGFza3MgPSAodGFza3M6IHJlYWRvbmx5IFRhc2tTdGF0dXNbXSwgc3Bpbm5lcnM6IFNwaW5uZXJzLCBsZXZlbCA9IDApOiBzdHJpbmcgPT4ge1xuICBsZXQgbXV0YWJsZU91dHB1dDogc3RyaW5nW10gPSBbXTtcblxuICB0YXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7XG4gICAgY29uc3Qgc2tpcHBlZFN0ciA9IHRhc2suc2tpcHBlZCAhPT0gdW5kZWZpbmVkID8gYCAke2NoYWxrLmRpbSgnW3NraXBwZWRdJyl9YCA6ICcnO1xuXG4gICAgbXV0YWJsZU91dHB1dC5wdXNoKFxuICAgICAgaW5kZW50U3RyaW5nKGAgJHtnZXRTeW1ib2wodGFzaywgc3Bpbm5lcnMpfSAke3Rhc2sudGl0bGV9JHtza2lwcGVkU3RyfWAsIGxldmVsLCB7IGluZGVudDogJyAgJyB9KSxcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgKHRhc2sucGVuZGluZyAmJiB0YXNrLm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgIHRhc2suc2tpcHBlZCAhPT0gZmFsc2UgfHxcbiAgICAgIHRhc2suZXJyb3IgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGFzay5tZXNzYWdlICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGxldCBkYXRhID0gdGFzay5lcnJvcjtcbiAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQgJiYgdGFzay5za2lwcGVkICE9PSBmYWxzZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRhc2suc2tpcHBlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBkYXRhID0gdGFzay5za2lwcGVkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkYXRhID0gdGFzay5tZXNzYWdlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRhdGEgPSBzdHJpcEFuc2koXG4gICAgICAgICAgZGF0YVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLmZpbHRlcih1dGlscy5ub3ROdWxsKVswXSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBvdXQgPSBpbmRlbnRTdHJpbmcoYCR7ZmlndXJlcy5hcnJvd1JpZ2h0fSAke2RhdGF9YCwgbGV2ZWwsIHsgaW5kZW50OiAnICAnIH0pO1xuICAgICAgICBtdXRhYmxlT3V0cHV0LnB1c2goYCAgICR7Y2hhbGsuZ3JheShjbGlUcnVuY2F0ZShvdXQsIChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIGFzIG51bWJlcikgLSAzKSl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHRhc2sucGVuZGluZyB8fCB0YXNrLmVycm9yICE9PSB1bmRlZmluZWQgfHwgIXRhc2suY29sbGFwc2UpICYmXG4gICAgICB0YXNrLnN1YnRhc2tzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRhc2suc3VidGFza3MubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgbXV0YWJsZU91dHB1dCA9IG11dGFibGVPdXRwdXQuY29uY2F0KHJlbmRlclRhc2tzKHRhc2suc3VidGFza3MsIHNwaW5uZXJzLCBsZXZlbCArIDEpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtdXRhYmxlT3V0cHV0LmpvaW4oJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUNMSVRhc2tMaXN0ID0gYXN5bmMgKHtcbiAgY2xpLFxuICByZXNwb25zZSQsXG4gIHByb2dyZXNzLFxuICBjYW5jZWwkLFxufToge1xuICByZWFkb25seSBjbGk6IEludGVyYWN0aXZlQ0xJO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gIHJlYWRvbmx5IHJlc3BvbnNlJDogT2JzZXJ2YWJsZTxhbnk+O1xuICByZWFkb25seSBwcm9ncmVzczogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FuY2VsJDogU3ViamVjdDx2b2lkPjtcbn0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lcnMgPSB7fTtcbiAgYXdhaXQgcmVzcG9uc2UkXG4gICAgLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHsgdGFza3MgfSkgPT4ge1xuICAgICAgICBpZiAoYXJlVGFza3NEb25lKHRhc2tzKSkge1xuICAgICAgICAgIGlmIChwcm9ncmVzcykge1xuICAgICAgICAgICAgbG9nVXBkYXRlKHJlbmRlclRhc2tzKHRhc2tzLCBzcGlubmVycykpO1xuICAgICAgICAgICAgbG9nVXBkYXRlLmRvbmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xpLnByaW50KHJlbmRlclRhc2tzKHRhc2tzLCBzcGlubmVycykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhbmNlbCQuY29tcGxldGUoKTtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGdldFRhc2tzRXJyb3IodGFza3MpO1xuICAgICAgICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybiB0aW1lcigwLCA1MCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGxvZ1VwZGF0ZShyZW5kZXJUYXNrcyh0YXNrcywgc3Bpbm5lcnMpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICB9KSxcbiAgICApXG4gICAgLnRvUHJvbWlzZSgpO1xufTtcbiJdfQ==