You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							69 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							69 lines
						
					
					
						
							1.5 KiB
						
					
					
				'use strict' | 
						|
 | 
						|
const LRU = require('lru-cache') | 
						|
 | 
						|
const MAX_SIZE = 50 * 1024 * 1024 // 50MB | 
						|
const MAX_AGE = 3 * 60 * 1000 | 
						|
 | 
						|
let 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 = clearMemoized | 
						|
function clearMemoized () { | 
						|
  const old = {} | 
						|
  MEMOIZED.forEach((v, k) => { | 
						|
    old[k] = v | 
						|
  }) | 
						|
  MEMOIZED.reset() | 
						|
  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 | 
						|
  } | 
						|
}
 | 
						|
 |