{"version":3,"file":"signal.cjs","names":[],"sources":["../../src/utils/signal.ts"],"sourcesContent":["/**\n * Race a promise with an abort signal. If the signal is aborted, the promise will\n * be rejected with the error from the signal. If the promise is rejected, the signal will be aborted.\n *\n * @param promise - The promise to race.\n * @param signal - The abort signal.\n * @returns The result of the promise.\n */\nexport async function raceWithSignal<T>(\n  promise: Promise<T>,\n  signal?: AbortSignal\n): Promise<T> {\n  if (signal === undefined) {\n    return promise;\n  }\n  let listener: () => void;\n  return Promise.race([\n    promise.catch<T>((err) => {\n      if (!signal?.aborted) {\n        throw err;\n      } else {\n        return undefined as T;\n      }\n    }),\n    new Promise<never>((_, reject) => {\n      listener = () => {\n        reject(getAbortSignalError(signal));\n      };\n      signal.addEventListener(\"abort\", listener, { once: true });\n      // Must be here inside the promise to avoid a race condition\n      if (signal.aborted) {\n        reject(getAbortSignalError(signal));\n      }\n    }),\n  ]).finally(() => signal.removeEventListener(\"abort\", listener));\n}\n\n/**\n * Get the error from an abort signal. Since you can set the reason to anything,\n * we have to do some type gymnastics to get a proper error message.\n *\n * @param signal - The abort signal.\n * @returns The error from the abort signal.\n */\nexport function getAbortSignalError(signal?: AbortSignal) {\n  // oxlint-disable-next-line no-instanceof/no-instanceof\n  if (signal?.reason instanceof Error) {\n    return signal.reason;\n  }\n\n  if (typeof signal?.reason === \"string\") {\n    return new Error(signal.reason);\n  }\n\n  return new Error(\"Aborted\");\n}\n"],"mappings":";;;;;;;;;AAQA,eAAsB,eACpB,SACA,QACY;AACZ,KAAI,WAAW,KAAA,EACb,QAAO;CAET,IAAI;AACJ,QAAO,QAAQ,KAAK,CAClB,QAAQ,OAAU,QAAQ;AACxB,MAAI,CAAC,QAAQ,QACX,OAAM;MAEN;GAEF,EACF,IAAI,SAAgB,GAAG,WAAW;AAChC,mBAAiB;AACf,UAAO,oBAAoB,OAAO,CAAC;;AAErC,SAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,MAAM,CAAC;AAE1D,MAAI,OAAO,QACT,QAAO,oBAAoB,OAAO,CAAC;GAErC,CACH,CAAC,CAAC,cAAc,OAAO,oBAAoB,SAAS,SAAS,CAAC;;;;;;;;;AAUjE,SAAgB,oBAAoB,QAAsB;AAExD,KAAI,QAAQ,kBAAkB,MAC5B,QAAO,OAAO;AAGhB,KAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,IAAI,MAAM,OAAO,OAAO;AAGjC,wBAAO,IAAI,MAAM,UAAU"}