@tsed/cli-core
Version:
Build your CLI with TypeScript and Decorators
41 lines (40 loc) • 1.29 kB
JavaScript
// @ts-ignore
import { isFunction } from "@tsed/core";
import { DefaultRenderer, Listr, ListrLogger, VerboseRenderer } from "listr2";
import { getLogger } from "./createInjector.js";
class CustomLogger extends ListrLogger {
log(level, message, options) {
if (["FAILED"].includes(level)) {
getLogger()?.error(`[${level}]`, message);
}
else {
getLogger()?.info(`[${level}]`, message);
}
}
}
function getOptions({ bindLogger = true, ...ctx }) {
const useRawRenderer = !(!ctx.verbose && !process.env.CI);
return {
silentRendererCondition: process.env.NODE_ENV === "test",
renderer: useRawRenderer ? VerboseRenderer : DefaultRenderer,
rendererOptions: useRawRenderer && bindLogger
? {
logger: new CustomLogger()
}
: undefined
};
}
export function createTasks(tasks, ctx) {
return new Listr(tasks, getOptions(ctx));
}
export function createSubTasks(tasks, opts) {
return async (ctx, task) => {
if (isFunction(tasks)) {
tasks = await tasks(ctx, task);
}
return task.newListr(tasks, getOptions(opts));
};
}
export function createTasksRunner(tasks, ctx) {
return createTasks(tasks, ctx).run(ctx);
}