@wordpress/data 9.9.0 → 9.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/async-mode-provider/context.js +2 -3
  3. package/build/components/async-mode-provider/context.js.map +1 -1
  4. package/build/components/async-mode-provider/index.js +0 -5
  5. package/build/components/async-mode-provider/index.js.map +1 -1
  6. package/build/components/async-mode-provider/use-async-mode.js +1 -3
  7. package/build/components/async-mode-provider/use-async-mode.js.map +1 -1
  8. package/build/components/registry-provider/context.js +3 -6
  9. package/build/components/registry-provider/context.js.map +1 -1
  10. package/build/components/registry-provider/index.js +0 -5
  11. package/build/components/registry-provider/index.js.map +1 -1
  12. package/build/components/registry-provider/use-registry.js +0 -3
  13. package/build/components/registry-provider/use-registry.js.map +1 -1
  14. package/build/components/use-dispatch/index.js +0 -3
  15. package/build/components/use-dispatch/index.js.map +1 -1
  16. package/build/components/use-dispatch/use-dispatch-with-map.js +0 -7
  17. package/build/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
  18. package/build/components/use-dispatch/use-dispatch.js +0 -5
  19. package/build/components/use-dispatch/use-dispatch.js.map +1 -1
  20. package/build/components/use-select/index.js +35 -53
  21. package/build/components/use-select/index.js.map +1 -1
  22. package/build/components/with-dispatch/index.js +2 -7
  23. package/build/components/with-dispatch/index.js.map +1 -1
  24. package/build/components/with-registry/index.js +2 -5
  25. package/build/components/with-registry/index.js.map +1 -1
  26. package/build/components/with-select/index.js +2 -8
  27. package/build/components/with-select/index.js.map +1 -1
  28. package/build/controls.js +4 -10
  29. package/build/controls.js.map +1 -1
  30. package/build/default-registry.js +0 -3
  31. package/build/default-registry.js.map +1 -1
  32. package/build/dispatch.js +0 -3
  33. package/build/dispatch.js.map +1 -1
  34. package/build/factory.js +2 -5
  35. package/build/factory.js.map +1 -1
  36. package/build/index.js +7 -28
  37. package/build/index.js.map +1 -1
  38. package/build/lock-unlock.js +1 -2
  39. package/build/lock-unlock.js.map +1 -1
  40. package/build/plugins/index.js +0 -2
  41. package/build/plugins/index.js.map +1 -1
  42. package/build/plugins/persistence/index.js +13 -37
  43. package/build/plugins/persistence/index.js.map +1 -1
  44. package/build/plugins/persistence/storage/default.js +1 -5
  45. package/build/plugins/persistence/storage/default.js.map +1 -1
  46. package/build/plugins/persistence/storage/object.js +0 -5
  47. package/build/plugins/persistence/storage/object.js.map +1 -1
  48. package/build/promise-middleware.js +0 -5
  49. package/build/promise-middleware.js.map +1 -1
  50. package/build/redux-store/index.js +36 -117
  51. package/build/redux-store/index.js.map +1 -1
  52. package/build/redux-store/metadata/actions.js +8 -17
  53. package/build/redux-store/metadata/actions.js.map +1 -1
  54. package/build/redux-store/metadata/equivalent-key-map.d.js.map +1 -1
  55. package/build/redux-store/metadata/reducer.js +1 -23
  56. package/build/redux-store/metadata/reducer.js.map +1 -1
  57. package/build/redux-store/metadata/selectors.js +8 -22
  58. package/build/redux-store/metadata/selectors.js.map +1 -1
  59. package/build/redux-store/metadata/utils.js +6 -14
  60. package/build/redux-store/metadata/utils.js.map +1 -1
  61. package/build/redux-store/thunk-middleware.js +0 -2
  62. package/build/redux-store/thunk-middleware.js.map +1 -1
  63. package/build/registry.js +29 -73
  64. package/build/registry.js.map +1 -1
  65. package/build/resolvers-cache-middleware.js +2 -8
  66. package/build/resolvers-cache-middleware.js.map +1 -1
  67. package/build/select.js +0 -3
  68. package/build/select.js.map +1 -1
  69. package/build/store/index.js +0 -7
  70. package/build/store/index.js.map +1 -1
  71. package/build/types.js.map +1 -1
  72. package/build/utils/emitter.js +2 -11
  73. package/build/utils/emitter.js.map +1 -1
  74. package/build-module/components/async-mode-provider/context.js +1 -1
  75. package/build-module/components/async-mode-provider/context.js.map +1 -1
  76. package/build-module/components/async-mode-provider/index.js.map +1 -1
  77. package/build-module/components/async-mode-provider/use-async-mode.js +1 -1
  78. package/build-module/components/async-mode-provider/use-async-mode.js.map +1 -1
  79. package/build-module/components/registry-provider/context.js +3 -3
  80. package/build-module/components/registry-provider/context.js.map +1 -1
  81. package/build-module/components/registry-provider/index.js.map +1 -1
  82. package/build-module/components/registry-provider/use-registry.js +2 -2
  83. package/build-module/components/registry-provider/use-registry.js.map +1 -1
  84. package/build-module/components/use-dispatch/index.js.map +1 -1
  85. package/build-module/components/use-dispatch/use-dispatch-with-map.js +2 -4
  86. package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
  87. package/build-module/components/use-dispatch/use-dispatch.js +1 -3
  88. package/build-module/components/use-dispatch/use-dispatch.js.map +1 -1
  89. package/build-module/components/use-select/index.js +35 -46
  90. package/build-module/components/use-select/index.js.map +1 -1
  91. package/build-module/components/with-dispatch/index.js +4 -6
  92. package/build-module/components/with-dispatch/index.js.map +1 -1
  93. package/build-module/components/with-registry/index.js +4 -4
  94. package/build-module/components/with-registry/index.js.map +1 -1
  95. package/build-module/components/with-select/index.js +4 -6
  96. package/build-module/components/with-select/index.js.map +1 -1
  97. package/build-module/controls.js +4 -8
  98. package/build-module/controls.js.map +1 -1
  99. package/build-module/default-registry.js.map +1 -1
  100. package/build-module/dispatch.js +2 -1
  101. package/build-module/dispatch.js.map +1 -1
  102. package/build-module/factory.js +2 -3
  103. package/build-module/factory.js.map +1 -1
  104. package/build-module/index.js +11 -10
  105. package/build-module/index.js.map +1 -1
  106. package/build-module/lock-unlock.js.map +1 -1
  107. package/build-module/plugins/index.js.map +1 -1
  108. package/build-module/plugins/persistence/index.js +15 -30
  109. package/build-module/plugins/persistence/index.js.map +1 -1
  110. package/build-module/plugins/persistence/storage/default.js +0 -2
  111. package/build-module/plugins/persistence/storage/default.js.map +1 -1
  112. package/build-module/plugins/persistence/storage/object.js +0 -5
  113. package/build-module/plugins/persistence/storage/object.js.map +1 -1
  114. package/build-module/promise-middleware.js +1 -3
  115. package/build-module/promise-middleware.js.map +1 -1
  116. package/build-module/redux-store/index.js +38 -101
  117. package/build-module/redux-store/index.js.map +1 -1
  118. package/build-module/redux-store/metadata/actions.js +8 -8
  119. package/build-module/redux-store/metadata/actions.js.map +1 -1
  120. package/build-module/redux-store/metadata/equivalent-key-map.d.js.map +1 -1
  121. package/build-module/redux-store/metadata/reducer.js +1 -21
  122. package/build-module/redux-store/metadata/reducer.js.map +1 -1
  123. package/build-module/redux-store/metadata/selectors.js +9 -13
  124. package/build-module/redux-store/metadata/selectors.js.map +1 -1
  125. package/build-module/redux-store/metadata/utils.js +6 -11
  126. package/build-module/redux-store/metadata/utils.js.map +1 -1
  127. package/build-module/redux-store/thunk-middleware.js +0 -1
  128. package/build-module/redux-store/thunk-middleware.js.map +1 -1
  129. package/build-module/registry.js +30 -67
  130. package/build-module/registry.js.map +1 -1
  131. package/build-module/resolvers-cache-middleware.js +3 -6
  132. package/build-module/resolvers-cache-middleware.js.map +1 -1
  133. package/build-module/select.js +2 -1
  134. package/build-module/select.js.map +1 -1
  135. package/build-module/store/index.js +0 -7
  136. package/build-module/store/index.js.map +1 -1
  137. package/build-module/types.js.map +1 -1
  138. package/build-module/utils/emitter.js +2 -10
  139. package/build-module/utils/emitter.js.map +1 -1
  140. package/build-types/components/use-select/index.d.ts.map +1 -1
  141. package/build-types/index.d.ts +1 -1
  142. package/build-types/index.d.ts.map +1 -1
  143. package/build-types/plugins/persistence/index.d.ts.map +1 -1
  144. package/build-types/store/index.d.ts +1 -1
  145. package/package.json +9 -9
  146. package/src/components/use-select/index.js +14 -0
  147. package/src/plugins/persistence/index.js +0 -1
  148. package/tsconfig.tsbuildinfo +1 -1
