diffusion
Version:
Diffusion JavaScript client
41 lines (40 loc) • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.memoize = void 0;
var MAXIMUM_CACHE_SIZE = 1000;
/**
* Wrap a function with an automatic memoization layer.
*
* @param function the function to cache results for.
* @param cache the internal cache to use.
* @param matcher the matcher function to return a cache key from an array of arguments
*
* @returns the memoized function
*/
function memoize(f, cache, matcher) {
if (matcher === void 0) { matcher = JSON.stringify; }
var c = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var a = matcher(args);
var r = cache.get(a);
if (r) {
cache.delete(a);
cache.set(a, r);
return r;
}
r = f.apply(f, args);
cache.set(a, r);
if (cache.size > MAXIMUM_CACHE_SIZE) {
var oldestKey = cache.keys().next().value;
cache.delete(oldestKey);
}
return r;
};
// this is only used for unit testing to gain access to the uncached function
c._uncached = f;
return c;
}
exports.memoize = memoize;