lib0
Version:
> Monorepo of isomorphic utility functions
1 lines • 5.85 kB
Source Map (JSON)
{"version":3,"file":"eventloop-b299a889.cjs","sources":["../eventloop.js"],"sourcesContent":["/* global requestIdleCallback, requestAnimationFrame, cancelIdleCallback, cancelAnimationFrame */\n\nimport * as time from './time.js'\n\n/**\n * Utility module to work with EcmaScript's event loop.\n *\n * @module eventloop\n */\n\n/**\n * @type {Array<function>}\n */\nlet queue = []\n\nconst _runQueue = () => {\n for (let i = 0; i < queue.length; i++) {\n queue[i]()\n }\n queue = []\n}\n\n/**\n * @param {function():void} f\n */\nexport const enqueue = f => {\n queue.push(f)\n if (queue.length === 1) {\n setTimeout(_runQueue, 0)\n }\n}\n\n/**\n * @typedef {Object} TimeoutObject\n * @property {function} TimeoutObject.destroy\n */\n\n/**\n * @param {function(number):void} clearFunction\n */\nconst createTimeoutClass = clearFunction => class TT {\n /**\n * @param {number} timeoutId\n */\n constructor (timeoutId) {\n this._ = timeoutId\n }\n\n destroy () {\n clearFunction(this._)\n }\n}\n\nconst Timeout = createTimeoutClass(clearTimeout)\n\n/**\n * @param {number} timeout\n * @param {function} callback\n * @return {TimeoutObject}\n */\nexport const timeout = (timeout, callback) => new Timeout(setTimeout(callback, timeout))\n\nconst Interval = createTimeoutClass(clearInterval)\n\n/**\n * @param {number} timeout\n * @param {function} callback\n * @return {TimeoutObject}\n */\nexport const interval = (timeout, callback) => new Interval(setInterval(callback, timeout))\n\n/* c8 ignore next */\nexport const Animation = createTimeoutClass(arg => typeof requestAnimationFrame !== 'undefined' && cancelAnimationFrame(arg))\n\n/**\n * @param {function(number):void} cb\n * @return {TimeoutObject}\n */\n/* c8 ignore next */\nexport const animationFrame = cb => typeof requestAnimationFrame === 'undefined' ? timeout(0, cb) : new Animation(requestAnimationFrame(cb))\n\n/* c8 ignore next */\n// @ts-ignore\nconst Idle = createTimeoutClass(arg => typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(arg))\n\n/**\n * Note: this is experimental and is probably only useful in browsers.\n *\n * @param {function} cb\n * @return {TimeoutObject}\n */\n/* c8 ignore next 2 */\n// @ts-ignore\nexport const idleCallback = cb => typeof requestIdleCallback !== 'undefined' ? new Idle(requestIdleCallback(cb)) : timeout(1000, cb)\n\n/**\n * @param {number} timeout Timeout of the debounce action\n * @param {number} triggerAfter Optional. Trigger callback after a certain amount of time\n * without waiting for debounce.\n */\nexport const createDebouncer = (timeout, triggerAfter = -1) => {\n let timer = -1\n /**\n * @type {number?}\n */\n let lastCall = null\n /**\n * @param {((...args: any)=>void)?} cb function to trigger after debounce. If null, it will reset the\n * debounce.\n */\n return cb => {\n clearTimeout(timer)\n if (cb) {\n if (triggerAfter >= 0) {\n const now = time.getUnixTime()\n if (lastCall === null) lastCall = now\n if (now - lastCall > triggerAfter) {\n lastCall = null\n timer = /** @type {any} */ (setTimeout(cb, 0))\n return\n }\n }\n timer = /** @type {any} */ (setTimeout(() => { lastCall = null; cb() }, timeout))\n } else {\n lastCall = null\n }\n }\n}\n"],"names":["time.getUnixTime"],"mappings":"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"}