UNPKG

@trap_stevo/legendarybuilderpronodejs-utilities

Version:

The legendary computational utility API that makes your application a legendary application. ~ Created by Steven Compton

115 lines (80 loc) 2.07 kB
const EventEmitter = require("events"); class Queue extends EventEmitter { constructor() { super(); this.queue = []; } add(data) { this.queue.push(data); this.emit("itemAdded", data, this.size()); } current() { if (this.empty()) { return null; } const currentItem = this.queue.shift(); const nextItem = this.peek(); this.emit("itemProcessed", currentItem, this.size()); if (nextItem) { this.emit("processingItem", nextItem, this.size()); } return currentItem; } peek() { if (this.empty()) { return null; } return this.queue[0]; } get(index) { if (index < 0 || index >= this.queue.length) { return null; } return this.queue[index]; } findBy(predicate) { return this.queue.find(predicate) || null; } empty() { return this.queue.length === 0; } size() { return this.queue.length; } clear() { this.queue = []; this.emit("queueCleared", this.queue); } toArray() { return [...this.queue]; } contains(item) { return this.queue.includes(item); } remove(item) { const index = this.queue.indexOf(item); if (index !== -1) { const removedItem = this.queue.splice(index, 1)[0]; this.emit("itemRemoved", removedItem, this.size()); } } }; module.exports = Queue;