UNPKG

@ariva-mds/mds

Version:

Stock market data

52 lines (51 loc) 1.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LruCache = void 0; class LruCache { constructor(provider, maxEntries) { this.values = new Map(); this.maxEntries = 200; this.maxEntries = maxEntries; this.provider = provider; } get(arg0) { const cacheKey = JSON.stringify(arg0); const hasKey = this.values.has(cacheKey); if (hasKey) { // peek the entry, re-insert for LRU strategy const entry = this.values.get(cacheKey); this.values.delete(cacheKey); if (entry != undefined) { this.values.set(cacheKey, entry); return new Promise((resolve, reject) => { if (entry != undefined) { resolve(entry); } else { reject("not found"); } }); } else { return new Promise((resolve, reject) => { reject("some error while looking up"); }); } } else { return this.provider(arg0).then(resolved => { this.put(cacheKey, resolved); return resolved; }); } } put(key, value) { if (this.values.size >= this.maxEntries) { // least-recently used cache eviction strategy const keyToDelete = this.values.keys().next().value; this.values.delete(keyToDelete); } this.values.set(key, value); } } exports.LruCache = LruCache;