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