// a Map that forgets the least recently used entries past max_size export class LruMap { #map = new Map(); readonly max_size: number; constructor(max_size: number) { this.max_size = max_size; } get(key: K): V | undefined { const value = this.#map.get(key); if (value !== undefined) { // maps keep insertion order, so re-inserting moves it to the back this.#map.delete(key); this.#map.set(key, value); } return value; } set(key: K, value: V) { this.#map.delete(key); this.#map.set(key, value); if (this.#map.size > this.max_size) { this.#map.delete(this.#map.keys().next().value!); } } delete(key: K) { this.#map.delete(key); } get size() { return this.#map.size; } }