export class LruMap extends Map { constructor(private maxSize: number, entries?: readonly (readonly [K, V])[] | null) { super(entries); } override set(key: K, value: V): this { if (this.has(key)) { this.delete(key); } else if (this.size >= this.maxSize) { const oldestKey = this.keys().next().value!; this.delete(oldestKey); } super.set(key, value); return this; } override get(key: K): V | undefined { if (!super.has(key)) return undefined; const value = super.get(key)!; this.delete(key); super.set(key, value); return value; } }