UNPKG

1.36 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 cache = null;
29 function memoized() {
30 var newArgs = [];
31 for (var _i = 0; _i < arguments.length; _i++) {
32 newArgs[_i] = arguments[_i];
33 }
34 if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {
35 return cache.lastResult;
36 }
37 var lastResult = resultFn.apply(this, newArgs);
38 cache = {
39 lastResult: lastResult,
40 lastArgs: newArgs,
41 lastThis: this,
42 };
43 return lastResult;
44 }
45 memoized.clear = function clear() {
46 cache = null;
47 };
48 return memoized;
49}
50
51export { memoizeOne as default };