timing-functions
Version:
Set of universal utility functions around timing and scheduling in JavaScript
74 lines (65 loc) • 2.1 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _sleep = (function (time) {
return new Promise(function (resolve) { return setTimeout(function () { return resolve(); }, time); });
});
var env = 'node';
if (typeof importScripts !== 'undefined') {
env = 'worker';
}
else if (typeof window !== 'undefined') {
env = 'browser';
}
var env$1 = env;
var frame = function () { return _sleep(0); };
if (env$1 === 'browser' && 'requestAnimationFrame' in window) {
frame = function () {
return new Promise(function (resolve) { return window.requestAnimationFrame(function () { return resolve(); }); });
};
}
var _frame = frame;
var schedule;
if (env$1 === 'browser' && 'requestIdleCallback' in window) {
schedule = function (maxTimeout) {
return new Promise(function (resolve) {
return window.requestIdleCallback(resolve, { timeout: maxTimeout });
});
};
}
else {
// IdleDeadline stub
var idleDeadline_1 = Object.freeze({
didTimeout: true,
timeRemaining: function () {
return Infinity;
}
});
// Does not support requestIdleCallback
schedule = function (maxTimeout) {
return _sleep((maxTimeout || 0) / 2).then(function () { return idleDeadline_1; });
};
if (env$1 === 'browser' && 'requestAnimationFrame' in window) {
// But does support requestAnimationFrame
var _schedule_1 = schedule;
schedule = function () {
return _schedule_1()
.then(_frame)
.then(function () { return idleDeadline_1; });
};
}
}
var _schedule = schedule;
var _timeout = (function (timeout, promise, message) {
return Promise.race([
promise,
_sleep(timeout).then(function () { return new Error(message || "timed out after " + timeout + "ms"); }),
]);
});
var sleep = _sleep;
var frame$1 = _frame;
var schedule$1 = _schedule;
var timeout = _timeout;
exports.frame = frame$1;
exports.schedule = schedule$1;
exports.sleep = sleep;
exports.timeout = timeout;