UNPKG

diffusion

Version:

Diffusion JavaScript client

45 lines (37 loc) 989 B
/*eslint valid-jsdoc: "off"*/ var a2a = require('./array').argumentsToArray; function defaultCacheKey(args) { return args; } /** * Wrap a function with an automatic memoization layer. * * @param {Function} function * - The function to cache results for. * @param {Object} [cache={}] * - The internal cache to use. * @param {Function} [matcher] * - The matcher function to return a cache key from an array of arguments * * @returns {Function} The memoized function */ function memoize(f, cache, matcher) { matcher = matcher || defaultCacheKey; cache = cache || {}; var c = function() { var args = a2a(arguments); var a = matcher(args); var r = cache[a]; if (r) { return r; } else { r = f.apply(f, args); } cache[a] = r; return r; }; // eslint-disable-next-line no-underscore-dangle c._uncached = f; return c; } module.exports = memoize;