UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

32 lines (31 loc) • 1.17 kB
//#region src/infra/abort-signal.ts function createAbortError(message, options) { const error = new Error(message, options); error.name = "AbortError"; return error; } function isAbortError(error) { if (!error || typeof error !== "object") return false; try { if (("name" in error ? String(error.name) : "") === "AbortError") return true; return ("message" in error && typeof error.message === "string" ? error.message : "") === "This operation was aborted"; } catch { return false; } } function racePromiseWithAbortSignal(promise, signal) { if (!signal) return promise; const abortError = () => createAbortError("Operation aborted", { cause: signal.reason }); if (signal.aborted) return Promise.race([Promise.reject(abortError()), promise]); let onAbort; const aborted = new Promise((_, reject) => { onAbort = () => reject(abortError()); signal.addEventListener("abort", onAbort, { once: true }); if (signal.aborted) onAbort(); }); return Promise.race([promise, aborted]).finally(() => { signal.removeEventListener("abort", onAbort); }); } //#endregion export { isAbortError as n, racePromiseWithAbortSignal as r, createAbortError as t };