@foxpage/foxpage-manager
Version:
foxpage resource manager
89 lines (88 loc) • 2.04 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.LRUCache = void 0;
const lodash_1 = __importDefault(require("lodash"));
const lru_cache_1 = __importDefault(require("lru-cache"));
/**
* lru cache
*
* @export
* @class LRUCache
* @implements {ResourceCache<T>}
* @template T
*/
class LRUCache {
constructor(maxSize, opt) {
this.lruCache = new lru_cache_1.default({
max: maxSize || 3000, // 0 will be Infinity
});
this.opt = opt;
}
/**
* set resource
*
* @param {string} id
* @param {T} resource
*/
set(id, resource) {
var _a;
this.lruCache.set(id, ((_a = this.opt) === null || _a === void 0 ? void 0 : _a.cloned) === false ? resource : lodash_1.default.cloneDeep(resource));
}
/**
* get resource
*
* @param {string} id
* @return {*} {(T | null | undefined)}
*/
get(id) {
var _a;
const result = this.lruCache.get(id);
return ((_a = this.opt) === null || _a === void 0 ? void 0 : _a.cloned) === false ? result : lodash_1.default.cloneDeep(result);
}
/**
* get count
* @returns count
*/
getCurCount() {
return this.lruCache.itemCount;
}
/**
* has resource
*
* @param {string} id
* @return {*} {boolean}
*/
has(id) {
return this.lruCache.has(id);
}
/**
* delete resource
*
* @param {string} id
*/
delete(id) {
this.lruCache.del(id);
}
/**
* reset
*
*/
destroy() {
this.lruCache.reset();
}
/**
* dump
*
* @return {*} {Array<{ key: string; value: T }>}
*/
dump() {
return this.lruCache.dump().map(({ k: key, v: value }) => ({
key,
value,
}));
}
}
exports.LRUCache = LRUCache;