@wordpress/data 9.13.0 → 9.14.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.
- package/CHANGELOG.md +8 -0
- package/README.md +80 -0
- package/build/index.js +4 -7
- package/build/index.js.map +1 -1
- package/build/lock-unlock.js +1 -1
- package/build/lock-unlock.js.map +1 -1
- package/build/redux-store/index.js +32 -2
- package/build/redux-store/index.js.map +1 -1
- package/build-module/index.js +2 -1
- package/build-module/index.js.map +1 -1
- package/build-module/lock-unlock.js +1 -1
- package/build-module/lock-unlock.js.map +1 -1
- package/build-module/redux-store/index.js +32 -2
- package/build-module/redux-store/index.js.map +1 -1
- package/build-types/index.d.ts +41 -1
- package/build-types/index.d.ts.map +1 -1
- package/build-types/redux-store/index.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/index.js +2 -1
- package/src/lock-unlock.js +1 -1
- package/src/redux-store/index.js +44 -2
- package/src/redux-store/metadata/test/selectors.js +38 -2
- package/src/redux-store/test/index.js +72 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -1127,6 +1127,86 @@ _Returns_
|
|
|
1127
1127
|
|
|
1128
1128
|
- `boolean`: Whether resolution is in progress.
|
|
1129
1129
|
|
|
1130
|
+
### Normalizing Selector Arguments
|
|
1131
|
+
|
|
1132
|
+
In specific circumstances it may be necessary to normalize the arguments passed to a given _call_ of a selector/resolver pairing.
|
|
1133
|
+
|
|
1134
|
+
Each resolver has [its resolution status cached in an internal state](https://github.com/WordPress/gutenberg/blob/e244388d8669618b76c966cc33d48df9156c2db6/packages/data/src/redux-store/metadata/reducer.ts#L39) where the [key is the arguments supplied to the selector](https://github.com/WordPress/gutenberg/blob/e244388d8669618b76c966cc33d48df9156c2db6/packages/data/src/redux-store/metadata/utils.ts#L48) at _call_ time.
|
|
1135
|
+
|
|
1136
|
+
For example for a selector with a single argument, the related resolver would generate a cache key of: `[ 123 ]`.
|
|
1137
|
+
|
|
1138
|
+
[This cache is used to determine the resolution status of a given resolver](https://github.com/WordPress/gutenberg/blob/e244388d8669618b76c966cc33d48df9156c2db6/packages/data/src/redux-store/metadata/selectors.js#L22-L29) which is used to [avoid unwanted additional invocations of resolvers](https://github.com/WordPress/gutenberg/blob/e244388d8669618b76c966cc33d48df9156c2db6/packages/data/src/redux-store/index.js#L469-L474) (which often undertake "expensive" operations such as network requests).
|
|
1139
|
+
|
|
1140
|
+
As a result it's important that arguments remain _consistent_ when calling the selector. For example, by _default_ these two calls will not be cached using the same key, even though they are likely identical:
|
|
1141
|
+
|
|
1142
|
+
```js
|
|
1143
|
+
// Arg as number
|
|
1144
|
+
getSomeDataById( 123 );
|
|
1145
|
+
|
|
1146
|
+
// Arg as string
|
|
1147
|
+
getSomeDataById( '123' );
|
|
1148
|
+
```
|
|
1149
|
+
|
|
1150
|
+
This is an opportunity to utilize the `__unstableNormalizeArgs` property to guarantee consistency by protecting callers from passing incorrect types.
|
|
1151
|
+
|
|
1152
|
+
#### Example
|
|
1153
|
+
|
|
1154
|
+
The _3rd_ argument of the following selector is intended to be a `Number`:
|
|
1155
|
+
|
|
1156
|
+
```js
|
|
1157
|
+
const getItemsSelector = ( name, type, id ) => {
|
|
1158
|
+
return state.items[ name ][ type ][ id ] || null;
|
|
1159
|
+
};
|
|
1160
|
+
```
|
|
1161
|
+
|
|
1162
|
+
However, it is possible that the `id` parameter will be passed as a `String`. In this case, the `__unstableNormalizeArgs` method (property) can be defined on the _selector_ to coerce the arguments to the desired type even if they are provided "incorrectly":
|
|
1163
|
+
|
|
1164
|
+
```js
|
|
1165
|
+
// Define normalization method.
|
|
1166
|
+
getItemsSelector.__unstableNormalizeArgs = ( args ) {
|
|
1167
|
+
// "id" argument at the 2nd index
|
|
1168
|
+
if (args[2] && typeof args[2] === 'string' ) {
|
|
1169
|
+
args[2] === Number(args[2]);
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
return args;
|
|
1173
|
+
}
|
|
1174
|
+
```
|
|
1175
|
+
|
|
1176
|
+
With this in place the following code will behave consistently:
|
|
1177
|
+
|
|
1178
|
+
```js
|
|
1179
|
+
const getItemsSelector = ( name, type, id ) => {
|
|
1180
|
+
// here 'id' is now guaranteed to be a number.
|
|
1181
|
+
return state.items[ name ][ type ][ id ] || null;
|
|
1182
|
+
};
|
|
1183
|
+
|
|
1184
|
+
const getItemsResolver = ( name, type, id ) => {
|
|
1185
|
+
// 'id' is also guaranteed to be a number in the resolver.
|
|
1186
|
+
return {};
|
|
1187
|
+
};
|
|
1188
|
+
|
|
1189
|
+
registry.registerStore( 'store', {
|
|
1190
|
+
// ...
|
|
1191
|
+
selectors: {
|
|
1192
|
+
getItems: getItemsSelector,
|
|
1193
|
+
},
|
|
1194
|
+
resolvers: {
|
|
1195
|
+
getItems: getItemsResolver,
|
|
1196
|
+
},
|
|
1197
|
+
} );
|
|
1198
|
+
|
|
1199
|
+
// Call with correct number type.
|
|
1200
|
+
registry.select( 'store' ).getItems( 'foo', 'bar', 54 );
|
|
1201
|
+
|
|
1202
|
+
// Call with the wrong string type, **but** here we have avoided an
|
|
1203
|
+
// wanted resolver call because '54' is guaranteed to have been
|
|
1204
|
+
// coerced to a number by the `__unstableNormalizeArgs` method.
|
|
1205
|
+
registry.select( 'store' ).getItems( 'foo', 'bar', '54' );
|
|
1206
|
+
```
|
|
1207
|
+
|
|
1208
|
+
Ensuring consistency of arguments for a given selector call is [an important optimization to help improve performance in the data layer](https://github.com/WordPress/gutenberg/pull/52120). However, this type of problem can be usually be avoided by ensuring selectors don't use variable types for their arguments.
|
|
1209
|
+
|
|
1130
1210
|
## Going further
|
|
1131
1211
|
|
|
1132
1212
|
- [What is WordPress Data?](https://unfoldingneurons.com/2020/what-is-wordpress-data/)
|
package/build/index.js
CHANGED
|
@@ -22,12 +22,7 @@ Object.defineProperty(exports, "RegistryProvider", {
|
|
|
22
22
|
return _registryProvider.RegistryProvider;
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
-
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: function () {
|
|
28
|
-
return _reduxStore.combineReducers;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
25
|
+
exports.combineReducers = void 0;
|
|
31
26
|
Object.defineProperty(exports, "controls", {
|
|
32
27
|
enumerable: true,
|
|
33
28
|
get: function () {
|
|
@@ -117,6 +112,7 @@ Object.defineProperty(exports, "withSelect", {
|
|
|
117
112
|
var _defaultRegistry = _interopRequireDefault(require("./default-registry"));
|
|
118
113
|
var plugins = _interopRequireWildcard(require("./plugins"));
|
|
119
114
|
exports.plugins = plugins;
|
|
115
|
+
var _reduxStore = _interopRequireWildcard(require("./redux-store"));
|
|
120
116
|
var _withSelect = _interopRequireDefault(require("./components/with-select"));
|
|
121
117
|
var _withDispatch = _interopRequireDefault(require("./components/with-dispatch"));
|
|
122
118
|
var _withRegistry = _interopRequireDefault(require("./components/with-registry"));
|
|
@@ -127,7 +123,6 @@ var _asyncModeProvider = require("./components/async-mode-provider");
|
|
|
127
123
|
var _registry = require("./registry");
|
|
128
124
|
var _factory = require("./factory");
|
|
129
125
|
var _controls = require("./controls");
|
|
130
|
-
var _reduxStore = _interopRequireWildcard(require("./redux-store"));
|
|
131
126
|
var _dispatch = require("./dispatch");
|
|
132
127
|
var _select = require("./select");
|
|
133
128
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -185,6 +180,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
185
180
|
* @return {Function} A reducer that invokes every reducer inside the reducers
|
|
186
181
|
* object, and constructs a state object with the same shape.
|
|
187
182
|
*/
|
|
183
|
+
const combineReducers = _reduxStore.combineReducers;
|
|
188
184
|
|
|
189
185
|
/**
|
|
190
186
|
* Given a store descriptor, returns an object containing the store's selectors pre-bound to state
|
|
@@ -205,6 +201,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
205
201
|
*
|
|
206
202
|
* @return {Object} Object containing the store's promise-wrapped selectors.
|
|
207
203
|
*/
|
|
204
|
+
exports.combineReducers = combineReducers;
|
|
208
205
|
const resolveSelect = _defaultRegistry.default.resolveSelect;
|
|
209
206
|
|
|
210
207
|
/**
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_defaultRegistry","_interopRequireDefault","require","plugins","_interopRequireWildcard","exports","_withSelect","_withDispatch","_withRegistry","_registryProvider","_useSelect","_useDispatch","_asyncModeProvider","_registry","_factory","_controls","_reduxStore","_dispatch","_select","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","resolveSelect","defaultRegistry","suspendSelect","subscribe","registerGenericStore","registerStore","use","register"],"sources":["@wordpress/data/src/index.js"],"sourcesContent":["/**\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 {\n\tdefault as useSelect,\n\tuseSuspenseSelect,\n} 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';\nexport { dispatch } from './dispatch';\nexport { select } from './select';\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 * @type {import('./types').combineReducers}\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 } from './redux-store';\n\n/**\n * Given a store descriptor, returns an object containing the store's selectors pre-bound to state\n * so that you only need to supply additional arguments, and modified so that they return promises\n * that resolve to their eventual values, after any resolvers have ran.\n *\n * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n * convention of passing the store name is\n * also supported.\n *\n * @example\n * ```js\n * import { resolveSelect } from '@wordpress/data';\n * import { store as myCustomStore } from 'my-custom-store';\n *\n * resolveSelect( myCustomStore ).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 a store descriptor, returns an object containing the store's selectors pre-bound to state\n * so that you only need to supply additional arguments, and modified so that they throw promises\n * in case the selector is not resolved yet.\n *\n * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n * convention of passing the store name is\n * also supported.\n *\n * @return {Object} Object containing the store's suspense-wrapped selectors.\n */\nexport const suspendSelect = defaultRegistry.suspendSelect;\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. If you specify the optional\n * `storeNameOrDescriptor` parameter, the listener function will be called only\n * on updates on that one specific registered store.\n *\n * This function returns an `unsubscribe` function used to stop the subscription.\n *\n * @param {Function} listener Callback function.\n * @param {string|StoreDescriptor?} storeNameOrDescriptor Optional store name.\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_defaultRegistry","_interopRequireDefault","require","plugins","_interopRequireWildcard","exports","_reduxStore","_withSelect","_withDispatch","_withRegistry","_registryProvider","_useSelect","_useDispatch","_asyncModeProvider","_registry","_factory","_controls","_dispatch","_select","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","combineReducers","combineReducersModule","resolveSelect","defaultRegistry","suspendSelect","subscribe","registerGenericStore","registerStore","use","register"],"sources":["@wordpress/data/src/index.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport defaultRegistry from './default-registry';\nimport * as plugins from './plugins';\nimport { combineReducers as combineReducersModule } from './redux-store';\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 {\n\tdefault as useSelect,\n\tuseSuspenseSelect,\n} 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';\nexport { dispatch } from './dispatch';\nexport { select } from './select';\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 * @type {import('./types').combineReducers}\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 const combineReducers = combineReducersModule;\n\n/**\n * Given a store descriptor, returns an object containing the store's selectors pre-bound to state\n * so that you only need to supply additional arguments, and modified so that they return promises\n * that resolve to their eventual values, after any resolvers have ran.\n *\n * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n * convention of passing the store name is\n * also supported.\n *\n * @example\n * ```js\n * import { resolveSelect } from '@wordpress/data';\n * import { store as myCustomStore } from 'my-custom-store';\n *\n * resolveSelect( myCustomStore ).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 a store descriptor, returns an object containing the store's selectors pre-bound to state\n * so that you only need to supply additional arguments, and modified so that they throw promises\n * in case the selector is not resolved yet.\n *\n * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n * convention of passing the store name is\n * also supported.\n *\n * @return {Object} Object containing the store's suspense-wrapped selectors.\n */\nexport const suspendSelect = defaultRegistry.suspendSelect;\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. If you specify the optional\n * `storeNameOrDescriptor` parameter, the listener function will be called only\n * on updates on that one specific registered store.\n *\n * This function returns an `unsubscribe` function used to stop the subscription.\n *\n * @param {Function} listener Callback function.\n * @param {string|StoreDescriptor?} storeNameOrDescriptor Optional store name.\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"],"mappings":"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"}
|
package/build/lock-unlock.js
CHANGED
|
@@ -12,7 +12,7 @@ var _privateApis = require("@wordpress/private-apis");
|
|
|
12
12
|
const {
|
|
13
13
|
lock,
|
|
14
14
|
unlock
|
|
15
|
-
} = (0, _privateApis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I know using unstable features means my
|
|
15
|
+
} = (0, _privateApis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.', '@wordpress/data');
|
|
16
16
|
exports.unlock = unlock;
|
|
17
17
|
exports.lock = lock;
|
|
18
18
|
//# sourceMappingURL=lock-unlock.js.map
|
package/build/lock-unlock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_privateApis","require","lock","unlock","__dangerousOptInToUnstableAPIsOnlyForCoreModules","exports"],"sources":["@wordpress/data/src/lock-unlock.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my
|
|
1
|
+
{"version":3,"names":["_privateApis","require","lock","unlock","__dangerousOptInToUnstableAPIsOnlyForCoreModules","exports"],"sources":["@wordpress/data/src/lock-unlock.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.',\n\t\t'@wordpress/data'\n\t);\n"],"mappings":";;;;;;AAGA,IAAAA,YAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGO,MAAM;EAAEC,IAAI;EAAEC;AAAO,CAAC,GAC5B,IAAAC,6DAAgD,EAC/C,iHAAiH,EACjH,iBACD,CAAC;AAACC,OAAA,CAAAF,MAAA,GAAAA,MAAA;AAAAE,OAAA,CAAAH,IAAA,GAAAA,IAAA"}
|
|
@@ -214,9 +214,15 @@ function createReduxStore(key, options) {
|
|
|
214
214
|
selector.registry = registry;
|
|
215
215
|
}
|
|
216
216
|
const boundSelector = (...args) => {
|
|
217
|
+
args = normalize(selector, args);
|
|
217
218
|
const state = store.__unstableOriginalGetState();
|
|
218
219
|
return selector(state.root, ...args);
|
|
219
220
|
};
|
|
221
|
+
|
|
222
|
+
// Expose normalization method on the bound selector
|
|
223
|
+
// in order that it can be called when fullfilling
|
|
224
|
+
// the resolver.
|
|
225
|
+
boundSelector.__unstableNormalizeArgs = selector.__unstableNormalizeArgs;
|
|
220
226
|
const resolver = resolvers[selectorName];
|
|
221
227
|
if (!resolver) {
|
|
222
228
|
boundSelector.hasResolver = false;
|
|
@@ -224,10 +230,18 @@ function createReduxStore(key, options) {
|
|
|
224
230
|
}
|
|
225
231
|
return mapSelectorWithResolver(boundSelector, selectorName, resolver, store, resolversCache);
|
|
226
232
|
}
|
|
227
|
-
function bindMetadataSelector(
|
|
233
|
+
function bindMetadataSelector(metaDataSelector) {
|
|
228
234
|
const boundSelector = (...args) => {
|
|
229
235
|
const state = store.__unstableOriginalGetState();
|
|
230
|
-
|
|
236
|
+
const originalSelectorName = args && args[0];
|
|
237
|
+
const originalSelectorArgs = args && args[1];
|
|
238
|
+
const targetSelector = options?.selectors?.[originalSelectorName];
|
|
239
|
+
|
|
240
|
+
// Normalize the arguments passed to the target selector.
|
|
241
|
+
if (originalSelectorName && targetSelector) {
|
|
242
|
+
args[1] = normalize(targetSelector, originalSelectorArgs);
|
|
243
|
+
}
|
|
244
|
+
return metaDataSelector(state.metadata, ...args);
|
|
231
245
|
};
|
|
232
246
|
boundSelector.hasResolver = false;
|
|
233
247
|
return boundSelector;
|
|
@@ -498,10 +512,26 @@ function mapSelectorWithResolver(selector, selectorName, resolver, store, resolv
|
|
|
498
512
|
}, 0);
|
|
499
513
|
}
|
|
500
514
|
const selectorResolver = (...args) => {
|
|
515
|
+
args = normalize(selector, args);
|
|
501
516
|
fulfillSelector(args);
|
|
502
517
|
return selector(...args);
|
|
503
518
|
};
|
|
504
519
|
selectorResolver.hasResolver = true;
|
|
505
520
|
return selectorResolver;
|
|
506
521
|
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Applies selector's normalization function to the given arguments
|
|
525
|
+
* if it exists.
|
|
526
|
+
*
|
|
527
|
+
* @param {Object} selector The selector potentially with a normalization method property.
|
|
528
|
+
* @param {Array} args selector arguments to normalize.
|
|
529
|
+
* @return {Array} Potentially normalized arguments.
|
|
530
|
+
*/
|
|
531
|
+
function normalize(selector, args) {
|
|
532
|
+
if (selector.__unstableNormalizeArgs && typeof selector.__unstableNormalizeArgs === 'function' && args?.length) {
|
|
533
|
+
return selector.__unstableNormalizeArgs(args);
|
|
534
|
+
}
|
|
535
|
+
return args;
|
|
536
|
+
}
|
|
507
537
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_redux","require","_equivalentKeyMap","_interopRequireDefault","_reduxRoutine","_compose","_combineReducers","_controls","_lockUnlock","_promiseMiddleware","_resolversCacheMiddleware","_thunkMiddleware","_reducer","metadataSelectors","_interopRequireWildcard","metadataActions","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","callback","fromEntries","entries","map","value","mapToObject","state","Map","createResolversCache","isRunning","selectorName","args","clear","delete","markAsRunning","EquivalentKeyMap","createBindingCache","bind","item","itemName","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","listeners","Set","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","lock","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","resolvers","mapResolvers","bindSelector","selector","isRegistrySelector","boundSelector","__unstableOriginalGetState","root","resolver","hasResolver","mapSelectorWithResolver","bindMetadataSelector","metadata","boundPrivateSelectors","allSelectors","privateSelector","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","add","lastState","hasChanged","controls","builtinControls","normalizedControls","control","isRegistryControl","middlewares","createResolversCacheMiddleware","promise","createReduxRoutineMiddleware","createThunkMiddleware","enhancers","applyMiddleware","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","combineReducers","metadataReducer","createStore","compose","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","hasResolvingSelectors","countSelectorsByStatus","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"sources":["@wordpress/data/src/redux-store/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport 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 { combineReducers } from './combine-reducers';\nimport { builtinControls } from '../controls';\nimport { lock } from '../lock-unlock';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\nexport { combineReducers };\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').ListenerFunction} ListenerFunction */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../types').ActionCreator>} Actions\n * @template Selectors\n */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\n\n// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item, itemName ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item, itemName );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @template State\n * @template {Record<string,import('../types').ActionCreator>} Actions\n * @template Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\t/**\n\t\t\t * Stores listener functions registered with `subscribe()`.\n\t\t\t *\n\t\t\t * When functions register to listen to store changes with\n\t\t\t * `subscribe()` they get added here. Although Redux offers\n\t\t\t * its own `subscribe()` function directly, by wrapping the\n\t\t\t * subscription in this store instance it's possible to\n\t\t\t * optimize checking if the state has changed before calling\n\t\t\t * each listener.\n\t\t\t *\n\t\t\t * @type {Set<ListenerFunction>}\n\t\t\t */\n\t\t\tconst listeners = new Set();\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction, prop )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tconst resolvers = options.resolvers\n\t\t\t\t? mapResolvers( options.resolvers )\n\t\t\t\t: {};\n\n\t\t\tfunction bindSelector( selector, selectorName ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\n\t\t\t\tconst resolver = resolvers[ selectorName ];\n\t\t\t\tif ( ! resolver ) {\n\t\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\t\treturn boundSelector;\n\t\t\t\t}\n\n\t\t\t\treturn mapSelectorWithResolver(\n\t\t\t\t\tboundSelector,\n\t\t\t\t\tselectorName,\n\t\t\t\t\tresolver,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( selector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tconst selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const [ selectorName, selector ] of Object.entries(\n\t\t\t\tprivateSelectors\n\t\t\t) ) {\n\t\t\t\tboundPrivateSelectors.get( selector, selectorName );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector, prop )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlisteners.add( listener );\n\n\t\t\t\t\treturn () => listeners.delete( listener );\n\t\t\t\t} );\n\n\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\tstore.subscribe( () => {\n\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\tlastState = state;\n\n\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\tfor ( const listener of listeners ) {\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tcompose( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\thasResolvingSelectors,\n\t\tcountSelectorsByStatus,\n\t\t...storeSelectors\n\t} = selectors;\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Maps selectors to functions that throw a suspense promise if not yet resolved.\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n}\n\n/**\n * Returns a selector with a matched resolver.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} selector The selector function to be bound.\n * @param {string} selectorName The selector name.\n * @param {Object} resolver Resolver to call.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorWithResolver(\n\tselector,\n\tselectorName,\n\tresolver,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\tconst selectorResolver = ( ...args ) => {\n\t\tfulfillSelector( args );\n\t\treturn selector( ...args );\n\t};\n\tselectorResolver.hasResolver = true;\n\treturn selectorResolver;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_redux","require","_equivalentKeyMap","_interopRequireDefault","_reduxRoutine","_compose","_combineReducers","_controls","_lockUnlock","_promiseMiddleware","_resolversCacheMiddleware","_thunkMiddleware","_reducer","metadataSelectors","_interopRequireWildcard","metadataActions","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","callback","fromEntries","entries","map","value","mapToObject","state","Map","createResolversCache","isRunning","selectorName","args","clear","delete","markAsRunning","EquivalentKeyMap","createBindingCache","bind","item","itemName","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","listeners","Set","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","lock","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","resolvers","mapResolvers","bindSelector","selector","isRegistrySelector","boundSelector","normalize","__unstableOriginalGetState","root","__unstableNormalizeArgs","resolver","hasResolver","mapSelectorWithResolver","bindMetadataSelector","metaDataSelector","originalSelectorName","originalSelectorArgs","targetSelector","metadata","boundPrivateSelectors","allSelectors","privateSelector","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","add","lastState","hasChanged","controls","builtinControls","normalizedControls","control","isRegistryControl","middlewares","createResolversCacheMiddleware","promise","createReduxRoutineMiddleware","createThunkMiddleware","enhancers","applyMiddleware","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","combineReducers","metadataReducer","createStore","compose","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","hasResolvingSelectors","countSelectorsByStatus","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"sources":["@wordpress/data/src/redux-store/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport 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 { combineReducers } from './combine-reducers';\nimport { builtinControls } from '../controls';\nimport { lock } from '../lock-unlock';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\nexport { combineReducers };\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').ListenerFunction} ListenerFunction */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../types').ActionCreator>} Actions\n * @template Selectors\n */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\n\n// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item, itemName ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item, itemName );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @template State\n * @template {Record<string,import('../types').ActionCreator>} Actions\n * @template Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\t/**\n\t\t\t * Stores listener functions registered with `subscribe()`.\n\t\t\t *\n\t\t\t * When functions register to listen to store changes with\n\t\t\t * `subscribe()` they get added here. Although Redux offers\n\t\t\t * its own `subscribe()` function directly, by wrapping the\n\t\t\t * subscription in this store instance it's possible to\n\t\t\t * optimize checking if the state has changed before calling\n\t\t\t * each listener.\n\t\t\t *\n\t\t\t * @type {Set<ListenerFunction>}\n\t\t\t */\n\t\t\tconst listeners = new Set();\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction, prop )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tconst resolvers = options.resolvers\n\t\t\t\t? mapResolvers( options.resolvers )\n\t\t\t\t: {};\n\n\t\t\tfunction bindSelector( selector, selectorName ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\targs = normalize( selector, args );\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\n\t\t\t\t// Expose normalization method on the bound selector\n\t\t\t\t// in order that it can be called when fullfilling\n\t\t\t\t// the resolver.\n\t\t\t\tboundSelector.__unstableNormalizeArgs =\n\t\t\t\t\tselector.__unstableNormalizeArgs;\n\n\t\t\t\tconst resolver = resolvers[ selectorName ];\n\n\t\t\t\tif ( ! resolver ) {\n\t\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\t\treturn boundSelector;\n\t\t\t\t}\n\n\t\t\t\treturn mapSelectorWithResolver(\n\t\t\t\t\tboundSelector,\n\t\t\t\t\tselectorName,\n\t\t\t\t\tresolver,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( metaDataSelector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\n\t\t\t\t\tconst originalSelectorName = args && args[ 0 ];\n\t\t\t\t\tconst originalSelectorArgs = args && args[ 1 ];\n\t\t\t\t\tconst targetSelector =\n\t\t\t\t\t\toptions?.selectors?.[ originalSelectorName ];\n\n\t\t\t\t\t// Normalize the arguments passed to the target selector.\n\t\t\t\t\tif ( originalSelectorName && targetSelector ) {\n\t\t\t\t\t\targs[ 1 ] = normalize(\n\t\t\t\t\t\t\ttargetSelector,\n\t\t\t\t\t\t\toriginalSelectorArgs\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn metaDataSelector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tconst selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const [ selectorName, selector ] of Object.entries(\n\t\t\t\tprivateSelectors\n\t\t\t) ) {\n\t\t\t\tboundPrivateSelectors.get( selector, selectorName );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector, prop )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlisteners.add( listener );\n\n\t\t\t\t\treturn () => listeners.delete( listener );\n\t\t\t\t} );\n\n\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\tstore.subscribe( () => {\n\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\tlastState = state;\n\n\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\tfor ( const listener of listeners ) {\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tcompose( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\thasResolvingSelectors,\n\t\tcountSelectorsByStatus,\n\t\t...storeSelectors\n\t} = selectors;\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Maps selectors to functions that throw a suspense promise if not yet resolved.\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n}\n\n/**\n * Returns a selector with a matched resolver.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} selector The selector function to be bound.\n * @param {string} selectorName The selector name.\n * @param {Object} resolver Resolver to call.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorWithResolver(\n\tselector,\n\tselectorName,\n\tresolver,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\tconst selectorResolver = ( ...args ) => {\n\t\targs = normalize( selector, args );\n\t\tfulfillSelector( args );\n\t\treturn selector( ...args );\n\t};\n\tselectorResolver.hasResolver = true;\n\treturn selectorResolver;\n}\n\n/**\n * Applies selector's normalization function to the given arguments\n * if it exists.\n *\n * @param {Object} selector The selector potentially with a normalization method property.\n * @param {Array} args selector arguments to normalize.\n * @return {Array} Potentially normalized arguments.\n */\nfunction normalize( selector, args ) {\n\tif (\n\t\tselector.__unstableNormalizeArgs &&\n\t\ttypeof selector.__unstableNormalizeArgs === 'function' &&\n\t\targs?.length\n\t) {\n\t\treturn selector.__unstableNormalizeArgs( args );\n\t}\n\treturn args;\n}\n"],"mappings":"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"}
|
package/build-module/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import defaultRegistry from './default-registry';
|
|
5
5
|
import * as plugins from './plugins';
|
|
6
|
+
import { combineReducers as combineReducersModule } from './redux-store';
|
|
6
7
|
|
|
7
8
|
/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */
|
|
8
9
|
|
|
@@ -68,7 +69,7 @@ export { plugins };
|
|
|
68
69
|
* @return {Function} A reducer that invokes every reducer inside the reducers
|
|
69
70
|
* object, and constructs a state object with the same shape.
|
|
70
71
|
*/
|
|
71
|
-
export
|
|
72
|
+
export const combineReducers = combineReducersModule;
|
|
72
73
|
|
|
73
74
|
/**
|
|
74
75
|
* Given a store descriptor, returns an object containing the store's selectors pre-bound to state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defaultRegistry","plugins","default","withSelect","withDispatch","withRegistry","RegistryProvider","RegistryConsumer","useRegistry","useSelect","useSuspenseSelect","useDispatch","AsyncModeProvider","createRegistry","createRegistrySelector","createRegistryControl","controls","createReduxStore","dispatch","select","
|
|
1
|
+
{"version":3,"names":["defaultRegistry","plugins","combineReducers","combineReducersModule","default","withSelect","withDispatch","withRegistry","RegistryProvider","RegistryConsumer","useRegistry","useSelect","useSuspenseSelect","useDispatch","AsyncModeProvider","createRegistry","createRegistrySelector","createRegistryControl","controls","createReduxStore","dispatch","select","resolveSelect","suspendSelect","subscribe","registerGenericStore","registerStore","use","register"],"sources":["@wordpress/data/src/index.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport defaultRegistry from './default-registry';\nimport * as plugins from './plugins';\nimport { combineReducers as combineReducersModule } from './redux-store';\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 {\n\tdefault as useSelect,\n\tuseSuspenseSelect,\n} 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';\nexport { dispatch } from './dispatch';\nexport { select } from './select';\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 * @type {import('./types').combineReducers}\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 const combineReducers = combineReducersModule;\n\n/**\n * Given a store descriptor, returns an object containing the store's selectors pre-bound to state\n * so that you only need to supply additional arguments, and modified so that they return promises\n * that resolve to their eventual values, after any resolvers have ran.\n *\n * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n * convention of passing the store name is\n * also supported.\n *\n * @example\n * ```js\n * import { resolveSelect } from '@wordpress/data';\n * import { store as myCustomStore } from 'my-custom-store';\n *\n * resolveSelect( myCustomStore ).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 a store descriptor, returns an object containing the store's selectors pre-bound to state\n * so that you only need to supply additional arguments, and modified so that they throw promises\n * in case the selector is not resolved yet.\n *\n * @param {StoreDescriptor|string} storeNameOrDescriptor The store descriptor. The legacy calling\n * convention of passing the store name is\n * also supported.\n *\n * @return {Object} Object containing the store's suspense-wrapped selectors.\n */\nexport const suspendSelect = defaultRegistry.suspendSelect;\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. If you specify the optional\n * `storeNameOrDescriptor` parameter, the listener function will be called only\n * on updates on that one specific registered store.\n *\n * This function returns an `unsubscribe` function used to stop the subscription.\n *\n * @param {Function} listener Callback function.\n * @param {string|StoreDescriptor?} storeNameOrDescriptor Optional store name.\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"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,eAAe,MAAM,oBAAoB;AAChD,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,SAASC,eAAe,IAAIC,qBAAqB,QAAQ,eAAe;;AAExE;;AAEA,SAASC,OAAO,IAAIC,UAAU,QAAQ,0BAA0B;AAChE,SAASD,OAAO,IAAIE,YAAY,QAAQ,4BAA4B;AACpE,SAASF,OAAO,IAAIG,YAAY,QAAQ,4BAA4B;AACpE,SACCC,gBAAgB,EAChBC,gBAAgB,EAChBC,WAAW,QACL,gCAAgC;AACvC,SACCN,OAAO,IAAIO,SAAS,EACpBC,iBAAiB,QACX,yBAAyB;AAChC,SAASC,WAAW,QAAQ,2BAA2B;AACvD,SAASC,iBAAiB,QAAQ,kCAAkC;AACpE,SAASC,cAAc,QAAQ,YAAY;AAC3C,SAASC,sBAAsB,EAAEC,qBAAqB,QAAQ,WAAW;AACzE,SAASC,QAAQ,QAAQ,YAAY;AACrC,SAASd,OAAO,IAAIe,gBAAgB,QAAQ,eAAe;AAC3D,SAASC,QAAQ,QAAQ,YAAY;AACrC,SAASC,MAAM,QAAQ,UAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASpB,OAAO;;AAEhB;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,OAAO,MAAMC,eAAe,GAAGC,qBAAqB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMmB,aAAa,GAAGtB,eAAe,CAACsB,aAAa;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,GAAGvB,eAAe,CAACuB,aAAa;;AAE1D;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,MAAMC,SAAS,GAAGxB,eAAe,CAACwB,SAAS;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAGzB,eAAe,CAACyB,oBAAoB;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,GAAG1B,eAAe,CAAC0B,aAAa;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,GAAG,GAAG3B,eAAe,CAAC2B,GAAG;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAG5B,eAAe,CAAC4B,QAAQ"}
|
|
@@ -5,5 +5,5 @@ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/pri
|
|
|
5
5
|
export const {
|
|
6
6
|
lock,
|
|
7
7
|
unlock
|
|
8
|
-
} = __dangerousOptInToUnstableAPIsOnlyForCoreModules('I know using unstable features means my
|
|
8
|
+
} = __dangerousOptInToUnstableAPIsOnlyForCoreModules('I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.', '@wordpress/data');
|
|
9
9
|
//# sourceMappingURL=lock-unlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__dangerousOptInToUnstableAPIsOnlyForCoreModules","lock","unlock"],"sources":["@wordpress/data/src/lock-unlock.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my
|
|
1
|
+
{"version":3,"names":["__dangerousOptInToUnstableAPIsOnlyForCoreModules","lock","unlock"],"sources":["@wordpress/data/src/lock-unlock.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.',\n\t\t'@wordpress/data'\n\t);\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gDAAgD,QAAQ,yBAAyB;AAE1F,OAAO,MAAM;EAAEC,IAAI;EAAEC;AAAO,CAAC,GAC5BF,gDAAgD,CAC/C,iHAAiH,EACjH,iBACD,CAAC"}
|
|
@@ -200,9 +200,15 @@ export default function createReduxStore(key, options) {
|
|
|
200
200
|
selector.registry = registry;
|
|
201
201
|
}
|
|
202
202
|
const boundSelector = (...args) => {
|
|
203
|
+
args = normalize(selector, args);
|
|
203
204
|
const state = store.__unstableOriginalGetState();
|
|
204
205
|
return selector(state.root, ...args);
|
|
205
206
|
};
|
|
207
|
+
|
|
208
|
+
// Expose normalization method on the bound selector
|
|
209
|
+
// in order that it can be called when fullfilling
|
|
210
|
+
// the resolver.
|
|
211
|
+
boundSelector.__unstableNormalizeArgs = selector.__unstableNormalizeArgs;
|
|
206
212
|
const resolver = resolvers[selectorName];
|
|
207
213
|
if (!resolver) {
|
|
208
214
|
boundSelector.hasResolver = false;
|
|
@@ -210,10 +216,18 @@ export default function createReduxStore(key, options) {
|
|
|
210
216
|
}
|
|
211
217
|
return mapSelectorWithResolver(boundSelector, selectorName, resolver, store, resolversCache);
|
|
212
218
|
}
|
|
213
|
-
function bindMetadataSelector(
|
|
219
|
+
function bindMetadataSelector(metaDataSelector) {
|
|
214
220
|
const boundSelector = (...args) => {
|
|
215
221
|
const state = store.__unstableOriginalGetState();
|
|
216
|
-
|
|
222
|
+
const originalSelectorName = args && args[0];
|
|
223
|
+
const originalSelectorArgs = args && args[1];
|
|
224
|
+
const targetSelector = options?.selectors?.[originalSelectorName];
|
|
225
|
+
|
|
226
|
+
// Normalize the arguments passed to the target selector.
|
|
227
|
+
if (originalSelectorName && targetSelector) {
|
|
228
|
+
args[1] = normalize(targetSelector, originalSelectorArgs);
|
|
229
|
+
}
|
|
230
|
+
return metaDataSelector(state.metadata, ...args);
|
|
217
231
|
};
|
|
218
232
|
boundSelector.hasResolver = false;
|
|
219
233
|
return boundSelector;
|
|
@@ -484,10 +498,26 @@ function mapSelectorWithResolver(selector, selectorName, resolver, store, resolv
|
|
|
484
498
|
}, 0);
|
|
485
499
|
}
|
|
486
500
|
const selectorResolver = (...args) => {
|
|
501
|
+
args = normalize(selector, args);
|
|
487
502
|
fulfillSelector(args);
|
|
488
503
|
return selector(...args);
|
|
489
504
|
};
|
|
490
505
|
selectorResolver.hasResolver = true;
|
|
491
506
|
return selectorResolver;
|
|
492
507
|
}
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* Applies selector's normalization function to the given arguments
|
|
511
|
+
* if it exists.
|
|
512
|
+
*
|
|
513
|
+
* @param {Object} selector The selector potentially with a normalization method property.
|
|
514
|
+
* @param {Array} args selector arguments to normalize.
|
|
515
|
+
* @return {Array} Potentially normalized arguments.
|
|
516
|
+
*/
|
|
517
|
+
function normalize(selector, args) {
|
|
518
|
+
if (selector.__unstableNormalizeArgs && typeof selector.__unstableNormalizeArgs === 'function' && args?.length) {
|
|
519
|
+
return selector.__unstableNormalizeArgs(args);
|
|
520
|
+
}
|
|
521
|
+
return args;
|
|
522
|
+
}
|
|
493
523
|
//# sourceMappingURL=index.js.map
|