islandflow/apps/web/scripts/dev.ts

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();