@tobiastengler/create-relay-app
Version:
Easy configuration of Relay for existing projects
53 lines (52 loc) • 1.7 kB
JavaScript
import ora from "ora";
import { dim } from "../utils/cli.js";
import { TaskSkippedError } from "./TaskBase.js";
export class TaskRunner {
constructor(taskDefs) {
this.taskDefs = taskDefs;
}
async run() {
let hadError = false;
for (let i = 0; i < this.taskDefs.length; i++) {
const task = this.taskDefs[i];
if (!task || !task.isEnabled()) {
continue;
}
const spinner = ora(task.message);
task.onUpdateMessage = (msg) => (spinner.text = msg);
try {
spinner.start();
await task.run();
spinner.succeed();
}
catch (error) {
if (error instanceof TaskSkippedError) {
const reason = error.reason ? ": " + error.reason : "";
spinner.warn(spinner.text + " " + dim(`[Skipped${reason}]`));
continue;
}
let errorMsg = undefined;
if (!!error) {
if (typeof error === "string") {
errorMsg = error;
}
else if (error instanceof Error) {
errorMsg = error.message;
}
}
spinner.fail();
if (errorMsg) {
console.log();
console.log(" " + errorMsg);
console.log();
}
if (!hadError) {
hadError = true;
}
}
}
if (hadError) {
throw new Error();
}
}
}