| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | 
							- "use strict";
 
- module.exports = class SortableSet extends Set {
 
- 	constructor(initialIterable, defaultSort) {
 
- 		super(initialIterable);
 
- 		this._sortFn = defaultSort;
 
- 		this._lastActiveSortFn = null;
 
- 	}
 
- 	/**
 
- 	 * @param {any} value - value to add to set
 
- 	 * @returns {SortableSet} - returns itself
 
- 	 */
 
- 	add(value) {
 
- 		this._lastActiveSortFn = null;
 
- 		super.add(value);
 
- 		return this;
 
- 	}
 
- 	/**
 
- 	 * @param {Function} sortFn - function to sort the set
 
- 	 * @returns {void}
 
- 	 */
 
- 	sortWith(sortFn) {
 
- 		if(this.size === 0 || sortFn === this._lastActiveSortFn) {
 
- 			// already sorted - nothing to do
 
- 			return;
 
- 		}
 
- 		const sortedArray = Array.from(this).sort(sortFn);
 
- 		super.clear();
 
- 		for(let i = 0; i < sortedArray.length; i += 1) {
 
- 			this.add(sortedArray[i]);
 
- 		}
 
- 		this._lastActiveSortFn = sortFn;
 
- 	}
 
- 	/**
 
- 	 * @returns {void}
 
- 	 */
 
- 	sort() {
 
- 		this.sortWith(this._sortFn);
 
- 	}
 
- };
 
 
  |