UNPKG

1.29 kBJavaScriptView Raw
1var safeIsNaN = Number.isNaN ||
2 function ponyfill(value) {
3 return typeof value === 'number' && value !== value;
4 };
5function isEqual(first, second) {
6 if (first === second) {
7 return true;
8 }
9 if (safeIsNaN(first) && safeIsNaN(second)) {
10 return true;
11 }
12 return false;
13}
14function areInputsEqual(newInputs, lastInputs) {
15 if (newInputs.length !== lastInputs.length) {
16 return false;
17 }
18 for (var i = 0; i < newInputs.length; i++) {
19 if (!isEqual(newInputs[i], lastInputs[i])) {
20 return false;
21 }
22 }
23 return true;
24}
25
26function memoizeOne(resultFn, isEqual) {
27 if (isEqual === void 0) { isEqual = areInputsEqual; }
28 var lastThis;
29 var lastArgs = [];
30 var lastResult;
31 var calledOnce = false;
32 function memoized() {
33 var newArgs = [];
34 for (var _i = 0; _i < arguments.length; _i++) {
35 newArgs[_i] = arguments[_i];
36 }
37 if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {
38 return lastResult;
39 }
40 lastResult = resultFn.apply(this, newArgs);
41 calledOnce = true;
42 lastThis = this;
43 lastArgs = newArgs;
44 return lastResult;
45 }
46 return memoized;
47}
48
49export default memoizeOne;