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