export function waitWithSignal( promise: Promise, signal?: AbortSignal, ): Promise { if (!signal) return promise; if (signal.aborted) return Promise.reject(signal.reason); return new Promise((resolve, reject) => { const cleanup = (): void => signal.removeEventListener("abort", onAbort); const onAbort = (): void => { cleanup(); reject(signal.reason); }; signal.addEventListener("abort", onAbort, { once: true }); promise.then( (value) => { cleanup(); resolve(value); }, (error: unknown) => { cleanup(); reject(error); }, ); }); }