75 lines
2.0 KiB
JavaScript
75 lines
2.0 KiB
JavaScript
|
"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;
|