Files
agentic-studio/network-poc/frontend/node_modules/p-queue/dist/priority-queue.js
Jaakko Vanhala a8c4af0975 Frontend uudelleenrakennettu: Astro-komponentit, Wasm pääsäikeessä, ei Workeria
Vanha frontend siirretty temp/. Uusi rakenne:
- StatusBar.astro, Terminal.astro, Editor.astro, Guide.astro
- global.css erillinen
- Wasm pääsäikeessä (ei Worker — yksinkertainen, debugattava)
- Tab-completion, dropdown, projektikortti, Monaco, GUIDE.md
- Ei tokenisointia eikä koodilaboratoriota

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 20:17:39 +03:00

48 lines
1.5 KiB
JavaScript

import lowerBound from './lower-bound.js';
export default class PriorityQueue {
#queue = [];
enqueue(run, options) {
const { priority = 0, id, } = options ?? {};
const element = {
priority,
id,
run,
};
if (this.size === 0 || this.#queue[this.size - 1].priority >= priority) {
this.#queue.push(element);
return;
}
const index = lowerBound(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 });
}
remove(idOrRun) {
const index = this.#queue.findIndex((element) => {
if (typeof idOrRun === 'string') {
return element.id === idOrRun;
}
return element.run === idOrRun;
});
if (index !== -1) {
this.#queue.splice(index, 1);
}
}
dequeue() {
const item = this.#queue.shift();
return item?.run;
}
filter(options) {
return this.#queue.filter((element) => element.priority === options.priority).map((element) => element.run);
}
get size() {
return this.#queue.length;
}
}