mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-02 04:56:07 +00:00
fix(gateway): remove Collection
This commit is contained in:
parent
5225d46a73
commit
815e0f4bf8
@ -1,6 +1,5 @@
|
||||
import { DiscordGatewayPayload } from "../../types/discord.ts";
|
||||
import { PickPartial } from "../../types/shared.ts";
|
||||
import { Collection } from "../../util/collection.ts";
|
||||
import { CreateShard, createShard } from "../shard/createShard.ts";
|
||||
import { Shard, ShardGatewayConfig } from "../shard/types.ts";
|
||||
|
||||
@ -33,7 +32,7 @@ export function createShardManager(options: CreateShardManager) {
|
||||
/** Gateway configuration which is used when creating a Shard. */
|
||||
gatewayConfig: options.gatewayConfig,
|
||||
/** Managed Shards. */
|
||||
shards: new Collection(
|
||||
shards: new Map(
|
||||
options.shardIds.map((shardId) => {
|
||||
const shard = createShard({
|
||||
...options.createShardOptions,
|
||||
|
@ -1,100 +0,0 @@
|
||||
export class Collection<K, V> extends Map<K, V> {
|
||||
maxSize: number | undefined;
|
||||
|
||||
constructor(entries?: (readonly (readonly [K, V])[] | null) | Map<K, V>, options?: CollectionOptions<K, V>) {
|
||||
super(entries ?? []);
|
||||
|
||||
this.maxSize = options?.maxSize;
|
||||
}
|
||||
|
||||
set(key: K, value: V) {
|
||||
// When this collection is maxSized make sure we can add first
|
||||
if ((this.maxSize || this.maxSize === 0) && this.size >= this.maxSize) {
|
||||
return this;
|
||||
}
|
||||
|
||||
return super.set(key, value);
|
||||
}
|
||||
|
||||
forceSet(key: K, value: V) {
|
||||
return super.set(key, value);
|
||||
}
|
||||
|
||||
array() {
|
||||
return [...this.values()];
|
||||
}
|
||||
|
||||
/** Retrieve the value of the first element in this collection */
|
||||
first(): V | undefined {
|
||||
return this.values().next().value;
|
||||
}
|
||||
|
||||
last(): V | undefined {
|
||||
return [...this.values()][this.size - 1];
|
||||
}
|
||||
|
||||
random(): V | undefined {
|
||||
const array = [...this.values()];
|
||||
return array[Math.floor(Math.random() * array.length)];
|
||||
}
|
||||
|
||||
find(callback: (value: V, key: K) => boolean) {
|
||||
for (const key of this.keys()) {
|
||||
const value = this.get(key)!;
|
||||
if (callback(value, key)) return value;
|
||||
}
|
||||
// If nothing matched
|
||||
return;
|
||||
}
|
||||
|
||||
filter(callback: (value: V, key: K) => boolean) {
|
||||
const relevant = new Collection<K, V>();
|
||||
this.forEach((value, key) => {
|
||||
if (callback(value, key)) relevant.set(key, value);
|
||||
});
|
||||
|
||||
return relevant;
|
||||
}
|
||||
|
||||
map<T>(callback: (value: V, key: K) => T) {
|
||||
const results = [];
|
||||
for (const key of this.keys()) {
|
||||
const value = this.get(key)!;
|
||||
results.push(callback(value, key));
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
some(callback: (value: V, key: K) => boolean) {
|
||||
for (const key of this.keys()) {
|
||||
const value = this.get(key)!;
|
||||
if (callback(value, key)) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
every(callback: (value: V, key: K) => boolean) {
|
||||
for (const key of this.keys()) {
|
||||
const value = this.get(key)!;
|
||||
if (!callback(value, key)) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
reduce<T>(callback: (accumulator: T, value: V, key: K) => T, initialValue?: T): T {
|
||||
let accumulator: T = initialValue!;
|
||||
|
||||
for (const key of this.keys()) {
|
||||
const value = this.get(key)!;
|
||||
accumulator = callback(accumulator, value, key);
|
||||
}
|
||||
|
||||
return accumulator;
|
||||
}
|
||||
}
|
||||
|
||||
export interface CollectionOptions<K, V> {
|
||||
maxSize?: number;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user