@wordpress/data 9.3.0 → 9.5.0

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 (52) hide show
  1. package/CHANGELOG.md +4 -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/controls.js +18 -37
  7. package/build/controls.js.map +1 -1
  8. package/build/factory.js +1 -3
  9. package/build/factory.js.map +1 -1
  10. package/build/redux-store/index.js +100 -191
  11. package/build/redux-store/index.js.map +1 -1
  12. package/build/redux-store/metadata/reducer.js +2 -8
  13. package/build/redux-store/metadata/reducer.js.map +1 -1
  14. package/build/redux-store/metadata/selectors.js +13 -15
  15. package/build/redux-store/metadata/selectors.js.map +1 -1
  16. package/build/redux-store/metadata/utils.js +1 -3
  17. package/build/redux-store/metadata/utils.js.map +1 -1
  18. package/build/registry.js +8 -18
  19. package/build/registry.js.map +1 -1
  20. package/build/resolvers-cache-middleware.js +3 -6
  21. package/build/resolvers-cache-middleware.js.map +1 -1
  22. package/build/store/index.js +2 -10
  23. package/build/store/index.js.map +1 -1
  24. package/build-module/components/use-dispatch/use-dispatch-with-map.js +2 -6
  25. package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
  26. package/build-module/components/use-select/index.js +1 -1
  27. package/build-module/components/use-select/index.js.map +1 -1
  28. package/build-module/controls.js +18 -37
  29. package/build-module/controls.js.map +1 -1
  30. package/build-module/factory.js +1 -3
  31. package/build-module/factory.js.map +1 -1
  32. package/build-module/redux-store/index.js +100 -191
  33. package/build-module/redux-store/index.js.map +1 -1
  34. package/build-module/redux-store/metadata/reducer.js +2 -8
  35. package/build-module/redux-store/metadata/reducer.js.map +1 -1
  36. package/build-module/redux-store/metadata/selectors.js +13 -15
  37. package/build-module/redux-store/metadata/selectors.js.map +1 -1
  38. package/build-module/redux-store/metadata/utils.js +1 -3
  39. package/build-module/redux-store/metadata/utils.js.map +1 -1
  40. package/build-module/registry.js +8 -18
  41. package/build-module/registry.js.map +1 -1
  42. package/build-module/resolvers-cache-middleware.js +3 -6
  43. package/build-module/resolvers-cache-middleware.js.map +1 -1
  44. package/build-module/store/index.js +2 -10
  45. package/build-module/store/index.js.map +1 -1
  46. package/build-types/redux-store/index.d.ts.map +1 -1
  47. package/build-types/redux-store/metadata/selectors.d.ts.map +1 -1
  48. package/package.json +9 -9
  49. package/src/redux-store/index.js +129 -206
  50. package/src/redux-store/metadata/selectors.js +9 -2
  51. package/src/test/privateAPIs.js +31 -0
  52. package/tsconfig.tsbuildinfo +1 -1
@@ -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) => {
@@ -194,54 +189,63 @@ function createReduxStore(key, options) {
194
189
 
195
190
  (0, _privateApis.lock)(store, privateRegistrationFunctions);
196
191
  const resolversCache = createResolversCache();
197
- let resolvers;
198
- const actions = mapActions({ ...metadataActions,
199
- ...options.actions
200
- }, store);
192
+
193
+ function bindAction(action) {
194
+ return (...args) => Promise.resolve(store.dispatch(action(...args)));
195
+ }
196
+
197
+ const actions = { ...mapValues(metadataActions, bindAction),
198
+ ...mapValues(options.actions, bindAction)
199
+ };
201
200
  (0, _privateApis.lock)(actions, new Proxy(privateActions, {
202
201
  get: (target, prop) => {
203
- return mapActions(privateActions, store)[prop] || actions[prop];
202
+ const privateAction = privateActions[prop];
203
+ return privateAction ? bindAction(privateAction) : actions[prop];
204
204
  }
205
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
- }
210
206
 
211
- return selector(state.metadata, ...args);
212
- }),
213
- ...mapValues(options.selectors, selector => {
214
- if (selector.isRegistrySelector) {
215
- selector.registry = registry;
216
- }
207
+ function bindSelector(selector) {
208
+ if (selector.isRegistrySelector) {
209
+ selector.registry = registry;
210
+ }
217
211
 
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
- }
212
+ const boundSelector = (...args) => {
213
+ const state = store.__unstableOriginalGetState();
222
214
 
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 => function (state) {
230
- for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
231
- args[_key3 - 1] = arguments[_key3];
232
- }
215
+ return selector(state.root, ...args);
216
+ };
233
217
 
234
- return selector(state.root, ...args);
235
- }), store)[prop] || selectors[prop];
236
- }
237
- }));
218
+ boundSelector.hasResolver = false;
219
+ return boundSelector;
220
+ }
221
+
222
+ function bindMetadataSelector(selector) {
223
+ const boundSelector = (...args) => {
224
+ const state = store.__unstableOriginalGetState();
225
+
226
+ return selector(state.metadata, ...args);
227
+ };
228
+
229
+ boundSelector.hasResolver = false;
230
+ return boundSelector;
231
+ }
232
+
233
+ let selectors = { ...mapValues(metadataSelectors, bindMetadataSelector),
234
+ ...mapValues(options.selectors, bindSelector)
235
+ };
236
+ let resolvers;
238
237
 
239
238
  if (options.resolvers) {
240
- const result = mapResolvers(options.resolvers, selectors, store, resolversCache);
241
- resolvers = result.resolvers;
242
- selectors = result.selectors;
239
+ resolvers = mapResolvers(options.resolvers);
240
+ selectors = mapSelectorsWithResolvers(selectors, resolvers, store, resolversCache);
243
241
  }
244
242
 
243
+ (0, _privateApis.lock)(selectors, new Proxy(privateSelectors, {
244
+ get: (target, prop) => {
245
+ const privateSelector = privateSelectors[prop];
246
+ return privateSelector ? bindSelector(privateSelector) : selectors[prop];
247
+ }
248
+ }));
245
249
  const resolveSelectors = mapResolveSelectors(selectors, store);
246
250
  const suspendSelectors = mapSuspendSelectors(selectors, store);
247
251
 
@@ -342,61 +346,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
342
346
  root: initialState
343
347
  }, (0, _compose.compose)(enhancers));
344
348
  }
