86 lines
3.2 KiB
JavaScript
86 lines
3.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.TTYOutputRedrawer = exports.TTYOutputStrategy = exports.StreamOutputStrategy = void 0;
|
|
const utils_terminal_1 = require("@ionic/utils-terminal");
|
|
const colors_1 = require("./colors");
|
|
const tasks_1 = require("./tasks");
|
|
const utils_1 = require("./utils");
|
|
class StreamOutputStrategy {
|
|
constructor({ stream = process.stdout, colors = colors_1.NO_COLORS }) {
|
|
this.stream = stream;
|
|
this.colors = colors;
|
|
}
|
|
write(msg) {
|
|
return this.stream.write(msg);
|
|
}
|
|
createTaskChain() {
|
|
const { failure, success, weak } = this.colors;
|
|
const chain = new tasks_1.TaskChain();
|
|
chain.on('next', task => {
|
|
task.on('end', result => {
|
|
if (result.success) {
|
|
this.write(`${success(tasks_1.ICON_SUCCESS)} ${task.msg} ${weak(`in ${(0, utils_1.formatHrTime)(result.elapsedTime)}`)}\n`);
|
|
}
|
|
else {
|
|
this.write(`${failure(tasks_1.ICON_FAILURE)} ${task.msg} ${failure(weak('- failed!'))}\n`);
|
|
}
|
|
});
|
|
});
|
|
return chain;
|
|
}
|
|
}
|
|
exports.StreamOutputStrategy = StreamOutputStrategy;
|
|
class TTYOutputStrategy extends StreamOutputStrategy {
|
|
constructor({ stream = process.stdout, colors = colors_1.NO_COLORS } = {}) {
|
|
super({ stream, colors });
|
|
this.stream = stream;
|
|
this.redrawer = new TTYOutputRedrawer({ stream });
|
|
}
|
|
createTaskChain() {
|
|
const { failure, strong, success, weak } = this.colors;
|
|
const chain = new tasks_1.TaskChain({ taskOptions: { tickInterval: 50 } });
|
|
chain.on('next', task => {
|
|
task.on('end', result => {
|
|
if (result.success) {
|
|
this.write(`${success(tasks_1.ICON_SUCCESS)} ${task.msg} ${weak(`in ${(0, utils_1.formatHrTime)(result.elapsedTime)}`)}\n`);
|
|
}
|
|
else {
|
|
this.write(`${failure(tasks_1.ICON_FAILURE)} ${task.msg} ${failure(weak('- failed!'))}\n`);
|
|
}
|
|
});
|
|
const spinner = new tasks_1.Spinner();
|
|
task.on('tick', () => {
|
|
const progress = task.progressRatio ? (task.progressRatio * 100).toFixed(2) : '';
|
|
const frame = spinner.frame();
|
|
this.redrawer.redraw(`${strong(frame)} ${task.msg}${progress ? ' (' + strong(String(progress) + '%') + ')' : ''} `);
|
|
});
|
|
task.on('clear', () => {
|
|
this.redrawer.clear();
|
|
});
|
|
});
|
|
chain.on('end', () => {
|
|
this.redrawer.end();
|
|
});
|
|
return chain;
|
|
}
|
|
}
|
|
exports.TTYOutputStrategy = TTYOutputStrategy;
|
|
class TTYOutputRedrawer {
|
|
constructor({ stream = process.stdout }) {
|
|
this.stream = stream;
|
|
}
|
|
get width() {
|
|
return this.stream.columns || 80;
|
|
}
|
|
redraw(msg) {
|
|
utils_terminal_1.Cursor.hide();
|
|
this.stream.write(utils_terminal_1.EscapeCode.eraseLines(1) + msg.replace(/[\r\n]+$/, ''));
|
|
}
|
|
clear() {
|
|
this.stream.write(utils_terminal_1.EscapeCode.eraseLines(1));
|
|
}
|
|
end() {
|
|
utils_terminal_1.Cursor.show();
|
|
}
|
|
}
|
|
exports.TTYOutputRedrawer = TTYOutputRedrawer;
|