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