UNPKG

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