"use strict"; // Copyright (c) Catgirl Enterprises - Licensed under MIT // Check LICENSE in repository root for more information. Object.defineProperty(exports, "__esModule", { value: true }); class FunkyArray { constructor() { this.items = new Map(); this.itemKeys = new Array(); } _getKeys() { const keyArray = new Array(); let result; const iterator = this.items.keys(); while (!(result = iterator.next()).done) { keyArray.push(result.value); } return keyArray; } set(key, item, regenerate = true) { this.items.set(key, item); if (regenerate) { this.itemKeys = this._getKeys(); } return item; } remove(key, regenerate = true) { const success = this.items.delete(key); if (regenerate) { this.itemKeys = this._getKeys(); } return success; } removeFirst(regenerate = true) { const success = this.items.delete(this.items.keys().next().value); if (regenerate) { this.itemKeys = this._getKeys(); } return success; } first() { return this.items.values().next().value; } get length() { return this.items.size; } get(key) { return this.items.get(key); } has(key) { return this.itemKeys.includes(key); } get keys() { return this.itemKeys; } forEach(callback) { return new Promise(async (resolve, reject) => { if (this.items.size === 0) { return resolve(true); } try { const iterator = this.items.values(); let result; while (!(result = iterator.next()).done) { await callback(result.value); } resolve(true); } catch (e) { reject(e); } }); } } exports.default = FunkyArray;