{"version":3,"file":"Async.js","sourceRoot":"../src/","sources":["Async.ts"],"names":[],"mappings":"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","sourcesContent":["import { getWindow } from './dom/getWindow';\n\ndeclare function setTimeout(cb: Function, delay: number): number;\ndeclare function setInterval(cb: Function, delay: number): number;\n\n/**\n * Bugs often appear in async code when stuff gets disposed, but async operations don't get canceled.\n * This Async helper class solves these issues by tying async code to the lifetime of a disposable object.\n *\n * Usage: Anything class extending from BaseModel can access this helper via this.async. Otherwise create a\n * new instance of the class and remember to call dispose() during your code's dispose handler.\n *\n * @public\n */\nexport class Async {\n  private _timeoutIds: { [id: number]: boolean } | null = null;\n  private _immediateIds: { [id: number]: boolean } | null = null;\n  private _intervalIds: { [id: number]: boolean } | null = null;\n  private _animationFrameIds: { [id: number]: boolean } | null = null;\n  private _isDisposed: boolean;\n  private _parent: object | null;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _onErrorHandler: ((e: any) => void) | undefined;\n  private _noop: () => void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  constructor(parent?: object, onError?: (e: any) => void) {\n    this._isDisposed = false;\n    this._parent = parent || null;\n    this._onErrorHandler = onError;\n    this._noop = () => {\n      /* do nothing */\n    };\n  }\n\n  /**\n   * Dispose function, clears all async operations.\n   */\n  public dispose(): void {\n    let id;\n\n    this._isDisposed = true;\n    this._parent = null;\n\n    // Clear timeouts.\n    if (this._timeoutIds) {\n      for (id in this._timeoutIds) {\n        if (this._timeoutIds.hasOwnProperty(id)) {\n          this.clearTimeout(parseInt(id, 10));\n        }\n      }\n\n      this._timeoutIds = null;\n    }\n\n    // Clear immediates.\n    if (this._immediateIds) {\n      for (id in this._immediateIds) {\n        if (this._immediateIds.hasOwnProperty(id)) {\n          this.clearImmediate(parseInt(id, 10));\n        }\n      }\n\n      this._immediateIds = null;\n    }\n\n    // Clear intervals.\n    if (this._intervalIds) {\n      for (id in this._intervalIds) {\n        if (this._intervalIds.hasOwnProperty(id)) {\n          this.clearInterval(parseInt(id, 10));\n        }\n      }\n      this._intervalIds = null;\n    }\n\n    // Clear animation frames.\n    if (this._animationFrameIds) {\n      for (id in this._animationFrameIds) {\n        if (this._animationFrameIds.hasOwnProperty(id)) {\n          this.cancelAnimationFrame(parseInt(id, 10));\n        }\n      }\n\n      this._animationFrameIds = null;\n    }\n  }\n\n  /**\n   * SetTimeout override, which will auto cancel the timeout during dispose.\n   * @param callback - Callback to execute.\n   * @param duration - Duration in milliseconds.\n   * @returns The setTimeout id.\n   */\n  public setTimeout(callback: () => void, duration: number): number {\n    let timeoutId = 0;\n\n    if (!this._isDisposed) {\n      if (!this._timeoutIds) {\n        this._timeoutIds = {};\n      }\n\n      timeoutId = setTimeout(() => {\n        // Time to execute the timeout, enqueue it as a foreground task to be executed.\n\n        try {\n          // Now delete the record and call the callback.\n          if (this._timeoutIds) {\n            delete this._timeoutIds[timeoutId];\n          }\n          callback.apply(this._parent);\n        } catch (e) {\n          if (this._onErrorHandler) {\n            this._onErrorHandler(e);\n          }\n        }\n      }, duration);\n\n      this._timeoutIds[timeoutId] = true;\n    }\n\n    return timeoutId;\n  }\n\n  /**\n   * Clears the timeout.\n   * @param id - Id to cancel.\n   */\n  public clearTimeout(id: number): void {\n    if (this._timeoutIds && this._timeoutIds[id]) {\n      clearTimeout(id);\n      delete this._timeoutIds[id];\n    }\n  }\n\n  /**\n   * SetImmediate override, which will auto cancel the immediate during dispose.\n   * @param callback - Callback to execute.\n   * @param targetElement - Optional target element to use for identifying the correct window.\n   * @returns The setTimeout id.\n   */\n  public setImmediate(callback: () => void, targetElement?: Element | null): number {\n    let immediateId = 0;\n    const win = getWindow(targetElement)!;\n\n    if (!this._isDisposed) {\n      if (!this._immediateIds) {\n        this._immediateIds = {};\n      }\n\n      let setImmediateCallback = () => {\n        // Time to execute the timeout, enqueue it as a foreground task to be executed.\n\n        try {\n          // Now delete the record and call the callback.\n          if (this._immediateIds) {\n            delete this._immediateIds[immediateId];\n          }\n          callback.apply(this._parent);\n        } catch (e) {\n          this._logError(e);\n        }\n      };\n\n      immediateId = win.setTimeout(setImmediateCallback, 0);\n\n      this._immediateIds[immediateId] = true;\n    }\n\n    return immediateId;\n  }\n\n  /**\n   * Clears the immediate.\n   * @param id - Id to cancel.\n   * @param targetElement - Optional target element to use for identifying the correct window.\n   */\n  public clearImmediate(id: number, targetElement?: Element | null): void {\n    const win = getWindow(targetElement)!;\n\n    if (this._immediateIds && this._immediateIds[id]) {\n      win.clearTimeout(id);\n      delete this._immediateIds[id];\n    }\n  }\n\n  /**\n   * SetInterval override, which will auto cancel the timeout during dispose.\n   * @param callback - Callback to execute.\n   * @param duration - Duration in milliseconds.\n   * @returns The setTimeout id.\n   */\n  public setInterval(callback: () => void, duration: number): number {\n    let intervalId = 0;\n\n    if (!this._isDisposed) {\n      if (!this._intervalIds) {\n        this._intervalIds = {};\n      }\n\n      intervalId = setInterval(() => {\n        // Time to execute the interval callback, enqueue it as a foreground task to be executed.\n        try {\n          callback.apply(this._parent);\n        } catch (e) {\n          this._logError(e);\n        }\n      }, duration);\n\n      this._intervalIds[intervalId] = true;\n    }\n\n    return intervalId;\n  }\n\n  /**\n   * Clears the interval.\n   * @param id - Id to cancel.\n   */\n  public clearInterval(id: number): void {\n    if (this._intervalIds && this._intervalIds[id]) {\n      clearInterval(id);\n      delete this._intervalIds[id];\n    }\n  }\n\n  /**\n   * Creates a function that, when executed, will only call the func function at most once per\n   * every wait milliseconds. Provide an options object to indicate that func should be invoked\n   * on the leading and/or trailing edge of the wait timeout. Subsequent calls to the throttled\n   * function will return the result of the last func call.\n   *\n   * Note: If leading and trailing options are true func will be called on the trailing edge of\n   * the timeout only if the throttled function is invoked more than once during the wait timeout.\n   *\n   * @param func - The function to throttle.\n   * @param wait - The number of milliseconds to throttle executions to. Defaults to 0.\n   * @param options - The options object.\n   * @returns The new throttled function.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public throttle<T extends (...args: any[]) => any>(\n    func: T,\n    wait?: number,\n    options?: {\n      leading?: boolean;\n      trailing?: boolean;\n    },\n  ): T {\n    if (this._isDisposed) {\n      return this._noop as T;\n    }\n\n    let waitMS = wait || 0;\n    let leading = true;\n    let trailing = true;\n    let lastExecuteTime = 0;\n    let lastResult: T;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let lastArgs: any[];\n    let timeoutId: number | null = null;\n\n    if (options && typeof options.leading === 'boolean') {\n      leading = options.leading;\n    }\n\n    if (options && typeof options.trailing === 'boolean') {\n      trailing = options.trailing;\n    }\n\n    let callback = (userCall?: boolean) => {\n      let now = Date.now();\n      let delta = now - lastExecuteTime;\n      let waitLength = leading ? waitMS - delta : waitMS;\n      if (delta >= waitMS && (!userCall || leading)) {\n        lastExecuteTime = now;\n        if (timeoutId) {\n          this.clearTimeout(timeoutId);\n          timeoutId = null;\n        }\n        lastResult = func.apply(this._parent, lastArgs);\n      } else if (timeoutId === null && trailing) {\n        timeoutId = this.setTimeout(callback, waitLength);\n      }\n\n      return lastResult;\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let resultFunction = ((...args: any[]): any => {\n      lastArgs = args;\n      return callback(true);\n    }) as T;\n\n    return resultFunction;\n  }\n\n  /**\n   * Creates a function that will delay the execution of func until after wait milliseconds have\n   * elapsed since the last time it was invoked. Provide an options object to indicate that func\n   * should be invoked on the leading and/or trailing edge of the wait timeout. Subsequent calls\n   * to the debounced function will return the result of the last func call.\n   *\n   * Note: If leading and trailing options are true func will be called on the trailing edge of\n   * the timeout only if the debounced function is invoked more than once during the wait\n   * timeout.\n   *\n   * @param func - The function to debounce.\n   * @param wait - The number of milliseconds to delay.\n   * @param options - The options object.\n   * @returns The new debounced function.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public debounce<T extends (...args: any[]) => any>(\n    func: T,\n    wait?: number,\n    options?: {\n      leading?: boolean;\n      maxWait?: number;\n      trailing?: boolean;\n    },\n  ): ICancelable<T> & T {\n    if (this._isDisposed) {\n      let noOpFunction = (() => {\n        /** Do nothing */\n      }) as ICancelable<T> & T;\n\n      noOpFunction.cancel = () => {\n        return;\n      };\n      noOpFunction.flush = ((() => null) as unknown) as () => ReturnType<T>;\n      noOpFunction.pending = () => false;\n\n      return noOpFunction;\n    }\n\n    let waitMS = wait || 0;\n    let leading = false;\n    let trailing = true;\n    let maxWait: number | null = null;\n    let lastCallTime = 0;\n    let lastExecuteTime = Date.now();\n    let lastResult: ReturnType<T>;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let lastArgs: any[];\n    let timeoutId: number | null = null;\n\n    if (options && typeof options.leading === 'boolean') {\n      leading = options.leading;\n    }\n\n    if (options && typeof options.trailing === 'boolean') {\n      trailing = options.trailing;\n    }\n\n    if (options && typeof options.maxWait === 'number' && !isNaN(options.maxWait)) {\n      maxWait = options.maxWait;\n    }\n\n    let markExecuted = (time: number) => {\n      if (timeoutId) {\n        this.clearTimeout(timeoutId);\n        timeoutId = null;\n      }\n      lastExecuteTime = time;\n    };\n\n    let invokeFunction = (time: number) => {\n      markExecuted(time);\n      lastResult = func.apply(this._parent, lastArgs);\n    };\n\n    let callback = (userCall?: boolean) => {\n      let now = Date.now();\n      let executeImmediately = false;\n      if (userCall) {\n        if (leading && now - lastCallTime >= waitMS) {\n          executeImmediately = true;\n        }\n        lastCallTime = now;\n      }\n      let delta = now - lastCallTime;\n      let waitLength = waitMS - delta;\n      let maxWaitDelta = now - lastExecuteTime;\n      let maxWaitExpired = false;\n\n      if (maxWait !== null) {\n        // maxWait only matters when there is a pending callback\n        if (maxWaitDelta >= maxWait && timeoutId) {\n          maxWaitExpired = true;\n        } else {\n          waitLength = Math.min(waitLength, maxWait - maxWaitDelta);\n        }\n      }\n\n      if (delta >= waitMS || maxWaitExpired || executeImmediately) {\n        invokeFunction(now);\n      } else if ((timeoutId === null || !userCall) && trailing) {\n        timeoutId = this.setTimeout(callback, waitLength);\n      }\n\n      return lastResult;\n    };\n\n    let pending = (): boolean => {\n      return !!timeoutId;\n    };\n\n    let cancel = (): void => {\n      if (pending()) {\n        // Mark the debounced function as having executed\n        markExecuted(Date.now());\n      }\n    };\n\n    let flush = () => {\n      if (pending()) {\n        invokeFunction(Date.now());\n      }\n\n      return lastResult;\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let resultFunction = ((...args: any[]) => {\n      lastArgs = args;\n      return callback(true);\n    }) as ICancelable<T> & T;\n\n    resultFunction.cancel = cancel;\n    resultFunction.flush = flush;\n    resultFunction.pending = pending;\n\n    return resultFunction;\n  }\n\n  public requestAnimationFrame(callback: () => void, targetElement?: Element | null): number {\n    let animationFrameId = 0;\n    const win = getWindow(targetElement)!;\n\n    if (!this._isDisposed) {\n      if (!this._animationFrameIds) {\n        this._animationFrameIds = {};\n      }\n\n      let animationFrameCallback = () => {\n        try {\n          // Now delete the record and call the callback.\n          if (this._animationFrameIds) {\n            delete this._animationFrameIds[animationFrameId];\n          }\n\n          callback.apply(this._parent);\n        } catch (e) {\n          this._logError(e);\n        }\n      };\n\n      animationFrameId = win.requestAnimationFrame\n        ? win.requestAnimationFrame(animationFrameCallback)\n        : win.setTimeout(animationFrameCallback, 0);\n\n      this._animationFrameIds[animationFrameId] = true;\n    }\n\n    return animationFrameId;\n  }\n\n  public cancelAnimationFrame(id: number, targetElement?: Element | null): void {\n    const win = getWindow(targetElement)!;\n\n    if (this._animationFrameIds && this._animationFrameIds[id]) {\n      win.cancelAnimationFrame ? win.cancelAnimationFrame(id) : win.clearTimeout(id);\n      delete this._animationFrameIds[id];\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  protected _logError(e: any): void {\n    if (this._onErrorHandler) {\n      this._onErrorHandler(e);\n    }\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ICancelable<T extends (...args: any[]) => any> = {\n  flush: () => ReturnType<T>;\n  cancel: () => void;\n  pending: () => boolean;\n};\n"]}