UNPKG

timing-functions

Version:

Set of universal utility functions around timing and scheduling in JavaScript

74 lines (65 loc) 2.1 kB
'use strict'; 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;