| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | "use strict";/** * @template T */class Queue {	/**	 * @param {Iterable<T>=} items The initial elements.	 */	constructor(items) {		/** @private @type {Set<T>} */		this.set = new Set(items);		/** @private @type {Iterator<T>} */		this.iterator = this.set[Symbol.iterator]();	}	/**	 * Returns the number of elements in this queue.	 * @returns {number} The number of elements in this queue.	 */	get length() {		return this.set.size;	}	/**	 * Appends the specified element to this queue.	 * @param {T} item The element to add.	 * @returns {void}	 */	enqueue(item) {		this.set.add(item);	}	/**	 * Retrieves and removes the head of this queue.	 * @returns {T | undefined} The head of the queue of `undefined` if this queue is empty.	 */	dequeue() {		const result = this.iterator.next();		if (result.done) return undefined;		this.set.delete(result.value);		return result.value;	}}module.exports = Queue;
 |