UNPKG

diffusion

Version:

Diffusion JavaScript client

41 lines (40 loc) 1.23 kB
"use strict"; 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;