| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | 'use strict'const LRU = require('lru-cache')const MAX_SIZE = 50 * 1024 * 1024 // 50MBconst MAX_AGE = 3 * 60 * 1000let MEMOIZED = new LRU({  max: MAX_SIZE,  maxAge: MAX_AGE,  length: (entry, key) => {    if (key.startsWith('key:')) {      return entry.data.length    } else if (key.startsWith('digest:')) {      return entry.length    }  }})module.exports.clearMemoized = clearMemoizedfunction clearMemoized () {  const old = {}  MEMOIZED.forEach((v, k) => {    old[k] = v  })  MEMOIZED.reset()  return old}module.exports.put = putfunction put (cache, entry, data, opts) {  pickMem(opts).set(`key:${cache}:${entry.key}`, { entry, data })  putDigest(cache, entry.integrity, data, opts)}module.exports.put.byDigest = putDigestfunction putDigest (cache, integrity, data, opts) {  pickMem(opts).set(`digest:${cache}:${integrity}`, data)}module.exports.get = getfunction get (cache, key, opts) {  return pickMem(opts).get(`key:${cache}:${key}`)}module.exports.get.byDigest = getDigestfunction 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  }}
 |