oceanic.js
Version:
A NodeJS library for interfacing with Discord.
76 lines • 6.07 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
/** @module TypedCollection */
const Collection_1 = tslib_1.__importDefault(require("./Collection"));
const Base_1 = tslib_1.__importDefault(require("../structures/Base"));
/** This is an internal class, you should not use it in your projects. If you want a collection type for your own projects, look at {@link Collection}. */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
class TypedCollection extends Collection_1.default {
_baseObject;
extraOptions;
limit;
constructor(baseObject, client, limit = Infinity, extraOptions) {
super();
if (!(baseObject.prototype instanceof Base_1.default)) {
throw new TypeError("baseObject must be a class that extends Base.");
}
this._baseObject = baseObject;
this.limit = limit;
this.extraOptions = {
construct: extraOptions?.construct ?? ((data, ...extra) => new baseObject(data, client, ...extra)),
delete: extraOptions?.delete ?? (() => { })
};
}
/** @hidden */
add(value) {
if ("id" in value) {
if (this.limit === 0) {
return value;
}
this.set(value.id, value);
if (this.limit && this.size > this.limit) {
const iter = this.keys();
while (this.size > this.limit) {
this.delete(iter.next().value);
}
}
return value;
}
else {
const err = new Error(`${this.constructor.name}#add: value must have an id property`);
Object.defineProperty(err, "_object", { value });
throw err;
}
}
clear() {
for (const key of this.keys()) {
this.extraOptions.delete(key);
}
super.clear();
}
delete(key) {
this.extraOptions.delete(key);
return super.delete(key);
}
/** @hidden */
update(value, ...extra) {
if (value instanceof this._baseObject) {
if ("update" in value) {
value["update"].call(value, value);
}
return value;
}
// if the object does not have a direct id, we're forced to construct a whole new object
let item = "id" in value && value.id ? this.get(value.id) : undefined;
if (!item) {
item = this.add(this.extraOptions.construct(value, ...extra));
}
else if ("update" in item) {
item["update"].call(item, value);
}
return item;
}
}
exports.default = TypedCollection;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZWRDb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWwvVHlwZWRDb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhCQUE4QjtBQUM5QixzRUFBc0M7QUFFdEMsc0VBQXNDO0FBU3RDLDBKQUEwSjtBQUMxSiw4REFBOEQ7QUFDOUQsTUFBcUIsZUFBOEYsU0FBUSxvQkFBcUI7SUFDcEksV0FBVyxDQUFvQjtJQUN2QyxZQUFZLENBQWtDO0lBQzlDLEtBQUssQ0FBUztJQUNkLFlBQVksVUFBNkIsRUFBRSxNQUFjLEVBQUUsS0FBSyxHQUFHLFFBQVEsRUFBRSxZQUFvQztRQUM3RyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLFlBQVksY0FBSSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksU0FBUyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDaEIsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssRUFBSyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sRUFBSyxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUMsR0FBUyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1NBQ3RELENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNkLEdBQUcsQ0FBYyxLQUFRO1FBQ3JCLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FB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