72 lines
1.5 KiB
JavaScript
72 lines
1.5 KiB
JavaScript
|
|
#!/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);
|
||
|
|
});
|