Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

104 строки
3.5 KiB

  1. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  2. function defaultEqualityCheck(a, b) {
  3. return a === b;
  4. }
  5. export function defaultMemoize(func) {
  6. var equalityCheck = arguments.length <= 1 || arguments[1] === undefined ? defaultEqualityCheck : arguments[1];
  7. var lastArgs = null;
  8. var lastResult = null;
  9. return function () {
  10. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  11. args[_key] = arguments[_key];
  12. }
  13. if (lastArgs === null || lastArgs.length !== args.length || !args.every(function (value, index) {
  14. return equalityCheck(value, lastArgs[index]);
  15. })) {
  16. lastResult = func.apply(undefined, args);
  17. }
  18. lastArgs = args;
  19. return lastResult;
  20. };
  21. }
  22. function getDependencies(funcs) {
  23. var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;
  24. if (!dependencies.every(function (dep) {
  25. return typeof dep === 'function';
  26. })) {
  27. var dependencyTypes = dependencies.map(function (dep) {
  28. return typeof dep;
  29. }).join(', ');
  30. throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));
  31. }
  32. return dependencies;
  33. }
  34. export function createSelectorCreator(memoize) {
  35. for (var _len2 = arguments.length, memoizeOptions = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
  36. memoizeOptions[_key2 - 1] = arguments[_key2];
  37. }
  38. return function () {
  39. for (var _len3 = arguments.length, funcs = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
  40. funcs[_key3] = arguments[_key3];
  41. }
  42. var recomputations = 0;
  43. var resultFunc = funcs.pop();
  44. var dependencies = getDependencies(funcs);
  45. var memoizedResultFunc = memoize.apply(undefined, [function () {
  46. recomputations++;
  47. return resultFunc.apply(undefined, arguments);
  48. }].concat(memoizeOptions));
  49. var selector = function selector(state, props) {
  50. for (var _len4 = arguments.length, args = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {
  51. args[_key4 - 2] = arguments[_key4];
  52. }
  53. var params = dependencies.map(function (dependency) {
  54. return dependency.apply(undefined, [state, props].concat(args));
  55. });
  56. return memoizedResultFunc.apply(undefined, _toConsumableArray(params));
  57. };
  58. selector.resultFunc = resultFunc;
  59. selector.recomputations = function () {
  60. return recomputations;
  61. };
  62. selector.resetRecomputations = function () {
  63. return recomputations = 0;
  64. };
  65. return selector;
  66. };
  67. }
  68. export var createSelector = createSelectorCreator(defaultMemoize);
  69. export function createStructuredSelector(selectors) {
  70. var selectorCreator = arguments.length <= 1 || arguments[1] === undefined ? createSelector : arguments[1];
  71. if (typeof selectors !== 'object') {
  72. throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));
  73. }
  74. var objectKeys = Object.keys(selectors);
  75. return selectorCreator(objectKeys.map(function (key) {
  76. return selectors[key];
  77. }), function () {
  78. for (var _len5 = arguments.length, values = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
  79. values[_key5] = arguments[_key5];
  80. }
  81. return values.reduce(function (composition, value, index) {
  82. composition[objectKeys[index]] = value;
  83. return composition;
  84. }, {});
  85. });
  86. }