@wordpress/data 9.4.0 → 9.5.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 (74) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/use-dispatch/use-dispatch-with-map.js +2 -6
  3. package/build/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
  4. package/build/components/use-select/index.js +1 -1
  5. package/build/components/use-select/index.js.map +1 -1
  6. package/build/components/with-dispatch/index.js +3 -5
  7. package/build/components/with-dispatch/index.js.map +1 -1
  8. package/build/components/with-registry/index.js +2 -6
  9. package/build/components/with-registry/index.js.map +1 -1
  10. package/build/components/with-select/index.js +3 -3
  11. package/build/components/with-select/index.js.map +1 -1
  12. package/build/controls.js +18 -37
  13. package/build/controls.js.map +1 -1
  14. package/build/factory.js +2 -4
  15. package/build/factory.js.map +1 -1
  16. package/build/{private-apis.js → lock-unlock.js} +1 -1
  17. package/build/lock-unlock.js.map +1 -0
  18. package/build/redux-store/index.js +140 -204
  19. package/build/redux-store/index.js.map +1 -1
  20. package/build/redux-store/metadata/reducer.js +2 -8
  21. package/build/redux-store/metadata/reducer.js.map +1 -1
  22. package/build/redux-store/metadata/selectors.js +5 -15
  23. package/build/redux-store/metadata/selectors.js.map +1 -1
  24. package/build/redux-store/metadata/utils.js +1 -3
  25. package/build/redux-store/metadata/utils.js.map +1 -1
  26. package/build/registry.js +14 -24
  27. package/build/registry.js.map +1 -1
  28. package/build/resolvers-cache-middleware.js +3 -6
  29. package/build/resolvers-cache-middleware.js.map +1 -1
  30. package/build/store/index.js +2 -10
  31. package/build/store/index.js.map +1 -1
  32. package/build-module/components/use-dispatch/use-dispatch-with-map.js +2 -6
  33. package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
  34. package/build-module/components/use-select/index.js +1 -1
  35. package/build-module/components/use-select/index.js.map +1 -1
  36. package/build-module/components/with-dispatch/index.js +3 -2
  37. package/build-module/components/with-dispatch/index.js.map +1 -1
  38. package/build-module/components/with-registry/index.js +2 -3
  39. package/build-module/components/with-registry/index.js.map +1 -1
  40. package/build-module/components/with-select/index.js +3 -2
  41. package/build-module/components/with-select/index.js.map +1 -1
  42. package/build-module/controls.js +18 -37
  43. package/build-module/controls.js.map +1 -1
  44. package/build-module/factory.js +2 -4
  45. package/build-module/factory.js.map +1 -1
  46. package/build-module/{private-apis.js → lock-unlock.js} +1 -1
  47. package/build-module/lock-unlock.js.map +1 -0
  48. package/build-module/redux-store/index.js +138 -202
  49. package/build-module/redux-store/index.js.map +1 -1
  50. package/build-module/redux-store/metadata/reducer.js +2 -8
  51. package/build-module/redux-store/metadata/reducer.js.map +1 -1
  52. package/build-module/redux-store/metadata/selectors.js +5 -15
  53. package/build-module/redux-store/metadata/selectors.js.map +1 -1
  54. package/build-module/redux-store/metadata/utils.js +1 -3
  55. package/build-module/redux-store/metadata/utils.js.map +1 -1
  56. package/build-module/registry.js +9 -19
  57. package/build-module/registry.js.map +1 -1
  58. package/build-module/resolvers-cache-middleware.js +3 -6
  59. package/build-module/resolvers-cache-middleware.js.map +1 -1
  60. package/build-module/store/index.js +2 -10
  61. package/build-module/store/index.js.map +1 -1
  62. package/build-types/{private-apis.d.ts → lock-unlock.d.ts} +1 -1
  63. package/build-types/lock-unlock.d.ts.map +1 -0
  64. package/build-types/redux-store/index.d.ts.map +1 -1
  65. package/package.json +9 -9
  66. package/src/factory.js +1 -1
  67. package/src/redux-store/index.js +170 -224
  68. package/src/registry.js +1 -1
  69. package/src/test/privateAPIs.js +118 -11
  70. package/tsconfig.tsbuildinfo +1 -1
  71. package/build/private-apis.js.map +0 -1
  72. package/build-module/private-apis.js.map +0 -1
  73. package/build-types/private-apis.d.ts.map +0 -1
  74. /package/src/{private-apis.js → lock-unlock.js} +0 -0
