@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
@@ -4,16 +4,16 @@
4
4
  import { createStore, applyMiddleware } from 'redux';
5
5
  import combineReducers from 'turbo-combine-reducers';
6
6
  import EquivalentKeyMap from 'equivalent-key-map';
7
+
7
8
  /**
8
9
  * WordPress dependencies
9
10
  */
10
-
11
11
  import createReduxRoutineMiddleware from '@wordpress/redux-routine';
12
12
  import { compose } from '@wordpress/compose';
13
+
13
14
  /**
14
15
  * Internal dependencies
15
16
  */
16
-
17
17
  import { builtinControls } from '../controls';
18
18
  import { lock } from '../lock-unlock';
19
19
  import promise from '../promise-middleware';
@@ -22,15 +22,13 @@ import createThunkMiddleware from './thunk-middleware';
22
22
  import metadataReducer from './metadata/reducer';
23
23
  import * as metadataSelectors from './metadata/selectors';
24
24
  import * as metadataActions from './metadata/actions';
25
- /** @typedef {import('../types').DataRegistry} DataRegistry */
26
25
 
26
+ /** @typedef {import('../types').DataRegistry} DataRegistry */
27
27
  /** @typedef {import('../types').ListenerFunction} ListenerFunction */
28
-
29
28
  /**
30
29
  * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor
31
30
  * @template {import('../types').AnyConfig} C
32
31
  */
33
-
34
32
  /**
35
33
  * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig
36
34
  * @template State
@@ -40,15 +38,14 @@ import * as metadataActions from './metadata/actions';
40
38
 
41
39
  const trimUndefinedValues = array => {
42
40
  const result = [...array];
43
-
44
41
  for (let i = result.length - 1; i >= 0; i--) {
45
42
  if (result[i] === undefined) {
46
43
  result.splice(i, 1);
47
44
  }
48
45
  }
49
-
50
46
  return result;
51
47
  };
48
+
52
49
  /**
53
50
  * Creates a new object with the same keys, but with `callback()` called as
54
51
  * a transformer function on each of the values.
@@ -57,65 +54,54 @@ const trimUndefinedValues = array => {
57
54
  * @param {Function} callback The function to transform each object value.
58
55
  * @return {Array} Transformed object.
59
56
  */
57
+ const mapValues = (obj, callback) => Object.fromEntries(Object.entries(obj !== null && obj !== void 0 ? obj : {}).map(([key, value]) => [key, callback(value, key)]));
60
58
 
61
-
62
- 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
63
-
64
-
59
+ // Convert Map objects to plain objects
65
60
  const mapToObject = (key, state) => {
66
61
  if (state instanceof Map) {
67
62
  return Object.fromEntries(state);
68
63
  }
69
-
70
64
  return state;
71
65
  };
66
+
72
67
  /**
73
68
  * Create a cache to track whether resolvers started running or not.
74
69
  *
75
70
  * @return {Object} Resolvers Cache.
76
71
  */
77
-
78
-
79
72
  function createResolversCache() {
80
73
  const cache = {};
81
74
  return {
82
75
  isRunning(selectorName, args) {
83
76
  return cache[selectorName] && cache[selectorName].get(trimUndefinedValues(args));
84
77
  },
85
-
86
78
  clear(selectorName, args) {
87
79
  if (cache[selectorName]) {
88
80
  cache[selectorName].delete(trimUndefinedValues(args));
89
81
  }
90
82
  },
91
-
92
83
  markAsRunning(selectorName, args) {
93
84
  if (!cache[selectorName]) {
94
85
  cache[selectorName] = new EquivalentKeyMap();
95
86
  }
96
-
97
87
  cache[selectorName].set(trimUndefinedValues(args), true);
98
88
  }
99
-
100
89
  };
101
90
  }
102
-
103
91
  function createBindingCache(bind) {
104
92
  const cache = new WeakMap();
105
93
  return {
106
94
  get(item, itemName) {
107
95
  let boundItem = cache.get(item);
108
-
109
96
  if (!boundItem) {
110
97
  boundItem = bind(item, itemName);
111
98
  cache.set(item, boundItem);
112
99
  }
113
-
114
100
  return boundItem;
115
101
  }
116
-
117
102
  };
118
103
  }