@@ -1,42 +1,25 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = createReduxStore;
9
-
10
8
  var _redux = require("redux");
11
-
12
9
  var _turboCombineReducers = _interopRequireDefault(require("turbo-combine-reducers"));
13
-
14
10
  var _equivalentKeyMap = _interopRequireDefault(require("equivalent-key-map"));
15
-
16
11
  var _reduxRoutine = _interopRequireDefault(require("@wordpress/redux-routine"));
17
-
18
12
  var _compose = require("@wordpress/compose");
19
-
20
13
  var _controls = require("../controls");
21
-
22
14
  var _lockUnlock = require("../lock-unlock");
23
-
24
15
  var _promiseMiddleware = _interopRequireDefault(require("../promise-middleware"));
25
-
26
16
  var _resolversCacheMiddleware = _interopRequireDefault(require("../resolvers-cache-middleware"));
27
-
28
17
  var _thunkMiddleware = _interopRequireDefault(require("./thunk-middleware"));
29
-
30
18
  var _reducer = _interopRequireDefault(require("./metadata/reducer"));
31
-
32
19
  var metadataSelectors = _interopRequireWildcard(require("./metadata/selectors"));
33
-
34
20
  var metadataActions = _interopRequireWildcard(require("./metadata/actions"));
35
-
36
21
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
-
38
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
-
40
23
  /**
41
24
  * External dependencies
42
25
  */
