.
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
getOrInitDiskLRU: null,
|
||||
resetDiskLRU: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
getOrInitDiskLRU: function() {
|
||||
return getOrInitDiskLRU;
|
||||
},
|
||||
resetDiskLRU: function() {
|
||||
return resetDiskLRU;
|
||||
}
|
||||
});
|
||||
const _fs = require("fs");
|
||||
const _lrucache = require("./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;
|
||||
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 _fs.promises.mkdir(cacheDir, {
|
||||
recursive: true
|
||||
});
|
||||
// Since config was not provided, default to 50% of available disk space
|
||||
const { bavail, bsize } = await _fs.promises.statfs(cacheDir);
|
||||
maxSize = Math.floor(bavail * bsize / 2);
|
||||
}
|
||||
const lru = new _lrucache.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;
|
||||
}
|
||||
function resetDiskLRU() {
|
||||
_diskLRUPromise = null;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=disk-lru-cache.external.js.map
|
||||
Reference in New Issue
Block a user