You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					49 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					49 lines
				
				1.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Gets the index associated with `key` in the backing array, if it is already present.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								let get;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Puts `key` into the backing array, if it is not already present. Returns
							 | 
						||
| 
								 | 
							
								 * the index of the `key` in the backing array.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								let put;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Pops the last added item out of the SetArray.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								let pop;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the
							 | 
						||
| 
								 | 
							
								 * index of the `key` in the backing array.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This is designed to allow synchronizing a second array with the contents of the backing array,
							 | 
						||
| 
								 | 
							
								 * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,
							 | 
						||
| 
								 | 
							
								 * and there are never duplicates.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class SetArray {
							 | 
						||
| 
								 | 
							
								    constructor() {
							 | 
						||
| 
								 | 
							
								        this._indexes = { __proto__: null };
							 | 
						||
| 
								 | 
							
								        this.array = [];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								(() => {
							 | 
						||
| 
								 | 
							
								    get = (strarr, key) => strarr._indexes[key];
							 | 
						||
| 
								 | 
							
								    put = (strarr, key) => {
							 | 
						||
| 
								 | 
							
								        // The key may or may not be present. If it is present, it's a number.
							 | 
						||
| 
								 | 
							
								        const index = get(strarr, key);
							 | 
						||
| 
								 | 
							
								        if (index !== undefined)
							 | 
						||
| 
								 | 
							
								            return index;
							 | 
						||
| 
								 | 
							
								        const { array, _indexes: indexes } = strarr;
							 | 
						||
| 
								 | 
							
								        return (indexes[key] = array.push(key) - 1);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    pop = (strarr) => {
							 | 
						||
| 
								 | 
							
								        const { array, _indexes: indexes } = strarr;
							 | 
						||
| 
								 | 
							
								        if (array.length === 0)
							 | 
						||
| 
								 | 
							
								            return;
							 | 
						||
| 
								 | 
							
								        const last = array.pop();
							 | 
						||
| 
								 | 
							
								        indexes[last] = undefined;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								})();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export { SetArray, get, pop, put };
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=set-array.mjs.map
							 |