memoize-one.js 1.7 KB

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