devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
52 lines (51 loc) • 1.89 kB
JavaScript
/**
* DevExtreme (esm/__internal/utils/memoize.js)
* Version: 23.2.6
* Build date: Wed May 01 2024
*
* Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
equalByValue
} from "../../core/utils/common";
var compareByReference = (args, lastArgs) => args.length === lastArgs.length && !Object.keys(args).some(key => args[key] !== lastArgs[key]);
var compareByValue = (args, lastArgs) => equalByValue(args, lastArgs, {
maxDepth: 4
});
var createCacheFunc = (firstArgs, firstResult, originFunc, compareFunc) => {
var lastArgs = firstArgs;
var lastResult = firstResult;
return function() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key]
}
var argsEquals = compareFunc(args, lastArgs);
if (argsEquals) {
return lastResult
}
lastArgs = args;
lastResult = originFunc(...lastArgs);
return lastResult
}
};
var MEMOIZE_DEFAULT_OPTIONS = {
compareType: "reference"
};
export var memoize = function(func) {
var {
compareType: compareType
} = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : MEMOIZE_DEFAULT_OPTIONS;
var cachedFunc = null;
return function() {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2]
}
if (!cachedFunc) {
var firstResult = func(...args);
cachedFunc = createCacheFunc(args, firstResult, func, "reference" === compareType ? compareByReference : compareByValue);
return firstResult
}
return cachedFunc(...args)
}
};