47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
(function (global, factory) {
|
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
|
typeof define === 'function' && define.amd ? define(factory) :
|
|
(global.memoizeOne = factory());
|
|
}(this, (function () { 'use strict';
|
|
|
|
var simpleIsEqual = function simpleIsEqual(a, b) {
|
|
return a === b;
|
|
};
|
|
|
|
function index (resultFn, isEqual) {
|
|
if (isEqual === void 0) {
|
|
isEqual = simpleIsEqual;
|
|
}
|
|
|
|
var lastThis;
|
|
var lastArgs = [];
|
|
var lastResult;
|
|
var calledOnce = false;
|
|
|
|
var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {
|
|
return isEqual(newArg, lastArgs[index]);
|
|
};
|
|
|
|
var result = function result() {
|
|
for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
newArgs[_key] = arguments[_key];
|
|
}
|
|
|
|
if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {
|
|
return lastResult;
|
|
}
|
|
|
|
lastResult = resultFn.apply(this, newArgs);
|
|
calledOnce = true;
|
|
lastThis = this;
|
|
lastArgs = newArgs;
|
|
return lastResult;
|
|
};
|
|
|
|
return result;
|
|
}
|
|
|
|
return index;
|
|
|
|
})));
|