{"version":3,"file":"waitFor.mjs","sources":["../../src/UNSAFE_Driver/waitFor.ts"],"sourcesContent":["import { getTimeouts } from './timeouts';\n\nexport type WaitForOptions = {\n  timeout?: number;\n  interval?: number;\n};\n\n/**\n * Wait for a condition to pass.\n * @param callback The function to run. Return truthy to stop the wait; anything else will retry\n * the callback. The truthy return value of the callback will be returned to the caller.\n * @returns A Promise resolving to the returned value from the callback\n */\nexport async function waitFor<T>(callback: () => T | Promise<T>) {\n  const { pollingInterval, waitForTimeout } = getTimeouts();\n  return waitFor_internal(callback, { timeout: waitForTimeout, interval: pollingInterval });\n}\n\n/**\n * Wait for a condition to pass.\n * @param callback The function to run. Return truthy to stop the wait; anything else will retry\n * the callback. The truthy return value of the callback will be returned to the caller.\n * @param options Options for wait time/interval\n * @returns A Promise resolving to the returned value from the callback\n */\nexport async function waitFor_internal<T>(\n  callback: () => T | Promise<T>,\n  options?: WaitForOptions\n) {\n  const { waitForTimeout, pollingInterval } = getTimeouts();\n  const timeout = options?.timeout ?? waitForTimeout;\n  const interval = options?.interval ?? pollingInterval;\n  const start = performance.now();\n  async function testCallback() {\n    try {\n      const result = await callback();\n      if (result) {\n        return result;\n      }\n      return retry();\n    } catch {\n      return retry();\n    }\n  }\n  function retry(): T | Promise<T> {\n    const now = performance.now();\n    const elapsed = Math.round(now - start);\n    if (timeout && elapsed > timeout) {\n      return Promise.reject(new WaitForTimeoutError(elapsed));\n    }\n    return new Promise((accept, reject) =>\n      setTimeout(() => testCallback().then(accept).catch(reject), interval)\n    );\n  }\n  return testCallback();\n}\n\nclass WaitForTimeoutError extends Error {\n  constructor(elapsed: number) {\n    super(`timed out after ${elapsed}ms`);\n    this.name = 'WaitForTimeoutError';\n  }\n}\n"],"names":[],"mappings":";;AAOA;;;;;AAKG;AACI,eAAe,OAAO,CAAI,QAA8B,EAAA;IAC7D,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,CAAC;AAC1D,IAAA,OAAO,gBAAgB,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;;AAMG;AACI,eAAe,gBAAgB,CACpC,QAA8B,EAC9B,OAAwB,EAAA;IAExB,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,WAAW,EAAE,CAAC;AAC1D,IAAA,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC;AACnD,IAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,eAAe,CAAC;AACtD,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;AAChC,IAAA,eAAe,YAAY,GAAA;AACzB,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;YAChC,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,MAAM,CAAC;aACf;YACD,OAAO,KAAK,EAAE,CAAC;SAChB;AAAC,QAAA,MAAM;YACN,OAAO,KAAK,EAAE,CAAC;SAChB;KACF;AACD,IAAA,SAAS,KAAK,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,OAAO,IAAI,OAAO,GAAG,OAAO,EAAE;YAChC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;SACzD;AACD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,KAChC,UAAU,CAAC,MAAM,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CACtE,CAAC;KACH;IACD,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,mBAAoB,SAAQ,KAAK,CAAA;AACrC,IAAA,WAAA,CAAY,OAAe,EAAA;AACzB,QAAA,KAAK,CAAC,CAAA,gBAAA,EAAmB,OAAO,CAAA,EAAA,CAAI,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;KACnC;AACF;;;;"}