12345678910111213141516171819202122232425262728293031 |
- 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,
- };
|