UNPKG

@foxpage/foxpage-manager

Version:

foxpage resource manager

89 lines (88 loc) 2.04 kB
"use strict"; 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;