text: class Node {
  	/// value;
  	/// next;
  
  	constructor(value) {
  		this.value = value;
  
  		// TODO: Remove this when targeting Node.js 12.
  		this.next = undefined;
  	}
  }
  
  class Queue {
  	// TODO: Use private class fields when targeting Node.js 12.
  	// #_head;
  	// #_tail;
  	// #_size;
  
  	constructor() {
  		this.clear();
  	}
  
  	enqueue(value) {
  		const node = new Node(value);
  
  		if (this._head) {
  			this._tail.next = node;
  			this._tail = node;
  		} else {
  			this._head = node;
  			this._tail = node;
  		}
  
  		this._size++;
  	}
  
  	dequeue() {
  		const current = this._head;
  		if (!current) {
  			return;
  		}
  
  		this._head = this._head.next;
  		this._size--;
  		return current.value;
  	}
  
  	clear() {
  		this._head = undefined;
  		this._tail = undefined;
  		this._size = 0;
  	}
  
  	get size() {
  		return this._size;
  	}
  
  	* [Symbol.iterator]() {
  		let current = this._head;
  
  		while (current) {
  			yield current.value;
  			current = current.next;
  		}
  	}
  }
  
  module.exports = Queue;
  