| import type { TimerHandle } from './timerHandle'; |
| type SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle; |
| type ClearIntervalFunction = (handle: TimerHandle) => void; |
| |
| interface IntervalProvider { |
| setInterval: SetIntervalFunction; |
| clearInterval: ClearIntervalFunction; |
| delegate: |
| | { |
| setInterval: SetIntervalFunction; |
| clearInterval: ClearIntervalFunction; |
| } |
| | undefined; |
| } |
| |
| export const intervalProvider: IntervalProvider = { |
| // When accessing the delegate, use the variable rather than `this` so that |
| // the functions can be called without being bound to the provider. |
| setInterval(handler: () => void, timeout?: number, ...args) { |
| const { delegate } = intervalProvider; |
| if (delegate?.setInterval) { |
| return delegate.setInterval(handler, timeout, ...args); |
| } |
| return setInterval(handler, timeout, ...args); |
| }, |
| clearInterval(handle) { |
| const { delegate } = intervalProvider; |
| return (delegate?.clearInterval || clearInterval)(handle as any); |
| }, |
| delegate: undefined, |
| }; |