(function (global, factory) {
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('@babel/runtime/helpers/asyncToGenerator'), require('@babel/runtime/regenerator'), require('worker-factory'), require('@babel/runtime/helpers/slicedToArray')) :
|
typeof define === 'function' && define.amd ? define(['@babel/runtime/helpers/asyncToGenerator', '@babel/runtime/regenerator', 'worker-factory', '@babel/runtime/helpers/slicedToArray'], factory) :
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global._asyncToGenerator, global._regeneratorRuntime, global.workerFactory, global._slicedToArray));
|
})(this, (function (_asyncToGenerator, _regeneratorRuntime, workerFactory, _slicedToArray) { 'use strict';
|
|
var createClearTimer = function createClearTimer(clearTimeout, identifiersAndResolvers) {
|
return function (timerId) {
|
var identifiersAndResolver = identifiersAndResolvers.get(timerId);
|
if (identifiersAndResolver === undefined) {
|
return Promise.resolve(false);
|
}
|
var _identifiersAndResolv = _slicedToArray(identifiersAndResolver, 2),
|
identifier = _identifiersAndResolv[0],
|
resolveSetResponseResultPromise = _identifiersAndResolv[1];
|
clearTimeout(identifier);
|
identifiersAndResolvers["delete"](timerId);
|
resolveSetResponseResultPromise(false);
|
return Promise.resolve(true);
|
};
|
};
|
|
var createSetTimeoutCallback = function createSetTimeoutCallback(performance, setTimeout) {
|
var _setTimeoutCallback = function setTimeoutCallback(expected, identifiersAndResolvers, resolveSetResponseResultPromise, timerId) {
|
var remainingDelay = expected - performance.now();
|
if (remainingDelay > 0) {
|
identifiersAndResolvers.set(timerId, [setTimeout(_setTimeoutCallback, remainingDelay, expected, identifiersAndResolvers, resolveSetResponseResultPromise, timerId), resolveSetResponseResultPromise]);
|
} else {
|
identifiersAndResolvers["delete"](timerId);
|
resolveSetResponseResultPromise(true);
|
}
|
};
|
return _setTimeoutCallback;
|
};
|
|
var createSetTimer = function createSetTimer(identifiersAndResolvers, performance, setTimeout, setTimeoutCallback) {
|
return function (delay, nowAndTimeOrigin, timerId) {
|
var expected = delay + nowAndTimeOrigin - performance.timeOrigin;
|
var remainingDelay = expected - performance.now();
|
return new Promise(function (resolve) {
|
identifiersAndResolvers.set(timerId, [setTimeout(setTimeoutCallback, remainingDelay, expected, identifiersAndResolvers, resolve, timerId), resolve]);
|
});
|
};
|
};
|
|
var intervalIdentifiersAndResolvers = new Map();
|
var clearInterval = createClearTimer(globalThis.clearTimeout, intervalIdentifiersAndResolvers);
|
var timeoutIdentifiersAndResolvers = new Map();
|
var clearTimeout = createClearTimer(globalThis.clearTimeout, timeoutIdentifiersAndResolvers);
|
var setTimeoutCallback = createSetTimeoutCallback(performance, globalThis.setTimeout);
|
var setInterval = createSetTimer(intervalIdentifiersAndResolvers, performance, globalThis.setTimeout, setTimeoutCallback);
|
var setTimeout = createSetTimer(timeoutIdentifiersAndResolvers, performance, globalThis.setTimeout, setTimeoutCallback);
|
workerFactory.createWorker(self, {
|
clear: function () {
|
var _clear = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
var timerId, timerType, _t;
|
return _regeneratorRuntime.wrap(function (_context) {
|
while (1) switch (_context.prev = _context.next) {
|
case 0:
|
timerId = _ref.timerId, timerType = _ref.timerType;
|
_context.next = 1;
|
return timerType === 'interval' ? clearInterval(timerId) : clearTimeout(timerId);
|
case 1:
|
_t = _context.sent;
|
return _context.abrupt("return", {
|
result: _t
|
});
|
case 2:
|
case "end":
|
return _context.stop();
|
}
|
}, _callee);
|
}));
|
function clear(_x) {
|
return _clear.apply(this, arguments);
|
}
|
return clear;
|
}(),
|
set: function () {
|
var _set = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref2) {
|
var delay, now, timerId, timerType, _t2;
|
return _regeneratorRuntime.wrap(function (_context2) {
|
while (1) switch (_context2.prev = _context2.next) {
|
case 0:
|
delay = _ref2.delay, now = _ref2.now, timerId = _ref2.timerId, timerType = _ref2.timerType;
|
_context2.next = 1;
|
return (timerType === 'interval' ? setInterval : setTimeout)(delay, now, timerId);
|
case 1:
|
_t2 = _context2.sent;
|
return _context2.abrupt("return", {
|
result: _t2
|
});
|
case 2:
|
case "end":
|
return _context2.stop();
|
}
|
}, _callee2);
|
}));
|
function set(_x2) {
|
return _set.apply(this, arguments);
|
}
|
return set;
|
}()
|
});
|
|
}));
|