singularity-forge/scripts/dev-server.js

72 lines
1.5 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
import { spawn, spawnSync } from "node:child_process";
import { resolve } from "node:path";
const __dirname = import.meta.dirname;
const root = resolve(__dirname, "..");
const sourceBinPath = resolve(root, "bin", "sf-from-source");
const ensureResourcesPath = resolve(
root,
"scripts",
"ensure-source-resources.cjs",
);
const daemonCliPath = resolve(root, "packages", "daemon", "src", "cli-dev.ts");
const resolveTsPath = resolve(
root,
"src",
"resources",
"extensions",
"sf",
"tests",
"resolve-ts.mjs",
);
const resourceBuild = spawnSync(process.execPath, [ensureResourcesPath], {
cwd: root,
stdio: "inherit",
env: process.env,
});
if (resourceBuild.status !== 0) {
process.exit(resourceBuild.status ?? 1);
}
const child = spawn(
process.execPath,
[
"--import",
resolveTsPath,
"--experimental-strip-types",
"--no-warnings",
daemonCliPath,
...process.argv.slice(2),
],
{
cwd: process.cwd(),
stdio: "inherit",
env: {
...process.env,
SF_SOURCE_ROOT: process.env.SF_SOURCE_ROOT || root,
SF_RUNTIME_SOURCE_ROOT: process.env.SF_RUNTIME_SOURCE_ROOT || root,
SF_BIN_PATH: process.env.SF_BIN_PATH || resolve(root, "dist", "loader.js"),
SF_CLI_PATH: process.env.SF_CLI_PATH || sourceBinPath,
},
},
);
child.on("error", (error) => {
console.error(
`[forge] Failed to launch local dev server: ${error instanceof Error ? error.message : String(error)}`,
);
process.exit(1);
});
child.on("exit", (code, signal) => {
if (signal) {
process.kill(process.pid, signal);
return;
}
process.exit(code ?? 0);
});