p-queue-compat
Version:
Compatible version of p-queue
50 lines (49 loc) • 1.45 kB
JavaScript
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;
;