{"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":["getOrInitDiskLRU","resetDiskLRU","_diskLRUPromise","cacheDir","maxDiskSize","readEntries","evictEntry","maxSize","promises","mkdir","recursive","bavail","bsize","statfs","Math","floor","lru","LRUCache","size","cacheKey","entries","entry","set","key"],"mappings":";;;;;;;;;;;;;;;IAkBsBA,gBAAgB;eAAhBA;;IAuCNC,YAAY;eAAZA;;;oBAzDS;0BACA;AAEzB;;;;CAIC,GACD,IAAIC,kBAAoD;AAUjD,eAAeF,iBACpBG,QAAgB,EAChBC,WAA+B,EAC/BC,WAEoE,EACpEC,UAAiE;IAEjE,IAAI,CAACJ,iBAAiB;QACpBA,kBAAkB,AAAC,CAAA;YACjB,IAAIK,UAAUH;YACd,IAAI,OAAOG,YAAY,aAAa;gBAClC,oDAAoD;gBACpD,MAAMC,YAAQ,CAACC,KAAK,CAACN,UAAU;oBAAEO,WAAW;gBAAK;gBACjD,wEAAwE;gBACxE,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG,MAAMJ,YAAQ,CAACK,MAAM,CAACV;gBAChDI,UAAUO,KAAKC,KAAK,CAAC,AAACJ,SAASC,QAAS;YAC1C;YAEA,MAAMI,MAAM,IAAIC,kBAAQ,CACtBV,SACA,CAACW,OAASA,MACV,CAACC,WAAab,WAAWH,UAAUgB;YAGrC,MAAMC,UAAU,MAAMf,YAAYF;YAClC,KAAK,MAAMkB,SAASD,QAAS;gBAC3BJ,IAAIM,GAAG,CAACD,MAAME,GAAG,EAAEF,MAAMH,IAAI;YAC/B;YAEA,OAAOF;QACT,CAAA;IACF;IACA,OAAOd;AACT;AAKO,SAASD;IACdC,kBAAkB;AACpB","ignoreList":[0]}