Files
paseo/packages/server/scripts/dev-runner.ts
Mohamed Boudra 73b0b60bdd fix(server): block dev-runner on Ctrl-C until supervisor finishes shutting down
The spawnSync parent had no signal handlers, so SIGINT killed it immediately
while the supervisor kept running in the background. The shell prompt came
back before the daemon had actually drained. Install no-op SIGINT/SIGTERM
handlers so spawnSync waits for the supervisor's graceful exit.
2026-04-19 14:26:51 +07:00

43 lines
1.1 KiB
TypeScript

import { spawnSync } from "node:child_process";
import { fileURLToPath } from "url";
import dotenv from "dotenv";
dotenv.config({
path: fileURLToPath(new URL("../.env", import.meta.url)),
quiet: true,
});
const daemonRunnerEntry = fileURLToPath(new URL("./supervisor-entrypoint.ts", import.meta.url));
// The supervisor handles SIGINT/SIGTERM itself and needs time to drain the
// worker gracefully. Ignore them here so spawnSync blocks until the supervisor
// finishes shutting down, instead of the parent dying on Ctrl-C and releasing
// the shell while the daemon is still logging.
process.on("SIGINT", () => {});
process.on("SIGTERM", () => {});
const result = spawnSync(
process.execPath,
[
"--inspect",
"--heapsnapshot-near-heap-limit=3",
"--max-old-space-size=3072",
"--report-on-fatalerror",
"--report-directory=/tmp/paseo-reports",
...process.execArgv,
daemonRunnerEntry,
"--dev",
...process.argv.slice(2),
],
{
stdio: "inherit",
env: process.env,
},
);
if (result.error) {
throw result.error;
}
process.exit(result.status ?? 1);