{"version":3,"file":"signal.cjs","names":["promise: Promise<T>","signal?: AbortSignal","listener: () => void"],"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);\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  // eslint-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,eACpBA,SACAC,QACY;AACZ,KAAI,WAAW,OACb,QAAO;CAET,IAAIC;AACJ,QAAO,QAAQ,KAAK,CAClB,QAAQ,MAAS,CAAC,QAAQ;AACxB,MAAI,CAAC,QAAQ,QACX,OAAM;MAEN,QAAO;CAEV,EAAC,EACF,IAAI,QAAe,CAAC,GAAG,WAAW;EAChC,WAAW,MAAM;GACf,OAAO,oBAAoB,OAAO,CAAC;EACpC;EACD,OAAO,iBAAiB,SAAS,SAAS;AAE1C,MAAI,OAAO,SACT,OAAO,oBAAoB,OAAO,CAAC;CAEtC,EACF,EAAC,CAAC,QAAQ,MAAM,OAAO,oBAAoB,SAAS,SAAS,CAAC;AAChE;;;;;;;;AASD,SAAgB,oBAAoBD,QAAsB;AAExD,KAAI,QAAQ,kBAAkB,MAC5B,QAAO,OAAO;AAGhB,KAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,IAAI,MAAM,OAAO;AAG1B,wBAAO,IAAI,MAAM;AAClB"}