{"version":3,"sources":["../../../src/server/lib/disk-lru-cache.external.ts"],"sourcesContent":["import { promises } from 'fs'\nimport { LRUCache } from './lru-cache'\n\n/**\n * Module-level LRU singleton for disk cache eviction.\n * Initialized once on first `set()`, shared across all consumers.\n * Once resolved, the promise stays resolved — subsequent calls just await the cached result.\n */\nlet _diskLRUPromise: Promise<LRUCache<number>> | null = null\n\n/**\n * Initialize or return the module-level LRU for disk cache eviction.\n * Concurrent calls are deduplicated via the shared promise.\n *\n * @param cacheDir - The directory where cached files are stored\n * @param maxDiskSize - Maximum disk cache size in bytes\n * @param readEntries - Callback to scan existing cache entries (format-agnostic)\n */\nexport async function getOrInitDiskLRU(\n  cacheDir: string,\n  maxDiskSize: number | undefined,\n  readEntries: (\n    cacheDir: string\n  ) => Promise<Array<{ key: string; size: number; expireAt: number }>>,\n  evictEntry: (cacheDir: string, cacheKey: string) => Promise<void>\n): Promise<LRUCache<number>> {\n  if (!_diskLRUPromise) {\n    _diskLRUPromise = (async () => {\n      let maxSize = maxDiskSize\n      if (typeof maxSize === 'undefined') {\n        // Ensure cacheDir exists before checking disk space\n        await promises.mkdir(cacheDir, { recursive: true })\n        // Since config was not provided, default to 50% of available disk space\n        const { bavail, bsize } = await promises.statfs(cacheDir)\n        maxSize = Math.floor((bavail * bsize) / 2)\n      }\n\n      const lru = new LRUCache<number>(\n        maxSize,\n        (size) => size,\n        (cacheKey) => evictEntry(cacheDir, cacheKey)\n      )\n\n      const entries = await readEntries(cacheDir)\n      for (const entry of entries) {\n        lru.set(entry.key, entry.size)\n      }\n\n      return lru\n    })()\n  }\n  return _diskLRUPromise\n}\n\n/**\n * Reset the module-level LRU singleton. Exported for testing only.\n */\nexport function resetDiskLRU(): void {\n  _diskLRUPromise = null\n}\n"],"names":["promises","LRUCache","_diskLRUPromise","getOrInitDiskLRU","cacheDir","maxDiskSize","readEntries","evictEntry","maxSize","mkdir","recursive","bavail","bsize","statfs","Math","floor","lru","size","cacheKey","entries","entry","set","key","resetDiskLRU"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,KAAI;AAC7B,SAASC,QAAQ,QAAQ,cAAa;AAEtC;;;;CAIC,GACD,IAAIC,kBAAoD;AAExD;;;;;;;CAOC,GACD,OAAO,eAAeC,iBACpBC,QAAgB,EAChBC,WAA+B,EAC/BC,WAEoE,EACpEC,UAAiE;IAEjE,IAAI,CAACL,iBAAiB;QACpBA,kBAAkB,AAAC,CAAA;YACjB,IAAIM,UAAUH;YACd,IAAI,OAAOG,YAAY,aAAa;gBAClC,oDAAoD;gBACpD,MAAMR,SAASS,KAAK,CAACL,UAAU;oBAAEM,WAAW;gBAAK;gBACjD,wEAAwE;gBACxE,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG,MAAMZ,SAASa,MAAM,CAACT;gBAChDI,UAAUM,KAAKC,KAAK,CAAC,AAACJ,SAASC,QAAS;YAC1C;YAEA,MAAMI,MAAM,IAAIf,SACdO,SACA,CAACS,OAASA,MACV,CAACC,WAAaX,WAAWH,UAAUc;YAGrC,MAAMC,UAAU,MAAMb,YAAYF;YAClC,KAAK,MAAMgB,SAASD,QAAS;gBAC3BH,IAAIK,GAAG,CAACD,MAAME,GAAG,EAAEF,MAAMH,IAAI;YAC/B;YAEA,OAAOD;QACT,CAAA;IACF;IACA,OAAOd;AACT;AAEA;;CAEC,GACD,OAAO,SAASqB;IACdrB,kBAAkB;AACpB","ignoreList":[0]}