Spaces:
Sleeping
Sleeping
| import { spawn } from "node:child_process"; | |
| import path from "node:path"; | |
| const rootDir = path.resolve(import.meta.dirname, ".."); | |
| const isWindows = process.platform === "win32"; | |
| const pnpmExec = | |
| process.env.npm_execpath && process.env.npm_execpath.toLowerCase().includes("pnpm") | |
| ? process.env.npm_execpath | |
| : null; | |
| const nodeBin = process.execPath; | |
| function run(command, args, options = {}) { | |
| return new Promise((resolve, reject) => { | |
| const child = spawn(command, args, { | |
| cwd: rootDir, | |
| stdio: "inherit", | |
| shell: false, | |
| ...options, | |
| }); | |
| child.on("error", reject); | |
| child.on("exit", (code, signal) => { | |
| if (signal) { | |
| reject(new Error(`Process terminated by signal ${signal}`)); | |
| return; | |
| } | |
| if (code !== 0) { | |
| reject(new Error(`Process exited with code ${code}`)); | |
| return; | |
| } | |
| resolve(); | |
| }); | |
| }); | |
| } | |
| if (pnpmExec) { | |
| await run(nodeBin, [pnpmExec, "--filter", "@workspace/api-server", "run", "build"]); | |
| } else { | |
| await run(isWindows ? "pnpm.cmd" : "pnpm", ["--filter", "@workspace/api-server", "run", "build"]); | |
| } | |
| const server = spawn( | |
| nodeBin, | |
| [path.join("artifacts", "api-server", "dist", "index.mjs")], | |
| { | |
| cwd: rootDir, | |
| stdio: "inherit", | |
| env: { | |
| ...process.env, | |
| NODE_ENV: process.env.NODE_ENV ?? "development", | |
| PORT: process.env.API_PORT ?? process.env.PORT ?? "3001", | |
| }, | |
| shell: false, | |
| }, | |
| ); | |
| server.on("exit", (code) => { | |
| process.exit(code ?? 0); | |
| }); | |
| for (const signal of ["SIGINT", "SIGTERM"]) { | |
| process.on(signal, () => { | |
| server.kill(signal); | |
| }); | |
| } | |