UNPKG

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