memoize-one.esm.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. var safeIsNaN = Number.isNaN ||
  2. function ponyfill(value) {
  3. return typeof value === 'number' && value !== value;
  4. };
  5. function 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. }
  14. function 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. function memoizeOne(resultFn, isEqual) {
  26. if (isEqual === void 0) { isEqual = areInputsEqual; }
  27. var cache = null;
  28. function memoized() {
  29. var newArgs = [];
  30. for (var _i = 0; _i < arguments.length; _i++) {
  31. newArgs[_i] = arguments[_i];
  32. }
  33. if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {
  34. return cache.lastResult;
  35. }
  36. var lastResult = resultFn.apply(this, newArgs);
  37. cache = {
  38. lastResult: lastResult,
  39. lastArgs: newArgs,
  40. lastThis: this,
  41. };
  42. return lastResult;
  43. }
  44. memoized.clear = function clear() {
  45. cache = null;
  46. };
  47. return memoized;
  48. }
  49. export { memoizeOne as default };