Spaces:
Running
Running
| const { LRUCache } = require('lru-cache') | |
| const MEMOIZED = new LRUCache({ | |
| max: 500, | |
| maxSize: 50 * 1024 * 1024, // 50MB | |
| ttl: 3 * 60 * 1000, // 3 minutes | |
| sizeCalculation: (entry, key) => key.startsWith('key:') ? entry.data.length : entry.length, | |
| }) | |
| module.exports.clearMemoized = clearMemoized | |
| function clearMemoized () { | |
| const old = {} | |
| MEMOIZED.forEach((v, k) => { | |
| old[k] = v | |
| }) | |
| MEMOIZED.clear() | |
| return old | |
| } | |
| module.exports.put = put | |
| function put (cache, entry, data, opts) { | |
| pickMem(opts).set(`key:${cache}:${entry.key}`, { entry, data }) | |
| putDigest(cache, entry.integrity, data, opts) | |
| } | |
| module.exports.put.byDigest = putDigest | |
| function putDigest (cache, integrity, data, opts) { | |
| pickMem(opts).set(`digest:${cache}:${integrity}`, data) | |
| } | |
| module.exports.get = get | |
| function get (cache, key, opts) { | |
| return pickMem(opts).get(`key:${cache}:${key}`) | |
| } | |
| module.exports.get.byDigest = getDigest | |
| function getDigest (cache, integrity, opts) { | |
| return pickMem(opts).get(`digest:${cache}:${integrity}`) | |
| } | |
| class ObjProxy { | |
| constructor (obj) { | |
| this.obj = obj | |
| } | |
| get (key) { | |
| return this.obj[key] | |
| } | |
| set (key, val) { | |
| this.obj[key] = val | |
| } | |
| } | |
| function pickMem (opts) { | |
| if (!opts || !opts.memoize) { | |
| return MEMOIZED | |
| } else if (opts.memoize.get && opts.memoize.set) { | |
| return opts.memoize | |
| } else if (typeof opts.memoize === 'object') { | |
| return new ObjProxy(opts.memoize) | |
| } else { | |
| return MEMOIZED | |
| } | |
| } | |