verbose.renderer.js 4.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.VerboseRenderer = void 0;
  4. const event_constants_1 = require("../constants/event.constants");
  5. const logger_1 = require("../utils/logger");
  6. const parse_time_1 = require("../utils/parse-time");
  7. class VerboseRenderer {
  8. constructor(tasks, options) {
  9. var _a, _b, _c, _d;
  10. this.tasks = tasks;
  11. this.options = options;
  12. if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.logger) && ((_b = this.options) === null || _b === void 0 ? void 0 : _b.options)) {
  13. this.logger = new this.options.logger(this.options.options);
  14. }
  15. else if ((_c = this.options) === null || _c === void 0 ? void 0 : _c.logger) {
  16. this.logger = new this.options.logger();
  17. }
  18. else {
  19. this.logger = new logger_1.Logger({ useIcons: (_d = this.options) === null || _d === void 0 ? void 0 : _d.useIcons });
  20. }
  21. this.options = { ...VerboseRenderer.rendererOptions, ...this.options };
  22. }
  23. render() {
  24. this.verboseRenderer(this.tasks);
  25. }
  26. // eslint-disable-next-line @typescript-eslint/no-empty-function
  27. end() { }
  28. // verbose renderer multi-level
  29. verboseRenderer(tasks) {
  30. return tasks === null || tasks === void 0 ? void 0 : tasks.forEach((task) => {
  31. task.subscribe(
  32. // eslint-disable-next-line complexity
  33. (event) => {
  34. var _a, _b, _c, _d, _e, _f, _g, _h;
  35. if (task.isEnabled()) {
  36. // render depending on the state
  37. const taskTitle = task.hasTitle() ? task.title : 'Task without title.';
  38. if (event.type === event_constants_1.ListrEventType.SUBTASK && task.hasSubtasks()) {
  39. // render lower level if multi-level
  40. this.verboseRenderer(task.subtasks);
  41. }
  42. else if (event.type === event_constants_1.ListrEventType.STATE) {
  43. if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.logEmptyTitle) !== false || task.hasTitle()) {
  44. if (task.isPending()) {
  45. this.logger.start(taskTitle);
  46. }
  47. else if (task.isCompleted()) {
  48. 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)}]` : ''));
  49. }
  50. }
  51. }
  52. else if (event.type === event_constants_1.ListrEventType.DATA && !!event.data) {
  53. this.logger.data(String(event.data));
  54. }
  55. else if (event.type === event_constants_1.ListrEventType.TITLE) {
  56. if (((_d = this.options) === null || _d === void 0 ? void 0 : _d.logTitleChange) !== false) {
  57. this.logger.title(String(event.data));
  58. }
  59. }
  60. else if (event.type === event_constants_1.ListrEventType.MESSAGE) {
  61. if ((_e = event.data) === null || _e === void 0 ? void 0 : _e.error) {
  62. // error message
  63. this.logger.fail(String(event.data.error));
  64. }
  65. else if ((_f = event.data) === null || _f === void 0 ? void 0 : _f.skip) {
  66. // skip message
  67. this.logger.skip(String(event.data.skip));
  68. }
  69. else if ((_g = event.data) === null || _g === void 0 ? void 0 : _g.rollback) {
  70. // rollback message
  71. this.logger.rollback(String(event.data.rollback));
  72. }
  73. else if ((_h = event.data) === null || _h === void 0 ? void 0 : _h.retry) {
  74. // inform of retry count
  75. this.logger.retry(`[${event.data.retry.count}] ` + String(taskTitle));
  76. }
  77. }
  78. }
  79. },
  80. /* istanbul ignore next */ (err) => {
  81. this.logger.fail(err);
  82. });
  83. });
  84. }
  85. }
  86. exports.VerboseRenderer = VerboseRenderer;
  87. /** designates whether this renderer can output to a non-tty console */
  88. VerboseRenderer.nonTTY = true;
  89. /** renderer options for the verbose renderer */
  90. VerboseRenderer.rendererOptions = {
  91. useIcons: false,
  92. logEmptyTitle: true,
  93. logTitleChange: true
  94. };