| /** | |
| * @license | |
| * Copyright 2025 Google LLC | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| export class LruCache<K, V> { | |
| private cache: Map<K, V>; | |
| private maxSize: number; | |
| constructor(maxSize: number) { | |
| this.cache = new Map<K, V>(); | |
| this.maxSize = maxSize; | |
| } | |
| get(key: K): V | undefined { | |
| const value = this.cache.get(key); | |
| if (value) { | |
| // Move to end to mark as recently used | |
| this.cache.delete(key); | |
| this.cache.set(key, value); | |
| } | |
| return value; | |
| } | |
| set(key: K, value: V): void { | |
| if (this.cache.has(key)) { | |
| this.cache.delete(key); | |
| } else if (this.cache.size >= this.maxSize) { | |
| const firstKey = this.cache.keys().next().value; | |
| if (firstKey !== undefined) { | |
| this.cache.delete(firstKey); | |
| } | |
| } | |
| this.cache.set(key, value); | |
| } | |
| clear(): void { | |
| this.cache.clear(); | |
| } | |
| } | |