1 | 'use strict';
|
2 | var global = require('../internals/global');
|
3 | var apply = require('../internals/function-apply');
|
4 | var isCallable = require('../internals/is-callable');
|
5 | var ENGINE_IS_BUN = require('../internals/engine-is-bun');
|
6 | var USER_AGENT = require('../internals/engine-user-agent');
|
7 | var arraySlice = require('../internals/array-slice');
|
8 | var validateArgumentsLength = require('../internals/validate-arguments-length');
|
9 |
|
10 | var Function = global.Function;
|
11 |
|
12 | var WRAP = /MSIE .\./.test(USER_AGENT) || ENGINE_IS_BUN && (function () {
|
13 | var version = global.Bun.version.split('.');
|
14 | return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');
|
15 | })();
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | module.exports = function (scheduler, hasTimeArg) {
|
21 | var firstParamIndex = hasTimeArg ? 2 : 1;
|
22 | return WRAP ? function (handler, timeout /* , ...arguments */) {
|
23 | var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex;
|
24 | var fn = isCallable(handler) ? handler : Function(handler);
|
25 | var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];
|
26 | var callback = boundArgs ? function () {
|
27 | apply(fn, this, params);
|
28 | } : fn;
|
29 | return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);
|
30 | } : scheduler;
|
31 | };
|