{"version":3,"file":"timeout.mjs","names":[],"sources":["../../src/promise/timeout.ts"],"sourcesContent":["import { abortError, onAbort } from './abort';\n\n/**\n * Returns a promise that rejects if the given promise doesn't settle within the specified time.\n *\n * @template T - The type of the resolved value\n * @param promise - The promise to wrap with a timeout\n * @param ms - The timeout in milliseconds\n * @param message - The error message to use when timeout occurs (default: 'Promise timeout')\n * @param signal - Optional AbortSignal that rejects the timeout when aborted\n * @returns Returns a promise that resolves or rejects based on the original promise or timeout\n *\n * @example\n * try {\n *   const result = await timeout(fetchData(), 5000);\n * } catch (error) {\n *   console.log(error.message); // 'Promise timeout'\n * }\n *\n * @example\n * const result = await timeout(fetchData(), 5000, 'Request took too long');\n */\nexport function timeout<T>(\n  promise: Promise<T>,\n  ms: number,\n  message = 'Promise timeout',\n  signal?: AbortSignal,\n): Promise<T> {\n  if (signal?.aborted) {\n    return Promise.reject(abortError(signal));\n  }\n\n  return new Promise<T>((resolve, reject) => {\n    let settled = false;\n    let unlisten: () => void = () => undefined;\n\n    const finish = (cb: () => void) => {\n      if (settled) {\n        return;\n      }\n      settled = true;\n      clearTimeout(timer);\n      unlisten();\n      cb();\n    };\n\n    const timer = setTimeout(() => {\n      finish(() => {\n        reject(new Error(message));\n      });\n    }, ms);\n\n    if (signal) {\n      unlisten = onAbort(signal, () => {\n        finish(() => {\n          reject(abortError(signal));\n        });\n      });\n    }\n\n    promise.then(\n      (value) => {\n        finish(() => {\n          resolve(value);\n        });\n      },\n      (error: unknown) => {\n        finish(() => {\n          reject(error);\n        });\n      },\n    );\n  });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,QACd,SACA,IACA,UAAU,mBACV,QACY;CACZ,IAAI,QAAQ,SACV,OAAO,QAAQ,OAAO,WAAW,MAAM,CAAC;CAG1C,OAAO,IAAI,SAAY,SAAS,WAAW;EACzC,IAAI,UAAU;EACd,IAAI,iBAA6B,KAAA;EAEjC,MAAM,UAAU,OAAmB;GACjC,IAAI,SACF;GAEF,UAAU;GACV,aAAa,KAAK;GAClB,SAAS;GACT,GAAG;EACL;EAEA,MAAM,QAAQ,iBAAiB;GAC7B,aAAa;IACX,OAAO,IAAI,MAAM,OAAO,CAAC;GAC3B,CAAC;EACH,GAAG,EAAE;EAEL,IAAI,QACF,WAAW,QAAQ,cAAc;GAC/B,aAAa;IACX,OAAO,WAAW,MAAM,CAAC;GAC3B,CAAC;EACH,CAAC;EAGH,QAAQ,MACL,UAAU;GACT,aAAa;IACX,QAAQ,KAAK;GACf,CAAC;EACH,IACC,UAAmB;GAClB,aAAa;IACX,OAAO,KAAK;GACd,CAAC;EACH,CACF;CACF,CAAC;AACH"}