import { spawn } from "node:child_process"; import { existsSync } from "node:fs"; if (existsSync(".env.local")) process.loadEnvFile(".env.local"); const dev = process.argv[2] === "dev"; const children = []; let stopping = false; function run(args) { const c = spawn(process.execPath, args, { stdio: "inherit", env: process.env, }); children.push(c); c.on("exit", (code) => { if (!stopping) { console.error( `MineGeo process exited (${code}). Shutting down companion process.`, ); stop(code ?? 1); } }); return c; } function stop(code = 0) { if (stopping) return; stopping = true; for (const c of children) c.kill("SIGTERM"); setTimeout(() => process.exit(code), 500).unref(); } process.on("SIGINT", () => stop()); process.on("SIGTERM", () => stop()); run([ "node_modules/next/dist/bin/next", dev ? "dev" : "start", "--hostname", process.env.MINEGEO_HOST || "127.0.0.1", ]); const workerHeap = Number(process.env.MINEGEO_WORKER_HEAP_MB || 4096); if (!Number.isInteger(workerHeap) || workerHeap < 512 || workerHeap > 32768) { console.error("MINEGEO_WORKER_HEAP_MB must be an integer between 512 and 32768."); stop(1); } else { run([`--max-old-space-size=${workerHeap}`, "--import", "tsx", "worker/main.ts"]); }