UNPKG

next

Version:

The React Framework

44 lines (43 loc) 1.86 kB
import { promises } from 'fs'; import { LRUCache } from './lru-cache'; /** * Module-level LRU singleton for disk cache eviction. * Initialized once on first `set()`, shared across all consumers. * Once resolved, the promise stays resolved — subsequent calls just await the cached result. */ let _diskLRUPromise = null; /** * Initialize or return the module-level LRU for disk cache eviction. * Concurrent calls are deduplicated via the shared promise. * * @param cacheDir - The directory where cached files are stored * @param maxDiskSize - Maximum disk cache size in bytes * @param readEntries - Callback to scan existing cache entries (format-agnostic) */ export async function getOrInitDiskLRU(cacheDir, maxDiskSize, readEntries, evictEntry) { if (!_diskLRUPromise) { _diskLRUPromise = (async ()=>{ let maxSize = maxDiskSize; if (typeof maxSize === 'undefined') { // Ensure cacheDir exists before checking disk space await promises.mkdir(cacheDir, { recursive: true }); // Since config was not provided, default to 50% of available disk space const { bavail, bsize } = await promises.statfs(cacheDir); maxSize = Math.floor(bavail * bsize / 2); } const lru = new LRUCache(maxSize, (size)=>size, (cacheKey)=>evictEntry(cacheDir, cacheKey)); const entries = await readEntries(cacheDir); for (const entry of entries){ lru.set(entry.key, entry.size); } return lru; })(); } return _diskLRUPromise; } /** * Reset the module-level LRU singleton. Exported for testing only. */ export function resetDiskLRU() { _diskLRUPromise = null; } //# sourceMappingURL=disk-lru-cache.external.js.map