mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-11 14:52:55 +01:00
Initial commit
Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com> Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com> Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com> Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com> Co-Authored-By: Johan <4934465+joolsus@users.noreply.github.com> Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com> Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
This commit is contained in:
82
scripts/utils/process.ts
Normal file
82
scripts/utils/process.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import { ChildProcess } from "child_process";
|
||||
|
||||
export enum ConsoleColor {
|
||||
Reset = "\x1b[0m",
|
||||
Bright = "\x1b[1m",
|
||||
Dim = "\x1b[2m",
|
||||
Underscore = "\x1b[4m",
|
||||
Blink = "\x1b[5m",
|
||||
Reverse = "\x1b[7m",
|
||||
Hidden = "\x1b[8m",
|
||||
|
||||
FgBlack = "\x1b[30m",
|
||||
FgRed = "\x1b[31m",
|
||||
FgGreen = "\x1b[32m",
|
||||
FgYellow = "\x1b[33m",
|
||||
FgBlue = "\x1b[34m",
|
||||
FgMagenta = "\x1b[35m",
|
||||
FgCyan = "\x1b[36m",
|
||||
FgWhite = "\x1b[37m",
|
||||
|
||||
BgBlack = "\x1b[40m",
|
||||
BgRed = "\x1b[41m",
|
||||
BgGreen = "\x1b[42m",
|
||||
BgYellow = "\x1b[43m",
|
||||
BgBlue = "\x1b[44m",
|
||||
BgMagenta = "\x1b[45m",
|
||||
BgCyan = "\x1b[46m",
|
||||
BgWhite = "\x1b[47m",
|
||||
}
|
||||
|
||||
export interface AttachStdioOptions {
|
||||
prefix?: string;
|
||||
color?: ConsoleColor;
|
||||
}
|
||||
|
||||
class OutputBuffer {
|
||||
private _buffer = "";
|
||||
|
||||
public exec(value: string): string[] {
|
||||
this._buffer += value;
|
||||
|
||||
const lines = this._buffer.split("\n");
|
||||
if (lines.length > 1) {
|
||||
const rows = lines.splice(0, lines.length - 1).map((line) => {
|
||||
return line.replaceAll("\x1Bc", ""); // Remove all clear screen codes
|
||||
});
|
||||
|
||||
this._buffer = lines.at(-1) as string;
|
||||
return rows;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
export function attachStdio(
|
||||
process: ChildProcess,
|
||||
{ prefix, color = ConsoleColor.FgCyan }: AttachStdioOptions
|
||||
) {
|
||||
const prefixText = `${color}${prefix}${ConsoleColor.Reset}:`;
|
||||
const output = new OutputBuffer();
|
||||
|
||||
process.stdout?.on("data", function (data) {
|
||||
const lines = output.exec(data.toString());
|
||||
lines.forEach((line) => {
|
||||
console.log(prefixText, line);
|
||||
});
|
||||
});
|
||||
|
||||
process.stderr?.on("data", function (data) {
|
||||
const lines = output.exec(data.toString());
|
||||
lines.forEach((line) => {
|
||||
console.log(prefixText, line);
|
||||
});
|
||||
});
|
||||
|
||||
process.on("exit", function (code) {
|
||||
console.log(prefixText, "process exited with code " + code?.toString());
|
||||
});
|
||||
|
||||
return process;
|
||||
}
|
||||
Reference in New Issue
Block a user