@@ -50,31 +33,28 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
50
33
  */
51
34
 
52
35
  /** @typedef {import('../types').DataRegistry} DataRegistry */
53
-
54
36
  /** @typedef {import('../types').ListenerFunction} ListenerFunction */
55
-
56
37
  /**
57
38
  * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor
58
39
  * @template {import('../types').AnyConfig} C
59
40
  */
60
-
61
41
  /**
62
42
  * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig
63
43
  * @template State
64
44
  * @template {Record<string,import('../../types').ActionCreator>} Actions
65
45
  * @template Selectors
66
46
  */
47
+
67
48
  const trimUndefinedValues = array => {
68
49
  const result = [...array];
69
-
70
50
  for (let i = result.length - 1; i >= 0; i--) {
71
51
  if (result[i] === undefined) {
72
52
  result.splice(i, 1);
73
53
  }
74
54
  }
75
-
76
55
  return result;
77
56
  };
57
+
78
58
  /**
79
59
  * Creates a new object with the same keys, but with `callback()` called as
80
60
  * a transformer function on each of the values.
@@ -83,65 +63,54 @@ const trimUndefinedValues = array => {
83
63
  * @param {Function} callback The function to transform each object value.
84
64
  * @return {Array} Transformed object.
85
65
  */
66
+ const mapValues = (obj, callback) => Object.fromEntries(Object.entries(obj !== null && obj !== void 0 ? obj : {}).map(([key, value]) => [key, callback(value, key)]));
86
67
 
