{
  "version": 3,
  "sources": ["../src/main.ts", "../src/polyfill.ts"],
  "sourcesContent": ["import {packageTracer} from '@alwatr/package-tracer';\nimport {parseDuration, type Duration} from '@alwatr/parse-duration';\n\n__dev_mode__: packageTracer.add(__package_name__, __package_version__);\n\nimport {requestAnimationFrame, requestIdleCallback} from './polyfill.js';\n\n/**\n * A utility module to help manage asynchronous operations and waiting for events or timeouts.\n */\nexport const delay = {\n  /**\n   * Delays execution for a specified duration (in milliseconds).\n   *\n   * @param duration - The duration to wait (in milliseconds). Use `0` to yield control to the event loop.\n   * @returns A Promise that resolves after the specified duration.\n   *\n   * @example\n   * ```typescript\n   * await delay.by('1m'); // Wait for 1 minute\n   * ```\n   */\n  by: (duration: Duration): Promise<void> =>\n    new Promise((resolve) => setTimeout(resolve, parseDuration(duration))),\n\n  /**\n   * Delays execution until the next animation frame.\n   *\n   * @returns A Promise that resolves with the current timestamp when the next animation frame is fired.\n   *\n   * @example\n   * ```typescript\n   * const timestamp = await delay.untilNextAnimationFrame();\n   * ```\n   */\n  untilNextAnimationFrame: (): Promise<DOMHighResTimeStamp> =>\n    new Promise((resolve) => requestAnimationFrame(resolve)),\n\n  /**\n   * Delays execution until the browser's idle period or the specified timeout.\n   *\n   * @param timeout - Optional timeout (in milliseconds) for the idle callback.\n   * @returns A Promise that resolves with the IdleDeadline object when the browser is idle or the timeout is reached.\n   *\n   * @example\n   * ```typescript\n   * const deadline = await delay.untilIdle();\n   * ```\n   */\n  untilIdle: (timeout?: Duration): Promise<IdleDeadline> =>\n    new Promise((resolve) => requestIdleCallback(resolve, timeout === undefined ? undefined : {\n      timeout: parseDuration(timeout)\n    })),\n\n  /**\n   * Delays execution until a specific DOM event occurs on an HTMLElement.\n   *\n   * @param element - The HTMLElement to listen for the event on.\n   * @param eventName - The name of the DOM event to wait for.\n   * @template T The event map type.\n   * @returns A Promise that resolves with the event object when the specified event occurs.\n   *\n   * @example\n   * ```typescript\n   * const clickEvent = await delay.untilDomEvent(document.body, 'click');\n   * ```\n   */\n  untilDomEvent: <T extends keyof HTMLElementEventMap>(\n    element: HTMLElement,\n    eventName: T\n  ): Promise<HTMLElementEventMap[T]> =>\n    new Promise((resolve) =>\n      element.addEventListener(eventName, resolve, { once: true, passive: true })\n    ),\n\n  /**\n   * Delays execution until a specific event occurs on an object with an `addEventListener` method.\n   *\n   * @param target - The target object to listen for the event on.\n   * @param eventName - The name of the event to wait for.\n   * @returns A Promise that resolves with the event object when the specified event occurs.\n   *\n   * @example\n   * ```typescript\n   * const server = http.createServer();\n   * const requestEvent = await delay.untilEvent(server, 'request');\n   * ```\n   */\n  untilEvent: (target: HasAddEventListener, eventName: string): Promise<Event> =>\n    new Promise((resolve) =>\n      target.addEventListener(eventName, resolve, { once: true, passive: true })\n    ),\n\n  /**\n   * Yields control to the event loop immediately.\n   *\n   * Uses `setImmediate` if available, falls back to `queueMicrotask`, and then to `setTimeout(0)`.\n   *\n   * @returns A Promise that resolves immediately after yielding control to the event loop.\n   *\n   * @example\n   * ```typescript\n   * await delay.immediate();\n   * ```\n   */\n  immediate: (): Promise<void> => {\n    if (typeof setImmediate !== 'function') {\n      if (typeof queueMicrotask === 'function') {\n        return delay.nextMicrotask();\n      }\n\n      // else\n      return delay.by(0);\n    }\n    return new Promise((resolve) => setImmediate(resolve));\n  },\n\n  /**\n   * Delays execution until the next microtask queue is empty\n   *\n   * @returns A Promise that resolves when the next microtask queue is empty.\n   *\n   * @example\n   * ```typescript\n   * await delay.nextMicrotask();\n   * ```\n   */\n  nextMicrotask: (): Promise<void> => {\n    if (typeof queueMicrotask !== 'function') {\n      if (typeof setImmediate === 'function') {\n        return delay.immediate();\n      }\n\n      // else\n      return delay.by(0);\n    }\n    return new Promise((resolve) => queueMicrotask(resolve));\n  },\n} as const;\n", "import {getGlobalThis, type GlobalThis} from '@alwatr/global-this';\n\nexport const win = /* #__PURE__ */ getGlobalThis<DictionaryOpt<unknown>>();\n\n// prettier-ignore\nconst requestAnimationFrameFallback =\n  (callback: FrameRequestCallback): ReturnType<typeof setTimeout> =>\n    setTimeout(() => callback(Date.now()), 1000 / 60);\n\nexport const requestAnimationFrame: GlobalThis['requestAnimationFrame'] = /* #__PURE__ */ (() =>\n  win.requestAnimationFrame || win.webkitRequestAnimationFrame || win.mozRequestAnimationFrame || requestAnimationFrameFallback)();\n\n// prettier-ignore\nconst requestIdleCallbackFallback =\n  (callback: () => void, options?: IdleRequestOptions): ReturnType<typeof setTimeout> =>\n    setTimeout(callback, options?.timeout ?? 2000);\n\nexport const requestIdleCallback: GlobalThis['requestIdleCallback'] = /* #__PURE__ */ (() =>\n  win.requestIdleCallback || win.webkitRequestIdleCallback || win.mozRequestIdleCallback || requestIdleCallbackFallback)();\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAA4B;AAC5B,4BAA2C;;;ACD3C,yBAA6C;AAEtC,IAAM,MAAsB,sDAAsC;AAGzE,IAAM,gCACJ,CAAC,aACC,WAAW,MAAM,SAAS,KAAK,IAAI,CAAC,GAAG,MAAO,EAAE;AAE7C,IAAM,wBAA8E,uBACzF,IAAI,yBAAyB,IAAI,+BAA+B,IAAI,4BAA4B,+BAA+B;AAGjI,IAAM,8BACJ,CAAC,UAAsB,YACrB,WAAW,UAAU,SAAS,WAAW,GAAI;AAE1C,IAAM,sBAA0E,uBACrF,IAAI,uBAAuB,IAAI,6BAA6B,IAAI,0BAA0B,6BAA6B;;;ADfzH,aAAc,qCAAc,IAAI,iBAAkB,OAAmB;AAO9D,IAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYnB,IAAI,CAAC,aACH,IAAI,QAAQ,CAAC,YAAY,WAAW,aAAS,qCAAc,QAAQ,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYvE,yBAAyB,MACvB,IAAI,QAAQ,CAAC,YAAY,sBAAsB,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAazD,WAAW,CAAC,YACV,IAAI,QAAQ,CAAC,YAAY,oBAAoB,SAAS,YAAY,SAAY,SAAY;AAAA,IACxF,aAAS,qCAAc,OAAO;AAAA,EAChC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeJ,eAAe,CACb,SACA,cAEA,IAAI;AAAA,IAAQ,CAAC,YACX,QAAQ,iBAAiB,WAAW,SAAS,EAAE,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeF,YAAY,CAAC,QAA6B,cACxC,IAAI;AAAA,IAAQ,CAAC,YACX,OAAO,iBAAiB,WAAW,SAAS,EAAE,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcF,WAAW,MAAqB;AAC9B,QAAI,OAAO,iBAAiB,YAAY;AACtC,UAAI,OAAO,mBAAmB,YAAY;AACxC,eAAO,MAAM,cAAc;AAAA,MAC7B;AAGA,aAAO,MAAM,GAAG,CAAC;AAAA,IACnB;AACA,WAAO,IAAI,QAAQ,CAAC,YAAY,aAAa,OAAO,CAAC;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,eAAe,MAAqB;AAClC,QAAI,OAAO,mBAAmB,YAAY;AACxC,UAAI,OAAO,iBAAiB,YAAY;AACtC,eAAO,MAAM,UAAU;AAAA,MACzB;AAGA,aAAO,MAAM,GAAG,CAAC;AAAA,IACnB;AACA,WAAO,IAAI,QAAQ,CAAC,YAAY,eAAe,OAAO,CAAC;AAAA,EACzD;AACF;",
  "names": []
}