345
- /**
346
- * Maps selectors to a store.
347
- *
348
- * @param {Object} selectors Selectors to register. Keys will be used as the
349
- * public facing API. Selectors will get passed the
350
- * state as first argument.
351
- * @param {Object} store The store to which the selectors should be mapped.
352
- * @return {Object} Selectors mapped to the provided store.
353
- */
354
-
355
-
356
- function mapSelectors(selectors, store) {
357
- const createStateSelector = registrySelector => {
358
- const selector = function runSelector() {
359
- // This function is an optimized implementation of:
360
- //
361
- // selector( store.getState(), ...arguments )
362
- //
363
- // Where the above would incur an `Array#concat` in its application,
364
- // the logic here instead efficiently constructs an arguments array via
365
- // direct assignment.
366
- const argsLength = arguments.length;
367
- const args = new Array(argsLength + 1);
368
- args[0] = store.__unstableOriginalGetState();
369
-
370
- for (let i = 0; i < argsLength; i++) {
371
- args[i + 1] = arguments[i];
372
- }
373
-
374
- return registrySelector(...args);
375
- };
376
-
377
- selector.hasResolver = false;
378
- return selector;
379
- };
380
-
381
- return mapValues(selectors, createStateSelector);
382
- }
383
- /**
384
- * Maps actions to dispatch from a given store.
385
- *
386
- * @param {Object} actions Actions to register.
387
- * @param {Object} store The redux store to which the actions should be mapped.
388
- *
389
- * @return {Object} Actions mapped to the redux store provided.
390
- */
391
-
392
-
393
- function mapActions(actions, store) {
394
- const createBoundAction = action => function () {
395
- return Promise.resolve(store.dispatch(action(...arguments)));
396
- };
397
-
398
- return mapValues(actions, createBoundAction);
399
- }
400
349
  /**
401
350
  * Maps selectors to functions that return a resolution promise for them
402
351
  *
@@ -423,20 +372,10 @@ function mapResolveSelectors(selectors, store) {
423
372
  // If the selector doesn't have a resolver, just convert the return value
424
373
  // (including exceptions) to a Promise, no additional extra behavior is needed.
425
374
  if (!selector.hasResolver) {
426
- return async function () {
427
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
428
- args[_key4] = arguments[_key4];
429
- }
430
-
431
- return selector.apply(null, args);
432
- };
375
+ return async (...args) => selector.apply(null, args);
433
376
  }
434
377
 
435
- return function () {
436
- for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
437
- args[_key5] = arguments[_key5];
438
- }
439
-
378
+ return (...args) => {
440
379
  return new Promise((resolve, reject) => {
441
380
  const hasFinished = () => selectors.hasFinishedResolution(selectorName, args);
442
381
 
@@ -487,11 +426,7 @@ function mapSuspendSelectors(selectors, store) {
487
426
  return selector;
488
427
  }
489
428
 
490
- return function () {
491
- for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
492
- args[_key6] = arguments[_key6];
493
- }
494
-
429
+ return (...args) => {
495
430
  const result = selector.apply(null, args);
496
431
 
497
432
  if (selectors.hasFinishedResolution(selectorName, args)) {
@@ -514,22 +449,15 @@ function mapSuspendSelectors(selectors, store) {
514
449
  });
515
450
  }
516
451
  /**
517
- * Returns resolvers with matched selectors for a given namespace.
518
- * Resolvers are side effects invoked once per argument set of a given selector call,
519
- * used in ensuring that the data needs for the selector are satisfied.
452
+ * Convert resolvers to a normalized form, an object with `fulfill` method and
453
+ * optional methods like `isFulfilled`.
520
454
  *
521
- * @param {Object} resolvers Resolvers to register.
522
- * @param {Object} selectors The current selectors to be modified.
523
- * @param {Object} store The redux store to which the resolvers should be mapped.
524
- * @param {Object} resolversCache Resolvers Cache.
455
+ * @param {Object} resolvers Resolver to convert
525
456
  */
526
457
 
527
458
 
