@listr2/manager
Version:
Extension for Listr2 to easily create sane defaults for task lists.
65 lines (63 loc) • 1.3 kB
JavaScript
import { Listr } from "listr2";
//#region src/manager.ts
/**
* Creates a new Listr2 task manager.
*
* Useful for creating a single instance of Listr2 with pre-set settings.
*
* @see {@link https://listr2.kilic.dev/listr/manager.html}
*/
var Manager = class {
errors = [];
tasks = [];
constructor(options) {
this.options = options;
}
get ctx() {
return this.options.ctx;
}
set ctx(ctx) {
this.options.ctx = ctx;
}
add(tasks, options) {
this.tasks = [...this.tasks, this.indent(tasks, options)];
}
async runAll(options) {
options = {
...this.options,
...options
};
const tasks = [...this.tasks];
this.tasks = [];
return await this.run(tasks, options);
}
newListr(tasks, options) {
return new Listr(tasks, options);
}
indent(tasks, options, taskOptions) {
options = {
...this.options,
...options
};
if (typeof tasks === "function") return {
...taskOptions,
task: (ctx) => this.newListr(tasks(ctx), options)
};
return {
...taskOptions,
task: () => this.newListr(tasks, options)
};
}
async run(tasks, options) {
options = {
...this.options,
...options
};
const task = this.newListr(tasks, options);
const ctx = await task.run();
this.errors.push(...task.errors);
return ctx;
}
};
//#endregion
export { Manager };