87
-
88
- const mapValues = (obj, callback) => Object.fromEntries(Object.entries(obj !== null && obj !== void 0 ? obj : {}).map(([key, value]) => [key, callback(value, key)])); // Convert Map objects to plain objects
89
-
90
-
68
+ // Convert Map objects to plain objects
91
69
  const mapToObject = (key, state) => {
92
70
  if (state instanceof Map) {
93
71
  return Object.fromEntries(state);
94
72
  }
95
-
96
73
  return state;
97
74
  };
75
+
98
76
  /**
99
77
  * Create a cache to track whether resolvers started running or not.
100
78
  *
101
79
  * @return {Object} Resolvers Cache.
102
80
  */
103
-
104
-
105
81
  function createResolversCache() {
106
82
  const cache = {};
107
83
  return {
108
84
  isRunning(selectorName, args) {
109
85
  return cache[selectorName] && cache[selectorName].get(trimUndefinedValues(args));
110
86
  },
111
-
112
87
  clear(selectorName, args) {
113
88
  if (cache[selectorName]) {
114
89
  cache[selectorName].delete(trimUndefinedValues(args));
115
90
  }
116
91
  },
117
-
118
92
  markAsRunning(selectorName, args) {
119
93
  if (!cache[selectorName]) {
120
94
  cache[selectorName] = new _equivalentKeyMap.default();
121
95
  }
122
-
123
96
  cache[selectorName].set(trimUndefinedValues(args), true);
124
97
  }
125
-
126
98
  };
127
99
  }
128
-
129
100
  function createBindingCache(bind) {
130
101
  const cache = new WeakMap();
131
102
  return {
132
103
  get(item, itemName) {
133
104
  let boundItem = cache.get(item);
134
-
135
105
  if (!boundItem) {
136
106
  boundItem = bind(item, itemName);
137
107
  cache.set(item, boundItem);
138
108
  }
139
-
140
109
  return boundItem;
141
110
  }
142
-
143
111
  };
144
112
  }
113
+
145
114
  /**
146
115
  * Creates a data store descriptor for the provided Redux store configuration containing
147
116
  * properties describing reducer, actions, selectors, controls and resolvers.
@@ -168,8 +137,6 @@ function createBindingCache(bind) {
168
137
  *
169
138
  * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.
170
139
  */
