{"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;CACZ,IAAI,WAAW,KAAA,GACb,OAAO;CAET,IAAI;CACJ,OAAO,QAAQ,KAAK,CAClB,QAAQ,OAAU,QAAQ;EACxB,IAAI,CAAC,QAAQ,SACX,MAAM;OAEN;CAEJ,CAAC,GACD,IAAI,SAAgB,GAAG,WAAW;EAChC,iBAAiB;GACf,OAAO,oBAAoB,MAAM,CAAC;EACpC;EACA,OAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,KAAK,CAAC;EAEzD,IAAI,OAAO,SACT,OAAO,oBAAoB,MAAM,CAAC;CAEtC,CAAC,CACH,CAAC,CAAC,CAAC,cAAc,OAAO,oBAAoB,SAAS,QAAQ,CAAC;AAChE;;;;;;;;AASA,SAAgB,oBAAoB,QAAsB;CAExD,IAAI,QAAQ,kBAAkB,OAC5B,OAAO,OAAO;CAGhB,IAAI,OAAO,QAAQ,WAAW,UAC5B,OAAO,IAAI,MAAM,OAAO,MAAM;CAGhC,uBAAO,IAAI,MAAM,SAAS;AAC5B"}