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