memoize-one.cjs.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. 'use strict';
  2. var safeIsNaN = Number.isNaN ||
  3. function ponyfill(value) {
  4. return typeof value === 'number' && value !== value;
  5. };
  6. function isEqual(first, second) {
  7. if (first === second) {
  8. return true;
  9. }
  10. if (safeIsNaN(first) && safeIsNaN(second)) {
  11. return true;
  12. }
  13. return false;
  14. }
  15. function areInputsEqual(newInputs, lastInputs) {
  16. if (newInputs.length !== lastInputs.length) {
  17. return false;
  18. }
  19. for (var i = 0; i < newInputs.length; i++) {
  20. if (!isEqual(newInputs[i], lastInputs[i])) {
  21. return false;
  22. }
  23. }
  24. return true;
  25. }
  26. function 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. module.exports = memoizeOne;