104
+
119
105
  /**
120
106
  * Creates a data store descriptor for the provided Redux store configuration containing
121
107
  * properties describing reducer, actions, selectors, controls and resolvers.
@@ -142,8 +128,6 @@ function createBindingCache(bind) {
142
128
  *
143
129
  * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.
144
130
  */
145
-
146
-
147
131
  export default function createReduxStore(key, options) {
148
132
  const privateActions = {};
149
133
  const privateSelectors = {};
@@ -176,31 +160,26 @@ export default function createReduxStore(key, options) {
176
160
  const reducer = options.reducer;
177
161
  const thunkArgs = {
178
162
  registry,
179
-
180
163
  get dispatch() {
181
164
  return thunkActions;
182
165
  },
183
-
184
166
  get select() {
185
167
  return thunkSelectors;
186
168
  },
187
-
188
169
  get resolveSelect() {
189
170
  return getResolveSelectors();
190
171
  }
191
-
192
172
  };
193
- const store = instantiateReduxStore(key, options, registry, thunkArgs); // Expose the private registration functions on the store
173
+ const store = instantiateReduxStore(key, options, registry, thunkArgs);
174
+ // Expose the private registration functions on the store
194
175
  // so they can be copied to a sub registry in registry.js.
195
-
196
176
  lock(store, privateRegistrationFunctions);
197
177
  const resolversCache = createResolversCache();
198
-
199
178
  function bindAction(action) {
200
179
  return (...args) => Promise.resolve(store.dispatch(action(...args)));
201
180
  }
202
-
203
- const actions = { ...mapValues(metadataActions, bindAction),
181
+ const actions = {
182
+ ...mapValues(metadataActions, bindAction),
204
183
  ...mapValues(options.actions, bindAction)
205
184
  };
206
185
  const boundPrivateActions = createBindingCache(bindAction);
@@ -215,49 +194,40 @@ export default function createReduxStore(key, options) {
215
194
  });
216
195
  lock(actions, allActions);
217
196
  const resolvers = options.resolvers ? mapResolvers(options.resolvers) : {};
218
-
219
197
  function bindSelector(selector, selectorName) {
220
198
  if (selector.isRegistrySelector) {
221
199
  selector.registry = registry;
222
200
  }
223
-
224
201
  const boundSelector = (...args) => {
225
202
  const state = store.__unstableOriginalGetState();
226
-
227
203
  return selector(state.root, ...args);
228
204
  };
229
-
230
205
  const resolver = resolvers[selectorName];
231
-
232
206
  if (!resolver) {
233
207
  boundSelector.hasResolver = false;
234
208
  return boundSelector;
235
209
  }
236
-
237
210
  return mapSelectorWithResolver(boundSelector, selectorName, resolver, store, resolversCache);
238
211
  }
239
-
240
212
  function bindMetadataSelector(selector) {
241
213
  const boundSelector = (...args) => {
242
214
  const state = store.__unstableOriginalGetState();
243
-
244
215
  return selector(state.metadata, ...args);
245
216
  };
246
-
247
217
  boundSelector.hasResolver = false;
248
218
  return boundSelector;
249
219
  }
250
-
251
- const selectors = { ...mapValues(metadataSelectors, bindMetadataSelector),
220
+ const selectors = {
221
+ ...mapValues(metadataSelectors, bindMetadataSelector),
252
222
  ...mapValues(options.selectors, bindSelector)
253
223
  };
254
- const boundPrivateSelectors = createBindingCache(bindSelector); // Pre-bind the private selectors that have been registered by the time of
255
- // instantiation, so that registry selectors are bound to the registry.
224
+ const boundPrivateSelectors = createBindingCache(bindSelector);
256
225
 
226
+ // Pre-bind the private selectors that have been registered by the time of
227
+ // instantiation, so that registry selectors are bound to the registry.
257
228
  for (const [selectorName, selector] of Object.entries(privateSelectors)) {
258
229
  boundPrivateSelectors.get(selector, selectorName);
259
230
  }
260
-
261
231
  const allSelectors = new Proxy(() => {}, {
262
232
  get: (target, prop) => {
263
233
  const privateSelector = privateSelectors[prop];
@@ -270,45 +240,37 @@ export default function createReduxStore(key, options) {
270
240
  lock(selectors, allSelectors);
271
241
  const resolveSelectors = mapResolveSelectors(selectors, store);
272
242
  const suspendSelectors = mapSuspendSelectors(selectors, store);
273
-
274
243
  const getSelectors = () => selectors;
275
-
276
244
  const getActions = () => actions;
277
-
278
245
  const getResolveSelectors = () => resolveSelectors;
246
+ const getSuspendSelectors = () => suspendSelectors;
279
247
 
280
- const getSuspendSelectors = () => suspendSelectors; // We have some modules monkey-patching the store object
248
+ // We have some modules monkey-patching the store object
281
249
  // It's wrong to do so but until we refactor all of our effects to controls
282
250
  // We need to keep the same "store" instance here.
283
-
284
-
285
251
  store.__unstableOriginalGetState = store.getState;
252
+ store.getState = () => store.__unstableOriginalGetState().root;
286
253
 
287
- store.getState = () => store.__unstableOriginalGetState().root; // Customize subscribe behavior to call listeners only on effective change,
254
+ // Customize subscribe behavior to call listeners only on effective change,
288
255
  // not on every dispatch.
289
-
290
-
291
256
  const subscribe = store && (listener => {
292
257
  listeners.add(listener);
293
258
  return () => listeners.delete(listener);
294
259
  });
295
-
296
260
  let lastState = store.__unstableOriginalGetState();
297
-
298
261
  store.subscribe(() => {
299
262
  const state = store.__unstableOriginalGetState();
300
-
301
263
  const hasChanged = state !== lastState;
302
264
  lastState = state;
303
-
304
265
  if (hasChanged) {
305
266
  for (const listener of listeners) {
306
267
  listener();
307
268
  }
308
269
  }
309
- }); // This can be simplified to just { subscribe, getSelectors, getActions }
310
- // Once we remove the use function.
270
+ });
311
271
 
272
+ // This can be simplified to just { subscribe, getSelectors, getActions }
273
+ // Once we remove the use function.
312
274
  return {
313
275
  reducer,
314
276
  store,
@@ -322,13 +284,15 @@ export default function createReduxStore(key, options) {
322
284
  subscribe
323
285
  };
324
286
  }
325
- }; // Expose the private registration functions on the store
287
+ };
288
+
289
+ // Expose the private registration functions on the store
326
290
  // descriptor. That's a natural choice since that's where the
327
291
  // public actions and selectors are stored .
328
-
329
292
  lock(storeDescriptor, privateRegistrationFunctions);
330
293
  return storeDescriptor;
331
294
  }
295
+
332
296
  /**
333
297
  * Creates a redux store for a namespace.
334
298
  *
@@ -340,15 +304,14 @@ export default function createReduxStore(key, options) {
340
304
  * @param {Object} thunkArgs Argument object for the thunk middleware.
341
305
  * @return {Object} Newly created redux store.
342
306
  */
343
-
344
307
  function instantiateReduxStore(key, options, registry, thunkArgs) {
345
- const controls = { ...options.controls,
308
+ const controls = {
309
+ ...options.controls,
346
310
  ...builtinControls
347
311
  };
348
312
  const normalizedControls = mapValues(controls, control => control.isRegistryControl ? control(registry) : control);
349
313
  const middlewares = [createResolversCacheMiddleware(registry, key), promise, createReduxRoutineMiddleware(normalizedControls), createThunkMiddleware(thunkArgs)];
350
314
  const enhancers = [applyMiddleware(...middlewares)];
351
-
352
315
  if (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__) {
353
316
  enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__({
354
317
  name: key,
@@ -358,7 +321,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
358
321
  }
359
322
  }));
360
323
  }
361
-
362
324
  const {
363
325
  reducer,
364
326
  initialState
@@ -371,6 +333,7 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
371
333
  root: initialState
372
334
  }, compose(enhancers));
373
335
  }
