"use strict";
|
Object.defineProperty(exports, "__esModule", { value: true });
|
exports.VerboseRenderer = void 0;
|
const event_constants_1 = require("../constants/event.constants");
|
const logger_1 = require("../utils/logger");
|
const parse_time_1 = require("../utils/parse-time");
|
class VerboseRenderer {
|
constructor(tasks, options) {
|
var _a, _b, _c, _d;
|
this.tasks = tasks;
|
this.options = options;
|
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.logger) && ((_b = this.options) === null || _b === void 0 ? void 0 : _b.options)) {
|
this.logger = new this.options.logger(this.options.options);
|
}
|
else if ((_c = this.options) === null || _c === void 0 ? void 0 : _c.logger) {
|
this.logger = new this.options.logger();
|
}
|
else {
|
this.logger = new logger_1.Logger({ useIcons: (_d = this.options) === null || _d === void 0 ? void 0 : _d.useIcons });
|
}
|
this.options = { ...VerboseRenderer.rendererOptions, ...this.options };
|
}
|
render() {
|
this.verboseRenderer(this.tasks);
|
}
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
end() { }
|
// verbose renderer multi-level
|
verboseRenderer(tasks) {
|
return tasks === null || tasks === void 0 ? void 0 : tasks.forEach((task) => {
|
task.subscribe(
|
// eslint-disable-next-line complexity
|
(event) => {
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
if (task.isEnabled()) {
|
// render depending on the state
|
const taskTitle = task.hasTitle() ? task.title : 'Task without title.';
|
if (event.type === event_constants_1.ListrEventType.SUBTASK && task.hasSubtasks()) {
|
// render lower level if multi-level
|
this.verboseRenderer(task.subtasks);
|
}
|
else if (event.type === event_constants_1.ListrEventType.STATE) {
|
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.logEmptyTitle) !== false || task.hasTitle()) {
|
if (task.isPending()) {
|
this.logger.start(taskTitle);
|
}
|
else if (task.isCompleted()) {
|
this.logger.success(taskTitle + (((_b = this.options) === null || _b === void 0 ? void 0 : _b.showTimer) && ((_c = task.message) === null || _c === void 0 ? void 0 : _c.duration) ? ` [${(0, parse_time_1.parseTaskTime)(task.message.duration)}]` : ''));
|
}
|
}
|
}
|
else if (event.type === event_constants_1.ListrEventType.DATA && !!event.data) {
|
this.logger.data(String(event.data));
|
}
|
else if (event.type === event_constants_1.ListrEventType.TITLE) {
|
if (((_d = this.options) === null || _d === void 0 ? void 0 : _d.logTitleChange) !== false) {
|
this.logger.title(String(event.data));
|
}
|
}
|
else if (event.type === event_constants_1.ListrEventType.MESSAGE) {
|
if ((_e = event.data) === null || _e === void 0 ? void 0 : _e.error) {
|
// error message
|
this.logger.fail(String(event.data.error));
|
}
|
else if ((_f = event.data) === null || _f === void 0 ? void 0 : _f.skip) {
|
// skip message
|
this.logger.skip(String(event.data.skip));
|
}
|
else if ((_g = event.data) === null || _g === void 0 ? void 0 : _g.rollback) {
|
// rollback message
|
this.logger.rollback(String(event.data.rollback));
|
}
|
else if ((_h = event.data) === null || _h === void 0 ? void 0 : _h.retry) {
|
// inform of retry count
|
this.logger.retry(`[${event.data.retry.count}] ` + String(taskTitle));
|
}
|
}
|
}
|
},
|
/* istanbul ignore next */ (err) => {
|
this.logger.fail(err);
|
});
|
});
|
}
|
}
|
exports.VerboseRenderer = VerboseRenderer;
|
/** designates whether this renderer can output to a non-tty console */
|
VerboseRenderer.nonTTY = true;
|
/** renderer options for the verbose renderer */
|
VerboseRenderer.rendererOptions = {
|
useIcons: false,
|
logEmptyTitle: true,
|
logTitleChange: true
|
};
|