| 'use strict'; | 
| var globalThis = require('../internals/global-this'); | 
| var apply = require('../internals/function-apply'); | 
| var isCallable = require('../internals/is-callable'); | 
| var ENVIRONMENT = require('../internals/environment'); | 
| var USER_AGENT = require('../internals/environment-user-agent'); | 
| var arraySlice = require('../internals/array-slice'); | 
| var validateArgumentsLength = require('../internals/validate-arguments-length'); | 
|   | 
| var Function = globalThis.Function; | 
| // dirty IE9- and Bun 0.3.0- checks | 
| var WRAP = /MSIE .\./.test(USER_AGENT) || ENVIRONMENT === 'BUN' && (function () { | 
|   var version = globalThis.Bun.version.split('.'); | 
|   return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0'); | 
| })(); | 
|   | 
| // IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix | 
| // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers | 
| // https://github.com/oven-sh/bun/issues/1633 | 
| module.exports = function (scheduler, hasTimeArg) { | 
|   var firstParamIndex = hasTimeArg ? 2 : 1; | 
|   return WRAP ? function (handler, timeout /* , ...arguments */) { | 
|     var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex; | 
|     var fn = isCallable(handler) ? handler : Function(handler); | 
|     var params = boundArgs ? arraySlice(arguments, firstParamIndex) : []; | 
|     var callback = boundArgs ? function () { | 
|       apply(fn, this, params); | 
|     } : fn; | 
|     return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback); | 
|   } : scheduler; | 
| }; |