Lines 93-133javascript
93 if (isAlive && !isAlive()) return false;
94 if (await reachable(base, readyPath)) return true;
95 await new Promise((r) => setTimeout(r, 1500));
101 * Start a managed dev server from a normalized `server` config. Returns
102 * { base, port, stop(), restarts() }.
105 * @param {object} o.server normalized server config (see normalizeServer)
106 * @param {string} o.root config root (cwd is resolved relative to it)
107 * @param {(m:string)=>void} [o.log]
109export async function startManagedServer({ server, root, log = () => {} }) {
110 const cfg = normalizeServer(server);
111 if (!cfg) throw new Error("managed server: no `server.command` configured");
112 const cwd = path.resolve(root, cfg.cwd);
113 const port = cfg.port > 0 ? cfg.port : await pickPort(cfg.portBase);
114 const base = `http://localhost:${port}`;
120 SCREENMAP_BASE: "", // never let an inherited override redirect the child
122 if (cfg.distDirEnv) childEnv[cfg.distDirEnv] = cfg.distDir;
125 log(`● managed server: prepare — ${Array.isArray(cfg.prepare) ? cfg.prepare.join(" ") : cfg.prepare}`);
126 const pre = Array.isArray(cfg.prepare) ? cfg.prepare : String(cfg.prepare).trim().split(/\s+/);
127 const r = spawnSync(pre[0], pre.slice(1), { cwd, env: childEnv, stdio: "inherit" });
128 if (r.status !== 0) throw new Error(`managed server: prepare step failed (exit ${r.status})`);
HighSame File Env Network Execution
A single source file combines environment access, network access, and code or shell execution; review context before blocking.
src/server.mjsView on unpkg · L113 131 const argv = cfg.portFlag ? [...cfg.command.slice(1), cfg.portFlag, String(port)] : cfg.command.slice(1);
132 log(`● managed dev server`);
133 log(` command: ${cfg.command[0]} ${argv.join(" ")} (cwd ${path.relative(root, cwd) || "."})`);