48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { rm } from "node:fs/promises";
|
|
|
|
const DEFAULT_REMOTE_API_URL = "https://api.flow.deltaisland.io";
|
|
|
|
const run = async () => {
|
|
const port = 3000;
|
|
const distDir = ".next-dev";
|
|
console.log(`[web] starting Next.js dev server on port ${port}`);
|
|
console.log(
|
|
`[web] API origin: ${Bun.env.NEXT_PUBLIC_API_URL ?? DEFAULT_REMOTE_API_URL}${
|
|
Bun.env.NEXT_PUBLIC_API_URL ? " (from NEXT_PUBLIC_API_URL)" : " (default)"
|
|
}`
|
|
);
|
|
|
|
const path = Bun.env.PATH ?? "";
|
|
const cwd = `${import.meta.dir}/..`;
|
|
const distPath = `${cwd}/${distDir}`;
|
|
|
|
// Clear potentially stale dev artifacts from interrupted prior runs.
|
|
await rm(distPath, { recursive: true, force: true });
|
|
console.log(`[web] cleared stale Next.js dev artifacts at ${distDir}`);
|
|
|
|
const child = Bun.spawn(["next", "dev", "-p", String(port)], {
|
|
cwd,
|
|
stdin: "inherit",
|
|
stdout: "inherit",
|
|
stderr: "inherit",
|
|
env: {
|
|
...Bun.env,
|
|
PATH: `${cwd}/node_modules/.bin:${path}`,
|
|
NEXT_PUBLIC_API_URL: Bun.env.NEXT_PUBLIC_API_URL ?? DEFAULT_REMOTE_API_URL,
|
|
PORT: String(port)
|
|
}
|
|
});
|
|
|
|
const shutdown = () => {
|
|
child.kill();
|
|
process.exit(0);
|
|
};
|
|
|
|
process.on("SIGINT", shutdown);
|
|
process.on("SIGTERM", shutdown);
|
|
|
|
const code = await child.exited;
|
|
process.exit(code ?? 0);
|
|
};
|
|
|
|
await run();
|