MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / waitForReadyPort

Function waitForReadyPort

apps/desktop/scripts/smoke-sidecar.ts:244–285  ·  view source on GitHub ↗
(proc: Subprocess<"ignore", "pipe", "pipe">)

Source from the content-addressed store, hash-verified

242};
243
244const waitForReadyPort = (proc: Subprocess<"ignore", "pipe", "pipe">): Promise<number> =>
245 // oxlint-disable-next-line executor/no-promise-reject -- boundary: standalone build-time smoke harness, no Effect runtime
246 new Promise((resolveReady, rejectReady) => {
247 const deadline = setTimeout(() => {
248 // oxlint-disable-next-line executor/no-promise-reject, executor/no-error-constructor -- boundary: standalone smoke harness reporting a build-time timeout
249 rejectReady(new Error(`daemon did not announce ready within ${READY_TIMEOUT_MS}ms`));
250 }, READY_TIMEOUT_MS);
251
252 let stdoutBuf = "";
253 const decoder = new TextDecoder();
254 const reader = proc.stdout.getReader();
255
256 const stderrReader = proc.stderr.getReader();
257 void (async () => {
258 while (true) {
259 const { value, done } = await stderrReader.read();
260 if (done) return;
261 process.stderr.write(`[executor-stderr] ${decoder.decode(value)}`);
262 }
263 })();
264
265 void (async () => {
266 while (true) {
267 const { value, done } = await reader.read();
268 if (done) {
269 clearTimeout(deadline);
270 // oxlint-disable-next-line executor/no-promise-reject, executor/no-error-constructor -- boundary: standalone smoke harness, stdout-closed surfaced as rejection
271 rejectReady(new Error("daemon stdout closed before ready"));
272 return;
273 }
274 const chunk = decoder.decode(value);
275 process.stdout.write(`[executor-stdout] ${chunk}`);
276 stdoutBuf += chunk;
277 const match = /Daemon ready on http:\/\/(?:\[[^\]]+\]|[^:\s]+):(\d+)/.exec(stdoutBuf);
278 if (match) {
279 clearTimeout(deadline);
280 resolveReady(parseInt(match[1]!, 10));
281 return;
282 }
283 }
284 })();
285 });
286
287const completePausedResult = async (
288 client: Client,

Callers 1

mainFunction · 0.85

Calls 2

getReaderMethod · 0.80
execMethod · 0.80

Tested by

no test coverage detected