66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import path from 'node:path';
|
|
import process from 'node:process';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
import { spawnWithWindowsShell } from './lib/windows-shell-spawn.mjs';
|
|
|
|
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
|
const repoRoot = path.resolve(scriptDir, '..');
|
|
const standalonePort = process.env.STANDALONE_PORT?.trim() || '3456';
|
|
const webPort = process.env.WEB_PORT?.trim() || '5174';
|
|
const corsOrigin =
|
|
process.env.CORS_ORIGIN?.trim() ||
|
|
`http://127.0.0.1:${webPort},http://localhost:${webPort}`;
|
|
|
|
function spawnProcess(cmd, args, env) {
|
|
return spawnWithWindowsShell(cmd, args, {
|
|
cwd: repoRoot,
|
|
env: { ...process.env, ...env },
|
|
stdio: 'inherit',
|
|
});
|
|
}
|
|
|
|
const backend = spawnProcess('pnpm', ['exec', 'tsx', 'src/main/standalone.ts'], {
|
|
HOST: process.env.HOST?.trim() || '127.0.0.1',
|
|
PORT: standalonePort,
|
|
CORS_ORIGIN: corsOrigin,
|
|
});
|
|
|
|
const frontend = spawnProcess(
|
|
'pnpm',
|
|
['exec', 'vite', '--config', 'vite.web.config.ts', '--host', '127.0.0.1', '--port', webPort],
|
|
{
|
|
VITE_STANDALONE_PORT: standalonePort,
|
|
VITE_WEB_PORT: webPort,
|
|
}
|
|
);
|
|
|
|
let shuttingDown = false;
|
|
|
|
function terminateChildren(signal = 'SIGTERM') {
|
|
if (shuttingDown) {
|
|
return;
|
|
}
|
|
|
|
shuttingDown = true;
|
|
backend.kill(signal);
|
|
frontend.kill(signal);
|
|
}
|
|
|
|
backend.on('exit', (code, signal) => {
|
|
terminateChildren(signal ?? undefined);
|
|
process.exitCode = code ?? (signal ? 1 : 0);
|
|
});
|
|
|
|
frontend.on('exit', (code, signal) => {
|
|
terminateChildren(signal ?? undefined);
|
|
process.exitCode = code ?? (signal ? 1 : 0);
|
|
});
|
|
|
|
process.on('SIGINT', () => terminateChildren('SIGINT'));
|
|
process.on('SIGTERM', () => terminateChildren('SIGTERM'));
|
|
|
|
console.log(`Starting standalone backend on http://127.0.0.1:${standalonePort}`);
|
|
console.log(`Starting browser dev server on http://127.0.0.1:${webPort}`);
|