import { MemoCache } from '@naturalcycles/js-lib' import * as LRUCache from 'lru-cache' // Partial, to be able to provide default `max` export type LRUMemoCacheOptions = Partial> /** * @example * Use it like this: * * @_Memo({ cacheFactory: () => new LRUMemoCache({...}) }) * method1 () */ export class LRUMemoCache implements MemoCache { constructor(opt: LRUMemoCacheOptions) { this.lru = new LRUCache({ max: 100, ...opt, }) } private lru!: LRUCache has(k: any): boolean { return this.lru.has(k) } get(k: any): any { return this.lru.get(k) } set(k: any, v: any): void { this.lru.set(k, v) } clear(): void { this.lru.clear() } }