import type { CacheAdapter } from "../types"; export class LruCache implements CacheAdapter { private readonly maxEntries: number; private readonly map = new Map(); constructor(maxEntries: number) { if (!Number.isInteger(maxEntries) || maxEntries <= 0) { throw new Error("LruCache maxEntries must be a positive integer."); } this.maxEntries = maxEntries; } get(key: K): V | undefined { if (!this.map.has(key)) { return undefined; } const value = this.map.get(key) as V; this.map.delete(key); this.map.set(key, value); return value; } set(key: K, value: V): void { if (this.map.has(key)) { this.map.delete(key); } this.map.set(key, value); if (this.map.size > this.maxEntries) { const oldestKey = this.map.keys().next().value; if (oldestKey !== undefined) { this.map.delete(oldestKey); } } } has(key: K): boolean { return this.map.has(key); } delete(key: K): void { this.map.delete(key); } clear(): void { this.map.clear(); } }