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);
});