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