presenton/app/servers.ts
2025-05-10 19:57:24 +05:45

76 lines
1.8 KiB
TypeScript

import { spawn, exec } from "child_process";
import util from "util";
import { localhost } from "./constants";
const execAsync = util.promisify(exec);
export async function startFastApiServer(
directory: string,
port: number,
env: FastApiEnv,
isDev: boolean,
) {
// Start FastAPI server
const startCommand = isDev ? [
".venv/bin/python",
["server.py", "--port", port.toString()],
] : [
"./fastapi", ["--port", port.toString()],
];
const fastApiProcess = spawn(
startCommand[0] as string,
startCommand[1] as string[],
{
cwd: directory,
stdio: ["inherit", "pipe", "pipe"],
env: { ...process.env, ...env },
}
);
fastApiProcess.stdout.on("data", (data: any) => {
console.log(`FastAPI: ${data}`);
});
fastApiProcess.stderr.on("data", (data: any) => {
console.error(`FastAPI Error: ${data}`);
});
// Wait for FastAPI server to start
await execAsync(`npx wait-on ${localhost}:${port}/docs`);
return fastApiProcess;
}
export async function startNextJsServer(
directory: string,
port: number,
env: NextJsEnv,
isDev: boolean,
) {
// Start NextJS server
const startCommand = isDev ? [
"npm",
["run", "dev", "--", "-p", port.toString()],
] : [
"npx",
["next", "start", "--", "-p", port.toString()],
];
const nextjsProcess = spawn(
startCommand[0] as string,
startCommand[1] as string[],
{
cwd: directory,
stdio: ["inherit", "pipe", "pipe"],
env: { ...process.env, ...env },
}
);
nextjsProcess.stdout.on("data", (data: any) => {
console.log(`NextJS: ${data}`);
});
nextjsProcess.stderr.on("data", (data: any) => {
console.error(`NextJS Error: ${data}`);
});
// Wait for NextJS server to start
await execAsync(`npx wait-on ${localhost}:${port}`);
return nextjsProcess;
}