| import { Immediate } from '../util/Immediate'; |
| import type { TimerHandle } from './timerHandle'; |
| const { setImmediate, clearImmediate } = Immediate; |
| |
| type SetImmediateFunction = (handler: () => void, ...args: any[]) => TimerHandle; |
| type ClearImmediateFunction = (handle: TimerHandle) => void; |
| |
| interface ImmediateProvider { |
| setImmediate: SetImmediateFunction; |
| clearImmediate: ClearImmediateFunction; |
| delegate: |
| | { |
| setImmediate: SetImmediateFunction; |
| clearImmediate: ClearImmediateFunction; |
| } |
| | undefined; |
| } |
| |
| export const immediateProvider: ImmediateProvider = { |
| // When accessing the delegate, use the variable rather than `this` so that |
| // the functions can be called without being bound to the provider. |
| setImmediate(...args) { |
| const { delegate } = immediateProvider; |
| return (delegate?.setImmediate || setImmediate)(...args); |
| }, |
| clearImmediate(handle) { |
| const { delegate } = immediateProvider; |
| return (delegate?.clearImmediate || clearImmediate)(handle as any); |
| }, |
| delegate: undefined, |
| }; |