@wordpress/data 6.1.3 → 6.2.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 (93) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +68 -68
  4. package/build/components/async-mode-provider/context.js +1 -1
  5. package/build/components/async-mode-provider/index.js +8 -6
  6. package/build/components/async-mode-provider/index.js.map +1 -1
  7. package/build/components/registry-provider/index.js +8 -6
  8. package/build/components/registry-provider/index.js.map +1 -1
  9. package/build/components/use-dispatch/use-dispatch-with-map.js +3 -1
  10. package/build/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
  11. package/build/components/use-dispatch/use-dispatch.js +8 -8
  12. package/build/components/use-dispatch/use-dispatch.js.map +1 -1
  13. package/build/components/use-select/index.js +58 -43
  14. package/build/components/use-select/index.js.map +1 -1
  15. package/build/controls.js +51 -32
  16. package/build/controls.js.map +1 -1
  17. package/build/factory.js +4 -2
  18. package/build/factory.js.map +1 -1
  19. package/build/index.js +49 -47
  20. package/build/index.js.map +1 -1
  21. package/build/plugins/persistence/index.js +2 -1
  22. package/build/plugins/persistence/index.js.map +1 -1
  23. package/build/redux-store/index.js +62 -34
  24. package/build/redux-store/index.js.map +1 -1
  25. package/build/redux-store/metadata/actions.js +2 -2
  26. package/build/redux-store/metadata/reducer.js +8 -2
  27. package/build/redux-store/metadata/reducer.js.map +1 -1
  28. package/build/redux-store/metadata/selectors.js +8 -5
  29. package/build/redux-store/metadata/selectors.js.map +1 -1
  30. package/build/redux-store/metadata/utils.js +5 -5
  31. package/build/redux-store/metadata/utils.js.map +1 -1
  32. package/build/registry.js +81 -66
  33. package/build/registry.js.map +1 -1
  34. package/build/resolvers-cache-middleware.js +7 -4
  35. package/build/resolvers-cache-middleware.js.map +1 -1
  36. package/build/store/index.js +42 -35
  37. package/build/store/index.js.map +1 -1
  38. package/build/types.js +4 -0
  39. package/build/utils/emitter.js +1 -1
  40. package/build/utils/emitter.js.map +1 -1
  41. package/build-module/components/use-dispatch/use-dispatch-with-map.js +3 -1
  42. package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
  43. package/build-module/components/use-dispatch/use-dispatch.js +8 -8
  44. package/build-module/components/use-dispatch/use-dispatch.js.map +1 -1
  45. package/build-module/components/use-select/index.js +60 -44
  46. package/build-module/components/use-select/index.js.map +1 -1
  47. package/build-module/controls.js +50 -31
  48. package/build-module/controls.js.map +1 -1
  49. package/build-module/factory.js +3 -1
  50. package/build-module/factory.js.map +1 -1
  51. package/build-module/index.js +14 -14
  52. package/build-module/index.js.map +1 -1
  53. package/build-module/redux-store/index.js +58 -32
  54. package/build-module/redux-store/index.js.map +1 -1
  55. package/build-module/redux-store/metadata/reducer.js +8 -2
  56. package/build-module/redux-store/metadata/reducer.js.map +1 -1
  57. package/build-module/redux-store/metadata/selectors.js +6 -3
  58. package/build-module/redux-store/metadata/selectors.js.map +1 -1
  59. package/build-module/redux-store/metadata/utils.js +5 -5
  60. package/build-module/redux-store/metadata/utils.js.map +1 -1
  61. package/build-module/registry.js +81 -66
  62. package/build-module/registry.js.map +1 -1
  63. package/build-module/resolvers-cache-middleware.js +5 -4
  64. package/build-module/resolvers-cache-middleware.js.map +1 -1
  65. package/build-module/store/index.js +42 -34
  66. package/build-module/store/index.js.map +1 -1
  67. package/build-module/types.js +1 -1
  68. package/build-module/utils/emitter.js +1 -1
  69. package/build-module/utils/emitter.js.map +1 -1
  70. package/build-types/types.d.ts +29 -16
  71. package/build-types/types.d.ts.map +1 -1
  72. package/build-types/utils/emitter.d.ts +2 -2
  73. package/build-types/utils/emitter.d.ts.map +1 -1
  74. package/package.json +11 -10
  75. package/src/components/use-dispatch/test/use-dispatch.js +1 -1
  76. package/src/components/use-dispatch/use-dispatch.js +9 -9
  77. package/src/components/use-select/index.js +61 -46
  78. package/src/components/use-select/test/index.js +32 -32
  79. package/src/controls.js +22 -22
  80. package/src/index.js +14 -14
  81. package/src/redux-store/index.js +15 -15
  82. package/src/registry.js +84 -75
  83. package/src/resolvers-cache-middleware.js +3 -3
  84. package/src/store/index.js +49 -48
  85. package/src/test/registry.js +33 -47
  86. package/src/types.ts +44 -16
  87. package/src/utils/emitter.js +1 -1
  88. package/tsconfig.tsbuildinfo +1 -1
  89. package/build/store/name.js +0 -15
  90. package/build/store/name.js.map +0 -1
  91. package/build-module/store/name.js +0 -7
  92. package/build-module/store/name.js.map +0 -1
  93. package/src/store/name.js +0 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/components/use-dispatch/use-dispatch.js"],"names":["useRegistry","useDispatch","storeNameOrDefinition","dispatch"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,WAAP,MAAwB,mCAAxB;AAEA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,WAAW,GAAKC,qBAAF,IAA6B;AAChD,QAAM;AAAEC,IAAAA;AAAF,MAAeH,WAAW,EAAhC;AACA,SAAOE,qBAAqB,KAAK,KAAK,CAA/B,GACJC,QADI,GAEJA,QAAQ,CAAED,qBAAF,CAFX;AAGA,CALD;;AAOA,eAAeD,WAAf","sourcesContent":["/**\n * Internal dependencies\n */\nimport useRegistry from '../registry-provider/use-registry';\n\n/** @typedef {import('./types').WPDataStore} WPDataStore */\n\n/**\n * A custom react hook returning the current registry dispatch actions creators.\n *\n * Note: The component using this hook must be within the context of a\n * RegistryProvider.\n *\n * @param {string|WPDataStore} [storeNameOrDefinition] Optionally provide the name of the\n * store or its definition from which to\n * retrieve action creators. If not\n * provided, the registry.dispatch\n * function is returned instead.\n *\n * @example\n * This illustrates a pattern where you may need to retrieve dynamic data from\n * the server via the `useSelect` hook to use in combination with the dispatch\n * action.\n *\n * ```jsx\n * import { useDispatch, useSelect } from '@wordpress/data';\n * import { useCallback } from '@wordpress/element';\n *\n * function Button( { onClick, children } ) {\n * return <button type=\"button\" onClick={ onClick }>{ children }</button>\n * }\n *\n * const SaleButton = ( { children } ) => {\n * const { stockNumber } = useSelect(\n * ( select ) => select( 'my-shop' ).getStockNumber(),\n * []\n * );\n * const { startSale } = useDispatch( 'my-shop' );\n * const onClick = useCallback( () => {\n * const discountPercent = stockNumber > 50 ? 10: 20;\n * startSale( discountPercent );\n * }, [ stockNumber ] );\n * return <Button onClick={ onClick }>{ children }</Button>\n * }\n *\n * // Rendered somewhere in the application:\n * //\n * // <SaleButton>Start Sale!</SaleButton>\n * ```\n * @return {Function} A custom react hook.\n */\nconst useDispatch = ( storeNameOrDefinition ) => {\n\tconst { dispatch } = useRegistry();\n\treturn storeNameOrDefinition === void 0\n\t\t? dispatch\n\t\t: dispatch( storeNameOrDefinition );\n};\n\nexport default useDispatch;\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/components/use-dispatch/use-dispatch.js"],"names":["useRegistry","useDispatch","storeNameOrDescriptor","dispatch"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,WAAP,MAAwB,mCAAxB;AAEA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,WAAW,GAAKC,qBAAF,IAA6B;AAChD,QAAM;AAAEC,IAAAA;AAAF,MAAeH,WAAW,EAAhC;AACA,SAAOE,qBAAqB,KAAK,KAAK,CAA/B,GACJC,QADI,GAEJA,QAAQ,CAAED,qBAAF,CAFX;AAGA,CALD;;AAOA,eAAeD,WAAf","sourcesContent":["/**\n * Internal dependencies\n */\nimport useRegistry from '../registry-provider/use-registry';\n\n/** @typedef {import('../../types').StoreDescriptor} StoreDescriptor */\n\n/**\n * A custom react hook returning the current registry dispatch actions creators.\n *\n * Note: The component using this hook must be within the context of a\n * RegistryProvider.\n *\n * @param {string|StoreDescriptor} [storeNameOrDescriptor] Optionally provide the name of the\n * store or its descriptor from which to\n * retrieve action creators. If not\n * provided, the registry.dispatch\n * function is returned instead.\n *\n * @example\n * This illustrates a pattern where you may need to retrieve dynamic data from\n * the server via the `useSelect` hook to use in combination with the dispatch\n * action.\n *\n * ```jsx\n * import { useDispatch, useSelect } from '@wordpress/data';\n * import { useCallback } from '@wordpress/element';\n *\n * function Button( { onClick, children } ) {\n * return <button type=\"button\" onClick={ onClick }>{ children }</button>\n * }\n *\n * const SaleButton = ( { children } ) => {\n * const { stockNumber } = useSelect(\n * ( select ) => select( 'my-shop' ).getStockNumber(),\n * []\n * );\n * const { startSale } = useDispatch( 'my-shop' );\n * const onClick = useCallback( () => {\n * const discountPercent = stockNumber > 50 ? 10: 20;\n * startSale( discountPercent );\n * }, [ stockNumber ] );\n * return <Button onClick={ onClick }>{ children }</Button>\n * }\n *\n * // Rendered somewhere in the application:\n * //\n * // <SaleButton>Start Sale!</SaleButton>\n * ```\n * @return {Function} A custom react hook.\n */\nconst useDispatch = ( storeNameOrDescriptor ) => {\n\tconst { dispatch } = useRegistry();\n\treturn storeNameOrDescriptor === void 0\n\t\t? dispatch\n\t\t: dispatch( storeNameOrDescriptor );\n};\n\nexport default useDispatch;\n"]}
@@ -7,7 +7,7 @@ import { useMemoOne } from 'use-memo-one';
7
7
  */
8
8
 
9
9
  import { createQueue } from '@wordpress/priority-queue';
10
- import { useRef, useCallback, useReducer, useMemo } from '@wordpress/element';
10
+ import { useRef, useCallback, useMemo, useReducer } from '@wordpress/element';
11
11
  import isShallowEqual from '@wordpress/is-shallow-equal';
12
12
  import { useIsomorphicLayoutEffect } from '@wordpress/compose';
13
13
  /**
@@ -16,8 +16,11 @@ import { useIsomorphicLayoutEffect } from '@wordpress/compose';
16
16
 
17
17
  import useRegistry from '../registry-provider/use-registry';
18
18
  import useAsyncMode from '../async-mode-provider/use-async-mode';
19
+
20
+ const noop = () => {};
21
+
19
22
  const renderQueue = createQueue();
20
- /** @typedef {import('./types').WPDataStore} WPDataStore */
23
+ /** @typedef {import('../../types').StoreDescriptor} StoreDescriptor */
21
24
 
22
25
  /**
23
26
  * Custom react hook for retrieving props from registered selectors.
@@ -25,20 +28,20 @@ const renderQueue = createQueue();
25
28
  * In general, this custom React hook follows the
26
29
  * [rules of hooks](https://reactjs.org/docs/hooks-rules.html).
27
30
  *
28
- * @param {Function|WPDataStore|string} _mapSelect Function called on every state change. The
29
- * returned value is exposed to the component
30
- * implementing this hook. The function receives
31
- * the `registry.select` method on the first
32
- * argument and the `registry` on the second
33
- * argument.
34
- * When a store key is passed, all selectors for
35
- * the store will be returned. This is only meant
36
- * for usage of these selectors in event
37
- * callbacks, not for data needed to create the
38
- * element tree.
39
- * @param {Array} deps If provided, this memoizes the mapSelect so the
40
- * same `mapSelect` is invoked on every state
41
- * change unless the dependencies change.
31
+ * @param {Function|StoreDescriptor|string} mapSelect Function called on every state change. The
32
+ * returned value is exposed to the component
33
+ * implementing this hook. The function receives
34
+ * the `registry.select` method on the first
35
+ * argument and the `registry` on the second
36
+ * argument.
37
+ * When a store key is passed, all selectors for
38
+ * the store will be returned. This is only meant
39
+ * for usage of these selectors in event
40
+ * callbacks, not for data needed to create the
41
+ * element tree.
42
+ * @param {Array} deps If provided, this memoizes the mapSelect so the
43
+ * same `mapSelect` is invoked on every state
44
+ * change unless the dependencies change.
42
45
  *
43
46
  * @example
44
47
  * ```js
@@ -87,14 +90,24 @@ const renderQueue = createQueue();
87
90
  * @return {Function} A custom react hook.
88
91
  */
89
92
 
90
- export default function useSelect(_mapSelect, deps) {
91
- const isWithoutMapping = typeof _mapSelect !== 'function';
93
+ export default function useSelect(mapSelect, deps) {
94
+ const hasMappingFunction = 'function' === typeof mapSelect; // If we're recalling a store by its name or by
95
+ // its descriptor then we won't be caching the
96
+ // calls to `mapSelect` because we won't be calling it.
92
97
 
93
- if (isWithoutMapping) {
98
+ if (!hasMappingFunction) {
94
99
  deps = [];
95
- }
100
+ } // Because of the "rule of hooks" we have to call `useCallback`
101
+ // on every invocation whether or not we have a real function
102
+ // for `mapSelect`. we'll create this intermediate variable to
103
+ // fulfill that need and then reference it with our "real"
104
+ // `_mapSelect` if we can.
105
+
106
+
107
+ const callbackMapper = useCallback(hasMappingFunction ? mapSelect : noop, deps);
108
+
109
+ const _mapSelect = hasMappingFunction ? callbackMapper : null;
96
110
 
97
- const mapSelect = useCallback(_mapSelect, deps);
98
111
  const registry = useRegistry();
99
112
  const isAsync = useAsyncMode(); // React can sometimes clear the `useMemo` cache.
100
113
  // We use the cache-stable `useMemoOne` to avoid
@@ -108,7 +121,7 @@ export default function useSelect(_mapSelect, deps) {
108
121
  const latestIsAsync = useRef(isAsync);
109
122
  const latestMapOutput = useRef();
110
123
  const latestMapOutputError = useRef();
111
- const isMountedAndNotUnsubscribing = useRef(); // Keep track of the stores being selected in the mapSelect function,
124
+ const isMountedAndNotUnsubscribing = useRef(); // Keep track of the stores being selected in the _mapSelect function,
112
125
  // and only subscribe to those stores later.
113
126
 
114
127
  const listeningStores = useRef([]);
@@ -119,34 +132,35 @@ export default function useSelect(_mapSelect, deps) {
119
132
  const depsChangedFlag = useMemo(() => ({}), deps || []);
120
133
  let mapOutput;
121
134
 
122
- if (!isWithoutMapping) {
123
- try {
124
- if (latestMapSelect.current !== mapSelect || latestMapOutputError.current) {
125
- mapOutput = trapSelect(() => mapSelect(registry.select, registry));
126
- } else {
127
- mapOutput = latestMapOutput.current;
128
- }
129
- } catch (error) {
130
- let errorMessage = `An error occurred while running 'mapSelect': ${error.message}`;
135
+ if (_mapSelect) {
136
+ mapOutput = latestMapOutput.current;
137
+ const hasReplacedMapSelect = latestMapSelect.current !== _mapSelect;
138
+ const lastMapSelectFailed = !!latestMapOutputError.current;
139
+
140
+ if (hasReplacedMapSelect || lastMapSelectFailed) {
141
+ try {
142
+ mapOutput = trapSelect(() => _mapSelect(registry.select, registry));
143
+ } catch (error) {
144
+ let errorMessage = `An error occurred while running 'mapSelect': ${error.message}`;
131
145
 
132
- if (latestMapOutputError.current) {
133
- errorMessage += `\nThe error may be correlated with this previous error:\n`;
134
- errorMessage += `${latestMapOutputError.current.stack}\n\n`;
135
- errorMessage += 'Original stack trace:';
136
- } // eslint-disable-next-line no-console
146
+ if (latestMapOutputError.current) {
147
+ errorMessage += `\nThe error may be correlated with this previous error:\n`;
148
+ errorMessage += `${latestMapOutputError.current.stack}\n\n`;
149
+ errorMessage += 'Original stack trace:';
150
+ } // eslint-disable-next-line no-console
137
151
 
138
152
 
139
- console.error(errorMessage);
140
- mapOutput = latestMapOutput.current;
153
+ console.error(errorMessage);
154
+ }
141
155
  }
142
156
  }
143
157
 
144
158
  useIsomorphicLayoutEffect(() => {
145
- if (isWithoutMapping) {
159
+ if (!hasMappingFunction) {
146
160
  return;
147
161
  }
148
162
 
149
- latestMapSelect.current = mapSelect;
163
+ latestMapSelect.current = _mapSelect;
150
164
  latestMapOutput.current = mapOutput;
151
165
  latestMapOutputError.current = undefined;
152
166
  isMountedAndNotUnsubscribing.current = true; // This has to run after the other ref updates
@@ -160,7 +174,7 @@ export default function useSelect(_mapSelect, deps) {
160
174
  }
161
175
  });
162
176
  useIsomorphicLayoutEffect(() => {
163
- if (isWithoutMapping) {
177
+ if (!hasMappingFunction) {
164
178
  return;
165
179
  }
166
180
 
@@ -204,8 +218,10 @@ export default function useSelect(_mapSelect, deps) {
204
218
 
205
219
  unsubscribers.forEach(unsubscribe => unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe());
206
220
  renderQueue.flush(queueContext);
207
- };
208
- }, [registry, trapSelect, depsChangedFlag, isWithoutMapping]);
209
- return isWithoutMapping ? registry.select(_mapSelect) : mapOutput;
221
+ }; // If you're tempted to eliminate the spread dependencies below don't do it!
222
+ // We're passing these in from the calling function and want to make sure we're
223
+ // examining every individual value inside the `deps` array.
224
+ }, [registry, trapSelect, hasMappingFunction, depsChangedFlag]);
225
+ return hasMappingFunction ? mapOutput : registry.select(mapSelect);
210
226
  }
211
227
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/components/use-select/index.js"],"names":["useMemoOne","createQueue","useRef","useCallback","useReducer","useMemo","isShallowEqual","useIsomorphicLayoutEffect","useRegistry","useAsyncMode","renderQueue","useSelect","_mapSelect","deps","isWithoutMapping","mapSelect","registry","isAsync","queueContext","queue","forceRender","s","latestMapSelect","latestIsAsync","latestMapOutput","latestMapOutputError","isMountedAndNotUnsubscribing","listeningStores","trapSelect","callback","__experimentalMarkListeningStores","depsChangedFlag","mapOutput","current","select","error","errorMessage","message","stack","console","undefined","flush","onStoreChange","newMapOutput","add","onChange","unsubscribers","map","storeName","__experimentalSubscribeStore","forEach","unsubscribe"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useMemoOne } from 'use-memo-one';\n\n/**\n * WordPress dependencies\n */\nimport { createQueue } from '@wordpress/priority-queue';\nimport { useRef, useCallback, useReducer, useMemo } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { useIsomorphicLayoutEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport useRegistry from '../registry-provider/use-registry';\nimport useAsyncMode from '../async-mode-provider/use-async-mode';\n\nconst renderQueue = createQueue();\n\n/** @typedef {import('./types').WPDataStore} WPDataStore */\n\n/**\n * Custom react hook for retrieving props from registered selectors.\n *\n * In general, this custom React hook follows the\n * [rules of hooks](https://reactjs.org/docs/hooks-rules.html).\n *\n * @param {Function|WPDataStore|string} _mapSelect Function called on every state change. The\n * returned value is exposed to the component\n * implementing this hook. The function receives\n * the `registry.select` method on the first\n * argument and the `registry` on the second\n * argument.\n * When a store key is passed, all selectors for\n * the store will be returned. This is only meant\n * for usage of these selectors in event\n * callbacks, not for data needed to create the\n * element tree.\n * @param {Array} deps If provided, this memoizes the mapSelect so the\n * same `mapSelect` is invoked on every state\n * change unless the dependencies change.\n *\n * @example\n * ```js\n * import { useSelect } from '@wordpress/data';\n *\n * function HammerPriceDisplay( { currency } ) {\n * const price = useSelect( ( select ) => {\n * return select( 'my-shop' ).getPrice( 'hammer', currency )\n * }, [ currency ] );\n * return new Intl.NumberFormat( 'en-US', {\n * style: 'currency',\n * currency,\n * } ).format( price );\n * }\n *\n * // Rendered in the application:\n * // <HammerPriceDisplay currency=\"USD\" />\n * ```\n *\n * In the above example, when `HammerPriceDisplay` is rendered into an\n * application, the price will be retrieved from the store state using the\n * `mapSelect` callback on `useSelect`. If the currency prop changes then\n * any price in the state for that currency is retrieved. If the currency prop\n * doesn't change and other props are passed in that do change, the price will\n * not change because the dependency is just the currency.\n *\n * When data is only used in an event callback, the data should not be retrieved\n * on render, so it may be useful to get the selectors function instead.\n *\n * **Don't use `useSelect` this way when calling the selectors in the render\n * function because your component won't re-render on a data change.**\n *\n * ```js\n * import { useSelect } from '@wordpress/data';\n *\n * function Paste( { children } ) {\n * const { getSettings } = useSelect( 'my-shop' );\n * function onPaste() {\n * // Do something with the settings.\n * const settings = getSettings();\n * }\n * return <div onPaste={ onPaste }>{ children }</div>;\n * }\n * ```\n *\n * @return {Function} A custom react hook.\n */\nexport default function useSelect( _mapSelect, deps ) {\n\tconst isWithoutMapping = typeof _mapSelect !== 'function';\n\n\tif ( isWithoutMapping ) {\n\t\tdeps = [];\n\t}\n\n\tconst mapSelect = useCallback( _mapSelect, deps );\n\tconst registry = useRegistry();\n\tconst isAsync = useAsyncMode();\n\t// React can sometimes clear the `useMemo` cache.\n\t// We use the cache-stable `useMemoOne` to avoid\n\t// losing queues.\n\tconst queueContext = useMemoOne( () => ( { queue: true } ), [ registry ] );\n\tconst [ , forceRender ] = useReducer( ( s ) => s + 1, 0 );\n\n\tconst latestMapSelect = useRef();\n\tconst latestIsAsync = useRef( isAsync );\n\tconst latestMapOutput = useRef();\n\tconst latestMapOutputError = useRef();\n\tconst isMountedAndNotUnsubscribing = useRef();\n\n\t// Keep track of the stores being selected in the mapSelect function,\n\t// and only subscribe to those stores later.\n\tconst listeningStores = useRef( [] );\n\tconst trapSelect = useCallback(\n\t\t( callback ) =>\n\t\t\tregistry.__experimentalMarkListeningStores(\n\t\t\t\tcallback,\n\t\t\t\tlisteningStores\n\t\t\t),\n\t\t[ registry ]\n\t);\n\n\t// Generate a \"flag\" for used in the effect dependency array.\n\t// It's different than just using `mapSelect` since deps could be undefined,\n\t// in that case, we would still want to memoize it.\n\tconst depsChangedFlag = useMemo( () => ( {} ), deps || [] );\n\n\tlet mapOutput;\n\n\tif ( ! isWithoutMapping ) {\n\t\ttry {\n\t\t\tif (\n\t\t\t\tlatestMapSelect.current !== mapSelect ||\n\t\t\t\tlatestMapOutputError.current\n\t\t\t) {\n\t\t\t\tmapOutput = trapSelect( () =>\n\t\t\t\t\tmapSelect( registry.select, registry )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmapOutput = latestMapOutput.current;\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\tlet errorMessage = `An error occurred while running 'mapSelect': ${ error.message }`;\n\n\t\t\tif ( latestMapOutputError.current ) {\n\t\t\t\terrorMessage += `\\nThe error may be correlated with this previous error:\\n`;\n\t\t\t\terrorMessage += `${ latestMapOutputError.current.stack }\\n\\n`;\n\t\t\t\terrorMessage += 'Original stack trace:';\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( errorMessage );\n\t\t\tmapOutput = latestMapOutput.current;\n\t\t}\n\t}\n\n\tuseIsomorphicLayoutEffect( () => {\n\t\tif ( isWithoutMapping ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlatestMapSelect.current = mapSelect;\n\t\tlatestMapOutput.current = mapOutput;\n\t\tlatestMapOutputError.current = undefined;\n\t\tisMountedAndNotUnsubscribing.current = true;\n\n\t\t// This has to run after the other ref updates\n\t\t// to avoid using stale values in the flushed\n\t\t// callbacks or potentially overwriting a\n\t\t// changed `latestMapOutput.current`.\n\t\tif ( latestIsAsync.current !== isAsync ) {\n\t\t\tlatestIsAsync.current = isAsync;\n\t\t\trenderQueue.flush( queueContext );\n\t\t}\n\t} );\n\n\tuseIsomorphicLayoutEffect( () => {\n\t\tif ( isWithoutMapping ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst onStoreChange = () => {\n\t\t\tif ( isMountedAndNotUnsubscribing.current ) {\n\t\t\t\ttry {\n\t\t\t\t\tconst newMapOutput = trapSelect( () =>\n\t\t\t\t\t\tlatestMapSelect.current( registry.select, registry )\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tisShallowEqual( latestMapOutput.current, newMapOutput )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlatestMapOutput.current = newMapOutput;\n\t\t\t\t} catch ( error ) {\n\t\t\t\t\tlatestMapOutputError.current = error;\n\t\t\t\t}\n\t\t\t\tforceRender();\n\t\t\t}\n\t\t};\n\n\t\t// catch any possible state changes during mount before the subscription\n\t\t// could be set.\n\t\tif ( latestIsAsync.current ) {\n\t\t\trenderQueue.add( queueContext, onStoreChange );\n\t\t} else {\n\t\t\tonStoreChange();\n\t\t}\n\n\t\tconst onChange = () => {\n\t\t\tif ( latestIsAsync.current ) {\n\t\t\t\trenderQueue.add( queueContext, onStoreChange );\n\t\t\t} else {\n\t\t\t\tonStoreChange();\n\t\t\t}\n\t\t};\n\n\t\tconst unsubscribers = listeningStores.current.map( ( storeName ) =>\n\t\t\tregistry.__experimentalSubscribeStore( storeName, onChange )\n\t\t);\n\n\t\treturn () => {\n\t\t\tisMountedAndNotUnsubscribing.current = false;\n\t\t\t// The return value of the subscribe function could be undefined if the store is a custom generic store.\n\t\t\tunsubscribers.forEach( ( unsubscribe ) => unsubscribe?.() );\n\t\t\trenderQueue.flush( queueContext );\n\t\t};\n\t}, [ registry, trapSelect, depsChangedFlag, isWithoutMapping ] );\n\n\treturn isWithoutMapping ? registry.select( _mapSelect ) : mapOutput;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/components/use-select/index.js"],"names":["useMemoOne","createQueue","useRef","useCallback","useMemo","useReducer","isShallowEqual","useIsomorphicLayoutEffect","useRegistry","useAsyncMode","noop","renderQueue","useSelect","mapSelect","deps","hasMappingFunction","callbackMapper","_mapSelect","registry","isAsync","queueContext","queue","forceRender","s","latestMapSelect","latestIsAsync","latestMapOutput","latestMapOutputError","isMountedAndNotUnsubscribing","listeningStores","trapSelect","callback","__experimentalMarkListeningStores","depsChangedFlag","mapOutput","current","hasReplacedMapSelect","lastMapSelectFailed","select","error","errorMessage","message","stack","console","undefined","flush","onStoreChange","newMapOutput","add","onChange","unsubscribers","map","storeName","__experimentalSubscribeStore","forEach","unsubscribe"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useMemoOne } from 'use-memo-one';\n\n/**\n * WordPress dependencies\n */\nimport { createQueue } from '@wordpress/priority-queue';\nimport { useRef, useCallback, useMemo, useReducer } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { useIsomorphicLayoutEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport useRegistry from '../registry-provider/use-registry';\nimport useAsyncMode from '../async-mode-provider/use-async-mode';\n\nconst noop = () => {};\nconst renderQueue = createQueue();\n\n/** @typedef {import('../../types').StoreDescriptor} StoreDescriptor */\n\n/**\n * Custom react hook for retrieving props from registered selectors.\n *\n * In general, this custom React hook follows the\n * [rules of hooks](https://reactjs.org/docs/hooks-rules.html).\n *\n * @param {Function|StoreDescriptor|string} mapSelect Function called on every state change. The\n * returned value is exposed to the component\n * implementing this hook. The function receives\n * the `registry.select` method on the first\n * argument and the `registry` on the second\n * argument.\n * When a store key is passed, all selectors for\n * the store will be returned. This is only meant\n * for usage of these selectors in event\n * callbacks, not for data needed to create the\n * element tree.\n * @param {Array} deps If provided, this memoizes the mapSelect so the\n * same `mapSelect` is invoked on every state\n * change unless the dependencies change.\n *\n * @example\n * ```js\n * import { useSelect } from '@wordpress/data';\n *\n * function HammerPriceDisplay( { currency } ) {\n * const price = useSelect( ( select ) => {\n * return select( 'my-shop' ).getPrice( 'hammer', currency )\n * }, [ currency ] );\n * return new Intl.NumberFormat( 'en-US', {\n * style: 'currency',\n * currency,\n * } ).format( price );\n * }\n *\n * // Rendered in the application:\n * // <HammerPriceDisplay currency=\"USD\" />\n * ```\n *\n * In the above example, when `HammerPriceDisplay` is rendered into an\n * application, the price will be retrieved from the store state using the\n * `mapSelect` callback on `useSelect`. If the currency prop changes then\n * any price in the state for that currency is retrieved. If the currency prop\n * doesn't change and other props are passed in that do change, the price will\n * not change because the dependency is just the currency.\n *\n * When data is only used in an event callback, the data should not be retrieved\n * on render, so it may be useful to get the selectors function instead.\n *\n * **Don't use `useSelect` this way when calling the selectors in the render\n * function because your component won't re-render on a data change.**\n *\n * ```js\n * import { useSelect } from '@wordpress/data';\n *\n * function Paste( { children } ) {\n * const { getSettings } = useSelect( 'my-shop' );\n * function onPaste() {\n * // Do something with the settings.\n * const settings = getSettings();\n * }\n * return <div onPaste={ onPaste }>{ children }</div>;\n * }\n * ```\n *\n * @return {Function} A custom react hook.\n */\nexport default function useSelect( mapSelect, deps ) {\n\tconst hasMappingFunction = 'function' === typeof mapSelect;\n\n\t// If we're recalling a store by its name or by\n\t// its descriptor then we won't be caching the\n\t// calls to `mapSelect` because we won't be calling it.\n\tif ( ! hasMappingFunction ) {\n\t\tdeps = [];\n\t}\n\n\t// Because of the \"rule of hooks\" we have to call `useCallback`\n\t// on every invocation whether or not we have a real function\n\t// for `mapSelect`. we'll create this intermediate variable to\n\t// fulfill that need and then reference it with our \"real\"\n\t// `_mapSelect` if we can.\n\tconst callbackMapper = useCallback(\n\t\thasMappingFunction ? mapSelect : noop,\n\t\tdeps\n\t);\n\tconst _mapSelect = hasMappingFunction ? callbackMapper : null;\n\n\tconst registry = useRegistry();\n\tconst isAsync = useAsyncMode();\n\t// React can sometimes clear the `useMemo` cache.\n\t// We use the cache-stable `useMemoOne` to avoid\n\t// losing queues.\n\tconst queueContext = useMemoOne( () => ( { queue: true } ), [ registry ] );\n\tconst [ , forceRender ] = useReducer( ( s ) => s + 1, 0 );\n\n\tconst latestMapSelect = useRef();\n\tconst latestIsAsync = useRef( isAsync );\n\tconst latestMapOutput = useRef();\n\tconst latestMapOutputError = useRef();\n\tconst isMountedAndNotUnsubscribing = useRef();\n\n\t// Keep track of the stores being selected in the _mapSelect function,\n\t// and only subscribe to those stores later.\n\tconst listeningStores = useRef( [] );\n\tconst trapSelect = useCallback(\n\t\t( callback ) =>\n\t\t\tregistry.__experimentalMarkListeningStores(\n\t\t\t\tcallback,\n\t\t\t\tlisteningStores\n\t\t\t),\n\t\t[ registry ]\n\t);\n\n\t// Generate a \"flag\" for used in the effect dependency array.\n\t// It's different than just using `mapSelect` since deps could be undefined,\n\t// in that case, we would still want to memoize it.\n\tconst depsChangedFlag = useMemo( () => ( {} ), deps || [] );\n\n\tlet mapOutput;\n\n\tif ( _mapSelect ) {\n\t\tmapOutput = latestMapOutput.current;\n\t\tconst hasReplacedMapSelect = latestMapSelect.current !== _mapSelect;\n\t\tconst lastMapSelectFailed = !! latestMapOutputError.current;\n\n\t\tif ( hasReplacedMapSelect || lastMapSelectFailed ) {\n\t\t\ttry {\n\t\t\t\tmapOutput = trapSelect( () =>\n\t\t\t\t\t_mapSelect( registry.select, registry )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tlet errorMessage = `An error occurred while running 'mapSelect': ${ error.message }`;\n\n\t\t\t\tif ( latestMapOutputError.current ) {\n\t\t\t\t\terrorMessage += `\\nThe error may be correlated with this previous error:\\n`;\n\t\t\t\t\terrorMessage += `${ latestMapOutputError.current.stack }\\n\\n`;\n\t\t\t\t\terrorMessage += 'Original stack trace:';\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( errorMessage );\n\t\t\t}\n\t\t}\n\t}\n\n\tuseIsomorphicLayoutEffect( () => {\n\t\tif ( ! hasMappingFunction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlatestMapSelect.current = _mapSelect;\n\t\tlatestMapOutput.current = mapOutput;\n\t\tlatestMapOutputError.current = undefined;\n\t\tisMountedAndNotUnsubscribing.current = true;\n\n\t\t// This has to run after the other ref updates\n\t\t// to avoid using stale values in the flushed\n\t\t// callbacks or potentially overwriting a\n\t\t// changed `latestMapOutput.current`.\n\t\tif ( latestIsAsync.current !== isAsync ) {\n\t\t\tlatestIsAsync.current = isAsync;\n\t\t\trenderQueue.flush( queueContext );\n\t\t}\n\t} );\n\n\tuseIsomorphicLayoutEffect( () => {\n\t\tif ( ! hasMappingFunction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst onStoreChange = () => {\n\t\t\tif ( isMountedAndNotUnsubscribing.current ) {\n\t\t\t\ttry {\n\t\t\t\t\tconst newMapOutput = trapSelect( () =>\n\t\t\t\t\t\tlatestMapSelect.current( registry.select, registry )\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tisShallowEqual( latestMapOutput.current, newMapOutput )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlatestMapOutput.current = newMapOutput;\n\t\t\t\t} catch ( error ) {\n\t\t\t\t\tlatestMapOutputError.current = error;\n\t\t\t\t}\n\t\t\t\tforceRender();\n\t\t\t}\n\t\t};\n\n\t\t// catch any possible state changes during mount before the subscription\n\t\t// could be set.\n\t\tif ( latestIsAsync.current ) {\n\t\t\trenderQueue.add( queueContext, onStoreChange );\n\t\t} else {\n\t\t\tonStoreChange();\n\t\t}\n\n\t\tconst onChange = () => {\n\t\t\tif ( latestIsAsync.current ) {\n\t\t\t\trenderQueue.add( queueContext, onStoreChange );\n\t\t\t} else {\n\t\t\t\tonStoreChange();\n\t\t\t}\n\t\t};\n\n\t\tconst unsubscribers = listeningStores.current.map( ( storeName ) =>\n\t\t\tregistry.__experimentalSubscribeStore( storeName, onChange )\n\t\t);\n\n\t\treturn () => {\n\t\t\tisMountedAndNotUnsubscribing.current = false;\n\t\t\t// The return value of the subscribe function could be undefined if the store is a custom generic store.\n\t\t\tunsubscribers.forEach( ( unsubscribe ) => unsubscribe?.() );\n\t\t\trenderQueue.flush( queueContext );\n\t\t};\n\t\t// If you're tempted to eliminate the spread dependencies below don't do it!\n\t\t// We're passing these in from the calling function and want to make sure we're\n\t\t// examining every individual value inside the `deps` array.\n\t}, [ registry, trapSelect, hasMappingFunction, depsChangedFlag ] );\n\n\treturn hasMappingFunction ? mapOutput : registry.select( mapSelect );\n}\n"]}
@@ -7,7 +7,7 @@ import { isObject } from 'lodash';
7
7
  */
8
8
 
9
9
  import { createRegistryControl } from './factory';
10
- /** @typedef {import('./types').WPDataStore} WPDataStore */
10
+ /** @typedef {import('./types').StoreDescriptor} StoreDescriptor */
11
11
 
12
12
  const SELECT = '@@data/SELECT';
13
13
  const RESOLVE_SELECT = '@@data/RESOLVE_SELECT';
@@ -18,9 +18,9 @@ const DISPATCH = '@@data/DISPATCH';
18
18
  * Note: This control synchronously returns the current selector value, triggering the
19
19
  * resolution, but not waiting for it.
20
20
  *
21
- * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
22
- * @param {string} selectorName The name of the selector.
23
- * @param {Array} args Arguments for the selector.
21
+ * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
22
+ * @param {string} selectorName The name of the selector.
23
+ * @param {Array} args Arguments for the selector.
24
24
  *
25
25
  * @example
26
26
  * ```js
@@ -36,10 +36,14 @@ const DISPATCH = '@@data/DISPATCH';
36
36
  * @return {Object} The control descriptor.
37
37
  */
38
38
 
39
- function select(storeNameOrDefinition, selectorName, ...args) {
39
+ function select(storeNameOrDescriptor, selectorName) {
40
+ for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
41
+ args[_key - 2] = arguments[_key];
42
+ }
43
+
40
44
  return {
41
45
  type: SELECT,
42
- storeKey: isObject(storeNameOrDefinition) ? storeNameOrDefinition.name : storeNameOrDefinition,
46
+ storeKey: isObject(storeNameOrDescriptor) ? storeNameOrDescriptor.name : storeNameOrDescriptor,
43
47
  selectorName,
44
48
  args
45
49
  };
@@ -51,9 +55,9 @@ function select(storeNameOrDefinition, selectorName, ...args) {
51
55
  * selectors that may have a resolver. In such case, it will return a `Promise` that resolves
52
56
  * after the selector finishes resolving, with the final result value.
53
57
  *
54
- * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
55
- * @param {string} selectorName The name of the selector
56
- * @param {Array} args Arguments for the selector.
58
+ * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
59
+ * @param {string} selectorName The name of the selector
60
+ * @param {Array} args Arguments for the selector.
57
61
  *
58
62
  * @example
59
63
  * ```js
@@ -70,10 +74,14 @@ function select(storeNameOrDefinition, selectorName, ...args) {
70
74
  */
71
75
 
72
76
 
73
- function resolveSelect(storeNameOrDefinition, selectorName, ...args) {
77
+ function resolveSelect(storeNameOrDescriptor, selectorName) {
78
+ for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
79
+ args[_key2 - 2] = arguments[_key2];
80
+ }
81
+
74
82
  return {
75
83
  type: RESOLVE_SELECT,
76
- storeKey: isObject(storeNameOrDefinition) ? storeNameOrDefinition.name : storeNameOrDefinition,
84
+ storeKey: isObject(storeNameOrDescriptor) ? storeNameOrDescriptor.name : storeNameOrDescriptor,
77
85
  selectorName,
78
86
  args
79
87
  };
@@ -81,9 +89,9 @@ function resolveSelect(storeNameOrDefinition, selectorName, ...args) {
81
89
  /**
82
90
  * Dispatches a control action for triggering a registry dispatch.
83
91
  *
84
- * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
85
- * @param {string} actionName The name of the action to dispatch
86
- * @param {Array} args Arguments for the dispatch action.
92
+ * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
93
+ * @param {string} actionName The name of the action to dispatch
94
+ * @param {Array} args Arguments for the dispatch action.
87
95
  *
88
96
  * @example
89
97
  * ```js
@@ -100,10 +108,14 @@ function resolveSelect(storeNameOrDefinition, selectorName, ...args) {
100
108
  */
101
109
 
102
110
 
103
- function dispatch(storeNameOrDefinition, actionName, ...args) {
111
+ function dispatch(storeNameOrDescriptor, actionName) {
112
+ for (var _len3 = arguments.length, args = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
113
+ args[_key3 - 2] = arguments[_key3];
114
+ }
115
+
104
116
  return {
105
117
  type: DISPATCH,
106
- storeKey: isObject(storeNameOrDefinition) ? storeNameOrDefinition.name : storeNameOrDefinition,
118
+ storeKey: isObject(storeNameOrDescriptor) ? storeNameOrDescriptor.name : storeNameOrDescriptor,
107
119
  actionName,
108
120
  args
109
121
  };
@@ -115,23 +127,30 @@ export const controls = {
115
127
  dispatch
116
128
  };
117
129
  export const builtinControls = {
118
- [SELECT]: createRegistryControl(registry => ({
119
- storeKey,
120
- selectorName,
121
- args
122
- }) => registry.select(storeKey)[selectorName](...args)),
123
- [RESOLVE_SELECT]: createRegistryControl(registry => ({
124
- storeKey,
125
- selectorName,
126
- args
127
- }) => {
130
+ [SELECT]: createRegistryControl(registry => _ref => {
131
+ let {
132
+ storeKey,
133
+ selectorName,
134
+ args
135
+ } = _ref;
136
+ return registry.select(storeKey)[selectorName](...args);
137
+ }),
138
+ [RESOLVE_SELECT]: createRegistryControl(registry => _ref2 => {
139
+ let {
140
+ storeKey,
141
+ selectorName,
142
+ args
143
+ } = _ref2;
128
144
  const method = registry.select(storeKey)[selectorName].hasResolver ? 'resolveSelect' : 'select';
129
145
  return registry[method](storeKey)[selectorName](...args);
130
146
  }),
131
- [DISPATCH]: createRegistryControl(registry => ({
132
- storeKey,
133
- actionName,
134
- args
135
- }) => registry.dispatch(storeKey)[actionName](...args))
147
+ [DISPATCH]: createRegistryControl(registry => _ref3 => {
148
+ let {
149
+ storeKey,
150
+ actionName,
151
+ args
152
+ } = _ref3;
153
+ return registry.dispatch(storeKey)[actionName](...args);
154
+ })
136
155
  };
137
156
  //# sourceMappingURL=controls.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/controls.js"],"names":["isObject","createRegistryControl","SELECT","RESOLVE_SELECT","DISPATCH","select","storeNameOrDefinition","selectorName","args","type","storeKey","name","resolveSelect","dispatch","actionName","controls","builtinControls","registry","method","hasResolver"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { isObject } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { createRegistryControl } from './factory';\n\n/** @typedef {import('./types').WPDataStore} WPDataStore */\n\nconst SELECT = '@@data/SELECT';\nconst RESOLVE_SELECT = '@@data/RESOLVE_SELECT';\nconst DISPATCH = '@@data/DISPATCH';\n\n/**\n * Dispatches a control action for triggering a synchronous registry select.\n *\n * Note: This control synchronously returns the current selector value, triggering the\n * resolution, but not waiting for it.\n *\n * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n * @param {string} selectorName The name of the selector.\n * @param {Array} args Arguments for the selector.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data';\n *\n * // Action generator using `select`.\n * export function* myAction() {\n * const isEditorSideBarOpened = yield controls.select( 'core/edit-post', 'isEditorSideBarOpened' );\n * // Do stuff with the result from the `select`.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction select( storeNameOrDefinition, selectorName, ...args ) {\n\treturn {\n\t\ttype: SELECT,\n\t\tstoreKey: isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition,\n\t\tselectorName,\n\t\targs,\n\t};\n}\n\n/**\n * Dispatches a control action for triggering and resolving a registry select.\n *\n * Note: when this control action is handled, it automatically considers\n * selectors that may have a resolver. In such case, it will return a `Promise` that resolves\n * after the selector finishes resolving, with the final result value.\n *\n * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n * @param {string} selectorName The name of the selector\n * @param {Array} args Arguments for the selector.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data';\n *\n * // Action generator using resolveSelect\n * export function* myAction() {\n * \tconst isSidebarOpened = yield controls.resolveSelect( 'core/edit-post', 'isEditorSideBarOpened' );\n * \t// do stuff with the result from the select.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction resolveSelect( storeNameOrDefinition, selectorName, ...args ) {\n\treturn {\n\t\ttype: RESOLVE_SELECT,\n\t\tstoreKey: isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition,\n\t\tselectorName,\n\t\targs,\n\t};\n}\n\n/**\n * Dispatches a control action for triggering a registry dispatch.\n *\n * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n * @param {string} actionName The name of the action to dispatch\n * @param {Array} args Arguments for the dispatch action.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data-controls';\n *\n * // Action generator using dispatch\n * export function* myAction() {\n * yield controls.dispatch( 'core/edit-post', 'togglePublishSidebar' );\n * // do some other things.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction dispatch( storeNameOrDefinition, actionName, ...args ) {\n\treturn {\n\t\ttype: DISPATCH,\n\t\tstoreKey: isObject( storeNameOrDefinition )\n\t\t\t? storeNameOrDefinition.name\n\t\t\t: storeNameOrDefinition,\n\t\tactionName,\n\t\targs,\n\t};\n}\n\nexport const controls = { select, resolveSelect, dispatch };\n\nexport const builtinControls = {\n\t[ SELECT ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, selectorName, args } ) =>\n\t\t\tregistry.select( storeKey )[ selectorName ]( ...args )\n\t),\n\t[ RESOLVE_SELECT ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, selectorName, args } ) => {\n\t\t\tconst method = registry.select( storeKey )[ selectorName ]\n\t\t\t\t.hasResolver\n\t\t\t\t? 'resolveSelect'\n\t\t\t\t: 'select';\n\t\t\treturn registry[ method ]( storeKey )[ selectorName ]( ...args );\n\t\t}\n\t),\n\t[ DISPATCH ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, actionName, args } ) =>\n\t\t\tregistry.dispatch( storeKey )[ actionName ]( ...args )\n\t),\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/controls.js"],"names":["isObject","createRegistryControl","SELECT","RESOLVE_SELECT","DISPATCH","select","storeNameOrDescriptor","selectorName","args","type","storeKey","name","resolveSelect","dispatch","actionName","controls","builtinControls","registry","method","hasResolver"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { isObject } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { createRegistryControl } from './factory';\n\n/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */\n\nconst SELECT = '@@data/SELECT';\nconst RESOLVE_SELECT = '@@data/RESOLVE_SELECT';\nconst DISPATCH = '@@data/DISPATCH';\n\n/**\n * Dispatches a control action for triggering a synchronous registry select.\n *\n * Note: This control synchronously returns the current selector value, triggering the\n * resolution, but not waiting for it.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * @param {string} selectorName The name of the selector.\n * @param {Array} args Arguments for the selector.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data';\n *\n * // Action generator using `select`.\n * export function* myAction() {\n * const isEditorSideBarOpened = yield controls.select( 'core/edit-post', 'isEditorSideBarOpened' );\n * // Do stuff with the result from the `select`.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction select( storeNameOrDescriptor, selectorName, ...args ) {\n\treturn {\n\t\ttype: SELECT,\n\t\tstoreKey: isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tselectorName,\n\t\targs,\n\t};\n}\n\n/**\n * Dispatches a control action for triggering and resolving a registry select.\n *\n * Note: when this control action is handled, it automatically considers\n * selectors that may have a resolver. In such case, it will return a `Promise` that resolves\n * after the selector finishes resolving, with the final result value.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * @param {string} selectorName The name of the selector\n * @param {Array} args Arguments for the selector.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data';\n *\n * // Action generator using resolveSelect\n * export function* myAction() {\n * \tconst isSidebarOpened = yield controls.resolveSelect( 'core/edit-post', 'isEditorSideBarOpened' );\n * \t// do stuff with the result from the select.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction resolveSelect( storeNameOrDescriptor, selectorName, ...args ) {\n\treturn {\n\t\ttype: RESOLVE_SELECT,\n\t\tstoreKey: isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tselectorName,\n\t\targs,\n\t};\n}\n\n/**\n * Dispatches a control action for triggering a registry dispatch.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * @param {string} actionName The name of the action to dispatch\n * @param {Array} args Arguments for the dispatch action.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data-controls';\n *\n * // Action generator using dispatch\n * export function* myAction() {\n * yield controls.dispatch( 'core/edit-post', 'togglePublishSidebar' );\n * // do some other things.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction dispatch( storeNameOrDescriptor, actionName, ...args ) {\n\treturn {\n\t\ttype: DISPATCH,\n\t\tstoreKey: isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tactionName,\n\t\targs,\n\t};\n}\n\nexport const controls = { select, resolveSelect, dispatch };\n\nexport const builtinControls = {\n\t[ SELECT ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, selectorName, args } ) =>\n\t\t\tregistry.select( storeKey )[ selectorName ]( ...args )\n\t),\n\t[ RESOLVE_SELECT ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, selectorName, args } ) => {\n\t\t\tconst method = registry.select( storeKey )[ selectorName ]\n\t\t\t\t.hasResolver\n\t\t\t\t? 'resolveSelect'\n\t\t\t\t: 'select';\n\t\t\treturn registry[ method ]( storeKey )[ selectorName ]( ...args );\n\t\t}\n\t),\n\t[ DISPATCH ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, actionName, args } ) =>\n\t\t\tregistry.dispatch( storeKey )[ actionName ]( ...args )\n\t),\n};\n"]}
@@ -39,7 +39,9 @@ export function createRegistrySelector(registrySelector) {
39
39
  // create a selector function that is bound to the registry referenced by `selector.registry`
40
40
  // and that has the same API as a regular selector. Binding it in such a way makes it
41
41
  // possible to call the selector directly from another selector.
42
- const selector = (...args) => registrySelector(selector.registry.select)(...args);
42
+ const selector = function () {
43
+ return registrySelector(selector.registry.select)(...arguments);
44
+ };
43
45
  /**
44
46
  * Flag indicating that the selector is a registry selector that needs the correct registry
45
47
  * reference to be assigned to `selecto.registry` to make it work correctly.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/factory.js"],"names":["createRegistrySelector","registrySelector","selector","args","registry","select","isRegistrySelector","createRegistryControl","registryControl","isRegistryControl"],"mappings":"AAAA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,sBAAT,CAAiCC,gBAAjC,EAAoD;AAC1D;AACA;AACA;AACA,QAAMC,QAAQ,GAAG,CAAE,GAAGC,IAAL,KAChBF,gBAAgB,CAAEC,QAAQ,CAACE,QAAT,CAAkBC,MAApB,CAAhB,CAA8C,GAAGF,IAAjD,CADD;AAGA;AACD;AACA;AACA;AACA;AACA;AACA;;;AACCD,EAAAA,QAAQ,CAACI,kBAAT,GAA8B,IAA9B;AAEA,SAAOJ,QAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASK,qBAAT,CAAgCC,eAAhC,EAAkD;AACxDA,EAAAA,eAAe,CAACC,iBAAhB,GAAoC,IAApC;AAEA,SAAOD,eAAP;AACA","sourcesContent":["/**\n * Creates a selector function that takes additional curried argument with the\n * registry `select` function. While a regular selector has signature\n * ```js\n * ( state, ...selectorArgs ) => ( result )\n * ```\n * that allows to select data from the store's `state`, a registry selector\n * has signature:\n * ```js\n * ( select ) => ( state, ...selectorArgs ) => ( result )\n * ```\n * that supports also selecting from other registered stores.\n *\n * @example\n * ```js\n * const getCurrentPostId = createRegistrySelector( ( select ) => ( state ) => {\n * return select( 'core/editor' ).getCurrentPostId();\n * } );\n *\n * const getPostEdits = createRegistrySelector( ( select ) => ( state ) => {\n * // calling another registry selector just like any other function\n * const postType = getCurrentPostType( state );\n * const postId = getCurrentPostId( state );\n *\t return select( 'core' ).getEntityRecordEdits( 'postType', postType, postId );\n * } );\n * ```\n *\n * Note how the `getCurrentPostId` selector can be called just like any other function,\n * (it works even inside a regular non-registry selector) and we don't need to pass the\n * registry as argument. The registry binding happens automatically when registering the selector\n * with a store.\n *\n * @param {Function} registrySelector Function receiving a registry `select`\n * function and returning a state selector.\n *\n * @return {Function} Registry selector that can be registered with a store.\n */\nexport function createRegistrySelector( registrySelector ) {\n\t// create a selector function that is bound to the registry referenced by `selector.registry`\n\t// and that has the same API as a regular selector. Binding it in such a way makes it\n\t// possible to call the selector directly from another selector.\n\tconst selector = ( ...args ) =>\n\t\tregistrySelector( selector.registry.select )( ...args );\n\n\t/**\n\t * Flag indicating that the selector is a registry selector that needs the correct registry\n\t * reference to be assigned to `selecto.registry` to make it work correctly.\n\t * be mapped as a registry selector.\n\t *\n\t * @type {boolean}\n\t */\n\tselector.isRegistrySelector = true;\n\n\treturn selector;\n}\n\n/**\n * Creates a control function that takes additional curried argument with the `registry` object.\n * While a regular control has signature\n * ```js\n * ( action ) => ( iteratorOrPromise )\n * ```\n * where the control works with the `action` that it's bound to, a registry control has signature:\n * ```js\n * ( registry ) => ( action ) => ( iteratorOrPromise )\n * ```\n * A registry control is typically used to select data or dispatch an action to a registered\n * store.\n *\n * When registering a control created with `createRegistryControl` with a store, the store\n * knows which calling convention to use when executing the control.\n *\n * @param {Function} registryControl Function receiving a registry object and returning a control.\n *\n * @return {Function} Registry control that can be registered with a store.\n */\nexport function createRegistryControl( registryControl ) {\n\tregistryControl.isRegistryControl = true;\n\n\treturn registryControl;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/factory.js"],"names":["createRegistrySelector","registrySelector","selector","registry","select","isRegistrySelector","createRegistryControl","registryControl","isRegistryControl"],"mappings":"AAAA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,sBAAT,CAAiCC,gBAAjC,EAAoD;AAC1D;AACA;AACA;AACA,QAAMC,QAAQ,GAAG;AAAA,WAChBD,gBAAgB,CAAEC,QAAQ,CAACC,QAAT,CAAkBC,MAApB,CAAhB,CAA8C,YAA9C,CADgB;AAAA,GAAjB;AAGA;AACD;AACA;AACA;AACA;AACA;AACA;;;AACCF,EAAAA,QAAQ,CAACG,kBAAT,GAA8B,IAA9B;AAEA,SAAOH,QAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASI,qBAAT,CAAgCC,eAAhC,EAAkD;AACxDA,EAAAA,eAAe,CAACC,iBAAhB,GAAoC,IAApC;AAEA,SAAOD,eAAP;AACA","sourcesContent":["/**\n * Creates a selector function that takes additional curried argument with the\n * registry `select` function. While a regular selector has signature\n * ```js\n * ( state, ...selectorArgs ) => ( result )\n * ```\n * that allows to select data from the store's `state`, a registry selector\n * has signature:\n * ```js\n * ( select ) => ( state, ...selectorArgs ) => ( result )\n * ```\n * that supports also selecting from other registered stores.\n *\n * @example\n * ```js\n * const getCurrentPostId = createRegistrySelector( ( select ) => ( state ) => {\n * return select( 'core/editor' ).getCurrentPostId();\n * } );\n *\n * const getPostEdits = createRegistrySelector( ( select ) => ( state ) => {\n * // calling another registry selector just like any other function\n * const postType = getCurrentPostType( state );\n * const postId = getCurrentPostId( state );\n *\t return select( 'core' ).getEntityRecordEdits( 'postType', postType, postId );\n * } );\n * ```\n *\n * Note how the `getCurrentPostId` selector can be called just like any other function,\n * (it works even inside a regular non-registry selector) and we don't need to pass the\n * registry as argument. The registry binding happens automatically when registering the selector\n * with a store.\n *\n * @param {Function} registrySelector Function receiving a registry `select`\n * function and returning a state selector.\n *\n * @return {Function} Registry selector that can be registered with a store.\n */\nexport function createRegistrySelector( registrySelector ) {\n\t// create a selector function that is bound to the registry referenced by `selector.registry`\n\t// and that has the same API as a regular selector. Binding it in such a way makes it\n\t// possible to call the selector directly from another selector.\n\tconst selector = ( ...args ) =>\n\t\tregistrySelector( selector.registry.select )( ...args );\n\n\t/**\n\t * Flag indicating that the selector is a registry selector that needs the correct registry\n\t * reference to be assigned to `selecto.registry` to make it work correctly.\n\t * be mapped as a registry selector.\n\t *\n\t * @type {boolean}\n\t */\n\tselector.isRegistrySelector = true;\n\n\treturn selector;\n}\n\n/**\n * Creates a control function that takes additional curried argument with the `registry` object.\n * While a regular control has signature\n * ```js\n * ( action ) => ( iteratorOrPromise )\n * ```\n * where the control works with the `action` that it's bound to, a registry control has signature:\n * ```js\n * ( registry ) => ( action ) => ( iteratorOrPromise )\n * ```\n * A registry control is typically used to select data or dispatch an action to a registered\n * store.\n *\n * When registering a control created with `createRegistryControl` with a store, the store\n * knows which calling convention to use when executing the control.\n *\n * @param {Function} registryControl Function receiving a registry object and returning a control.\n *\n * @return {Function} Registry control that can be registered with a store.\n */\nexport function createRegistryControl( registryControl ) {\n\tregistryControl.isRegistryControl = true;\n\n\treturn registryControl;\n}\n"]}
@@ -8,7 +8,7 @@ import combineReducers from 'turbo-combine-reducers';
8
8
 
9
9
  import defaultRegistry from './default-registry';
10
10
  import * as plugins from './plugins';
11
- /** @typedef {import('./types').WPDataStore} WPDataStore */
11
+ /** @typedef {import('./types').StoreDescriptor} StoreDescriptor */
12
12
 
13
13
  export { default as withSelect } from './components/with-select';
14
14
  export { default as withDispatch } from './components/with-dispatch';
@@ -71,12 +71,12 @@ export { plugins };
71
71
 
72
72
  export { combineReducers };
73
73
  /**
74
- * Given the name or definition of a registered store, returns an object of the store's selectors.
74
+ * Given the name or descriptor of a registered store, returns an object of the store's selectors.
75
75
  * The selector functions are been pre-bound to pass the current state automatically.
76
76
  * As a consumer, you need only pass arguments of the selector, if applicable.
77
77
  *
78
- * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
79
- * or the store definition.
78
+ * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
79
+ * or the store descriptor.
80
80
  *
81
81
  * @example
82
82
  * ```js
@@ -95,8 +95,8 @@ export const select = defaultRegistry.select;
95
95
  * and modified so that they return promises that resolve to their eventual values,
96
96
  * after any resolvers have ran.
97
97
  *
98
- * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
99
- * or the store definition.
98
+ * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
99
+ * or the store descriptor.
100
100
  *
101
101
  * @example
102
102
  * ```js
@@ -116,8 +116,8 @@ export const resolveSelect = defaultRegistry.resolveSelect;
116
116
  * Note: Action creators returned by the dispatch will return a promise when
117
117
  * they are called.
118
118
  *
119
- * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store
120
- * or the store definition.
119
+ * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
120
+ * or the store descriptor.
121
121
  *
122
122
  * @example
123
123
  * ```js
@@ -152,12 +152,12 @@ export const dispatch = defaultRegistry.dispatch;
152
152
 
153
153
  export const subscribe = defaultRegistry.subscribe;
154
154
  /**
155
- * Registers a generic store.
155
+ * Registers a generic store instance.
156
156
  *
157
- * @deprecated Use `register` instead.
157
+ * @deprecated Use `register( storeDescriptor )` instead.
158
158
  *
159
- * @param {string} key Store registry key.
160
- * @param {Object} config Configuration (getSelectors, getActions, subscribe).
159
+ * @param {string} name Store registry name.
160
+ * @param {Object} store Store instance (`{ getSelectors, getActions, subscribe }`).
161
161
  */
162
162
 
163
163
  export const registerGenericStore = defaultRegistry.registerGenericStore;
@@ -183,7 +183,7 @@ export const registerStore = defaultRegistry.registerStore;
183
183
 
184
184
  export const use = defaultRegistry.use;
185
185
  /**
186
- * Registers a standard `@wordpress/data` store definition.
186
+ * Registers a standard `@wordpress/data` store descriptor.
187
187
  *
188
188
  * @example
189
189
  * ```js
@@ -198,7 +198,7 @@ export const use = defaultRegistry.use;
198
198
  * register( store );
199
199
  * ```
200
200
  *
201
- * @param {WPDataStore} store Store definition.
201
+ * @param {StoreDescriptor} store Store descriptor.
202
202
  */
203
203
 
204
204
  export const register = defaultRegistry.register;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/data/src/index.js"],"names":["combineReducers","defaultRegistry","plugins","default","withSelect","withDispatch","withRegistry","RegistryProvider","RegistryConsumer","useRegistry","useSelect","useDispatch","AsyncModeProvider","createRegistry","createRegistrySelector","createRegistryControl","controls","createReduxStore","select","resolveSelect","dispatch","subscribe","registerGenericStore","registerStore","use","register"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,eAAP,MAA4B,wBAA5B;AAEA;AACA;AACA;;AACA,OAAOC,eAAP,MAA4B,oBAA5B;AACA,OAAO,KAAKC,OAAZ,MAAyB,WAAzB;AAEA;;AAEA,SAASC,OAAO,IAAIC,UAApB,QAAsC,0BAAtC;AACA,SAASD,OAAO,IAAIE,YAApB,QAAwC,4BAAxC;AACA,SAASF,OAAO,IAAIG,YAApB,QAAwC,4BAAxC;AACA,SACCC,gBADD,EAECC,gBAFD,EAGCC,WAHD,QAIO,gCAJP;AAKA,SAASN,OAAO,IAAIO,SAApB,QAAqC,yBAArC;AACA,SAASC,WAAT,QAA4B,2BAA5B;AACA,SAASC,iBAAT,QAAkC,kCAAlC;AACA,SAASC,cAAT,QAA+B,YAA/B;AACA,SAASC,sBAAT,EAAiCC,qBAAjC,QAA8D,WAA9D;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAASb,OAAO,IAAIc,gBAApB,QAA4C,eAA5C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASf,OAAT;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASF,eAAT;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMkB,MAAM,GAAGjB,eAAe,CAACiB,MAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,aAAa,GAAGlB,eAAe,CAACkB,aAAtC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAGnB,eAAe,CAACmB,QAAjC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,SAAS,GAAGpB,eAAe,CAACoB,SAAlC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,oBAAoB,GAAGrB,eAAe,CAACqB,oBAA7C;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,aAAa,GAAGtB,eAAe,CAACsB,aAAtC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,GAAG,GAAGvB,eAAe,CAACuB,GAA5B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAGxB,eAAe,CAACwB,QAAjC","sourcesContent":["/**\n * External dependencies\n */\nimport combineReducers from 'turbo-combine-reducers';\n\n/**\n * Internal dependencies\n */\nimport defaultRegistry from './default-registry';\nimport * as plugins from './plugins';\n\n/** @typedef {import('./types').WPDataStore} WPDataStore */\n\nexport { default as withSelect } from './components/with-select';\nexport { default as withDispatch } from './components/with-dispatch';\nexport { default as withRegistry } from './components/with-registry';\nexport {\n\tRegistryProvider,\n\tRegistryConsumer,\n\tuseRegistry,\n} from './components/registry-provider';\nexport { default as useSelect } from './components/use-select';\nexport { useDispatch } from './components/use-dispatch';\nexport { AsyncModeProvider } from './components/async-mode-provider';\nexport { createRegistry } from './registry';\nexport { createRegistrySelector, createRegistryControl } from './factory';\nexport { controls } from './controls';\nexport { default as createReduxStore } from './redux-store';\n\n/**\n * Object of available plugins to use with a registry.\n *\n * @see [use](#use)\n *\n * @type {Object}\n */\nexport { plugins };\n\n/**\n * The combineReducers helper function turns an object whose values are different\n * reducing functions into a single reducing function you can pass to registerReducer.\n *\n * @param {Object} reducers An object whose values correspond to different reducing\n * functions that need to be combined into one.\n *\n * @example\n * ```js\n * import { combineReducers, createReduxStore, register } from '@wordpress/data';\n *\n * const prices = ( state = {}, action ) => {\n * \treturn action.type === 'SET_PRICE' ?\n * \t\t{\n * \t\t\t...state,\n * \t\t\t[ action.item ]: action.price,\n * \t\t} :\n * \t\tstate;\n * };\n *\n * const discountPercent = ( state = 0, action ) => {\n * \treturn action.type === 'START_SALE' ?\n * \t\taction.discountPercent :\n * \t\tstate;\n * };\n *\n * const store = createReduxStore( 'my-shop', {\n * \treducer: combineReducers( {\n * \t\tprices,\n * \t\tdiscountPercent,\n * \t} ),\n * } );\n * register( store );\n * ```\n *\n * @return {Function} A reducer that invokes every reducer inside the reducers\n * object, and constructs a state object with the same shape.\n */\nexport { combineReducers };\n\n/**\n * Given the name or definition of a registered store, returns an object of the store's selectors.\n * The selector functions are been pre-bound to pass the current state automatically.\n * As a consumer, you need only pass arguments of the selector, if applicable.\n *\n * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n * or the store definition.\n *\n * @example\n * ```js\n * import { select } from '@wordpress/data';\n *\n * select( 'my-shop' ).getPrice( 'hammer' );\n * ```\n *\n * @return {Object} Object containing the store's selectors.\n */\nexport const select = defaultRegistry.select;\n\n/**\n * Given the name of a registered store, returns an object containing the store's\n * selectors pre-bound to state so that you only need to supply additional arguments,\n * and modified so that they return promises that resolve to their eventual values,\n * after any resolvers have ran.\n *\n * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n * or the store definition.\n *\n * @example\n * ```js\n * import { resolveSelect } from '@wordpress/data';\n *\n * resolveSelect( 'my-shop' ).getPrice( 'hammer' ).then(console.log)\n * ```\n *\n * @return {Object} Object containing the store's promise-wrapped selectors.\n */\nexport const resolveSelect = defaultRegistry.resolveSelect;\n\n/**\n * Given the name of a registered store, returns an object of the store's action creators.\n * Calling an action creator will cause it to be dispatched, updating the state value accordingly.\n *\n * Note: Action creators returned by the dispatch will return a promise when\n * they are called.\n *\n * @param {string|WPDataStore} storeNameOrDefinition Unique namespace identifier for the store\n * or the store definition.\n *\n * @example\n * ```js\n * import { dispatch } from '@wordpress/data';\n *\n * dispatch( 'my-shop' ).setPrice( 'hammer', 9.75 );\n * ```\n * @return {Object} Object containing the action creators.\n */\nexport const dispatch = defaultRegistry.dispatch;\n\n/**\n * Given a listener function, the function will be called any time the state value\n * of one of the registered stores has changed. This function returns a `unsubscribe`\n * function used to stop the subscription.\n *\n * @param {Function} listener Callback function.\n *\n * @example\n * ```js\n * import { subscribe } from '@wordpress/data';\n *\n * const unsubscribe = subscribe( () => {\n * \t// You could use this opportunity to test whether the derived result of a\n * \t// selector has subsequently changed as the result of a state update.\n * } );\n *\n * // Later, if necessary...\n * unsubscribe();\n * ```\n */\nexport const subscribe = defaultRegistry.subscribe;\n\n/**\n * Registers a generic store.\n *\n * @deprecated Use `register` instead.\n *\n * @param {string} key Store registry key.\n * @param {Object} config Configuration (getSelectors, getActions, subscribe).\n */\nexport const registerGenericStore = defaultRegistry.registerGenericStore;\n\n/**\n * Registers a standard `@wordpress/data` store.\n *\n * @deprecated Use `register` instead.\n *\n * @param {string} storeName Unique namespace identifier for the store.\n * @param {Object} options Store description (reducer, actions, selectors, resolvers).\n *\n * @return {Object} Registered store object.\n */\nexport const registerStore = defaultRegistry.registerStore;\n\n/**\n * Extends a registry to inherit functionality provided by a given plugin. A\n * plugin is an object with properties aligning to that of a registry, merged\n * to extend the default registry behavior.\n *\n * @param {Object} plugin Plugin object.\n */\nexport const use = defaultRegistry.use;\n\n/**\n * Registers a standard `@wordpress/data` store definition.\n *\n * @example\n * ```js\n * import { createReduxStore, register } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * register( store );\n * ```\n *\n * @param {WPDataStore} store Store definition.\n */\nexport const register = defaultRegistry.register;\n"]}
1
+ {"version":3,"sources":["@wordpress/data/src/index.js"],"names":["combineReducers","defaultRegistry","plugins","default","withSelect","withDispatch","withRegistry","RegistryProvider","RegistryConsumer","useRegistry","useSelect","useDispatch","AsyncModeProvider","createRegistry","createRegistrySelector","createRegistryControl","controls","createReduxStore","select","resolveSelect","dispatch","subscribe","registerGenericStore","registerStore","use","register"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,eAAP,MAA4B,wBAA5B;AAEA;AACA;AACA;;AACA,OAAOC,eAAP,MAA4B,oBAA5B;AACA,OAAO,KAAKC,OAAZ,MAAyB,WAAzB;AAEA;;AAEA,SAASC,OAAO,IAAIC,UAApB,QAAsC,0BAAtC;AACA,SAASD,OAAO,IAAIE,YAApB,QAAwC,4BAAxC;AACA,SAASF,OAAO,IAAIG,YAApB,QAAwC,4BAAxC;AACA,SACCC,gBADD,EAECC,gBAFD,EAGCC,WAHD,QAIO,gCAJP;AAKA,SAASN,OAAO,IAAIO,SAApB,QAAqC,yBAArC;AACA,SAASC,WAAT,QAA4B,2BAA5B;AACA,SAASC,iBAAT,QAAkC,kCAAlC;AACA,SAASC,cAAT,QAA+B,YAA/B;AACA,SAASC,sBAAT,EAAiCC,qBAAjC,QAA8D,WAA9D;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAASb,OAAO,IAAIc,gBAApB,QAA4C,eAA5C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASf,OAAT;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASF,eAAT;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMkB,MAAM,GAAGjB,eAAe,CAACiB,MAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,aAAa,GAAGlB,eAAe,CAACkB,aAAtC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAGnB,eAAe,CAACmB,QAAjC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,SAAS,GAAGpB,eAAe,CAACoB,SAAlC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,oBAAoB,GAAGrB,eAAe,CAACqB,oBAA7C;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,aAAa,GAAGtB,eAAe,CAACsB,aAAtC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,GAAG,GAAGvB,eAAe,CAACuB,GAA5B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAGxB,eAAe,CAACwB,QAAjC","sourcesContent":["/**\n * External dependencies\n */\nimport combineReducers from 'turbo-combine-reducers';\n\n/**\n * Internal dependencies\n */\nimport defaultRegistry from './default-registry';\nimport * as plugins from './plugins';\n\n/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */\n\nexport { default as withSelect } from './components/with-select';\nexport { default as withDispatch } from './components/with-dispatch';\nexport { default as withRegistry } from './components/with-registry';\nexport {\n\tRegistryProvider,\n\tRegistryConsumer,\n\tuseRegistry,\n} from './components/registry-provider';\nexport { default as useSelect } from './components/use-select';\nexport { useDispatch } from './components/use-dispatch';\nexport { AsyncModeProvider } from './components/async-mode-provider';\nexport { createRegistry } from './registry';\nexport { createRegistrySelector, createRegistryControl } from './factory';\nexport { controls } from './controls';\nexport { default as createReduxStore } from './redux-store';\n\n/**\n * Object of available plugins to use with a registry.\n *\n * @see [use](#use)\n *\n * @type {Object}\n */\nexport { plugins };\n\n/**\n * The combineReducers helper function turns an object whose values are different\n * reducing functions into a single reducing function you can pass to registerReducer.\n *\n * @param {Object} reducers An object whose values correspond to different reducing\n * functions that need to be combined into one.\n *\n * @example\n * ```js\n * import { combineReducers, createReduxStore, register } from '@wordpress/data';\n *\n * const prices = ( state = {}, action ) => {\n * \treturn action.type === 'SET_PRICE' ?\n * \t\t{\n * \t\t\t...state,\n * \t\t\t[ action.item ]: action.price,\n * \t\t} :\n * \t\tstate;\n * };\n *\n * const discountPercent = ( state = 0, action ) => {\n * \treturn action.type === 'START_SALE' ?\n * \t\taction.discountPercent :\n * \t\tstate;\n * };\n *\n * const store = createReduxStore( 'my-shop', {\n * \treducer: combineReducers( {\n * \t\tprices,\n * \t\tdiscountPercent,\n * \t} ),\n * } );\n * register( store );\n * ```\n *\n * @return {Function} A reducer that invokes every reducer inside the reducers\n * object, and constructs a state object with the same shape.\n */\nexport { combineReducers };\n\n/**\n * Given the name or descriptor of a registered store, returns an object of the store's selectors.\n * The selector functions are been pre-bound to pass the current state automatically.\n * As a consumer, you need only pass arguments of the selector, if applicable.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * or the store descriptor.\n *\n * @example\n * ```js\n * import { select } from '@wordpress/data';\n *\n * select( 'my-shop' ).getPrice( 'hammer' );\n * ```\n *\n * @return {Object} Object containing the store's selectors.\n */\nexport const select = defaultRegistry.select;\n\n/**\n * Given the name of a registered store, returns an object containing the store's\n * selectors pre-bound to state so that you only need to supply additional arguments,\n * and modified so that they return promises that resolve to their eventual values,\n * after any resolvers have ran.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * or the store descriptor.\n *\n * @example\n * ```js\n * import { resolveSelect } from '@wordpress/data';\n *\n * resolveSelect( 'my-shop' ).getPrice( 'hammer' ).then(console.log)\n * ```\n *\n * @return {Object} Object containing the store's promise-wrapped selectors.\n */\nexport const resolveSelect = defaultRegistry.resolveSelect;\n\n/**\n * Given the name of a registered store, returns an object of the store's action creators.\n * Calling an action creator will cause it to be dispatched, updating the state value accordingly.\n *\n * Note: Action creators returned by the dispatch will return a promise when\n * they are called.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * or the store descriptor.\n *\n * @example\n * ```js\n * import { dispatch } from '@wordpress/data';\n *\n * dispatch( 'my-shop' ).setPrice( 'hammer', 9.75 );\n * ```\n * @return {Object} Object containing the action creators.\n */\nexport const dispatch = defaultRegistry.dispatch;\n\n/**\n * Given a listener function, the function will be called any time the state value\n * of one of the registered stores has changed. This function returns a `unsubscribe`\n * function used to stop the subscription.\n *\n * @param {Function} listener Callback function.\n *\n * @example\n * ```js\n * import { subscribe } from '@wordpress/data';\n *\n * const unsubscribe = subscribe( () => {\n * \t// You could use this opportunity to test whether the derived result of a\n * \t// selector has subsequently changed as the result of a state update.\n * } );\n *\n * // Later, if necessary...\n * unsubscribe();\n * ```\n */\nexport const subscribe = defaultRegistry.subscribe;\n\n/**\n * Registers a generic store instance.\n *\n * @deprecated Use `register( storeDescriptor )` instead.\n *\n * @param {string} name Store registry name.\n * @param {Object} store Store instance (`{ getSelectors, getActions, subscribe }`).\n */\nexport const registerGenericStore = defaultRegistry.registerGenericStore;\n\n/**\n * Registers a standard `@wordpress/data` store.\n *\n * @deprecated Use `register` instead.\n *\n * @param {string} storeName Unique namespace identifier for the store.\n * @param {Object} options Store description (reducer, actions, selectors, resolvers).\n *\n * @return {Object} Registered store object.\n */\nexport const registerStore = defaultRegistry.registerStore;\n\n/**\n * Extends a registry to inherit functionality provided by a given plugin. A\n * plugin is an object with properties aligning to that of a registry, merged\n * to extend the default registry behavior.\n *\n * @param {Object} plugin Plugin object.\n */\nexport const use = defaultRegistry.use;\n\n/**\n * Registers a standard `@wordpress/data` store descriptor.\n *\n * @example\n * ```js\n * import { createReduxStore, register } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * register( store );\n * ```\n *\n * @param {StoreDescriptor} store Store descriptor.\n */\nexport const register = defaultRegistry.register;\n"]}