import { spawn } from "node:child_process"; import { existsSync } from "node:fs"; import { validateRuntime } from "./runtime-config.mjs"; if (existsSync(".env.local")) process.loadEnvFile(".env.local"); const dev = process.argv[2] === "dev"; const { workerHeap } = validateRuntime(process.env, { production: !dev }); const children = []; let stopping = false; function run(args) { const c = spawn(process.execPath, args, { stdio: "inherit", env: process.env, windowsHide: true, }); 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", ]); run([ `--max-old-space-size=${workerHeap}`, "--import", "tsx", "worker/main.ts", ]);