528
- function mapResolvers(resolvers, selectors, store, resolversCache) {
529
- // The `resolver` can be either a function that does the resolution, or, in more advanced
530
- // cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.
531
- // Here we normalize the `resolver` function to an object with `fulfill` method.
532
- const mappedResolvers = mapValues(resolvers, resolver => {
459
+ function mapResolvers(resolvers) {
460
+ return mapValues(resolvers, resolver => {
533
461
  if (resolver.fulfill) {
534
462
  return resolver;
535
463
  }
@@ -540,87 +468,68 @@ function mapResolvers(resolvers, selectors, store, resolversCache) {
540
468
 
541
469
  };
542
470
  });
471
+ }
472
+ /**
473
+ * Returns resolvers with matched selectors for a given namespace.
474
+ * Resolvers are side effects invoked once per argument set of a given selector call,
475
+ * used in ensuring that the data needs for the selector are satisfied.
476
+ *
477
+ * @param {Object} selectors The current selectors to be modified.
478
+ * @param {Object} resolvers Resolvers to register.
479
+ * @param {Object} store The redux store to which the resolvers should be mapped.
480
+ * @param {Object} resolversCache Resolvers Cache.
481
+ */
543
482
 
544
- const mapSelector = (selector, selectorName) => {
545
- const resolver = resolvers[selectorName];
546
483
 
547
- if (!resolver) {
548
- selector.hasResolver = false;
549
- return selector;
484
+ function mapSelectorsWithResolvers(selectors, resolvers, store, resolversCache) {
485
+ function fulfillSelector(resolver, selectorName, args) {
486
+ const state = store.getState();
487
+
488
+ if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === 'function' && resolver.isFulfilled(state, ...args)) {
489
+ return;
550
490
  }
551
491
 
552
- const selectorResolver = function () {
553
- for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
554
- args[_key7] = arguments[_key7];
555
- }
492
+ const {
493
+ metadata
494
+ } = store.__unstableOriginalGetState();
556
495
 
557
- async function fulfillSelector() {
558
- const state = store.getState();
496
+ if (metadataSelectors.hasStartedResolution(metadata, selectorName, args)) {
497
+ return;
498
+ }
559
499
 
560
- if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === 'function' && resolver.isFulfilled(state, ...args)) {
561
- return;
562
- }
500
+ resolversCache.markAsRunning(selectorName, args);
501
+ setTimeout(async () => {
502
+ resolversCache.clear(selectorName, args);
503
+ store.dispatch(metadataActions.startResolution(selectorName, args));
563
504
 
564
- const {
565
- metadata
566
- } = store.__unstableOriginalGetState();
505
+ try {
506
+ const action = resolver.fulfill(...args);
567
507
 
568
- if (metadataSelectors.hasStartedResolution(metadata, selectorName, args)) {
569
- return;
508
+ if (action) {
509
+ await store.dispatch(action);
570
510
  }
571
511
 
572
- resolversCache.markAsRunning(selectorName, args);
573
- setTimeout(async () => {
574
- resolversCache.clear(selectorName, args);
575
- store.dispatch(metadataActions.startResolution(selectorName, args));
576
-
577
- try {
578
- await fulfillResolver(store, mappedResolvers, selectorName, ...args);
579
- store.dispatch(metadataActions.finishResolution(selectorName, args));
580
- } catch (error) {
581
- store.dispatch(metadataActions.failResolution(selectorName, args, error));
582
- }
583
- });
512
+ store.dispatch(metadataActions.finishResolution(selectorName, args));
513
+ } catch (error) {
514
+ store.dispatch(metadataActions.failResolution(selectorName, args, error));
584
515
  }
516
+ }, 0);
517
+ }
518
+
519
+ return mapValues(selectors, (selector, selectorName) => {
520
+ const resolver = resolvers[selectorName];
521
+
522
+ if (!resolver) {
523
+ return selector;
524
+ }
585
525
 
586
- fulfillSelector(...args);
526
+ const selectorResolver = (...args) => {
527
+ fulfillSelector(resolver, selectorName, args);
587
528
  return selector(...args);
588
529
  };
589
530
 
590
531
  selectorResolver.hasResolver = true;
591
532
  return selectorResolver;
592
- };
593
-
594
- return {
595
- resolvers: mappedResolvers,
596
- selectors: mapValues(selectors, mapSelector)
597
- };
598
- }
599
- /**
600
- * Calls a resolver given arguments
601
- *
602
- * @param {Object} store Store reference, for fulfilling via resolvers
603
- * @param {Object} resolvers Store Resolvers
604
- * @param {string} selectorName Selector name to fulfill.
605
- * @param {Array} args Selector Arguments.
606
- */
607
-
608
-
609
- async function fulfillResolver(store, resolvers, selectorName) {
610
- const resolver = resolvers[selectorName];
611
-
612
- if (!resolver) {
613
- return;
614
- }
615
-
616
- for (var _len8 = arguments.length, args = new Array(_len8 > 3 ? _len8 - 3 : 0), _key8 = 3; _key8 < _len8; _key8++) {
617
- args[_key8 - 3] = arguments[_key8];
618
- }
619
-
620
- const action = resolver.fulfill(...args);
621
-
622
- if (action) {
623
- await store.dispatch(action);
624
- }
533
+ });
625
534
  }
626
535
  //# 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(\n\t\t\t\t\t\t\t\t\tprivateSelectors,\n\t\t\t\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t\t\t\t( state, ...args ) =>\n\t\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","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","bindAction","Promise","resolve","metadataActions","Proxy","target","prop","privateAction","bindSelector","isRegistrySelector","boundSelector","root","hasResolver","bindMetadataSelector","metadata","metadataSelectors","resolvers","mapResolvers","mapSelectorsWithResolvers","privateSelector","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","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","storeSelectors","apply","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","resolver","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AAKA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAvBA;AACA;AACA;;AAKA;AACA;AACA;;AAIA;AACA;AACA;;AAUA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMA,mBAAmB,GAAKC,KAAF,IAAa;AACxC,QAAMC,MAAM,GAAG,CAAE,GAAGD,KAAL,CAAf;;AACA,OAAM,IAAIE,CAAC,GAAGD,MAAM,CAACE,MAAP,GAAgB,CAA9B,EAAiCD,CAAC,IAAI,CAAtC,EAAyCA,CAAC,EAA1C,EAA+C;AAC9C,QAAKD,MAAM,CAAEC,CAAF,CAAN,KAAgBE,SAArB,EAAiC;AAChCH,MAAAA,MAAM,CAACI,MAAP,CAAeH,CAAf,EAAkB,CAAlB;AACA;AACD;;AACD,SAAOD,MAAP;AACA,CARD;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMK,SAAS,GAAG,CAAEC,GAAF,EAAOC,QAAP,KACjBC,MAAM,CAACC,WAAP,CACCD,MAAM,CAACE,OAAP,CAAgBJ,GAAhB,aAAgBA,GAAhB,cAAgBA,GAAhB,GAAuB,EAAvB,EAA4BK,GAA5B,CAAiC,CAAE,CAAEC,GAAF,EAAOC,KAAP,CAAF,KAAsB,CACtDD,GADsD,EAEtDL,QAAQ,CAAEM,KAAF,EAASD,GAAT,CAF8C,CAAvD,CADD,CADD,C,CAQA;;;AACA,MAAME,WAAW,GAAG,CAAEF,GAAF,EAAOG,KAAP,KAAkB;AACrC,MAAKA,KAAK,YAAYC,GAAtB,EAA4B;AAC3B,WAAOR,MAAM,CAACC,WAAP,CAAoBM,KAApB,CAAP;AACA;;AAED,SAAOA,KAAP;AACA,CAND;AAQA;AACA;AACA;AACA;AACA;;;AACA,SAASE,oBAAT,GAAgC;AAC/B,QAAMC,KAAK,GAAG,EAAd;AACA,SAAO;AACNC,IAAAA,SAAS,CAAEC,YAAF,EAAgBC,IAAhB,EAAuB;AAC/B,aACCH,KAAK,CAAEE,YAAF,CAAL,IACAF,KAAK,CAAEE,YAAF,CAAL,CAAsBE,GAAtB,CAA2BxB,mBAAmB,CAAEuB,IAAF,CAA9C,CAFD;AAIA,KANK;;AAQNE,IAAAA,KAAK,CAAEH,YAAF,EAAgBC,IAAhB,EAAuB;AAC3B,UAAKH,KAAK,CAAEE,YAAF,CAAV,EAA6B;AAC5BF,QAAAA,KAAK,CAAEE,YAAF,CAAL,CAAsBI,MAAtB,CAA8B1B,mBAAmB,CAAEuB,IAAF,CAAjD;AACA;AACD,KAZK;;AAcNI,IAAAA,aAAa,CAAEL,YAAF,EAAgBC,IAAhB,EAAuB;AACnC,UAAK,CAAEH,KAAK,CAAEE,YAAF,CAAZ,EAA+B;AAC9BF,QAAAA,KAAK,CAAEE,YAAF,CAAL,GAAwB,IAAIM,yBAAJ,EAAxB;AACA;;AAEDR,MAAAA,KAAK,CAAEE,YAAF,CAAL,CAAsBO,GAAtB,CAA2B7B,mBAAmB,CAAEuB,IAAF,CAA9C,EAAwD,IAAxD;AACA;;AApBK,GAAP;AAsBA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACe,SAASO,gBAAT,CAA2BhB,GAA3B,EAAgCiB,OAAhC,EAA0C;AACxD,QAAMC,cAAc,GAAG,EAAvB;AACA,QAAMC,gBAAgB,GAAG,EAAzB;AACA,QAAMC,4BAA4B,GAAG;AACpCF,IAAAA,cADoC;AAEpCG,IAAAA,sBAAsB,EAAIC,OAAF,IAAe;AACtC1B,MAAAA,MAAM,CAAC2B,MAAP,CAAeL,cAAf,EAA+BI,OAA/B;AACA,KAJmC;AAKpCH,IAAAA,gBALoC;AAMpCK,IAAAA,wBAAwB,EAAIC,SAAF,IAAiB;AAC1C7B,MAAAA,MAAM,CAAC2B,MAAP,CAAeJ,gBAAf,EAAiCM,SAAjC;AACA;AARmC,GAArC;AAUA,QAAMC,eAAe,GAAG;AACvBC,IAAAA,IAAI,EAAE3B,GADiB;AAEvB4B,IAAAA,WAAW,EAAIC,QAAF,IAAgB;AAC5B,YAAMC,OAAO,GAAGb,OAAO,CAACa,OAAxB;AACA,YAAMC,SAAS,GAAG;AACjBF,QAAAA,QADiB;;AAEjB,YAAIG,QAAJ,GAAe;AACd,iBAAOpC,MAAM,CAAC2B,MAAP,CACJU,MAAF,IAAcC,KAAK,CAACF,QAAN,CAAgBC,MAAhB,CADR,EAENE,UAAU,EAFJ,CAAP;AAIA,SAPgB;;AAQjB,YAAIC,MAAJ,GAAa;AACZ,iBAAOxC,MAAM,CAAC2B,MAAP,CACJc,QAAF,IACCA,QAAQ,CAAEH,KAAK,CAACI,0BAAN,EAAF,CAFH,EAGNC,YAAY,EAHN,CAAP;AAKA,SAdgB;;AAejB,YAAIC,aAAJ,GAAoB;AACnB,iBAAOC,mBAAmB,EAA1B;AACA;;AAjBgB,OAAlB;AAoBA,YAAMP,KAAK,GAAGQ,qBAAqB,CAClC1C,GADkC,EAElCiB,OAFkC,EAGlCY,QAHkC,EAIlCE,SAJkC,CAAnC,CAtB4B,CA4B5B;AACA;;AACA,6BAAMG,KAAN,EAAad,4BAAb;AACA,YAAMuB,cAAc,GAAGtC,oBAAoB,EAA3C;;AAEA,eAASuC,UAAT,CAAqBX,MAArB,EAA8B;AAC7B,eAAO,CAAE,GAAGxB,IAAL,KACNoC,OAAO,CAACC,OAAR,CAAiBZ,KAAK,CAACF,QAAN,CAAgBC,MAAM,CAAE,GAAGxB,IAAL,CAAtB,CAAjB,CADD;AAEA;;AAED,YAAMa,OAAO,GAAG,EACf,GAAG7B,SAAS,CAAEsD,eAAF,EAAmBH,UAAnB,CADG;AAEf,WAAGnD,SAAS,CAAEwB,OAAO,CAACK,OAAV,EAAmBsB,UAAnB;AAFG,OAAhB;AAKA,6BACCtB,OADD,EAEC,IAAI0B,KAAJ,CAAW9B,cAAX,EAA2B;AAC1BR,QAAAA,GAAG,EAAE,CAAEuC,MAAF,EAAUC,IAAV,KAAoB;AACxB,gBAAMC,aAAa,GAAGjC,cAAc,CAAEgC,IAAF,CAApC;AACA,iBAAOC,aAAa,GACjBP,UAAU,CAAEO,aAAF,CADO,GAEjB7B,OAAO,CAAE4B,IAAF,CAFV;AAGA;AANyB,OAA3B,CAFD;;AAYA,eAASE,YAAT,CAAuBf,QAAvB,EAAkC;AACjC,YAAKA,QAAQ,CAACgB,kBAAd,EAAmC;AAClChB,UAAAA,QAAQ,CAACR,QAAT,GAAoBA,QAApB;AACA;;AACD,cAAMyB,aAAa,GAAG,CAAE,GAAG7C,IAAL,KAAe;AACpC,gBAAMN,KAAK,GAAG+B,KAAK,CAACI,0BAAN,EAAd;;AACA,iBAAOD,QAAQ,CAAElC,KAAK,CAACoD,IAAR,EAAc,GAAG9C,IAAjB,CAAf;AACA,SAHD;;AAIA6C,QAAAA,aAAa,CAACE,WAAd,GAA4B,KAA5B;AACA,eAAOF,aAAP;AACA;;AAED,eAASG,oBAAT,CAA+BpB,QAA/B,EAA0C;AACzC,cAAMiB,aAAa,GAAG,CAAE,GAAG7C,IAAL,KAAe;AACpC,gBAAMN,KAAK,GAAG+B,KAAK,CAACI,0BAAN,EAAd;;AACA,iBAAOD,QAAQ,CAAElC,KAAK,CAACuD,QAAR,EAAkB,GAAGjD,IAArB,CAAf;AACA,SAHD;;AAIA6C,QAAAA,aAAa,CAACE,WAAd,GAA4B,KAA5B;AACA,eAAOF,aAAP;AACA;;AAED,UAAI7B,SAAS,GAAG,EACf,GAAGhC,SAAS,CAAEkE,iBAAF,EAAqBF,oBAArB,CADG;AAEf,WAAGhE,SAAS,CAAEwB,OAAO,CAACQ,SAAV,EAAqB2B,YAArB;AAFG,OAAhB;AAKA,UAAIQ,SAAJ;;AACA,UAAK3C,OAAO,CAAC2C,SAAb,EAAyB;AACxBA,QAAAA,SAAS,GAAGC,YAAY,CAAE5C,OAAO,CAAC2C,SAAV,CAAxB;AACAnC,QAAAA,SAAS,GAAGqC,yBAAyB,CACpCrC,SADoC,EAEpCmC,SAFoC,EAGpC1B,KAHoC,EAIpCS,cAJoC,CAArC;AAMA;;AAED,6BACClB,SADD,EAEC,IAAIuB,KAAJ,CAAW7B,gBAAX,EAA6B;AAC5BT,QAAAA,GAAG,EAAE,CAAEuC,MAAF,EAAUC,IAAV,KAAoB;AACxB,gBAAMa,eAAe,GAAG5C,gBAAgB,CAAE+B,IAAF,CAAxC;AACA,iBAAOa,eAAe,GACnBX,YAAY,CAAEW,eAAF,CADO,GAEnBtC,SAAS,CAAEyB,IAAF,CAFZ;AAGA;AAN2B,OAA7B,CAFD;AAYA,YAAMc,gBAAgB,GAAGC,mBAAmB,CAAExC,SAAF,EAAaS,KAAb,CAA5C;AACA,YAAMgC,gBAAgB,GAAGC,mBAAmB,CAAE1C,SAAF,EAAaS,KAAb,CAA5C;;AAEA,YAAMK,YAAY,GAAG,MAAMd,SAA3B;;AACA,YAAMU,UAAU,GAAG,MAAMb,OAAzB;;AACA,YAAMmB,mBAAmB,GAAG,MAAMuB,gBAAlC;;AACA,YAAMI,mBAAmB,GAAG,MAAMF,gBAAlC,CA9G4B,CAgH5B;AACA;AACA;;;AACAhC,MAAAA,KAAK,CAACI,0BAAN,GAAmCJ,KAAK,CAACmC,QAAzC;;AACAnC,MAAAA,KAAK,CAACmC,QAAN,GAAiB,MAAMnC,KAAK,CAACI,0BAAN,GAAmCiB,IAA1D,CApH4B,CAsH5B;AACA;;;AACA,YAAMe,SAAS,GACdpC,KAAK,KACDqC,QAAF,IAAgB;AACjB,YAAIC,SAAS,GAAGtC,KAAK,CAACI,0BAAN,EAAhB;;AACA,eAAOJ,KAAK,CAACoC,SAAN,CAAiB,MAAM;AAC7B,gBAAMnE,KAAK,GAAG+B,KAAK,CAACI,0BAAN,EAAd;;AACA,gBAAMmC,UAAU,GAAGtE,KAAK,KAAKqE,SAA7B;AACAA,UAAAA,SAAS,GAAGrE,KAAZ;;AAEA,cAAKsE,UAAL,EAAkB;AACjBF,YAAAA,QAAQ;AACR;AACD,SARM,CAAP;AASA,OAZI,CADN,CAxH4B,CAuI5B;AACA;;;AACA,aAAO;AACNzC,QAAAA,OADM;AAENI,QAAAA,KAFM;AAGNZ,QAAAA,OAHM;AAING,QAAAA,SAJM;AAKNmC,QAAAA,SALM;AAMNrB,QAAAA,YANM;AAONE,QAAAA,mBAPM;AAQN2B,QAAAA,mBARM;AASNjC,QAAAA,UATM;AAUNmC,QAAAA;AAVM,OAAP;AAYA;AAvJsB,GAAxB,CAbwD,CAuKxD;AACA;AACA;;AACA,yBAAM5C,eAAN,EAAuBN,4BAAvB;AAEA,SAAOM,eAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASgB,qBAAT,CAAgC1C,GAAhC,EAAqCiB,OAArC,EAA8CY,QAA9C,EAAwDE,SAAxD,EAAoE;AACnE,QAAM2C,QAAQ,GAAG,EAChB,GAAGzD,OAAO,CAACyD,QADK;AAEhB,OAAGC;AAFa,GAAjB;AAKA,QAAMC,kBAAkB,GAAGnF,SAAS,CAAEiF,QAAF,EAAcG,OAAF,IAC/CA,OAAO,CAACC,iBAAR,GAA4BD,OAAO,CAAEhD,QAAF,CAAnC,GAAkDgD,OADf,CAApC;AAIA,QAAME,WAAW,GAAG,CACnB,uCAAgClD,QAAhC,EAA0C7B,GAA1C,CADmB,EAEnBgF,0BAFmB,EAGnB,2BAA8BJ,kBAA9B,CAHmB,EAInB,8BAAuB7C,SAAvB,CAJmB,CAApB;AAOA,QAAMkD,SAAS,GAAG,CAAE,4BAAiB,GAAGF,WAApB,CAAF,CAAlB;;AACA,MACC,OAAOG,MAAP,KAAkB,WAAlB,IACAA,MAAM,CAACC,4BAFR,EAGE;AACDF,IAAAA,SAAS,CAACG,IAAV,CACCF,MAAM,CAACC,4BAAP,CAAqC;AACpCxD,MAAAA,IAAI,EAAE3B,GAD8B;AAEpCqF,MAAAA,UAAU,EAAErF,GAFwB;AAGpCsF,MAAAA,SAAS,EAAE;AACVC,QAAAA,QAAQ,EAAErF;AADA;AAHyB,KAArC,CADD;AASA;;AAED,QAAM;AAAE4B,IAAAA,OAAF;AAAW0D,IAAAA;AAAX,MAA4BvE,OAAlC;AACA,QAAMwE,eAAe,GAAG,mCAAiB;AACxC/B,IAAAA,QAAQ,EAAEgC,gBAD8B;AAExCnC,IAAAA,IAAI,EAAEzB;AAFkC,GAAjB,CAAxB;AAKA,SAAO,wBACN2D,eADM,EAEN;AAAElC,IAAAA,IAAI,EAAEiC;AAAR,GAFM,EAGN,sBAASP,SAAT,CAHM,CAAP;AAKA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAShB,mBAAT,CAA8BxC,SAA9B,EAAyCS,KAAzC,EAAiD;AAChD,QAAM;AACLyD,IAAAA,cADK;AAELC,IAAAA,oBAFK;AAGLC,IAAAA,qBAHK;AAILC,IAAAA,mBAJK;AAKLC,IAAAA,WALK;AAMLC,IAAAA,kBANK;AAOLC,IAAAA,kBAPK;AAQLC,IAAAA,kBARK;AASL,OAAGC;AATE,MAUF1E,SAVJ;AAYA,SAAOhC,SAAS,CAAE0G,cAAF,EAAkB,CAAE9D,QAAF,EAAY7B,YAAZ,KAA8B;AAC/D;AACA;AACA,QAAK,CAAE6B,QAAQ,CAACmB,WAAhB,EAA8B;AAC7B,aAAO,OAAQ,GAAG/C,IAAX,KAAqB4B,QAAQ,CAAC+D,KAAT,CAAgB,IAAhB,EAAsB3F,IAAtB,CAA5B;AACA;;AAED,WAAO,CAAE,GAAGA,IAAL,KAAe;AACrB,aAAO,IAAIoC,OAAJ,CAAa,CAAEC,OAAF,EAAWuD,MAAX,KAAuB;AAC1C,cAAMC,WAAW,GAAG,MACnB7E,SAAS,CAACoE,qBAAV,CAAiCrF,YAAjC,EAA+CC,IAA/C,CADD;;AAEA,cAAM8F,QAAQ,GAAKnH,MAAF,IAAc;AAC9B,gBAAMoH,SAAS,GAAG/E,SAAS,CAACqE,mBAAV,CACjBtF,YADiB,EAEjBC,IAFiB,CAAlB;;AAIA,cAAK+F,SAAL,EAAiB;AAChB,kBAAMC,KAAK,GAAGhF,SAAS,CAACyE,kBAAV,CACb1F,YADa,EAEbC,IAFa,CAAd;AAIA4F,YAAAA,MAAM,CAAEI,KAAF,CAAN;AACA,WAND,MAMO;AACN3D,YAAAA,OAAO,CAAE1D,MAAF,CAAP;AACA;AACD,SAdD;;AAeA,cAAMsH,SAAS,GAAG,MAAMrE,QAAQ,CAAC+D,KAAT,CAAgB,IAAhB,EAAsB3F,IAAtB,CAAxB,CAlB0C,CAmB1C;;;AACA,cAAMrB,MAAM,GAAGsH,SAAS,EAAxB;;AACA,YAAKJ,WAAW,EAAhB,EAAqB;AACpB,iBAAOC,QAAQ,CAAEnH,MAAF,CAAf;AACA;;AAED,cAAMuH,WAAW,GAAGzE,KAAK,CAACoC,SAAN,CAAiB,MAAM;AAC1C,cAAKgC,WAAW,EAAhB,EAAqB;AACpBK,YAAAA,WAAW;AACXJ,YAAAA,QAAQ,CAAEG,SAAS,EAAX,CAAR;AACA;AACD,SALmB,CAApB;AAMA,OA/BM,CAAP;AAgCA,KAjCD;AAkCA,GAzCe,CAAhB;AA0CA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASvC,mBAAT,CAA8B1C,SAA9B,EAAyCS,KAAzC,EAAiD;AAChD,SAAOzC,SAAS,CAAEgC,SAAF,EAAa,CAAEY,QAAF,EAAY7B,YAAZ,KAA8B;AAC1D;AACA,QAAK,CAAE6B,QAAQ,CAACmB,WAAhB,EAA8B;AAC7B,aAAOnB,QAAP;AACA;;AAED,WAAO,CAAE,GAAG5B,IAAL,KAAe;AACrB,YAAMrB,MAAM,GAAGiD,QAAQ,CAAC+D,KAAT,CAAgB,IAAhB,EAAsB3F,IAAtB,CAAf;;AAEA,UAAKgB,SAAS,CAACoE,qBAAV,CAAiCrF,YAAjC,EAA+CC,IAA/C,CAAL,EAA6D;AAC5D,YAAKgB,SAAS,CAACqE,mBAAV,CAA+BtF,YAA/B,EAA6CC,IAA7C,CAAL,EAA2D;AAC1D,gBAAMgB,SAAS,CAACyE,kBAAV,CAA8B1F,YAA9B,EAA4CC,IAA5C,CAAN;AACA;;AAED,eAAOrB,MAAP;AACA;;AAED,YAAM,IAAIyD,OAAJ,CAAeC,OAAF,IAAe;AACjC,cAAM6D,WAAW,GAAGzE,KAAK,CAACoC,SAAN,CAAiB,MAAM;AAC1C,cACC7C,SAAS,CAACoE,qBAAV,CAAiCrF,YAAjC,EAA+CC,IAA/C,CADD,EAEE;AACDqC,YAAAA,OAAO;AACP6D,YAAAA,WAAW;AACX;AACD,SAPmB,CAApB;AAQA,OATK,CAAN;AAUA,KArBD;AAsBA,GA5Be,CAAhB;AA6BA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS9C,YAAT,CAAuBD,SAAvB,EAAmC;AAClC,SAAOnE,SAAS,CAAEmE,SAAF,EAAegD,QAAF,IAAgB;AAC5C,QAAKA,QAAQ,CAACC,OAAd,EAAwB;AACvB,aAAOD,QAAP;AACA;;AAED,WAAO,EACN,GAAGA,QADG;AACO;AACbC,MAAAA,OAAO,EAAED,QAFH,CAEa;;AAFb,KAAP;AAIA,GATe,CAAhB;AAUA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS9C,yBAAT,CACCrC,SADD,EAECmC,SAFD,EAGC1B,KAHD,EAICS,cAJD,EAKE;AACD,WAASmE,eAAT,CAA0BF,QAA1B,EAAoCpG,YAApC,EAAkDC,IAAlD,EAAyD;AACxD,UAAMN,KAAK,GAAG+B,KAAK,CAACmC,QAAN,EAAd;;AAEA,QACC1B,cAAc,CAACpC,SAAf,CAA0BC,YAA1B,EAAwCC,IAAxC,KACE,OAAOmG,QAAQ,CAACG,WAAhB,KAAgC,UAAhC,IACDH,QAAQ,CAACG,WAAT,CAAsB5G,KAAtB,EAA6B,GAAGM,IAAhC,CAHF,EAIE;AACD;AACA;;AAED,UAAM;AAAEiD,MAAAA;AAAF,QAAexB,KAAK,CAACI,0BAAN,EAArB;;AAEA,QACCqB,iBAAiB,CAACiC,oBAAlB,CACClC,QADD,EAEClD,YAFD,EAGCC,IAHD,CADD,EAME;AACD;AACA;;AAEDkC,IAAAA,cAAc,CAAC9B,aAAf,CAA8BL,YAA9B,EAA4CC,IAA5C;AAEAuG,IAAAA,UAAU,CAAE,YAAY;AACvBrE,MAAAA,cAAc,CAAChC,KAAf,CAAsBH,YAAtB,EAAoCC,IAApC;AACAyB,MAAAA,KAAK,CAACF,QAAN,CACCe,eAAe,CAACkE,eAAhB,CAAiCzG,YAAjC,EAA+CC,IAA/C,CADD;;AAGA,UAAI;AACH,cAAMwB,MAAM,GAAG2E,QAAQ,CAACC,OAAT,CAAkB,GAAGpG,IAArB,CAAf;;AACA,YAAKwB,MAAL,EAAc;AACb,gBAAMC,KAAK,CAACF,QAAN,CAAgBC,MAAhB,CAAN;AACA;;AACDC,QAAAA,KAAK,CAACF,QAAN,CACCe,eAAe,CAACmE,gBAAhB,CAAkC1G,YAAlC,EAAgDC,IAAhD,CADD;AAGA,OARD,CAQE,OAAQgG,KAAR,EAAgB;AACjBvE,QAAAA,KAAK,CAACF,QAAN,CACCe,eAAe,CAACoE,cAAhB,CAAgC3G,YAAhC,EAA8CC,IAA9C,EAAoDgG,KAApD,CADD;AAGA;AACD,KAlBS,EAkBP,CAlBO,CAAV;AAmBA;;AAED,SAAOhH,SAAS,CAAEgC,SAAF,EAAa,CAAEY,QAAF,EAAY7B,YAAZ,KAA8B;AAC1D,UAAMoG,QAAQ,GAAGhD,SAAS,CAAEpD,YAAF,CAA1B;;AACA,QAAK,CAAEoG,QAAP,EAAkB;AACjB,aAAOvE,QAAP;AACA;;AAED,UAAM+E,gBAAgB,GAAG,CAAE,GAAG3G,IAAL,KAAe;AACvCqG,MAAAA,eAAe,CAAEF,QAAF,EAAYpG,YAAZ,EAA0BC,IAA1B,CAAf;AACA,aAAO4B,QAAQ,CAAE,GAAG5B,IAAL,CAAf;AACA,KAHD;;AAIA2G,IAAAA,gBAAgB,CAAC5D,WAAjB,GAA+B,IAA/B;AACA,WAAO4D,gBAAP;AACA,GAZe,CAAhB;AAaA","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.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\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\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\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\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t\t? bindAction( privateAction )\n\t\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\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\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\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t\t? bindSelector( privateSelector )\n\t\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t\t},\n\t\t\t\t} )\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 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 {};
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/redux-store/metadata/reducer.ts"],"names":["subKeysIsResolved","state","EquivalentKeyMap","action","type","nextState","set","args","status","error","resolutionArgs","forEach","idx","resolutionState","undefined","errors","delete","isResolved","selectorName","removedSelector","restState"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport EquivalentKeyMap from 'equivalent-key-map';\nimport type { Reducer } from 'redux';\n\n/**\n * Internal dependencies\n */\nimport { selectorArgsToStateKey, onSubKey } from './utils';\n\ntype Action =\n\t| ReturnType< typeof import('./actions').startResolution >\n\t| ReturnType< typeof import('./actions').finishResolution >\n\t| ReturnType< typeof import('./actions').failResolution >\n\t| ReturnType< typeof import('./actions').startResolutions >\n\t| ReturnType< typeof import('./actions').finishResolutions >\n\t| ReturnType< typeof import('./actions').failResolutions >\n\t| ReturnType< typeof import('./actions').invalidateResolution >\n\t| ReturnType< typeof import('./actions').invalidateResolutionForStore >\n\t| ReturnType<\n\t\t\ttypeof import('./actions').invalidateResolutionForStoreSelector\n\t >;\n\ntype StateKey = unknown[] | unknown;\nexport type StateValue =\n\t| { status: 'resolving' | 'finished' }\n\t| { status: 'error'; error: Error | unknown };\n\nexport type Status = StateValue[ 'status' ];\nexport type State = EquivalentKeyMap< StateKey, StateValue >;\n\n/**\n * Reducer function returning next state for selector resolution of\n * subkeys, object form:\n *\n * selectorName -> EquivalentKeyMap<Array,boolean>\n */\nconst subKeysIsResolved: Reducer< Record< string, State >, Action > = onSubKey<\n\tState,\n\tAction\n>( 'selectorName' )( ( state = new EquivalentKeyMap(), action: Action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'START_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.set( selectorArgsToStateKey( action.args ), {\n\t\t\t\tstatus: 'resolving',\n\t\t\t} );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'FINISH_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.set( selectorArgsToStateKey( action.args ), {\n\t\t\t\tstatus: 'finished',\n\t\t\t} );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'FAIL_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.set( selectorArgsToStateKey( action.args ), {\n\t\t\t\tstatus: 'error',\n\t\t\t\terror: action.error,\n\t\t\t} );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'START_RESOLUTIONS': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tfor ( const resolutionArgs of action.args ) {\n\t\t\t\tnextState.set( selectorArgsToStateKey( resolutionArgs ), {\n\t\t\t\t\tstatus: 'resolving',\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'FINISH_RESOLUTIONS': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tfor ( const resolutionArgs of action.args ) {\n\t\t\t\tnextState.set( selectorArgsToStateKey( resolutionArgs ), {\n\t\t\t\t\tstatus: 'finished',\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'FAIL_RESOLUTIONS': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\taction.args.forEach( ( resolutionArgs, idx ) => {\n\t\t\t\tconst resolutionState: StateValue = {\n\t\t\t\t\tstatus: 'error',\n\t\t\t\t\terror: undefined,\n\t\t\t\t};\n\n\t\t\t\tconst error = action.errors[ idx ];\n\t\t\t\tif ( error ) {\n\t\t\t\t\tresolutionState.error = error;\n\t\t\t\t}\n\n\t\t\t\tnextState.set(\n\t\t\t\t\tselectorArgsToStateKey( resolutionArgs as unknown[] ),\n\t\t\t\t\tresolutionState\n\t\t\t\t);\n\t\t\t} );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'INVALIDATE_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.delete( selectorArgsToStateKey( action.args ) );\n\t\t\treturn nextState;\n\t\t}\n\t}\n\treturn state;\n} );\n\n/**\n * Reducer function returning next state for selector resolution, object form:\n *\n * selectorName -> EquivalentKeyMap<Array, boolean>\n *\n * @param state Current state.\n * @param action Dispatched action.\n *\n * @return Next state.\n */\nconst isResolved = ( state: Record< string, State > = {}, action: Action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'INVALIDATE_RESOLUTION_FOR_STORE':\n\t\t\treturn {};\n\t\tcase 'INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR': {\n\t\t\tif ( action.selectorName in state ) {\n\t\t\t\tconst {\n\t\t\t\t\t[ action.selectorName ]: removedSelector,\n\t\t\t\t\t...restState\n\t\t\t\t} = state;\n\t\t\t\treturn restState;\n\t\t\t}\n\t\t\treturn state;\n\t\t}\n\t\tcase 'START_RESOLUTION':\n\t\tcase 'FINISH_RESOLUTION':\n\t\tcase 'FAIL_RESOLUTION':\n\t\tcase 'START_RESOLUTIONS':\n\t\tcase 'FINISH_RESOLUTIONS':\n\t\tcase 'FAIL_RESOLUTIONS':\n\t\tcase 'INVALIDATE_RESOLUTION':\n\t\t\treturn subKeysIsResolved( state, action );\n\t}\n\treturn state;\n};\n\nexport default isResolved;\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/redux-store/metadata/reducer.ts"],"names":["subKeysIsResolved","state","EquivalentKeyMap","action","type","nextState","set","args","status","error","resolutionArgs","forEach","idx","resolutionState","undefined","errors","delete","isResolved","selectorName","removedSelector","restState"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport EquivalentKeyMap from 'equivalent-key-map';\nimport type { Reducer } from 'redux';\n\n/**\n * Internal dependencies\n */\nimport { selectorArgsToStateKey, onSubKey } from './utils';\n\ntype Action =\n\t| ReturnType< typeof import('./actions').startResolution >\n\t| ReturnType< typeof import('./actions').finishResolution >\n\t| ReturnType< typeof import('./actions').failResolution >\n\t| ReturnType< typeof import('./actions').startResolutions >\n\t| ReturnType< typeof import('./actions').finishResolutions >\n\t| ReturnType< typeof import('./actions').failResolutions >\n\t| ReturnType< typeof import('./actions').invalidateResolution >\n\t| ReturnType< typeof import('./actions').invalidateResolutionForStore >\n\t| ReturnType<\n\t\t\ttypeof import('./actions').invalidateResolutionForStoreSelector\n\t >;\n\ntype StateKey = unknown[] | unknown;\nexport type StateValue =\n\t| { status: 'resolving' | 'finished' }\n\t| { status: 'error'; error: Error | unknown };\n\nexport type Status = StateValue[ 'status' ];\nexport type State = EquivalentKeyMap< StateKey, StateValue >;\n\n/**\n * Reducer function returning next state for selector resolution of\n * subkeys, object form:\n *\n * selectorName -> EquivalentKeyMap<Array,boolean>\n */\nconst subKeysIsResolved: Reducer< Record< string, State >, Action > = onSubKey<\n\tState,\n\tAction\n>( 'selectorName' )( ( state = new EquivalentKeyMap(), action: Action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'START_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.set( selectorArgsToStateKey( action.args ), {\n\t\t\t\tstatus: 'resolving',\n\t\t\t} );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'FINISH_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.set( selectorArgsToStateKey( action.args ), {\n\t\t\t\tstatus: 'finished',\n\t\t\t} );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'FAIL_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.set( selectorArgsToStateKey( action.args ), {\n\t\t\t\tstatus: 'error',\n\t\t\t\terror: action.error,\n\t\t\t} );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'START_RESOLUTIONS': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tfor ( const resolutionArgs of action.args ) {\n\t\t\t\tnextState.set( selectorArgsToStateKey( resolutionArgs ), {\n\t\t\t\t\tstatus: 'resolving',\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'FINISH_RESOLUTIONS': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tfor ( const resolutionArgs of action.args ) {\n\t\t\t\tnextState.set( selectorArgsToStateKey( resolutionArgs ), {\n\t\t\t\t\tstatus: 'finished',\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'FAIL_RESOLUTIONS': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\taction.args.forEach( ( resolutionArgs, idx ) => {\n\t\t\t\tconst resolutionState: StateValue = {\n\t\t\t\t\tstatus: 'error',\n\t\t\t\t\terror: undefined,\n\t\t\t\t};\n\n\t\t\t\tconst error = action.errors[ idx ];\n\t\t\t\tif ( error ) {\n\t\t\t\t\tresolutionState.error = error;\n\t\t\t\t}\n\n\t\t\t\tnextState.set(\n\t\t\t\t\tselectorArgsToStateKey( resolutionArgs as unknown[] ),\n\t\t\t\t\tresolutionState\n\t\t\t\t);\n\t\t\t} );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'INVALIDATE_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.delete( selectorArgsToStateKey( action.args ) );\n\t\t\treturn nextState;\n\t\t}\n\t}\n\treturn state;\n} );\n\n/**\n * Reducer function returning next state for selector resolution, object form:\n *\n * selectorName -> EquivalentKeyMap<Array, boolean>\n *\n * @param state Current state.\n * @param action Dispatched action.\n *\n * @return Next state.\n */\nconst isResolved = ( state: Record< string, State > = {}, action: Action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'INVALIDATE_RESOLUTION_FOR_STORE':\n\t\t\treturn {};\n\t\tcase 'INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR': {\n\t\t\tif ( action.selectorName in state ) {\n\t\t\t\tconst {\n\t\t\t\t\t[ action.selectorName ]: removedSelector,\n\t\t\t\t\t...restState\n\t\t\t\t} = state;\n\t\t\t\treturn restState;\n\t\t\t}\n\t\t\treturn state;\n\t\t}\n\t\tcase 'START_RESOLUTION':\n\t\tcase 'FINISH_RESOLUTION':\n\t\tcase 'FAIL_RESOLUTION':\n\t\tcase 'START_RESOLUTIONS':\n\t\tcase 'FINISH_RESOLUTIONS':\n\t\tcase 'FAIL_RESOLUTIONS':\n\t\tcase 'INVALIDATE_RESOLUTION':\n\t\t\treturn subKeysIsResolved( state, action );\n\t}\n\treturn state;\n};\n\nexport default isResolved;\n"]}