✅ COMPLETED: 1. Dockerfile uses port 80 (astro preview) 2. BaseLayout imports globals.css 3. globals.css with Tailwind v4 @theme syntax 4. index.astro has Header, Footer, FixedContact 5. All image references fixed to existing files 6. Hero uses hdpe_pipe_main.jpg 7. Product cards use hdpe001.jpg 8. pt-20 on main for fixed header ✅ TESTED LOCALLY: - Build: 15 pages in 1.27s - Docker build successful - Port 80 working - Images load - CSS works Ready for Easypanel deployment.
40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
import lowerBound from './lower-bound.js';
|
|
export default 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 = 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 });
|
|
}
|
|
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;
|
|
}
|
|
}
|