{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["import { _getAbortReason, _isAbortSignal } from \"../_abort/index.ts\";\n\nexport type TWaitOptions = {\n  signal?: AbortSignal | null;\n};\n\nexport type TWaitArgs = Parameters<typeof wait>;\n\r\nexport type TWaitReturn = ReturnType<typeof wait>;\r\n\r\n/**\r\n * Gets a `Promise` that resolves after specific time\r\n * @param {number} [ms=0] delay in ms\r\n * @param {TWaitOptions} [options={}] Optional cancellation signal\n * @returns {Promise<void>}\n * @throws {TypeError} wait: ms must be a non-negative finite number\n * @throws {TypeError} wait: options are invalid\n * @example\r\n * // How to sleep/delay in JS?\r\n * wait(3000).finally(() => {\n *   console.log(\"Runs after 3 sec!\");\n * })\n * @example\n * // Delay the next step in an async animation sequence\n * await wait(200);\n * element.classList.add(\"is-visible\");\n * @example\n * // Cancel a pending delay during component cleanup\n * const lifecycle = new AbortController();\n * await wait(1_000, { signal: lifecycle.signal });\n * lifecycle.abort();\n */\nexport const wait = (ms: number = 0, options: TWaitOptions = {}): Promise<void> => {\n  if (typeof ms !== \"number\" || !Number.isFinite(ms) || ms < 0) {\n    throw new TypeError(\"wait: ms must be a non-negative finite number\");\n  }\n  if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n    throw new TypeError(\"wait: options must be a plain object\");\n  }\n  const { signal = null } = options;\n  if (signal !== null && !_isAbortSignal(signal)) {\n    throw new TypeError(\"wait: signal must be an AbortSignal or null\");\n  }\n  if (signal?.aborted) {\n    return Promise.reject(_getAbortReason(signal));\n  }\n\n  return new Promise<void>((resolve, reject) => {\n    const finish = (): void => {\n      signal?.removeEventListener(\"abort\", abort);\n      resolve();\n    };\n    const timer = setTimeout(finish, ms);\n    const abort = (): void => {\n      clearTimeout(timer);\n      signal?.removeEventListener(\"abort\", abort);\n      reject(signal ? _getAbortReason(signal) : undefined);\n    };\n    signal?.addEventListener(\"abort\", abort, { once: true });\n  });\n};\n"],"names":["wait","ms","options","Number","isFinite","TypeError","Array","isArray","signal","_isAbortSignal","aborted","Promise","reject","_getAbortReason","resolve","finish","removeEventListener","abort","timer","setTimeout","clearTimeout","undefined","addEventListener","once"],"mappings":"gEAgCO,MAAMA,KAAO,CAACC,GAAa,EAAGC,QAAwB,CAAA,KAC3D,UAAWD,KAAO,WAAaE,OAAOC,SAASH,KAAOA,GAAK,EACzD,MAAM,IAAII,UAAU,iDAEtB,IAAKH,gBAAkBA,UAAY,UAAYI,MAAMC,QAAQL,SAC3D,MAAM,IAAIG,UAAU,wCAEtB,MAAMG,OAAEA,OAAS,MAASN,QAC1B,GAAIM,SAAW,OAASC,eAAeD,QACrC,MAAM,IAAIH,UAAU,+CAEtB,GAAIG,QAAQE,QACV,OAAOC,QAAQC,OAAOC,gBAAgBL,SAGxC,OAAO,IAAIG,QAAc,CAACG,QAASF,UACjC,MAAMG,OAAS,KACbP,QAAQQ,oBAAoB,QAASC,OACrCH,WAEF,MAAMI,MAAQC,WAAWJ,OAAQd,IACjC,MAAMgB,MAAQ,KACZG,aAAaF,OACbV,QAAQQ,oBAAoB,QAASC,OACrCL,OAAOJ,OAASK,gBAAgBL,aAAUa,IAE5Cb,QAAQc,iBAAiB,QAASL,MAAO,CAAEM,KAAM"}