UNPKG

p-queue-compat

Version:
50 lines (49 loc) 1.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _lowerBound = _interopRequireDefault(require("./lower-bound.cjs")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } class PriorityQueue { #queue = []; enqueue(run, options) { options = { priority: 0, ...options }; const element = { priority: options.priority, id: options.id, run }; if (this.size === 0 || this.#queue[this.size - 1].priority >= options.priority) { this.#queue.push(element); return; } const index = (0, _lowerBound.default)(this.#queue, element, (a, b) => b.priority - a.priority); this.#queue.splice(index, 0, element); } setPriority(id, priority) { const index = this.#queue.findIndex(element => element.id === id); if (index === -1) { throw new ReferenceError(`No promise function with the id "${id}" exists in the queue.`); } const [item] = this.#queue.splice(index, 1); this.enqueue(item.run, { priority, id }); } dequeue() { const item = this.#queue.shift(); return item === null || item === void 0 ? void 0 : item.run; } filter(options) { return this.#queue.filter(element => element.priority === options.priority).map(element => element.run); } get size() { return this.#queue.length; } } exports.default = PriorityQueue;