UNPKG

timed-memoize

Version:
75 lines 2.96 kB
"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); function simple(args) { return args.toString(); } function argsNotEquals(args1, args2) { return args1.some(function (arg, index) { return arg !== args2[index]; }); } function memoized(fn, cache, cleanup, options) { var _a = options.timeout, timeout = _a === void 0 ? 0 : _a, _b = options.hot, hot = _b === void 0 ? true : _b, _c = options.discardUndefined, discardUndefined = _c === void 0 ? false : _c, _d = options.resolver, resolver = _d === void 0 ? simple : _d, _e = options.one, one = _e === void 0 ? false : _e; var actualResolver = one ? function () { return 'key'; } : resolver; var lastArgs = undefined; return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var key = actualResolver(args); function cleanupCallback() { lastArgs = undefined; delete cache[key]; delete cleanup[key]; } if (!(key in cache) || one && (lastArgs === undefined || argsNotEquals(args, lastArgs))) { var returnValue = fn.apply(null, arguments); if (!discardUndefined || typeof returnValue !== 'undefined') { cache[key] = returnValue; if (timeout >= 0) { cleanup[key] = setTimeout(cleanupCallback, timeout); } } } else if (hot) { var oldCleanupCallback = cleanup[key]; if (oldCleanupCallback !== undefined) { clearTimeout(oldCleanupCallback); } if (timeout >= 0) { cleanup[key] = setTimeout(cleanupCallback, timeout); } } lastArgs = args; return cache[key]; }; } function timedMemoize(a, b) { if (typeof a === 'function') { // Memoized function value var fn = a; var options = b || {}; var cache = {}; var cleanup = {}; return memoized(fn, cache, cleanup, options); } else if (typeof a === 'object' || arguments.length === 0) { // Memoized key-value pairs var options = a || {}; var cache = {}; var cleanup = {}; return memoized(function (x, y) { return y; }, cache, cleanup, __assign({}, options, { resolver: function (args) { return args[0].toString(); }, discardUndefined: true })); } else { throw new Error('Invalid arguments'); } } exports.default = timedMemoize; //# sourceMappingURL=index.js.map