Files
paseo/packages/server/scripts/dev-runner.ts
2026-04-22 10:52:19 +07:00

46 lines
1.3 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));
const inspectArg = process.env.PASEO_NODE_INSPECT ?? "--inspect";
const inspectArgs =
inspectArg === "0" || inspectArg === "false" || inspectArg === "off" ? [] : [inspectArg];
// 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,
[
...inspectArgs,
"--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);