| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | 
							- 'use strict';
 
- const mimicFn = require('mimic-fn');
 
- const cacheStore = new WeakMap();
 
- const defaultCacheKey = function (x) {
 
- 	if (arguments.length === 1 && (x === null || x === undefined || (typeof x !== 'function' && typeof x !== 'object'))) {
 
- 		return x;
 
- 	}
 
- 	return JSON.stringify(arguments);
 
- };
 
- module.exports = (fn, opts) => {
 
- 	opts = Object.assign({
 
- 		cacheKey: defaultCacheKey,
 
- 		cache: new Map()
 
- 	}, opts);
 
- 	const memoized = function () {
 
- 		const cache = cacheStore.get(memoized);
 
- 		const key = opts.cacheKey.apply(null, arguments);
 
- 		if (cache.has(key)) {
 
- 			const c = cache.get(key);
 
- 			if (typeof opts.maxAge !== 'number' || Date.now() < c.maxAge) {
 
- 				return c.data;
 
- 			}
 
- 		}
 
- 		const ret = fn.apply(null, arguments);
 
- 		cache.set(key, {
 
- 			data: ret,
 
- 			maxAge: Date.now() + (opts.maxAge || 0)
 
- 		});
 
- 		return ret;
 
- 	};
 
- 	mimicFn(memoized, fn);
 
- 	cacheStore.set(memoized, opts.cache);
 
- 	return memoized;
 
- };
 
- module.exports.clear = fn => {
 
- 	const cache = cacheStore.get(fn);
 
- 	if (cache && typeof cache.clear === 'function') {
 
- 		cache.clear();
 
- 	}
 
- };
 
 
  |