171
-
172
-
173
140
  function createReduxStore(key, options) {
174
141
  const privateActions = {};
175
142
  const privateSelectors = {};
@@ -202,31 +169,26 @@ function createReduxStore(key, options) {
202
169
  const reducer = options.reducer;
203
170
  const thunkArgs = {
204
171
  registry,
205
-
206
172
  get dispatch() {
207
173
  return thunkActions;
208
174
  },
209
-
210
175
  get select() {
211
176
  return thunkSelectors;
212
177
  },
213
-
214
178
  get resolveSelect() {
215
179
  return getResolveSelectors();
216
180
  }
217
-
218
181
  };
219
- const store = instantiateReduxStore(key, options, registry, thunkArgs); // Expose the private registration functions on the store
182
+ const store = instantiateReduxStore(key, options, registry, thunkArgs);
183
+ // Expose the private registration functions on the store
220
184
  // so they can be copied to a sub registry in registry.js.
221
-
222
185
  (0, _lockUnlock.lock)(store, privateRegistrationFunctions);
223
186
  const resolversCache = createResolversCache();
224
-
225
187
  function bindAction(action) {
226
188
  return (...args) => Promise.resolve(store.dispatch(action(...args)));
227
189
  }
228
-
229
- const actions = { ...mapValues(metadataActions, bindAction),
190
+ const actions = {
191
+ ...mapValues(metadataActions, bindAction),
230
192
  ...mapValues(options.actions, bindAction)
231
193
  };
232
194
  const boundPrivateActions = createBindingCache(bindAction);
@@ -241,49 +203,40 @@ function createReduxStore(key, options) {
241
203
  });
242
204
  (0, _lockUnlock.lock)(actions, allActions);
243
205
  const resolvers = options.resolvers ? mapResolvers(options.resolvers) : {};
244
-
245
206
  function bindSelector(selector, selectorName) {
246
207
  if (selector.isRegistrySelector) {
247
208
  selector.registry = registry;
248
209
  }
249
-
250
210
  const boundSelector = (...args) => {
251
211
  const state = store.__unstableOriginalGetState();
252
-
253
212
  return selector(state.root, ...args);
254
213
  };
255
-
256
214
  const resolver = resolvers[selectorName];
257
-
258
215
  if (!resolver) {
259
216
  boundSelector.hasResolver = false;
260
217
  return boundSelector;
261
218
  }
262
-
263
219
  return mapSelectorWithResolver(boundSelector, selectorName, resolver, store, resolversCache);
264
220
  }
265
-
266
221
  function bindMetadataSelector(selector) {
267
222
  const boundSelector = (...args) => {
268
223
  const state = store.__unstableOriginalGetState();
269
-
270
224
  return selector(state.metadata, ...args);
271
225
  };
272
-
273
226
  boundSelector.hasResolver = false;
274
227
  return boundSelector;
275
228
  }
276
-
277
- const selectors = { ...mapValues(metadataSelectors, bindMetadataSelector),
229
+ const selectors = {
230
+ ...mapValues(metadataSelectors, bindMetadataSelector),
278
231
  ...mapValues(options.selectors, bindSelector)
279
232
  };
280
- const boundPrivateSelectors = createBindingCache(bindSelector); // Pre-bind the private selectors that have been registered by the time of
281
- // instantiation, so that registry selectors are bound to the registry.
233
+ const boundPrivateSelectors = createBindingCache(bindSelector);
282
234
 
235
+ // Pre-bind the private selectors that have been registered by the time of
236
+ // instantiation, so that registry selectors are bound to the registry.
283
237
  for (const [selectorName, selector] of Object.entries(privateSelectors)) {
284
238
  boundPrivateSelectors.get(selector, selectorName);
285
239
  }
286
-
287
240
  const allSelectors = new Proxy(() => {}, {
288
241
  get: (target, prop) => {
289
242
  const privateSelector = privateSelectors[prop];
@@ -296,45 +249,37 @@ function createReduxStore(key, options) {
296
249
  (0, _lockUnlock.lock)(selectors, allSelectors);
297
250
  const resolveSelectors = mapResolveSelectors(selectors, store);
298
251
  const suspendSelectors = mapSuspendSelectors(selectors, store);
299
-
300
252
  const getSelectors = () => selectors;
301
-
302
253
  const getActions = () => actions;
303
-
304
254
  const getResolveSelectors = () => resolveSelectors;
255
+ const getSuspendSelectors = () => suspendSelectors;
305
256
 
306
- const getSuspendSelectors = () => suspendSelectors; // We have some modules monkey-patching the store object
257
+ // We have some modules monkey-patching the store object
307
258
  // It's wrong to do so but until we refactor all of our effects to controls
308
259
  // We need to keep the same "store" instance here.
309
-
310
-
311
260
  store.__unstableOriginalGetState = store.getState;
261
+ store.getState = () => store.__unstableOriginalGetState().root;
312
262
 
313
- store.getState = () => store.__unstableOriginalGetState().root; // Customize subscribe behavior to call listeners only on effective change,
263
+ // Customize subscribe behavior to call listeners only on effective change,
314
264
  // not on every dispatch.
315
-
316
-
317
265
  const subscribe = store && (listener => {
318
266
  listeners.add(listener);
319
267
  return () => listeners.delete(listener);
320
268
  });
321
-
322
269
  let lastState = store.__unstableOriginalGetState();
323
-
324
270
  store.subscribe(() => {
325
271
  const state = store.__unstableOriginalGetState();
326
-
327
272
  const hasChanged = state !== lastState;
328
273
  lastState = state;
329
-
330
274
  if (hasChanged) {
331
275
  for (const listener of listeners) {
332
276
  listener();
333
277
  }
334
278
  }
335
- }); // This can be simplified to just { subscribe, getSelectors, getActions }
336
- // Once we remove the use function.
279
+ });
337
280
 
281
+ // This can be simplified to just { subscribe, getSelectors, getActions }
282
+ // Once we remove the use function.
338
283
  return {
339
284
  reducer,
340
285
  store,
@@ -348,13 +293,15 @@ function createReduxStore(key, options) {
348
293
  subscribe
349
294
  };
350
295
  }
351
- }; // Expose the private registration functions on the store
296
+ };
297
+
298
+ // Expose the private registration functions on the store
352
299
  // descriptor. That's a natural choice since that's where the
353
300
  // public actions and selectors are stored .
354
-
355
301
  (0, _lockUnlock.lock)(storeDescriptor, privateRegistrationFunctions);
356
302
  return storeDescriptor;
357
303
  }
304
+
358
305
  /**
359
306
  * Creates a redux store for a namespace.
360
307
  *
@@ -366,16 +313,14 @@ function createReduxStore(key, options) {
366
313
  * @param {Object} thunkArgs Argument object for the thunk middleware.
367
314
  * @return {Object} Newly created redux store.
368
315
  */
369
-
370
-
371
316
  function instantiateReduxStore(key, options, registry, thunkArgs) {
372
- const controls = { ...options.controls,
317
+ const controls = {
318
+ ...options.controls,
373
319
  ..._controls.builtinControls
374
320
  };
375
321
  const normalizedControls = mapValues(controls, control => control.isRegistryControl ? control(registry) : control);
376
322
  const middlewares = [(0, _resolversCacheMiddleware.default)(registry, key), _promiseMiddleware.default, (0, _reduxRoutine.default)(normalizedControls), (0, _thunkMiddleware.default)(thunkArgs)];
377
323
  const enhancers = [(0, _redux.applyMiddleware)(...middlewares)];
378
-
379
324
  if (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__) {
380
325
  enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__({
381
326
  name: key,
@@ -385,7 +330,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
385
330
  }
386
331
  }));
387
332
  }
388
-
389
333
  const {
390
334
  reducer,
391
335
  initialState
@@ -398,6 +342,7 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
398
342
  root: initialState
399
343
  }, (0, _compose.compose)(enhancers));
400
344
  }
