/** * Races an operation against an abort signal. * * @param operation - The promise to await * @param signal - The signal that can abort the operation * @returns The operation's fulfilled value, or rejects with an `AbortError` if the signal aborts first */ export function awaitWithAbort(operation: Promise, signal: AbortSignal): Promise { return new Promise((resolve, reject) => { let settled = false; const finish = (callback: () => void): void => { if (settled) return; settled = true; signal.removeEventListener("abort", abort); callback(); }; const abort = (): void => { const error = new Error("Operation aborted."); error.name = "AbortError"; finish(() => reject(error)); }; operation.then( (value) => finish(() => resolve(value)), (error) => finish(() => reject(error)), ); if (signal.aborted) abort(); else signal.addEventListener("abort", abort, { once: true }); }); }