too
Version:
Combine multiple processes' Stdout/Stderr/SIGINT to keep them all foreground
35 lines (34 loc) • 1.18 kB
JavaScript
import { RESET, UNDERLINE } from "./colors.js";
export class Logger {
maxLabelWidth = 0;
}
export class DefaultLogger extends Logger {
verbose;
stdout;
stderr;
constructor(verbose = true, stdout = process.stdout, stderr = process.stderr) {
super();
this.verbose = verbose;
this.stdout = stdout;
this.stderr = stderr;
}
stage(stage) {
this.stdout.write(`\n✅ ${stage}\n`);
}
accept(label, color, oneliner) {
const padded = label.padEnd(this.maxLabelWidth);
this.stdout.write(`${color}[${padded}]${RESET} ${UNDERLINE}${oneliner.trim()}${RESET}\n`);
}
output(label, color, stdout, stderr) {
const padded = label.padEnd(this.maxLabelWidth);
if (stdout.length)
stdout.toString().trim().split("\n").map((line) => {
this.stdout.write(`${color}[${padded}]${RESET} ${line}\n`);
});
if (stderr.length)
stderr.toString().trim().split("\n").map((line) => {
this.stderr.write(`${color}[${padded}]${RESET} ${line}\n`);
});
}
}
// export class JsonRowsLogger implements Logger { }