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", ]); run(["--import", "tsx", "worker/main.ts"]);