chore: checkpoint Boss app v2.5.11
This commit is contained in:
@@ -590,22 +590,58 @@ export async function discoverCodexProjectCandidatesInWorker(options = {}) {
|
||||
options,
|
||||
},
|
||||
});
|
||||
const timeoutMs = Number(options.timeoutMs);
|
||||
const effectiveTimeoutMs = Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : 0;
|
||||
let settled = false;
|
||||
let timeout;
|
||||
|
||||
const cleanup = () => {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
};
|
||||
|
||||
const resolveOnce = (value) => {
|
||||
if (settled) {
|
||||
return;
|
||||
}
|
||||
settled = true;
|
||||
cleanup();
|
||||
resolvePromise(value);
|
||||
};
|
||||
|
||||
const rejectOnce = (error) => {
|
||||
if (settled) {
|
||||
return;
|
||||
}
|
||||
settled = true;
|
||||
cleanup();
|
||||
rejectPromise(error);
|
||||
};
|
||||
|
||||
if (effectiveTimeoutMs > 0) {
|
||||
timeout = setTimeout(() => {
|
||||
rejectOnce(new Error("DISCOVERY_WORKER_TIMEOUT"));
|
||||
worker.terminate().catch(() => null);
|
||||
}, effectiveTimeoutMs);
|
||||
}
|
||||
|
||||
worker.once("message", (payload) => {
|
||||
if (payload?.ok) {
|
||||
resolvePromise(payload.result);
|
||||
resolveOnce(payload.result);
|
||||
return;
|
||||
}
|
||||
rejectPromise(new Error(payload?.error ?? "DISCOVERY_WORKER_FAILED"));
|
||||
rejectOnce(new Error(payload?.error ?? "DISCOVERY_WORKER_FAILED"));
|
||||
});
|
||||
|
||||
worker.once("error", rejectPromise);
|
||||
worker.once("error", rejectOnce);
|
||||
|
||||
worker.once("exit", (code) => {
|
||||
if (code === 0) {
|
||||
cleanup();
|
||||
return;
|
||||
}
|
||||
rejectPromise(new Error(`DISCOVERY_WORKER_EXIT_${code}`));
|
||||
rejectOnce(new Error(`DISCOVERY_WORKER_EXIT_${code}`));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user