Files
paseo/packages/server/scripts/dev-runner.ts
Mohamed Boudra b8f056060f feat(server): migrate all logging to pino
- Add pino with pino-pretty for structured logging
- Create root logger in index.ts with child loggers per module
- Support log level via PASEO_LOG env var and config.json
- Support log format (pretty/json) via PASEO_LOG_FORMAT and config.json
- Replace all console.* in runtime code with appropriate log levels
- Scripts use process.stdout/stderr for output
- Error logging uses correct pattern: logger.error({ err }, msg)
2026-01-15 17:16:01 +07:00

64 lines
1.6 KiB
TypeScript

import { fork, type ChildProcess } from "child_process";
import { fileURLToPath } from "url";
import path from "path";
const serverEntry = fileURLToPath(
new URL("../src/server/index.ts", import.meta.url)
);
let child: ChildProcess | null = null;
let restarting = false;
function spawnServer() {
child = fork(serverEntry, process.argv.slice(2), {
stdio: "inherit",
env: process.env,
execArgv: ["--import", "tsx"],
});
child.on("message", (msg: any) => {
if (msg?.type === "paseo:restart") {
restartServer();
}
});
child.on("exit", (code, signal) => {
const exitDescriptor =
signal ?? (typeof code === "number" ? `code ${code}` : "unknown");
// Restart on: explicit restart request, or any non-zero exit (crash)
if (restarting || (code !== 0 && code !== null)) {
restarting = false;
process.stderr.write(`[DevRunner] Server exited (${exitDescriptor}). Restarting...\n`);
spawnServer();
return;
}
process.stderr.write(`[DevRunner] Server exited (${exitDescriptor}). Shutting down.\n`);
process.exit(0);
});
}
function restartServer() {
if (!child || restarting) {
return;
}
restarting = true;
process.stderr.write("[DevRunner] Restart requested. Stopping current server...\n");
child.kill("SIGTERM");
}
function forwardSignal(signal: NodeJS.Signals) {
if (!child) {
process.exit(0);
}
child.kill(signal);
}
process.on("SIGINT", () => forwardSignal("SIGINT"));
process.on("SIGTERM", () => forwardSignal("SIGTERM"));
process.stdout.write("[DevRunner] Starting server with tsx (explicit restarts only)\n");
spawnServer();