{"version":3,"sources":["../../src/utils/handlePolling.ts"],"names":["_pausePromise","_sleepPromise","_resume","noop","_interval","_hiddenInterval","_sleep","_root","_handleInterval","_value","delay","becomingOnline_default"],"mappings":"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","file":"chunk-DQZTI73D.cjs","sourcesContent":["import noop from 'lodash.noop';\nimport type {\n  PollableStateOptions,\n  PollableMethods,\n  AsyncState,\n} from '../types';\nimport becomingOnline from './becomingOnline';\nimport type createLoader from './createLoader';\n\nexport class PollingControl implements PollableMethods {\n  readonly _interval: number | ((value: any) => number);\n  readonly _hiddenInterval: number | ((value: any) => number) | undefined;\n  _sleep: () => Promise<void>;\n  _pausePromise: Promise<void> | undefined | false = undefined;\n  _sleepPromise: Promise<void> | void | false = undefined;\n  _resume: () => void = noop;\n  reset: () => void = noop;\n  readonly _root: AsyncState;\n\n  constructor(options: PollableStateOptions, state: AsyncState) {\n    const { hiddenInterval } = options;\n\n    this._interval = options.interval;\n\n    this._hiddenInterval = hiddenInterval;\n\n    this._sleep = hiddenInterval == null ? commonSleep : smartSleep;\n\n    this._root = state;\n  }\n\n  _handleInterval(interval: number | ((value: any) => number)) {\n    return typeof interval == 'number' ? interval : interval(this._root._value);\n  }\n\n  pause() {\n    const self = this;\n\n    if (!self._pausePromise) {\n      self._pausePromise = new Promise((res) => {\n        self._resume = res;\n      });\n    }\n  }\n\n  resume() {\n    const self = this;\n\n    if (self._pausePromise) {\n      self._pausePromise = false;\n\n      self._resume();\n    }\n  }\n}\n\nfunction commonSleep(this: PollingControl) {\n  const self = this;\n\n  return new Promise<void>((res) => {\n    self.reset = () => {\n      clearTimeout(id);\n\n      self.reset = noop;\n\n      res();\n    };\n\n    const id = setTimeout(self.reset, self._handleInterval(self._interval));\n  });\n}\n\nfunction smartSleep(this: PollingControl) {\n  const self = this;\n\n  return new Promise<void>((res) => {\n    const listener = () => {\n      clearTimeout(timeoutId);\n\n      const delay = self._handleInterval(\n        document.hidden ? self._hiddenInterval! : self._interval\n      );\n\n      if (delay > 0) {\n        const now = performance.now();\n\n        const diff = now - start - delay;\n\n        start = now;\n\n        if (diff > 0) {\n          timeoutId = window.setTimeout(self.reset, diff);\n        } else {\n          self.reset();\n        }\n      } else {\n        timeoutId = undefined;\n      }\n    };\n\n    self.reset = () => {\n      self.reset = noop;\n\n      document.removeEventListener('visibilitychange', listener);\n\n      clearTimeout(timeoutId);\n\n      timeoutId = undefined;\n\n      res();\n    };\n\n    const delay = self._handleInterval(\n      document.hidden ? self._hiddenInterval! : self._interval\n    );\n\n    let timeoutId: number | undefined;\n\n    let start = performance.now();\n\n    document.addEventListener('visibilitychange', listener);\n\n    if (delay > 0) {\n      timeoutId = window.setTimeout(self.reset, delay);\n    }\n  });\n}\n\nexport const handlePolling: Parameters<\n  typeof createLoader<PollingControl>\n>[0] = async (cancelPromise, load, self) => {\n  const control = self.control;\n\n  do {\n    do {\n      if (\n        !(await Promise.any([\n          Promise.all([\n            control._sleepPromise,\n            control._pausePromise,\n            becomingOnline(),\n          ]),\n          cancelPromise,\n        ]))\n      ) {\n        control._sleepPromise = false;\n\n        return;\n      }\n    } while (control._pausePromise || !navigator.onLine);\n  } while (\n    await load().then((res) => {\n      control._sleepPromise = res && control._sleep();\n\n      return res;\n    })\n  );\n};\n"]}