345
+
401
346
  /**
402
347
  * Maps selectors to functions that return a resolution promise for them
403
348
  *
@@ -406,8 +351,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
406
351
  *
407
352
  * @return {Object} Selectors mapped to their resolution functions.
408
353
  */
409
-
410
-
411
354
  function mapResolveSelectors(selectors, store) {
412
355
  const {
413
356
  getIsResolving,
@@ -427,14 +370,11 @@ function mapResolveSelectors(selectors, store) {
427
370
  if (!selector.hasResolver) {
428
371
  return async (...args) => selector.apply(null, args);
429
372
  }
430
-
431
373
  return (...args) => {
432
374
  return new Promise((resolve, reject) => {
433
375
  const hasFinished = () => selectors.hasFinishedResolution(selectorName, args);
434
-
435
376
  const finalize = result => {
436
377
  const hasFailed = selectors.hasResolutionFailed(selectorName, args);
437
-
438
378
  if (hasFailed) {
439
379
  const error = selectors.getResolutionError(selectorName, args);
440
380
  reject(error);
@@ -442,16 +382,12 @@ function mapResolveSelectors(selectors, store) {
442
382
  resolve(result);
443
383
  }
444
384
  };
445
-
446
- const getResult = () => selector.apply(null, args); // Trigger the selector (to trigger the resolver)
447
-
448
-
385
+ const getResult = () => selector.apply(null, args);
386
+ // Trigger the selector (to trigger the resolver)
449
387
  const result = getResult();
450
-
451
388
  if (hasFinished()) {
452
389
  return finalize(result);
453
390
  }
454
-
455
391
  const unsubscribe = store.subscribe(() => {
456
392
  if (hasFinished()) {
457
393
  unsubscribe();
@@ -462,6 +398,7 @@ function mapResolveSelectors(selectors, store) {
462
398
  };
463
399
  });
464
400
  }
401
+
465
402
  /**
466
403
  * Maps selectors to functions that throw a suspense promise if not yet resolved.
467
404
  *
@@ -470,26 +407,20 @@ function mapResolveSelectors(selectors, store) {
470
407
  *
471
408
  * @return {Object} Selectors mapped to their suspense functions.
472
409
  */
473
-
474
-
475
410
  function mapSuspendSelectors(selectors, store) {
476
411
  return mapValues(selectors, (selector, selectorName) => {
477
412
  // Selector without a resolver doesn't have any extra suspense behavior.
478
413
  if (!selector.hasResolver) {
479
414
  return selector;
480
415
  }
481
-
482
416
  return (...args) => {
483
417
  const result = selector.apply(null, args);
484
-
485
418
  if (selectors.hasFinishedResolution(selectorName, args)) {
486
419
  if (selectors.hasResolutionFailed(selectorName, args)) {
487
420
  throw selectors.getResolutionError(selectorName, args);
488
421
  }
489
-
490
422
  return result;
491
423
  }
492
-
493
424
  throw new Promise(resolve => {
494
425
  const unsubscribe = store.subscribe(() => {
495
426
  if (selectors.hasFinishedResolution(selectorName, args)) {
@@ -501,27 +432,26 @@ function mapSuspendSelectors(selectors, store) {
501
432
  };
502
433
  });
503
434
  }
435
+
504
436
  /**
505
437
  * Convert resolvers to a normalized form, an object with `fulfill` method and
506
438
  * optional methods like `isFulfilled`.
507
439
  *
508
440
  * @param {Object} resolvers Resolver to convert
509
441
  */
510
-
511
-
512
442
  function mapResolvers(resolvers) {
513
443
  return mapValues(resolvers, resolver => {
514
444
  if (resolver.fulfill) {
515
445
  return resolver;
516
446
  }
517
-
518
- return { ...resolver,
447
+ return {
448
+ ...resolver,
519
449
  // Copy the enumerable properties of the resolver function.
520
450
  fulfill: resolver // Add the fulfill method.
521
-
522
451
  };
523
452
  });
524
453
  }
454
+
525
455
  /**
526
456
  * Returns a selector with a matched resolver.
527
457
  * Resolvers are side effects invoked once per argument set of a given selector call,
@@ -533,48 +463,37 @@ function mapResolvers(resolvers) {
533
463
  * @param {Object} store The redux store to which the resolvers should be mapped.
534
464
  * @param {Object} resolversCache Resolvers Cache.
535
465
  */
536
-
537
-
538
466
  function mapSelectorWithResolver(selector, selectorName, resolver, store, resolversCache) {
539
467
  function fulfillSelector(args) {
540
468
  const state = store.getState();
541
-
542
469
  if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === 'function' && resolver.isFulfilled(state, ...args)) {
543
470
  return;
544
471
  }
545
-
546
472
  const {
547
473
  metadata
548
474
  } = store.__unstableOriginalGetState();
549
-
550
475
  if (metadataSelectors.hasStartedResolution(metadata, selectorName, args)) {
551
476
  return;
552
477
  }
553
-
554
478
  resolversCache.markAsRunning(selectorName, args);
555
479
  setTimeout(async () => {
556
480
  resolversCache.clear(selectorName, args);
557
481
  store.dispatch(metadataActions.startResolution(selectorName, args));
558
-
559
482
  try {
560
483
  const action = resolver.fulfill(...args);
561
-
562
484
  if (action) {
563
485
  await store.dispatch(action);
564
486
  }
565
-
566
487
  store.dispatch(metadataActions.finishResolution(selectorName, args));
567
488
  } catch (error) {
568
489
  store.dispatch(metadataActions.failResolution(selectorName, args, error));
569
490
  }
570
491
  }, 0);
571
492
  }
572
-
573
493
  const selectorResolver = (...args) => {
574
494
  fulfillSelector(args);
575
495
  return selector(...args);
576
496
  };
577
-
578
497
  selectorResolver.hasResolver = true;
579
498
  return selectorResolver;
580
499
  }