336
+
374
337
  /**
375
338
  * Maps selectors to functions that return a resolution promise for them
376
339
  *
@@ -379,8 +342,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
379
342
  *
380
343
  * @return {Object} Selectors mapped to their resolution functions.
381
344
  */
382
-
383
-
384
345
  function mapResolveSelectors(selectors, store) {
385
346
  const {
386
347
  getIsResolving,
@@ -400,14 +361,11 @@ function mapResolveSelectors(selectors, store) {
400
361
  if (!selector.hasResolver) {
401
362
  return async (...args) => selector.apply(null, args);
402
363
  }
403
-
404
364
  return (...args) => {
405
365
  return new Promise((resolve, reject) => {
406
366
  const hasFinished = () => selectors.hasFinishedResolution(selectorName, args);
407
-
408
367
  const finalize = result => {
409
368
  const hasFailed = selectors.hasResolutionFailed(selectorName, args);
410
-
411
369
  if (hasFailed) {
412
370
  const error = selectors.getResolutionError(selectorName, args);
413
371
  reject(error);
@@ -415,16 +373,12 @@ function mapResolveSelectors(selectors, store) {
415
373
  resolve(result);
416
374
  }
417
375
  };
418
-
419
- const getResult = () => selector.apply(null, args); // Trigger the selector (to trigger the resolver)
420
-
421
-
376
+ const getResult = () => selector.apply(null, args);
377
+ // Trigger the selector (to trigger the resolver)
422
378
  const result = getResult();
423
-
424
379
  if (hasFinished()) {
425
380
  return finalize(result);
426
381
  }
427
-
428
382
  const unsubscribe = store.subscribe(() => {
429
383
  if (hasFinished()) {
430
384
  unsubscribe();
@@ -435,6 +389,7 @@ function mapResolveSelectors(selectors, store) {
435
389
  };
436
390
  });
437
391
  }
392
+
438
393
  /**
439
394
  * Maps selectors to functions that throw a suspense promise if not yet resolved.
440
395
  *
@@ -443,26 +398,20 @@ function mapResolveSelectors(selectors, store) {
443
398
  *
444
399
  * @return {Object} Selectors mapped to their suspense functions.
445
400
  */
446
-
447
-
448
401
  function mapSuspendSelectors(selectors, store) {
449
402
  return mapValues(selectors, (selector, selectorName) => {
450
403
  // Selector without a resolver doesn't have any extra suspense behavior.
451
404
  if (!selector.hasResolver) {
452
405
  return selector;
453
406
  }
454
-
455
407
  return (...args) => {
456
408
  const result = selector.apply(null, args);
457
-
458
409
  if (selectors.hasFinishedResolution(selectorName, args)) {
459
410
  if (selectors.hasResolutionFailed(selectorName, args)) {
460
411
  throw selectors.getResolutionError(selectorName, args);
461
412
  }
462
-
463
413
  return result;
464
414
  }
465
-
466
415
  throw new Promise(resolve => {
467
416
  const unsubscribe = store.subscribe(() => {
468
417
  if (selectors.hasFinishedResolution(selectorName, args)) {
@@ -474,27 +423,26 @@ function mapSuspendSelectors(selectors, store) {
474
423
  };
475
424
  });
476
425
  }
426
+
477
427
  /**
478
428
  * Convert resolvers to a normalized form, an object with `fulfill` method and
479
429
  * optional methods like `isFulfilled`.
480
430
  *
481
431
  * @param {Object} resolvers Resolver to convert
482
432
  */
483
-
484
-
485
433
  function mapResolvers(resolvers) {
486
434
  return mapValues(resolvers, resolver => {
487
435
  if (resolver.fulfill) {
488
436
  return resolver;
489
437
  }
490
-
491
- return { ...resolver,
438
+ return {
439
+ ...resolver,
492
440
  // Copy the enumerable properties of the resolver function.
493
441
  fulfill: resolver // Add the fulfill method.
494
-
495
442
  };
496
443
  });
497
444
  }
445
+
498
446
  /**
499
447
  * Returns a selector with a matched resolver.
500
448
  * Resolvers are side effects invoked once per argument set of a given selector call,
@@ -506,48 +454,37 @@ function mapResolvers(resolvers) {
506
454
  * @param {Object} store The redux store to which the resolvers should be mapped.
507
455
  * @param {Object} resolversCache Resolvers Cache.
508
456
  */
509
-
510
-
511
457
  function mapSelectorWithResolver(selector, selectorName, resolver, store, resolversCache) {
512
458
  function fulfillSelector(args) {
513
459
  const state = store.getState();
514
-
515
460
  if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === 'function' && resolver.isFulfilled(state, ...args)) {
516
461
  return;
517
462
  }
518
-
519
463
  const {
520
464
  metadata
521
465
  } = store.__unstableOriginalGetState();
522
-
523
466
  if (metadataSelectors.hasStartedResolution(metadata, selectorName, args)) {
524
467
  return;
525
468
  }
526
-
527
469
  resolversCache.markAsRunning(selectorName, args);
528
470
  setTimeout(async () => {
529
471
  resolversCache.clear(selectorName, args);
530
472
  store.dispatch(metadataActions.startResolution(selectorName, args));
531
-
532
473
  try {
533
474
  const action = resolver.fulfill(...args);
534
-
535
475
  if (action) {
536
476
  await store.dispatch(action);
537
477
  }
538
-
539
478
  store.dispatch(metadataActions.finishResolution(selectorName, args));
540
479
  } catch (error) {
541
480
  store.dispatch(metadataActions.failResolution(selectorName, args, error));
542
481
  }
543
482
  }, 0);
544
483
  }
545
-
546
484
  const selectorResolver = (...args) => {
547
485
  fulfillSelector(args);
548
486
  return selector(...args);
549
487
  };
550
-
551
488
  selectorResolver.hasResolver = true;
552
489
  return selectorResolver;
553
490
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","compose","builtinControls","lock","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","obj","callback","Object","fromEntries","entries","map","key","value","mapToObject","state","Map","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","set","createBindingCache","bind","WeakMap","item","itemName","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","listeners","Set","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","resolvers","mapResolvers","bindSelector","selector","isRegistrySelector","boundSelector","__unstableOriginalGetState","root","resolver","hasResolver","mapSelectorWithResolver","bindMetadataSelector","metadata","boundPrivateSelectors","allSelectors","privateSelector","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","add","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","hasResolvingSelectors","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport combineReducers from 'turbo-combine-reducers';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * WordPress dependencies\n */\nimport createReduxRoutineMiddleware from '@wordpress/redux-routine';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport { lock } from '../lock-unlock';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').ListenerFunction} ListenerFunction */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\n\n// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item, itemName ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item, itemName );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\t/**\n\t\t\t * Stores listener functions registered with `subscribe()`.\n\t\t\t *\n\t\t\t * When functions register to listen to store changes with\n\t\t\t * `subscribe()` they get added here. Although Redux offers\n\t\t\t * its own `subscribe()` function directly, by wrapping the\n\t\t\t * subscription in this store instance it's possible to\n\t\t\t * optimize checking if the state has changed before calling\n\t\t\t * each listener.\n\t\t\t *\n\t\t\t * @type {Set<ListenerFunction>}\n\t\t\t */\n\t\t\tconst listeners = new Set();\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction, prop )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tconst resolvers = options.resolvers\n\t\t\t\t? mapResolvers( options.resolvers )\n\t\t\t\t: {};\n\n\t\t\tfunction bindSelector( selector, selectorName ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\n\t\t\t\tconst resolver = resolvers[ selectorName ];\n\t\t\t\tif ( ! resolver ) {\n\t\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\t\treturn boundSelector;\n\t\t\t\t}\n\n\t\t\t\treturn mapSelectorWithResolver(\n\t\t\t\t\tboundSelector,\n\t\t\t\t\tselectorName,\n\t\t\t\t\tresolver,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( selector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tconst selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const [ selectorName, selector ] of Object.entries(\n\t\t\t\tprivateSelectors\n\t\t\t) ) {\n\t\t\t\tboundPrivateSelectors.get( selector, selectorName );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector, prop )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlisteners.add( listener );\n\n\t\t\t\t\treturn () => listeners.delete( listener );\n\t\t\t\t} );\n\n\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\tstore.subscribe( () => {\n\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\tlastState = state;\n\n\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\tfor ( const listener of listeners ) {\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tcompose( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\thasResolvingSelectors,\n\t\t...storeSelectors\n\t} = selectors;\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Maps selectors to functions that throw a suspense promise if not yet resolved.\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n}\n\n/**\n * Returns a selector with a matched resolver.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} selector The selector function to be bound.\n * @param {string} selectorName The selector name.\n * @param {Object} resolver Resolver to call.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorWithResolver(\n\tselector,\n\tselectorName,\n\tresolver,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\tconst selectorResolver = ( ...args ) => {\n\t\tfulfillSelector( args );\n\t\treturn selector( ...args );\n\t};\n\tselectorResolver.hasResolver = true;\n\treturn selectorResolver;\n}\n"]}
1
+ {"version":3,"names":["createStore","applyMiddleware","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","compose","builtinControls","lock","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","obj","callback","Object","fromEntries","entries","map","key","value","mapToObject","state","Map","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","set","createBindingCache","bind","WeakMap","item","itemName","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","listeners","Set","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","resolvers","mapResolvers","bindSelector","selector","isRegistrySelector","boundSelector","__unstableOriginalGetState","root","resolver","hasResolver","mapSelectorWithResolver","bindMetadataSelector","metadata","boundPrivateSelectors","allSelectors","privateSelector","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","add","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","hasResolvingSelectors","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"sources":["@wordpress/data/src/redux-store/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport combineReducers from 'turbo-combine-reducers';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * WordPress dependencies\n */\nimport createReduxRoutineMiddleware from '@wordpress/redux-routine';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport { lock } from '../lock-unlock';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').ListenerFunction} ListenerFunction */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\n\n// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item, itemName ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item, itemName );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\t/**\n\t\t\t * Stores listener functions registered with `subscribe()`.\n\t\t\t *\n\t\t\t * When functions register to listen to store changes with\n\t\t\t * `subscribe()` they get added here. Although Redux offers\n\t\t\t * its own `subscribe()` function directly, by wrapping the\n\t\t\t * subscription in this store instance it's possible to\n\t\t\t * optimize checking if the state has changed before calling\n\t\t\t * each listener.\n\t\t\t *\n\t\t\t * @type {Set<ListenerFunction>}\n\t\t\t */\n\t\t\tconst listeners = new Set();\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction, prop )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tconst resolvers = options.resolvers\n\t\t\t\t? mapResolvers( options.resolvers )\n\t\t\t\t: {};\n\n\t\t\tfunction bindSelector( selector, selectorName ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\n\t\t\t\tconst resolver = resolvers[ selectorName ];\n\t\t\t\tif ( ! resolver ) {\n\t\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\t\treturn boundSelector;\n\t\t\t\t}\n\n\t\t\t\treturn mapSelectorWithResolver(\n\t\t\t\t\tboundSelector,\n\t\t\t\t\tselectorName,\n\t\t\t\t\tresolver,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( selector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tconst selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const [ selectorName, selector ] of Object.entries(\n\t\t\t\tprivateSelectors\n\t\t\t) ) {\n\t\t\t\tboundPrivateSelectors.get( selector, selectorName );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector, prop )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlisteners.add( listener );\n\n\t\t\t\t\treturn () => listeners.delete( listener );\n\t\t\t\t} );\n\n\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\tstore.subscribe( () => {\n\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\tlastState = state;\n\n\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\tfor ( const listener of listeners ) {\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tcompose( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\thasResolvingSelectors,\n\t\t...storeSelectors\n\t} = selectors;\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Maps selectors to functions that throw a suspense promise if not yet resolved.\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n}\n\n/**\n * Returns a selector with a matched resolver.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} selector The selector function to be bound.\n * @param {string} selectorName The selector name.\n * @param {Object} resolver Resolver to call.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorWithResolver(\n\tselector,\n\tselectorName,\n\tresolver,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\tconst selectorResolver = ( ...args ) => {\n\t\tfulfillSelector( args );\n\t\treturn selector( ...args );\n\t};\n\tselectorResolver.hasResolver = true;\n\treturn selectorResolver;\n}\n"],"mappings":"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"}