@@ -19,7 +19,7 @@ var _compose = require("@wordpress/compose");
19
19
 
20
20
  var _controls = require("../controls");
21
21
 
22
- var _privateApis = require("../private-apis");
22
+ var _lockUnlock = require("../lock-unlock");
23
23
 
24
24
  var _promiseMiddleware = _interopRequireDefault(require("../promise-middleware"));
25
25
 
@@ -83,12 +83,7 @@ const trimUndefinedValues = array => {
83
83
  */
84
84
 
85
85
 
86
- const mapValues = (obj, callback) => Object.entries(obj !== null && obj !== void 0 ? obj : {}).reduce((acc, _ref) => {
87
- let [key, value] = _ref;
88
- return { ...acc,
89
- [key]: callback(value, key)
90
- };
91
- }, {}); // Convert Map objects to plain objects
86
+ 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
92
87
 
93
88
 
94
89
  const mapToObject = (key, state) => {
@@ -128,6 +123,23 @@ function createResolversCache() {
128
123
 
129
124
  };
130
125
  }
126
+
127
+ function createBindingCache(bind) {
128
+ const cache = new WeakMap();
129
+ return {
130
+ get(item) {
131
+ let boundItem = cache.get(item);
132
+
133
+ if (!boundItem) {
134
+ boundItem = bind(item);
135
+ cache.set(item, boundItem);
136
+ }
137
+
138
+ return boundItem;
139
+ }
140
+
141
+ };
142
+ }
131
143
  /**
132
144
  * Creates a data store descriptor for the provided Redux store configuration containing
133
145
  * properties describing reducer, actions, selectors, controls and resolvers.
@@ -177,11 +189,11 @@ function createReduxStore(key, options) {
177
189
  registry,
178
190
 
179
191
  get dispatch() {
180
- return Object.assign(action => store.dispatch(action), getActions());
192
+ return thunkActions;
181
193
  },
182
194
 
183
195
  get select() {
184
- return Object.assign(selector => selector(store.__unstableOriginalGetState()), getSelectors());
196
+ return thunkSelectors;
185
197
  },
186
198
 
187
199
  get resolveSelect() {
@@ -192,62 +204,81 @@ function createReduxStore(key, options) {
192
204
  const store = instantiateReduxStore(key, options, registry, thunkArgs); // Expose the private registration functions on the store
193
205
  // so they can be copied to a sub registry in registry.js.
194
206
 
195
- (0, _privateApis.lock)(store, privateRegistrationFunctions);
207
+ (0, _lockUnlock.lock)(store, privateRegistrationFunctions);
196
208
  const resolversCache = createResolversCache();
197
- let resolvers;
198
- const actions = mapActions({ ...metadataActions,
199
- ...options.actions
200
- }, store);
201
- (0, _privateApis.lock)(actions, new Proxy(privateActions, {
209
+
210
+ function bindAction(action) {
211
+ return (...args) => Promise.resolve(store.dispatch(action(...args)));
212
+ }
213
+
214
+ const actions = { ...mapValues(metadataActions, bindAction),
215
+ ...mapValues(options.actions, bindAction)
216
+ };
217
+ const boundPrivateActions = createBindingCache(bindAction);
218
+ const allActions = new Proxy(() => {}, {
202
219
  get: (target, prop) => {
203
- return mapActions(privateActions, store)[prop] || actions[prop];
220
+ const privateAction = privateActions[prop];
221
+ return privateAction ? boundPrivateActions.get(privateAction) : actions[prop];
204
222
  }
205
- }));
206
- let selectors = mapSelectors({ ...mapValues(metadataSelectors, selector => function (state) {
207
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
208
- args[_key - 1] = arguments[_key];
209
- }
223
+ });
224
+ const thunkActions = new Proxy(allActions, {
225
+ apply: (target, thisArg, [action]) => store.dispatch(action)
226
+ });
227
+ (0, _lockUnlock.lock)(actions, allActions);
228
+
229
+ function bindSelector(selector) {
230
+ if (selector.isRegistrySelector) {
231
+ selector.registry = registry;
232
+ }
233
+
234
+ const boundSelector = (...args) => {
235
+ const state = store.__unstableOriginalGetState();
236
+
237
+ return selector(state.root, ...args);
238
+ };
239
+
240
+ boundSelector.hasResolver = false;
241
+ return boundSelector;
242
+ }
243
+
244
+ function bindMetadataSelector(selector) {
245
+ const boundSelector = (...args) => {
246
+ const state = store.__unstableOriginalGetState();
210
247
 
211
248
  return selector(state.metadata, ...args);
212
- }),
213
- ...mapValues(options.selectors, selector => {
214
- if (selector.isRegistrySelector) {
215
- selector.registry = registry;
216
- }
249
+ };
217
250
 
218
- return function (state) {
219
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
220
- args[_key2 - 1] = arguments[_key2];
221
- }
251
+ boundSelector.hasResolver = false;
252
+ return boundSelector;
253
+ }
222
254
 
223
- return selector(state.root, ...args);
224
- };
225
- })
226
- }, store);
227
- (0, _privateApis.lock)(selectors, new Proxy(privateSelectors, {
228
- get: (target, prop) => {
229
- return mapSelectors(mapValues(privateSelectors, selector => {
230
- if (selector.isRegistrySelector) {
231
- selector.registry = registry;
232
- }
233
-
234
- return function (state) {
235
- for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
236
- args[_key3 - 1] = arguments[_key3];
237
- }
238
-
239
- return selector(state.root, ...args);
240
- };
241
- }), store)[prop] || selectors[prop];
242
- }
243
- }));
255
+ let selectors = { ...mapValues(metadataSelectors, bindMetadataSelector),
256
+ ...mapValues(options.selectors, bindSelector)
257
+ };
258
+ let resolvers;
244
259
 
245
260
  if (options.resolvers) {
246
- const result = mapResolvers(options.resolvers, selectors, store, resolversCache);
247
- resolvers = result.resolvers;
248
- selectors = result.selectors;
261
+ resolvers = mapResolvers(options.resolvers);
262
+ selectors = mapSelectorsWithResolvers(selectors, resolvers, store, resolversCache);
249
263
  }
250
264
 
265
+ const boundPrivateSelectors = createBindingCache(bindSelector); // Pre-bind the private selectors that have been registered by the time of
266
+ // instantiation, so that registry selectors are bound to the registry.
267
+
268
+ for (const privateSelector of Object.values(privateSelectors)) {
269
+ boundPrivateSelectors.get(privateSelector);
270
+ }
271
+
272
+ const allSelectors = new Proxy(() => {}, {
273
+ get: (target, prop) => {
274
+ const privateSelector = privateSelectors[prop];
275
+ return privateSelector ? boundPrivateSelectors.get(privateSelector) : selectors[prop];
276
+ }
277
+ });
278
+ const thunkSelectors = new Proxy(allSelectors, {
279
+ apply: (target, thisArg, [selector]) => selector(store.__unstableOriginalGetState())
280
+ });
281
+ (0, _lockUnlock.lock)(selectors, allSelectors);
251
282
  const resolveSelectors = mapResolveSelectors(selectors, store);
252
283
  const suspendSelectors = mapSuspendSelectors(selectors, store);
253
284
 
@@ -302,7 +333,7 @@ function createReduxStore(key, options) {
302
333
  // descriptor. That's a natural choice since that's where the
303
334
  // public actions and selectors are stored .
304
335
 
305
- (0, _privateApis.lock)(storeDescriptor, privateRegistrationFunctions);
336
+ (0, _lockUnlock.lock)(storeDescriptor, privateRegistrationFunctions);
306
337
  return storeDescriptor;
307
338
  }
308
339
  /**
@@ -348,61 +379,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
348
379
  root: initialState
349
380
  }, (0, _compose.compose)(enhancers));
350
381
  }
351
- /**
352
- * Maps selectors to a store.
353
- *
354
- * @param {Object} selectors Selectors to register. Keys will be used as the
355
- * public facing API. Selectors will get passed the
356
- * state as first argument.
357
- * @param {Object} store The store to which the selectors should be mapped.
358
- * @return {Object} Selectors mapped to the provided store.
359
- */
360
-
361
-
362
- function mapSelectors(selectors, store) {
363
- const createStateSelector = registrySelector => {
364
- const selector = function runSelector() {
365
- // This function is an optimized implementation of:
366
- //
367
- // selector( store.getState(), ...arguments )
368
- //
369
- // Where the above would incur an `Array#concat` in its application,
370
- // the logic here instead efficiently constructs an arguments array via
371
- // direct assignment.
372
- const argsLength = arguments.length;
373
- const args = new Array(argsLength + 1);
374
- args[0] = store.__unstableOriginalGetState();
375
-
376
- for (let i = 0; i < argsLength; i++) {
377
- args[i + 1] = arguments[i];
378
- }
379
-
380
- return registrySelector(...args);
381
- };
382
-
383
- selector.hasResolver = false;
384
- return selector;
385
- };
386
-
387
- return mapValues(selectors, createStateSelector);
388
- }
389
- /**
390
- * Maps actions to dispatch from a given store.
391
- *
392
- * @param {Object} actions Actions to register.
393
- * @param {Object} store The redux store to which the actions should be mapped.
394
- *
395
- * @return {Object} Actions mapped to the redux store provided.
396
- */
397
-
398
-
399
- function mapActions(actions, store) {
400
- const createBoundAction = action => function () {
401
- return Promise.resolve(store.dispatch(action(...arguments)));
402
- };
403
-
404
- return mapValues(actions, createBoundAction);
405
- }
406
382
  /**
407
383
  * Maps selectors to functions that return a resolution promise for them
408
384
  *
@@ -429,20 +405,10 @@ function mapResolveSelectors(selectors, store) {
429
405
  // If the selector doesn't have a resolver, just convert the return value
430
406
  // (including exceptions) to a Promise, no additional extra behavior is needed.
431
407
  if (!selector.hasResolver) {
432
- return async function () {
433
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
434
- args[_key4] = arguments[_key4];
435
- }
436
-
437
- return selector.apply(null, args);
438
- };
408
+ return async (...args) => selector.apply(null, args);
439
409
  }
440
410
 
441
- return function () {
442
- for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
443
- args[_key5] = arguments[_key5];
444
- }
445
-
411
+ return (...args) => {
446
412
  return new Promise((resolve, reject) => {
447
413
  const hasFinished = () => selectors.hasFinishedResolution(selectorName, args);
448
414
 
@@ -493,11 +459,7 @@ function mapSuspendSelectors(selectors, store) {
493
459
  return selector;
494
460
  }
495
461
 
496
- return function () {
497
- for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
498
- args[_key6] = arguments[_key6];
499
- }
500
-
462
+ return (...args) => {
501
463
  const result = selector.apply(null, args);
502
464
 
503
465
  if (selectors.hasFinishedResolution(selectorName, args)) {
@@ -520,22 +482,15 @@ function mapSuspendSelectors(selectors, store) {
520
482
  });
521
483
  }
522
484
  /**
523
- * Returns resolvers with matched selectors for a given namespace.
524
- * Resolvers are side effects invoked once per argument set of a given selector call,
525
- * used in ensuring that the data needs for the selector are satisfied.
485
+ * Convert resolvers to a normalized form, an object with `fulfill` method and
486
+ * optional methods like `isFulfilled`.
526
487
  *
527
- * @param {Object} resolvers Resolvers to register.
528
- * @param {Object} selectors The current selectors to be modified.
529
- * @param {Object} store The redux store to which the resolvers should be mapped.
530
- * @param {Object} resolversCache Resolvers Cache.
488
+ * @param {Object} resolvers Resolver to convert
531
489
  */
532
490
 
533
491
 
534
- function mapResolvers(resolvers, selectors, store, resolversCache) {
535
- // The `resolver` can be either a function that does the resolution, or, in more advanced
536
- // cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.
537
- // Here we normalize the `resolver` function to an object with `fulfill` method.
538
- const mappedResolvers = mapValues(resolvers, resolver => {
492
+ function mapResolvers(resolvers) {
493
+ return mapValues(resolvers, resolver => {
539
494
  if (resolver.fulfill) {
540
495
  return resolver;
541
496
  }
@@ -546,87 +501,68 @@ function mapResolvers(resolvers, selectors, store, resolversCache) {
546
501
 
547
502
  };
548
503
  });
504
+ }
505
+ /**
506
+ * Returns resolvers with matched selectors for a given namespace.
507
+ * Resolvers are side effects invoked once per argument set of a given selector call,
508
+ * used in ensuring that the data needs for the selector are satisfied.
509
+ *
510
+ * @param {Object} selectors The current selectors to be modified.
511
+ * @param {Object} resolvers Resolvers to register.
512
+ * @param {Object} store The redux store to which the resolvers should be mapped.
513
+ * @param {Object} resolversCache Resolvers Cache.
514
+ */
549
515
 
550
- const mapSelector = (selector, selectorName) => {
551
- const resolver = resolvers[selectorName];
552
516
 
553
- if (!resolver) {
554
- selector.hasResolver = false;
555
- return selector;
517
+ function mapSelectorsWithResolvers(selectors, resolvers, store, resolversCache) {
518
+ function fulfillSelector(resolver, selectorName, args) {
519
+ const state = store.getState();
520
+
521
+ if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === 'function' && resolver.isFulfilled(state, ...args)) {
522
+ return;
556
523
  }
557
524
 
558
- const selectorResolver = function () {
559
- for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
560
- args[_key7] = arguments[_key7];
561
- }
525
+ const {
526
+ metadata
527
+ } = store.__unstableOriginalGetState();
562
528
 
563
- async function fulfillSelector() {
564
- const state = store.getState();
529
+ if (metadataSelectors.hasStartedResolution(metadata, selectorName, args)) {
530
+ return;
531
+ }
565
532
 
566
- if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === 'function' && resolver.isFulfilled(state, ...args)) {
567
- return;
568
- }
533
+ resolversCache.markAsRunning(selectorName, args);
534
+ setTimeout(async () => {
535
+ resolversCache.clear(selectorName, args);
536
+ store.dispatch(metadataActions.startResolution(selectorName, args));
569
537
 
570
- const {
571
- metadata
572
- } = store.__unstableOriginalGetState();
538
+ try {
539
+ const action = resolver.fulfill(...args);
573
540
 
574
- if (metadataSelectors.hasStartedResolution(metadata, selectorName, args)) {
575
- return;
541
+ if (action) {
542
+ await store.dispatch(action);
576
543
  }
577
544
 
578
- resolversCache.markAsRunning(selectorName, args);
579
- setTimeout(async () => {
580
- resolversCache.clear(selectorName, args);
581
- store.dispatch(metadataActions.startResolution(selectorName, args));
582
-
583
- try {
584
- await fulfillResolver(store, mappedResolvers, selectorName, ...args);
585
- store.dispatch(metadataActions.finishResolution(selectorName, args));
586
- } catch (error) {
587
- store.dispatch(metadataActions.failResolution(selectorName, args, error));
588
- }
589
- });
545
+ store.dispatch(metadataActions.finishResolution(selectorName, args));
546
+ } catch (error) {
547
+ store.dispatch(metadataActions.failResolution(selectorName, args, error));
590
548
  }
549
+ }, 0);
550
+ }
551
+
552
+ return mapValues(selectors, (selector, selectorName) => {
553
+ const resolver = resolvers[selectorName];
554
+
555
+ if (!resolver) {
556
+ return selector;
557
+ }
591
558
 
592
- fulfillSelector(...args);
559
+ const selectorResolver = (...args) => {
560
+ fulfillSelector(resolver, selectorName, args);
593
561
  return selector(...args);
594
562
  };
595
563
 
596
564
  selectorResolver.hasResolver = true;
597
565
  return selectorResolver;
598
- };
599
-
600
- return {
601
- resolvers: mappedResolvers,
602
- selectors: mapValues(selectors, mapSelector)
603
- };
604
- }
605
- /**
606
- * Calls a resolver given arguments
607
- *
608
- * @param {Object} store Store reference, for fulfilling via resolvers
609
- * @param {Object} resolvers Store Resolvers
610
- * @param {string} selectorName Selector name to fulfill.
611
- * @param {Array} args Selector Arguments.
612
- */
613
-
614
-
615
- async function fulfillResolver(store, resolvers, selectorName) {
616
- const resolver = resolvers[selectorName];
617
-
618
- if (!resolver) {
619
- return;
620
- }
621
-
622
- for (var _len8 = arguments.length, args = new Array(_len8 > 3 ? _len8 - 3 : 0), _key8 = 3; _key8 < _len8; _key8++) {
623
- args[_key8 - 3] = arguments[_key8];
624
- }
625
-
626
- const action = resolver.fulfill(...args);
627
-
628
- if (action) {
629
- await store.dispatch(action);
630
- }
566
+ });
631
567
  }
632
568
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","obj","callback","Object","entries","reduce","acc","key","value","mapToObject","state","Map","fromEntries","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","EquivalentKeyMap","set","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","reducer","thunkArgs","dispatch","action","store","getActions","select","selector","__unstableOriginalGetState","getSelectors","resolveSelect","getResolveSelectors","instantiateReduxStore","resolversCache","resolvers","mapActions","metadataActions","Proxy","target","prop","mapSelectors","metadataSelectors","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSuspendSelectors","getState","subscribe","listener","lastState","hasChanged","controls","builtinControls","normalizedControls","control","isRegistryControl","middlewares","promise","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","metadataReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","storeSelectors","apply","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","setTimeout","startResolution","fulfillResolver","finishResolution","failResolution"],"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 '../private-apis';\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/**\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.entries( obj ?? {} ).reduce(\n\t\t( acc, [ key, value ] ) => ( {\n\t\t\t...acc,\n\t\t\t[ key ]: callback( value, key ),\n\t\t} ),\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\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\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 Object.assign(\n\t\t\t\t\t\t( action ) => store.dispatch( action ),\n\t\t\t\t\t\tgetActions()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t\t\t\tgetSelectors()\n\t\t\t\t\t);\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\tlet resolvers;\n\t\t\tconst actions = mapActions(\n\t\t\t\t{\n\t\t\t\t\t...metadataActions,\n\t\t\t\t\t...options.actions,\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tlock(\n\t\t\t\tactions,\n\t\t\t\tnew Proxy( privateActions, {\n\t\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tmapActions( privateActions, store )[ prop ] ||\n\t\t\t\t\t\t\tactions[ prop ]\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tlet selectors = mapSelectors(\n\t\t\t\t{\n\t\t\t\t\t...mapValues(\n\t\t\t\t\t\tmetadataSelectors,\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t( state, ...args ) =>\n\t\t\t\t\t\t\t\tselector( state.metadata, ...args )\n\t\t\t\t\t),\n\t\t\t\t\t...mapValues( options.selectors, ( selector ) => {\n\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tlock(\n\t\t\t\tselectors,\n\t\t\t\tnew Proxy( privateSelectors, {\n\t\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tmapSelectors(\n\t\t\t\t\t\t\t\tmapValues( privateSelectors, ( selector ) => {\n\t\t\t\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t\tstore\n\t\t\t\t\t\t\t)[ prop ] || selectors[ prop ]\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tconst result = mapResolvers(\n\t\t\t\t\toptions.resolvers,\n\t\t\t\t\tselectors,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t\tresolvers = result.resolvers;\n\t\t\t\tselectors = result.selectors;\n\t\t\t}\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\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\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 a store.\n *\n * @param {Object} selectors Selectors to register. Keys will be used as the\n * public facing API. Selectors will get passed the\n * state as first argument.\n * @param {Object} store The store to which the selectors should be mapped.\n * @return {Object} Selectors mapped to the provided store.\n */\nfunction mapSelectors( selectors, store ) {\n\tconst createStateSelector = ( registrySelector ) => {\n\t\tconst selector = function runSelector() {\n\t\t\t// This function is an optimized implementation of:\n\t\t\t//\n\t\t\t// selector( store.getState(), ...arguments )\n\t\t\t//\n\t\t\t// Where the above would incur an `Array#concat` in its application,\n\t\t\t// the logic here instead efficiently constructs an arguments array via\n\t\t\t// direct assignment.\n\t\t\tconst argsLength = arguments.length;\n\t\t\tconst args = new Array( argsLength + 1 );\n\t\t\targs[ 0 ] = store.__unstableOriginalGetState();\n\t\t\tfor ( let i = 0; i < argsLength; i++ ) {\n\t\t\t\targs[ i + 1 ] = arguments[ i ];\n\t\t\t}\n\n\t\t\treturn registrySelector( ...args );\n\t\t};\n\t\tselector.hasResolver = false;\n\t\treturn selector;\n\t};\n\n\treturn mapValues( selectors, createStateSelector );\n}\n\n/**\n * Maps actions to dispatch from a given store.\n *\n * @param {Object} actions Actions to register.\n * @param {Object} store The redux store to which the actions should be mapped.\n *\n * @return {Object} Actions mapped to the redux store provided.\n */\nfunction mapActions( actions, store ) {\n\tconst createBoundAction =\n\t\t( action ) =>\n\t\t( ...args ) => {\n\t\t\treturn Promise.resolve( store.dispatch( action( ...args ) ) );\n\t\t};\n\n\treturn mapValues( actions, createBoundAction );\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\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 * Returns resolvers with matched selectors for a given namespace.\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} resolvers Resolvers to register.\n * @param {Object} selectors The current selectors to be modified.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapResolvers( resolvers, selectors, store, resolversCache ) {\n\t// The `resolver` can be either a function that does the resolution, or, in more advanced\n\t// cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.\n\t// Here we normalize the `resolver` function to an object with `fulfill` method.\n\tconst mappedResolvers = 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\tconst mapSelector = ( selector, selectorName ) => {\n\t\tconst resolver = resolvers[ selectorName ];\n\t\tif ( ! resolver ) {\n\t\t\tselector.hasResolver = false;\n\t\t\treturn selector;\n\t\t}\n\n\t\tconst selectorResolver = ( ...args ) => {\n\t\t\tasync function fulfillSelector() {\n\t\t\t\tconst state = store.getState();\n\n\t\t\t\tif (\n\t\t\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\t\t\tif (\n\t\t\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\t\t\tmetadata,\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) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\t\t\tsetTimeout( async () => {\n\t\t\t\t\tresolversCache.clear( selectorName, args );\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait fulfillResolver(\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\tmappedResolvers,\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t...args\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\t\tmetadataActions.finishResolution(\n\t\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t\targs\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\t\tmetadataActions.failResolution(\n\t\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfulfillSelector( ...args );\n\t\t\treturn selector( ...args );\n\t\t};\n\t\tselectorResolver.hasResolver = true;\n\t\treturn selectorResolver;\n\t};\n\n\treturn {\n\t\tresolvers: mappedResolvers,\n\t\tselectors: mapValues( selectors, mapSelector ),\n\t};\n}\n\n/**\n * Calls a resolver given arguments\n *\n * @param {Object} store Store reference, for fulfilling via resolvers\n * @param {Object} resolvers Store Resolvers\n * @param {string} selectorName Selector name to fulfill.\n * @param {Array} args Selector Arguments.\n */\nasync function fulfillResolver( store, resolvers, selectorName, ...args ) {\n\tconst resolver = resolvers[ selectorName ];\n\tif ( ! resolver ) {\n\t\treturn;\n\t}\n\n\tconst action = resolver.fulfill( ...args );\n\tif ( action ) {\n\t\tawait store.dispatch( action );\n\t}\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["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","EquivalentKeyMap","set","createBindingCache","bind","WeakMap","item","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","resolversCache","bindAction","action","Promise","resolve","metadataActions","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","bindSelector","selector","isRegistrySelector","boundSelector","__unstableOriginalGetState","root","hasResolver","bindMetadataSelector","metadata","metadataSelectors","resolvers","mapResolvers","mapSelectorsWithResolvers","boundPrivateSelectors","privateSelector","values","allSelectors","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","lastState","hasChanged","controls","builtinControls","normalizedControls","control","isRegistryControl","middlewares","promise","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","metadataReducer","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","resolver","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/**\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 ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item );\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\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 )\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\tfunction bindSelector( selector ) {\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\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\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\tlet 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\tlet resolvers;\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tresolvers = mapResolvers( options.resolvers );\n\t\t\t\tselectors = mapSelectorsWithResolvers(\n\t\t\t\t\tselectors,\n\t\t\t\t\tresolvers,\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\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 privateSelector of Object.values( privateSelectors ) ) {\n\t\t\t\tboundPrivateSelectors.get( privateSelector );\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 )\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\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\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\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 resolvers with matched selectors for a given namespace.\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} selectors The current selectors to be modified.\n * @param {Object} resolvers Resolvers to register.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorsWithResolvers(\n\tselectors,\n\tresolvers,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( resolver, selectorName, 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\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\tconst resolver = resolvers[ selectorName ];\n\t\tif ( ! resolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\tconst selectorResolver = ( ...args ) => {\n\t\t\tfulfillSelector( resolver, selectorName, args );\n\t\t\treturn selector( ...args );\n\t\t};\n\t\tselectorResolver.hasResolver = true;\n\t\treturn selectorResolver;\n\t} );\n}\n"]}
@@ -25,10 +25,7 @@ var _utils = require("./utils");
25
25
  *
26
26
  * selectorName -> EquivalentKeyMap<Array,boolean>
27
27
  */
28
- const subKeysIsResolved = (0, _utils.onSubKey)('selectorName')(function () {
29
- let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new _equivalentKeyMap.default();
30
- let action = arguments.length > 1 ? arguments[1] : undefined;
31
-
28
+ const subKeysIsResolved = (0, _utils.onSubKey)('selectorName')((state = new _equivalentKeyMap.default(), action) => {
32
29
  switch (action.type) {
33
30
  case 'START_RESOLUTION':
34
31
  {
@@ -124,10 +121,7 @@ const subKeysIsResolved = (0, _utils.onSubKey)('selectorName')(function () {
124
121
  * @return Next state.
125
122
  */
126
123
 
127
- const isResolved = function () {
128
- let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
129
- let action = arguments.length > 1 ? arguments[1] : undefined;
130
-
124
+ const isResolved = (state = {}, action) => {
131
125
  switch (action.type) {
132
126
  case 'INVALIDATE_RESOLUTION_FOR_STORE':
133
127
  return {};