funky-array/lib/funkyArray.js

75 lines
2.0 KiB
JavaScript
Raw Normal View History

2024-07-02 09:56:53 +01:00
"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;