import { fork } from "child_process";
import invariant from "invariant";
import process from "process";
import * as readline from "readline";
import { hideBin } from "yargs/helpers";
readline.emitKeypressEvents(process.stdin);
if (process.stdin.isTTY) {
process.stdin.setRawMode(true);
}
process.stdin.on("keypress", function (_, key) {
if (key && key.name === "c" && key.ctrl) {
if (childProc) {
console.log("Interrupted!!");
childProc.kill("SIGINT");
childProc.unref();
process.exit(-1);
}
}
});
const childProc = fork(require.resolve("./runner.js"), hideBin(process.argv), {
stdio: ["pipe", "pipe", "pipe", "ipc"],
env: { ...process.env, FORCE_COLOR: "true" },
});
invariant(
childProc.stdin && childProc.stdout && childProc.stderr,
"Expected forked process to have piped stdio"
);
process.stdin.pipe(childProc.stdin);
childProc.stdout.pipe(process.stdout);
childProc.stderr.pipe(process.stderr);
childProc.on("exit", (code) => {
process.exit(code ?? -1);
});