UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

39 lines (38 loc) • 1.41 kB
export function composeCallSignal(runSignal, callSignal) { return callSignal !== undefined ? AbortSignal.any([runSignal, callSignal]) : runSignal; } export function raceSettlementAgainstSignal(p, signal) { const settled = p.then((value) => ({ tag: "value", value }), (error) => ({ tag: "threw", error })); if (signal.aborted) return Promise.resolve({ tag: "aborted" }); return new Promise((resolve) => { let done = false; const finish = (r) => { if (done) return; done = true; signal.removeEventListener("abort", onAbortEvent); resolve(r); }; const onAbortEvent = () => finish({ tag: "aborted" }); signal.addEventListener("abort", onAbortEvent, { once: true }); void settled.then(finish); }); } export function raceAbort(p, signal, onAbort) { if (signal.aborted) return Promise.resolve(onAbort()); return new Promise((resolve) => { let settled = false; const finish = (v) => { if (settled) return; settled = true; signal.removeEventListener("abort", onAbortEvent); resolve(v); }; const onAbortEvent = () => finish(onAbort()); signal.addEventListener("abort", onAbortEvent, { once: true }); p.then(finish, () => finish(onAbort())); }); }