UNPKG

@wordpress/priority-queue

Version:
54 lines (53 loc) 1.24 kB
// packages/priority-queue/src/index.ts import requestIdleCallback from "./request-idle-callback"; var createQueue = () => { const waitingList = /* @__PURE__ */ new Map(); let isRunning = false; const runWaitingList = (deadline) => { for (const [nextElement, callback] of waitingList) { waitingList.delete(nextElement); callback(); if ("number" === typeof deadline || deadline.timeRemaining() <= 0) { break; } } if (waitingList.size === 0) { isRunning = false; return; } requestIdleCallback(runWaitingList); }; const add = (element, item) => { waitingList.set(element, item); if (!isRunning) { isRunning = true; requestIdleCallback(runWaitingList); } }; const flush = (element) => { const callback = waitingList.get(element); if (void 0 === callback) { return false; } waitingList.delete(element); callback(); return true; }; const cancel = (element) => { return waitingList.delete(element); }; const reset = () => { waitingList.clear(); isRunning = false; }; return { add, flush, cancel, reset }; }; export { createQueue }; //# sourceMappingURL=index.js.map