UNPKG

mout

Version:

Modular Utilities

35 lines (34 loc) 1.38 kB
"use strict"; exports.__esModule = true; var isFunction_1 = require("../lang/isFunction"); var hasOwn_1 = require("../object/hasOwn"); /** * Creates a function that memoizes the result of `fn`. If `resolver` is * provided it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is coerced to a string and used as the * cache key. The `fn` is invoked with the `this` binding of the memoized * function. Modified from lodash. * * @param {Function} fn Function to have its output memoized. * @param {Function} context Function to resolve the cache key. * @return {Function} Returns the new memoized function. */ function memoize(fn, resolver) { if (!isFunction_1["default"](fn) || (resolver && !isFunction_1["default"](resolver))) { throw new TypeError('Expected a function'); } var memoized = function () { var cache = memoized.cache; var key = resolver ? resolver.apply(this, arguments) : arguments[0]; if (hasOwn_1["default"](cache, key)) { return cache[key]; } var result = fn.apply(this, arguments); cache[key] = result; return result; }; memoized.cache = {}; return memoized; } exports["default"] = memoize;