@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.
- package/CHANGELOG.md +12 -0
- package/LICENSE.md +1 -1
- package/README.md +68 -68
- package/build/components/async-mode-provider/context.js +1 -1
- package/build/components/async-mode-provider/index.js +8 -6
- package/build/components/async-mode-provider/index.js.map +1 -1
- package/build/components/registry-provider/index.js +8 -6
- package/build/components/registry-provider/index.js.map +1 -1
- package/build/components/use-dispatch/use-dispatch-with-map.js +3 -1
- package/build/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build/components/use-dispatch/use-dispatch.js +8 -8
- package/build/components/use-dispatch/use-dispatch.js.map +1 -1
- package/build/components/use-select/index.js +58 -43
- package/build/components/use-select/index.js.map +1 -1
- package/build/controls.js +51 -32
- package/build/controls.js.map +1 -1
- package/build/factory.js +4 -2
- package/build/factory.js.map +1 -1
- package/build/index.js +49 -47
- package/build/index.js.map +1 -1
- package/build/plugins/persistence/index.js +2 -1
- package/build/plugins/persistence/index.js.map +1 -1
- package/build/redux-store/index.js +62 -34
- package/build/redux-store/index.js.map +1 -1
- package/build/redux-store/metadata/actions.js +2 -2
- package/build/redux-store/metadata/reducer.js +8 -2
- package/build/redux-store/metadata/reducer.js.map +1 -1
- package/build/redux-store/metadata/selectors.js +8 -5
- package/build/redux-store/metadata/selectors.js.map +1 -1
- package/build/redux-store/metadata/utils.js +5 -5
- package/build/redux-store/metadata/utils.js.map +1 -1
- package/build/registry.js +81 -66
- package/build/registry.js.map +1 -1
- package/build/resolvers-cache-middleware.js +7 -4
- package/build/resolvers-cache-middleware.js.map +1 -1
- package/build/store/index.js +42 -35
- package/build/store/index.js.map +1 -1
- package/build/types.js +4 -0
- package/build/utils/emitter.js +1 -1
- package/build/utils/emitter.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js +3 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch.js +8 -8
- package/build-module/components/use-dispatch/use-dispatch.js.map +1 -1
- package/build-module/components/use-select/index.js +60 -44
- package/build-module/components/use-select/index.js.map +1 -1
- package/build-module/controls.js +50 -31
- package/build-module/controls.js.map +1 -1
- package/build-module/factory.js +3 -1
- package/build-module/factory.js.map +1 -1
- package/build-module/index.js +14 -14
- package/build-module/index.js.map +1 -1
- package/build-module/redux-store/index.js +58 -32
- package/build-module/redux-store/index.js.map +1 -1
- package/build-module/redux-store/metadata/reducer.js +8 -2
- package/build-module/redux-store/metadata/reducer.js.map +1 -1
- package/build-module/redux-store/metadata/selectors.js +6 -3
- package/build-module/redux-store/metadata/selectors.js.map +1 -1
- package/build-module/redux-store/metadata/utils.js +5 -5
- package/build-module/redux-store/metadata/utils.js.map +1 -1
- package/build-module/registry.js +81 -66
- package/build-module/registry.js.map +1 -1
- package/build-module/resolvers-cache-middleware.js +5 -4
- package/build-module/resolvers-cache-middleware.js.map +1 -1
- package/build-module/store/index.js +42 -34
- package/build-module/store/index.js.map +1 -1
- package/build-module/types.js +1 -1
- package/build-module/utils/emitter.js +1 -1
- package/build-module/utils/emitter.js.map +1 -1
- package/build-types/types.d.ts +29 -16
- package/build-types/types.d.ts.map +1 -1
- package/build-types/utils/emitter.d.ts +2 -2
- package/build-types/utils/emitter.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/components/use-dispatch/test/use-dispatch.js +1 -1
- package/src/components/use-dispatch/use-dispatch.js +9 -9
- package/src/components/use-select/index.js +61 -46
- package/src/components/use-select/test/index.js +32 -32
- package/src/controls.js +22 -22
- package/src/index.js +14 -14
- package/src/redux-store/index.js +15 -15
- package/src/registry.js +84 -75
- package/src/resolvers-cache-middleware.js +3 -3
- package/src/store/index.js +49 -48
- package/src/test/registry.js +33 -47
- package/src/types.ts +44 -16
- package/src/utils/emitter.js +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/build/store/name.js +0 -15
- package/build/store/name.js.map +0 -1
- package/build-module/store/name.js +0 -7
- package/build-module/store/name.js.map +0 -1
- package/src/store/name.js +0 -6
|
@@ -21,11 +21,11 @@ import createThunkMiddleware from './thunk-middleware';
|
|
|
21
21
|
import metadataReducer from './metadata/reducer';
|
|
22
22
|
import * as metadataSelectors from './metadata/selectors';
|
|
23
23
|
import * as metadataActions from './metadata/actions';
|
|
24
|
-
/** @typedef {import('../types').
|
|
24
|
+
/** @typedef {import('../types').DataRegistry} DataRegistry */
|
|
25
25
|
|
|
26
|
-
/** @typedef {import('../types').
|
|
26
|
+
/** @typedef {import('../types').StoreDescriptor} StoreDescriptor */
|
|
27
27
|
|
|
28
|
-
/** @typedef {import('../types').
|
|
28
|
+
/** @typedef {import('../types').ReduxStoreConfig} ReduxStoreConfig */
|
|
29
29
|
|
|
30
30
|
const trimUndefinedValues = array => {
|
|
31
31
|
const result = [...array];
|
|
@@ -69,7 +69,7 @@ function createResolversCache() {
|
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
|
-
* Creates a data store
|
|
72
|
+
* Creates a data store descriptor for the provided Redux store configuration containing
|
|
73
73
|
* properties describing reducer, actions, selectors, controls and resolvers.
|
|
74
74
|
*
|
|
75
75
|
* @example
|
|
@@ -84,12 +84,12 @@ function createResolversCache() {
|
|
|
84
84
|
* } );
|
|
85
85
|
* ```
|
|
86
86
|
*
|
|
87
|
-
* @param {string}
|
|
88
|
-
* @param {
|
|
89
|
-
*
|
|
90
|
-
*
|
|
87
|
+
* @param {string} key Unique namespace identifier.
|
|
88
|
+
* @param {ReduxStoreConfig} options Registered store options, with properties
|
|
89
|
+
* describing reducer, actions, selectors,
|
|
90
|
+
* and resolvers.
|
|
91
91
|
*
|
|
92
|
-
* @return {
|
|
92
|
+
* @return {StoreDescriptor} Store Object.
|
|
93
93
|
*/
|
|
94
94
|
|
|
95
95
|
|
|
@@ -120,13 +120,25 @@ export default function createReduxStore(key, options) {
|
|
|
120
120
|
const actions = mapActions({ ...metadataActions,
|
|
121
121
|
...options.actions
|
|
122
122
|
}, store);
|
|
123
|
-
let selectors = mapSelectors({ ...mapValues(metadataSelectors, selector => (state
|
|
123
|
+
let selectors = mapSelectors({ ...mapValues(metadataSelectors, selector => function (state) {
|
|
124
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
125
|
+
args[_key - 1] = arguments[_key];
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return selector(state.metadata, ...args);
|
|
129
|
+
}),
|
|
124
130
|
...mapValues(options.selectors, selector => {
|
|
125
131
|
if (selector.isRegistrySelector) {
|
|
126
132
|
selector.registry = registry;
|
|
127
133
|
}
|
|
128
134
|
|
|
129
|
-
return (state
|
|
135
|
+
return function (state) {
|
|
136
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
137
|
+
args[_key2 - 1] = arguments[_key2];
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return selector(state.root, ...args);
|
|
141
|
+
};
|
|
130
142
|
})
|
|
131
143
|
}, store);
|
|
132
144
|
|
|
@@ -187,12 +199,12 @@ export default function createReduxStore(key, options) {
|
|
|
187
199
|
/**
|
|
188
200
|
* Creates a redux store for a namespace.
|
|
189
201
|
*
|
|
190
|
-
* @param {string}
|
|
191
|
-
* @param {Object}
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* @param {
|
|
195
|
-
* @param {Object}
|
|
202
|
+
* @param {string} key Unique namespace identifier.
|
|
203
|
+
* @param {Object} options Registered store options, with properties
|
|
204
|
+
* describing reducer, actions, selectors,
|
|
205
|
+
* and resolvers.
|
|
206
|
+
* @param {DataRegistry} registry Registry reference.
|
|
207
|
+
* @param {Object} thunkArgs Argument object for the thunk middleware.
|
|
196
208
|
* @return {Object} Newly created redux store.
|
|
197
209
|
*/
|
|
198
210
|
|
|
@@ -277,8 +289,8 @@ function mapSelectors(selectors, store) {
|
|
|
277
289
|
|
|
278
290
|
|
|
279
291
|
function mapActions(actions, store) {
|
|
280
|
-
const createBoundAction = action => (
|
|
281
|
-
return Promise.resolve(store.dispatch(action(...
|
|
292
|
+
const createBoundAction = action => function () {
|
|
293
|
+
return Promise.resolve(store.dispatch(action(...arguments)));
|
|
282
294
|
};
|
|
283
295
|
|
|
284
296
|
return mapValues(actions, createBoundAction);
|
|
@@ -294,25 +306,31 @@ function mapActions(actions, store) {
|
|
|
294
306
|
|
|
295
307
|
|
|
296
308
|
function mapResolveSelectors(selectors, store) {
|
|
297
|
-
return mapValues(omit(selectors, ['getIsResolving', 'hasStartedResolution', 'hasFinishedResolution', 'isResolving', 'getCachedResolvers']), (selector, selectorName) => (
|
|
298
|
-
|
|
309
|
+
return mapValues(omit(selectors, ['getIsResolving', 'hasStartedResolution', 'hasFinishedResolution', 'isResolving', 'getCachedResolvers']), (selector, selectorName) => function () {
|
|
310
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
311
|
+
args[_key3] = arguments[_key3];
|
|
312
|
+
}
|
|
299
313
|
|
|
300
|
-
|
|
314
|
+
return new Promise(resolve => {
|
|
315
|
+
const hasFinished = () => selectors.hasFinishedResolution(selectorName, args);
|
|
301
316
|
|
|
317
|
+
const getResult = () => selector.apply(null, args); // trigger the selector (to trigger the resolver)
|
|
302
318
|
|
|
303
|
-
const result = getResult();
|
|
304
319
|
|
|
305
|
-
|
|
306
|
-
return resolve(result);
|
|
307
|
-
}
|
|
320
|
+
const result = getResult();
|
|
308
321
|
|
|
309
|
-
const unsubscribe = store.subscribe(() => {
|
|
310
322
|
if (hasFinished()) {
|
|
311
|
-
|
|
312
|
-
resolve(getResult());
|
|
323
|
+
return resolve(result);
|
|
313
324
|
}
|
|
325
|
+
|
|
326
|
+
const unsubscribe = store.subscribe(() => {
|
|
327
|
+
if (hasFinished()) {
|
|
328
|
+
unsubscribe();
|
|
329
|
+
resolve(getResult());
|
|
330
|
+
}
|
|
331
|
+
});
|
|
314
332
|
});
|
|
315
|
-
})
|
|
333
|
+
});
|
|
316
334
|
}
|
|
317
335
|
/**
|
|
318
336
|
* Returns resolvers with matched selectors for a given namespace.
|
|
@@ -350,7 +368,11 @@ function mapResolvers(resolvers, selectors, store, resolversCache) {
|
|
|
350
368
|
return selector;
|
|
351
369
|
}
|
|
352
370
|
|
|
353
|
-
const selectorResolver = (
|
|
371
|
+
const selectorResolver = function () {
|
|
372
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
373
|
+
args[_key4] = arguments[_key4];
|
|
374
|
+
}
|
|
375
|
+
|
|
354
376
|
async function fulfillSelector() {
|
|
355
377
|
const state = store.getState();
|
|
356
378
|
|
|
@@ -398,13 +420,17 @@ function mapResolvers(resolvers, selectors, store, resolversCache) {
|
|
|
398
420
|
*/
|
|
399
421
|
|
|
400
422
|
|
|
401
|
-
async function fulfillResolver(store, resolvers, selectorName
|
|
423
|
+
async function fulfillResolver(store, resolvers, selectorName) {
|
|
402
424
|
const resolver = get(resolvers, [selectorName]);
|
|
403
425
|
|
|
404
426
|
if (!resolver) {
|
|
405
427
|
return;
|
|
406
428
|
}
|
|
407
429
|
|
|
430
|
+
for (var _len5 = arguments.length, args = new Array(_len5 > 3 ? _len5 - 3 : 0), _key5 = 3; _key5 < _len5; _key5++) {
|
|
431
|
+
args[_key5 - 3] = arguments[_key5];
|
|
432
|
+
}
|
|
433
|
+
|
|
408
434
|
const action = resolver.fulfill(...args);
|
|
409
435
|
|
|
410
436
|
if (action) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","flowRight","get","mapValues","omit","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","builtinControls","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","createResolversCache","cache","isRunning","selectorName","args","clear","delete","markAsRunning","set","createReduxStore","key","options","name","instantiate","registry","reducer","thunkArgs","dispatch","Object","assign","action","store","getActions","select","selector","__unstableOriginalGetState","getSelectors","resolveSelect","getResolveSelectors","instantiateReduxStore","resolversCache","resolvers","actions","mapActions","selectors","mapSelectors","state","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","__experimentalUseThunks","push","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","instanceId","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","hasFinished","hasFinishedResolution","getResult","apply","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","hasStartedResolution","setTimeout","startResolution","fulfillResolver","finishResolution"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport { flowRight, get, mapValues, omit } from 'lodash';\nimport combineReducers from 'turbo-combine-reducers';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * WordPress dependencies\n */\nimport createReduxRoutineMiddleware from '@wordpress/redux-routine';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\n/** @typedef {import('../types').WPDataRegistry} WPDataRegistry */\n/** @typedef {import('../types').WPDataStore} WPDataStore */\n/** @typedef {import('../types').WPDataReduxStoreConfig} WPDataReduxStoreConfig */\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 * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store definition for the provided Redux store options 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 * @param {string} key Unique namespace identifier.\n * @param {WPDataReduxStoreConfig} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {WPDataStore} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\treturn {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( action ) => store.dispatch( action ),\n\t\t\t\t\t\tgetActions()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t\t\t\tgetSelectors()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tlet resolvers;\n\t\t\tconst actions = mapActions(\n\t\t\t\t{\n\t\t\t\t\t...metadataActions,\n\t\t\t\t\t...options.actions,\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\n\t\t\tlet selectors = mapSelectors(\n\t\t\t\t{\n\t\t\t\t\t...mapValues(\n\t\t\t\t\t\tmetadataSelectors,\n\t\t\t\t\t\t( selector ) => ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.metadata, ...args )\n\t\t\t\t\t),\n\t\t\t\t\t...mapValues( options.selectors, ( selector ) => {\n\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tconst result = mapResolvers(\n\t\t\t\t\toptions.resolvers,\n\t\t\t\t\tselectors,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t\tresolvers = result.resolvers;\n\t\t\t\tselectors = result.selectors;\n\t\t\t}\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\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 {WPDataRegistry} 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];\n\n\tif ( options.__experimentalUseThunks ) {\n\t\tmiddlewares.push( createThunkMiddleware( 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} )\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\tflowRight( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to a store.\n *\n * @param {Object} selectors Selectors to register. Keys will be used as the\n * public facing API. Selectors will get passed the\n * state as first argument.\n * @param {Object} store The store to which the selectors should be mapped.\n * @return {Object} Selectors mapped to the provided store.\n */\nfunction mapSelectors( selectors, store ) {\n\tconst createStateSelector = ( registrySelector ) => {\n\t\tconst selector = function runSelector() {\n\t\t\t// This function is an optimized implementation of:\n\t\t\t//\n\t\t\t// selector( store.getState(), ...arguments )\n\t\t\t//\n\t\t\t// Where the above would incur an `Array#concat` in its application,\n\t\t\t// the logic here instead efficiently constructs an arguments array via\n\t\t\t// direct assignment.\n\t\t\tconst argsLength = arguments.length;\n\t\t\tconst args = new Array( argsLength + 1 );\n\t\t\targs[ 0 ] = store.__unstableOriginalGetState();\n\t\t\tfor ( let i = 0; i < argsLength; i++ ) {\n\t\t\t\targs[ i + 1 ] = arguments[ i ];\n\t\t\t}\n\n\t\t\treturn registrySelector( ...args );\n\t\t};\n\t\tselector.hasResolver = false;\n\t\treturn selector;\n\t};\n\n\treturn mapValues( selectors, createStateSelector );\n}\n\n/**\n * Maps actions to dispatch from a given store.\n *\n * @param {Object} actions Actions to register.\n * @param {Object} store The redux store to which the actions should be mapped.\n *\n * @return {Object} Actions mapped to the redux store provided.\n */\nfunction mapActions( actions, store ) {\n\tconst createBoundAction = ( action ) => ( ...args ) => {\n\t\treturn Promise.resolve( store.dispatch( action( ...args ) ) );\n\t};\n\n\treturn mapValues( actions, createBoundAction );\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\treturn mapValues(\n\t\tomit( selectors, [\n\t\t\t'getIsResolving',\n\t\t\t'hasStartedResolution',\n\t\t\t'hasFinishedResolution',\n\t\t\t'isResolving',\n\t\t\t'getCachedResolvers',\n\t\t] ),\n\t\t( selector, selectorName ) => ( ...args ) =>\n\t\t\tnew Promise( ( resolve ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\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 resolve( 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\tresolve( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} )\n\t);\n}\n\n/**\n * Returns resolvers with matched selectors for a given namespace.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} resolvers Resolvers to register.\n * @param {Object} selectors The current selectors to be modified.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapResolvers( resolvers, selectors, store, resolversCache ) {\n\t// The `resolver` can be either a function that does the resolution, or, in more advanced\n\t// cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.\n\t// Here we normalize the `resolver` function to an object with `fulfill` method.\n\tconst mappedResolvers = mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // copy the enumerable properties of the resolver function\n\t\t\tfulfill: resolver, // add the fulfill method\n\t\t};\n\t} );\n\n\tconst mapSelector = ( selector, selectorName ) => {\n\t\tconst resolver = resolvers[ selectorName ];\n\t\tif ( ! resolver ) {\n\t\t\tselector.hasResolver = false;\n\t\t\treturn selector;\n\t\t}\n\n\t\tconst selectorResolver = ( ...args ) => {\n\t\t\tasync function fulfillSelector() {\n\t\t\t\tconst state = store.getState();\n\n\t\t\t\tif (\n\t\t\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\t\t\tif (\n\t\t\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\t\t\tsetTimeout( async () => {\n\t\t\t\t\tresolversCache.clear( selectorName, args );\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t\t\t);\n\t\t\t\t\tawait fulfillResolver(\n\t\t\t\t\t\tstore,\n\t\t\t\t\t\tmappedResolvers,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t...args\n\t\t\t\t\t);\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfulfillSelector( ...args );\n\t\t\treturn selector( ...args );\n\t\t};\n\t\tselectorResolver.hasResolver = true;\n\t\treturn selectorResolver;\n\t};\n\n\treturn {\n\t\tresolvers: mappedResolvers,\n\t\tselectors: mapValues( selectors, mapSelector ),\n\t};\n}\n\n/**\n * Calls a resolver given arguments\n *\n * @param {Object} store Store reference, for fulfilling via resolvers\n * @param {Object} resolvers Store Resolvers\n * @param {string} selectorName Selector name to fulfill.\n * @param {Array} args Selector Arguments.\n */\nasync function fulfillResolver( store, resolvers, selectorName, ...args ) {\n\tconst resolver = get( resolvers, [ selectorName ] );\n\tif ( ! resolver ) {\n\t\treturn;\n\t}\n\n\tconst action = resolver.fulfill( ...args );\n\tif ( action ) {\n\t\tawait store.dispatch( action );\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","flowRight","get","mapValues","omit","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","builtinControls","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","createResolversCache","cache","isRunning","selectorName","args","clear","delete","markAsRunning","set","createReduxStore","key","options","name","instantiate","registry","reducer","thunkArgs","dispatch","Object","assign","action","store","getActions","select","selector","__unstableOriginalGetState","getSelectors","resolveSelect","getResolveSelectors","instantiateReduxStore","resolversCache","resolvers","actions","mapActions","selectors","mapSelectors","state","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","__experimentalUseThunks","push","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","instanceId","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","hasFinished","hasFinishedResolution","getResult","apply","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","hasStartedResolution","setTimeout","startResolution","fulfillResolver","finishResolution"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport { flowRight, get, mapValues, omit } from 'lodash';\nimport combineReducers from 'turbo-combine-reducers';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * WordPress dependencies\n */\nimport createReduxRoutineMiddleware from '@wordpress/redux-routine';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/** @typedef {import('../types').StoreDescriptor} StoreDescriptor */\n/** @typedef {import('../types').ReduxStoreConfig} ReduxStoreConfig */\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 * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\treturn {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( action ) => store.dispatch( action ),\n\t\t\t\t\t\tgetActions()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t\t\t\tgetSelectors()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tlet resolvers;\n\t\t\tconst actions = mapActions(\n\t\t\t\t{\n\t\t\t\t\t...metadataActions,\n\t\t\t\t\t...options.actions,\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\n\t\t\tlet selectors = mapSelectors(\n\t\t\t\t{\n\t\t\t\t\t...mapValues(\n\t\t\t\t\t\tmetadataSelectors,\n\t\t\t\t\t\t( selector ) => ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.metadata, ...args )\n\t\t\t\t\t),\n\t\t\t\t\t...mapValues( options.selectors, ( selector ) => {\n\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tconst result = mapResolvers(\n\t\t\t\t\toptions.resolvers,\n\t\t\t\t\tselectors,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t\tresolvers = result.resolvers;\n\t\t\t\tselectors = result.selectors;\n\t\t\t}\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\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];\n\n\tif ( options.__experimentalUseThunks ) {\n\t\tmiddlewares.push( createThunkMiddleware( 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} )\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\tflowRight( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to a store.\n *\n * @param {Object} selectors Selectors to register. Keys will be used as the\n * public facing API. Selectors will get passed the\n * state as first argument.\n * @param {Object} store The store to which the selectors should be mapped.\n * @return {Object} Selectors mapped to the provided store.\n */\nfunction mapSelectors( selectors, store ) {\n\tconst createStateSelector = ( registrySelector ) => {\n\t\tconst selector = function runSelector() {\n\t\t\t// This function is an optimized implementation of:\n\t\t\t//\n\t\t\t// selector( store.getState(), ...arguments )\n\t\t\t//\n\t\t\t// Where the above would incur an `Array#concat` in its application,\n\t\t\t// the logic here instead efficiently constructs an arguments array via\n\t\t\t// direct assignment.\n\t\t\tconst argsLength = arguments.length;\n\t\t\tconst args = new Array( argsLength + 1 );\n\t\t\targs[ 0 ] = store.__unstableOriginalGetState();\n\t\t\tfor ( let i = 0; i < argsLength; i++ ) {\n\t\t\t\targs[ i + 1 ] = arguments[ i ];\n\t\t\t}\n\n\t\t\treturn registrySelector( ...args );\n\t\t};\n\t\tselector.hasResolver = false;\n\t\treturn selector;\n\t};\n\n\treturn mapValues( selectors, createStateSelector );\n}\n\n/**\n * Maps actions to dispatch from a given store.\n *\n * @param {Object} actions Actions to register.\n * @param {Object} store The redux store to which the actions should be mapped.\n *\n * @return {Object} Actions mapped to the redux store provided.\n */\nfunction mapActions( actions, store ) {\n\tconst createBoundAction = ( action ) => ( ...args ) => {\n\t\treturn Promise.resolve( store.dispatch( action( ...args ) ) );\n\t};\n\n\treturn mapValues( actions, createBoundAction );\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\treturn mapValues(\n\t\tomit( selectors, [\n\t\t\t'getIsResolving',\n\t\t\t'hasStartedResolution',\n\t\t\t'hasFinishedResolution',\n\t\t\t'isResolving',\n\t\t\t'getCachedResolvers',\n\t\t] ),\n\t\t( selector, selectorName ) => ( ...args ) =>\n\t\t\tnew Promise( ( resolve ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\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 resolve( 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\tresolve( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} )\n\t);\n}\n\n/**\n * Returns resolvers with matched selectors for a given namespace.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} resolvers Resolvers to register.\n * @param {Object} selectors The current selectors to be modified.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapResolvers( resolvers, selectors, store, resolversCache ) {\n\t// The `resolver` can be either a function that does the resolution, or, in more advanced\n\t// cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.\n\t// Here we normalize the `resolver` function to an object with `fulfill` method.\n\tconst mappedResolvers = mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // copy the enumerable properties of the resolver function\n\t\t\tfulfill: resolver, // add the fulfill method\n\t\t};\n\t} );\n\n\tconst mapSelector = ( selector, selectorName ) => {\n\t\tconst resolver = resolvers[ selectorName ];\n\t\tif ( ! resolver ) {\n\t\t\tselector.hasResolver = false;\n\t\t\treturn selector;\n\t\t}\n\n\t\tconst selectorResolver = ( ...args ) => {\n\t\t\tasync function fulfillSelector() {\n\t\t\t\tconst state = store.getState();\n\n\t\t\t\tif (\n\t\t\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\t\t\tif (\n\t\t\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\t\t\tsetTimeout( async () => {\n\t\t\t\t\tresolversCache.clear( selectorName, args );\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t\t\t);\n\t\t\t\t\tawait fulfillResolver(\n\t\t\t\t\t\tstore,\n\t\t\t\t\t\tmappedResolvers,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t...args\n\t\t\t\t\t);\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfulfillSelector( ...args );\n\t\t\treturn selector( ...args );\n\t\t};\n\t\tselectorResolver.hasResolver = true;\n\t\treturn selectorResolver;\n\t};\n\n\treturn {\n\t\tresolvers: mappedResolvers,\n\t\tselectors: mapValues( selectors, mapSelector ),\n\t};\n}\n\n/**\n * Calls a resolver given arguments\n *\n * @param {Object} store Store reference, for fulfilling via resolvers\n * @param {Object} resolvers Store Resolvers\n * @param {string} selectorName Selector name to fulfill.\n * @param {Array} args Selector Arguments.\n */\nasync function fulfillResolver( store, resolvers, selectorName, ...args ) {\n\tconst resolver = get( resolvers, [ selectorName ] );\n\tif ( ! resolver ) {\n\t\treturn;\n\t}\n\n\tconst action = resolver.fulfill( ...args );\n\tif ( action ) {\n\t\tawait store.dispatch( action );\n\t}\n}\n"]}
|
|
@@ -15,7 +15,10 @@ import { onSubKey } from './utils';
|
|
|
15
15
|
*
|
|
16
16
|
* selectorName -> EquivalentKeyMap<Array,boolean>
|
|
17
17
|
*/
|
|
18
|
-
const subKeysIsResolved = onSubKey('selectorName')(
|
|
18
|
+
const subKeysIsResolved = onSubKey('selectorName')(function () {
|
|
19
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new EquivalentKeyMap();
|
|
20
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
21
|
+
|
|
19
22
|
switch (action.type) {
|
|
20
23
|
case 'START_RESOLUTION':
|
|
21
24
|
case 'FINISH_RESOLUTION':
|
|
@@ -60,7 +63,10 @@ const subKeysIsResolved = onSubKey('selectorName')((state = new EquivalentKeyMap
|
|
|
60
63
|
* @return Next state.
|
|
61
64
|
*/
|
|
62
65
|
|
|
63
|
-
const isResolved = (
|
|
66
|
+
const isResolved = function () {
|
|
67
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
68
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
69
|
+
|
|
64
70
|
switch (action.type) {
|
|
65
71
|
case 'INVALIDATE_RESOLUTION_FOR_STORE':
|
|
66
72
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/reducer.ts"],"names":["omit","has","EquivalentKeyMap","onSubKey","subKeysIsResolved","state","action","type","isStarting","nextState","set","args","resolutionArgs","delete","isResolved","selectorName"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,IAAT,EAAeC,GAAf,QAA0B,QAA1B;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;;AAGA;AACA;AACA;AACA,SAASC,QAAT,QAAyB,SAAzB;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,iBAA6D,GAAGD,QAAQ,CAG3E,cAH2E,CAAR,CAGjD,
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/reducer.ts"],"names":["omit","has","EquivalentKeyMap","onSubKey","subKeysIsResolved","state","action","type","isStarting","nextState","set","args","resolutionArgs","delete","isResolved","selectorName"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,IAAT,EAAeC,GAAf,QAA0B,QAA1B;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;;AAGA;AACA;AACA;AACA,SAASC,QAAT,QAAyB,SAAzB;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,iBAA6D,GAAGD,QAAQ,CAG3E,cAH2E,CAAR,CAGjD,YAAsD;AAAA,MAApDE,KAAoD,uEAA5C,IAAIH,gBAAJ,EAA4C;AAAA,MAApBI,MAAoB;;AAC1E,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,kBAAL;AACA,SAAK,mBAAL;AAA0B;AACzB,cAAMC,UAAU,GAAGF,MAAM,CAACC,IAAP,KAAgB,kBAAnC;AACA,cAAME,SAAS,GAAG,IAAIP,gBAAJ,CAAsBG,KAAtB,CAAlB;AACAI,QAAAA,SAAS,CAACC,GAAV,CAAeJ,MAAM,CAACK,IAAtB,EAA4BH,UAA5B;AACA,eAAOC,SAAP;AACA;;AACD,SAAK,mBAAL;AACA,SAAK,oBAAL;AAA2B;AAC1B,cAAMD,UAAU,GAAGF,MAAM,CAACC,IAAP,KAAgB,mBAAnC;AACA,cAAME,SAAS,GAAG,IAAIP,gBAAJ,CAAsBG,KAAtB,CAAlB;;AACA,aAAM,MAAMO,cAAZ,IAA8BN,MAAM,CAACK,IAArC,EAA4C;AAC3CF,UAAAA,SAAS,CAACC,GAAV,CAAeE,cAAf,EAA+BJ,UAA/B;AACA;;AACD,eAAOC,SAAP;AACA;;AACD,SAAK,uBAAL;AAA8B;AAC7B,cAAMA,SAAS,GAAG,IAAIP,gBAAJ,CAAsBG,KAAtB,CAAlB;AACAI,QAAAA,SAAS,CAACI,MAAV,CAAkBP,MAAM,CAACK,IAAzB;AACA,eAAOF,SAAP;AACA;AArBF;;AAuBA,SAAOJ,KAAP;AACA,CA5BqE,CAAtE;AA8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMS,UAAU,GAAG,YAA2D;AAAA,MAAzDT,KAAyD,uEAAxB,EAAwB;AAAA,MAApBC,MAAoB;;AAC7E,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,iCAAL;AACC,aAAO,EAAP;;AACD,SAAK,0CAAL;AACC,aAAON,GAAG,CAAEI,KAAF,EAAS,CAAEC,MAAM,CAACS,YAAT,CAAT,CAAH,GACJf,IAAI,CAAEK,KAAF,EAAS,CAAEC,MAAM,CAACS,YAAT,CAAT,CADA,GAEJV,KAFH;;AAGD,SAAK,kBAAL;AACA,SAAK,mBAAL;AACA,SAAK,mBAAL;AACA,SAAK,oBAAL;AACA,SAAK,uBAAL;AACC,aAAOD,iBAAiB,CAAEC,KAAF,EAASC,MAAT,CAAxB;AAZF;;AAcA,SAAOD,KAAP;AACA,CAhBD;;AAkBA,eAAeS,UAAf","sourcesContent":["/**\n * External dependencies\n */\nimport { omit, has } from 'lodash';\nimport EquivalentKeyMap from 'equivalent-key-map';\nimport type { Reducer } from 'redux';\n\n/**\n * Internal dependencies\n */\nimport { onSubKey } from './utils';\n\ntype Action =\n\t| ReturnType< typeof import('./actions').startResolution >\n\t| ReturnType< typeof import('./actions').finishResolution >\n\t| ReturnType< typeof import('./actions').startResolutions >\n\t| ReturnType< typeof import('./actions').finishResolutions >\n\t| ReturnType< typeof import('./actions').invalidateResolution >\n\t| ReturnType< typeof import('./actions').invalidateResolutionForStore >\n\t| ReturnType<\n\t\t\ttypeof import('./actions').invalidateResolutionForStoreSelector\n\t >;\n\nexport type State = EquivalentKeyMap< unknown[] | unknown, boolean >;\n\n/**\n * Reducer function returning next state for selector resolution of\n * subkeys, object form:\n *\n * selectorName -> EquivalentKeyMap<Array,boolean>\n */\nconst subKeysIsResolved: Reducer< Record< string, State >, Action > = onSubKey<\n\tState,\n\tAction\n>( 'selectorName' )( ( state = new EquivalentKeyMap(), action: Action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'START_RESOLUTION':\n\t\tcase 'FINISH_RESOLUTION': {\n\t\t\tconst isStarting = action.type === 'START_RESOLUTION';\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.set( action.args, isStarting );\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'START_RESOLUTIONS':\n\t\tcase 'FINISH_RESOLUTIONS': {\n\t\t\tconst isStarting = action.type === 'START_RESOLUTIONS';\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tfor ( const resolutionArgs of action.args ) {\n\t\t\t\tnextState.set( resolutionArgs, isStarting );\n\t\t\t}\n\t\t\treturn nextState;\n\t\t}\n\t\tcase 'INVALIDATE_RESOLUTION': {\n\t\t\tconst nextState = new EquivalentKeyMap( state );\n\t\t\tnextState.delete( action.args );\n\t\t\treturn nextState;\n\t\t}\n\t}\n\treturn state;\n} );\n\n/**\n * Reducer function returning next state for selector resolution, object form:\n *\n * selectorName -> EquivalentKeyMap<Array, boolean>\n *\n * @param state Current state.\n * @param action Dispatched action.\n *\n * @return Next state.\n */\nconst isResolved = ( state: Record< string, State > = {}, action: Action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'INVALIDATE_RESOLUTION_FOR_STORE':\n\t\t\treturn {};\n\t\tcase 'INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR':\n\t\t\treturn has( state, [ action.selectorName ] )\n\t\t\t\t? omit( state, [ action.selectorName ] )\n\t\t\t\t: state;\n\t\tcase 'START_RESOLUTION':\n\t\tcase 'FINISH_RESOLUTION':\n\t\tcase 'START_RESOLUTIONS':\n\t\tcase 'FINISH_RESOLUTIONS':\n\t\tcase 'INVALIDATE_RESOLUTION':\n\t\t\treturn subKeysIsResolved( state, action );\n\t}\n\treturn state;\n};\n\nexport default isResolved;\n"]}
|
|
@@ -37,7 +37,8 @@ export function getIsResolving(state, selectorName, args) {
|
|
|
37
37
|
* @return {boolean} Whether resolution has been triggered.
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
|
-
export function hasStartedResolution(state, selectorName
|
|
40
|
+
export function hasStartedResolution(state, selectorName) {
|
|
41
|
+
let args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
41
42
|
return getIsResolving(state, selectorName, args) !== undefined;
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
@@ -51,7 +52,8 @@ export function hasStartedResolution(state, selectorName, args = []) {
|
|
|
51
52
|
* @return {boolean} Whether resolution has completed.
|
|
52
53
|
*/
|
|
53
54
|
|
|
54
|
-
export function hasFinishedResolution(state, selectorName
|
|
55
|
+
export function hasFinishedResolution(state, selectorName) {
|
|
56
|
+
let args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
55
57
|
return getIsResolving(state, selectorName, args) === false;
|
|
56
58
|
}
|
|
57
59
|
/**
|
|
@@ -65,7 +67,8 @@ export function hasFinishedResolution(state, selectorName, args = []) {
|
|
|
65
67
|
* @return {boolean} Whether resolution is in progress.
|
|
66
68
|
*/
|
|
67
69
|
|
|
68
|
-
export function isResolving(state, selectorName
|
|
70
|
+
export function isResolving(state, selectorName) {
|
|
71
|
+
let args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
69
72
|
return getIsResolving(state, selectorName, args) === true;
|
|
70
73
|
}
|
|
71
74
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/selectors.js"],"names":["get","getIsResolving","state","selectorName","args","map","undefined","hasStartedResolution","hasFinishedResolution","isResolving","getCachedResolvers"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,GAAT,QAAoB,QAApB;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,cAAT,CAAyBC,KAAzB,EAAgCC,YAAhC,EAA8CC,IAA9C,EAAqD;AAC3D,QAAMC,GAAG,GAAGL,GAAG,CAAEE,KAAF,EAAS,CAAEC,YAAF,CAAT,CAAf;;AACA,MAAK,CAAEE,GAAP,EAAa;AACZ,WAAOC,SAAP;AACA;;AAED,SAAOD,GAAG,CAACL,GAAJ,CAASI,IAAT,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASG,oBAAT,CAA+BL,KAA/B,EAAsCC,YAAtC,
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/selectors.js"],"names":["get","getIsResolving","state","selectorName","args","map","undefined","hasStartedResolution","hasFinishedResolution","isResolving","getCachedResolvers"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,GAAT,QAAoB,QAApB;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,cAAT,CAAyBC,KAAzB,EAAgCC,YAAhC,EAA8CC,IAA9C,EAAqD;AAC3D,QAAMC,GAAG,GAAGL,GAAG,CAAEE,KAAF,EAAS,CAAEC,YAAF,CAAT,CAAf;;AACA,MAAK,CAAEE,GAAP,EAAa;AACZ,WAAOC,SAAP;AACA;;AAED,SAAOD,GAAG,CAACL,GAAJ,CAASI,IAAT,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASG,oBAAT,CAA+BL,KAA/B,EAAsCC,YAAtC,EAAgE;AAAA,MAAZC,IAAY,uEAAL,EAAK;AACtE,SAAOH,cAAc,CAAEC,KAAF,EAASC,YAAT,EAAuBC,IAAvB,CAAd,KAAgDE,SAAvD;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASE,qBAAT,CAAgCN,KAAhC,EAAuCC,YAAvC,EAAiE;AAAA,MAAZC,IAAY,uEAAL,EAAK;AACvE,SAAOH,cAAc,CAAEC,KAAF,EAASC,YAAT,EAAuBC,IAAvB,CAAd,KAAgD,KAAvD;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASK,WAAT,CAAsBP,KAAtB,EAA6BC,YAA7B,EAAuD;AAAA,MAAZC,IAAY,uEAAL,EAAK;AAC7D,SAAOH,cAAc,CAAEC,KAAF,EAASC,YAAT,EAAuBC,IAAvB,CAAd,KAAgD,IAAvD;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASM,kBAAT,CAA6BR,KAA7B,EAAqC;AAC3C,SAAOA,KAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { get } from 'lodash';\n\n/** @typedef {Record<string, import('./reducer').State>} State */\n\n/**\n * Returns the raw `isResolving` value for a given selector name,\n * and arguments set. May be undefined if the selector has never been resolved\n * or not resolved for the given set of arguments, otherwise true or false for\n * resolution started and completed respectively.\n *\n * @param {State} state Data state.\n * @param {string} selectorName Selector name.\n * @param {unknown[]} args Arguments passed to selector.\n *\n * @return {boolean | undefined} isResolving value.\n */\nexport function getIsResolving( state, selectorName, args ) {\n\tconst map = get( state, [ selectorName ] );\n\tif ( ! map ) {\n\t\treturn undefined;\n\t}\n\n\treturn map.get( args );\n}\n\n/**\n * Returns true if resolution has already been triggered for a given\n * selector name, and arguments set.\n *\n * @param {State} state Data state.\n * @param {string} selectorName Selector name.\n * @param {unknown[]} [args] Arguments passed to selector (default `[]`).\n *\n * @return {boolean} Whether resolution has been triggered.\n */\nexport function hasStartedResolution( state, selectorName, args = [] ) {\n\treturn getIsResolving( state, selectorName, args ) !== undefined;\n}\n\n/**\n * Returns true if resolution has completed for a given selector\n * name, and arguments set.\n *\n * @param {State} state Data state.\n * @param {string} selectorName Selector name.\n * @param {unknown[]} [args] Arguments passed to selector.\n *\n * @return {boolean} Whether resolution has completed.\n */\nexport function hasFinishedResolution( state, selectorName, args = [] ) {\n\treturn getIsResolving( state, selectorName, args ) === false;\n}\n\n/**\n * Returns true if resolution has been triggered but has not yet completed for\n * a given selector name, and arguments set.\n *\n * @param {State} state Data state.\n * @param {string} selectorName Selector name.\n * @param {unknown[]} [args] Arguments passed to selector.\n *\n * @return {boolean} Whether resolution is in progress.\n */\nexport function isResolving( state, selectorName, args = [] ) {\n\treturn getIsResolving( state, selectorName, args ) === true;\n}\n\n/**\n * Returns the list of the cached resolvers.\n *\n * @param {State} state Data state.\n *\n * @return {State} Resolvers mapped by args and selectorName.\n */\nexport function getCachedResolvers( state ) {\n\treturn state;\n}\n"]}
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @return {(reducer: import('redux').Reducer<TState, TAction>) => import('redux').Reducer<Record<string, TState>, TAction>} Higher-order reducer.
|
|
11
11
|
*/
|
|
12
|
-
export const onSubKey = actionProperty => reducer => (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
export const onSubKey = actionProperty => reducer => function () {
|
|
13
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] :
|
|
14
|
+
/** @type {Record<string, TState>} */
|
|
15
|
+
{};
|
|
16
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
17
17
|
// Retrieve subkey from action. Do not track if undefined; useful for cases
|
|
18
18
|
// where reducer is scoped by action shape.
|
|
19
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/utils.js"],"names":["onSubKey","actionProperty","reducer","state","action","key","undefined","nextKeyState"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,QAAQ,GAAKC,cAAF,IAAwBC,OAAF,IAAe;
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/metadata/utils.js"],"names":["onSubKey","actionProperty","reducer","state","action","key","undefined","nextKeyState"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,QAAQ,GAAKC,cAAF,IAAwBC,OAAF,IAAe,YAIxD;AAAA,MAFJC,KAEI;AAFI;AAAwC,IAE5C;AAAA,MADJC,MACI;AACJ;AACA;;AACA;;AACA;AACA,QAAMC,GAAG,GAAGD,MAAM,CAAEH,cAAF,CAAlB;;AACA,MAAKI,GAAG,KAAKC,SAAb,EAAyB;AACxB,WAAOH,KAAP;AACA,GARG,CAUJ;AACA;;;AACA,QAAMI,YAAY,GAAGL,OAAO,CAAEC,KAAK,CAAEE,GAAF,CAAP,EAAgBD,MAAhB,CAA5B;;AACA,MAAKG,YAAY,KAAKJ,KAAK,CAAEE,GAAF,CAA3B,EAAqC;AACpC,WAAOF,KAAP;AACA;;AAED,SAAO,EACN,GAAGA,KADG;AAEN,KAAEE,GAAF,GAASE;AAFH,GAAP;AAIA,CAzBM","sourcesContent":["/**\n * Higher-order reducer creator which creates a combined reducer object, keyed\n * by a property on the action object.\n *\n * @template {any} TState\n * @template {import('redux').AnyAction} TAction\n *\n * @param {string} actionProperty Action property by which to key object.\n *\n * @return {(reducer: import('redux').Reducer<TState, TAction>) => import('redux').Reducer<Record<string, TState>, TAction>} Higher-order reducer.\n */\nexport const onSubKey = ( actionProperty ) => ( reducer ) => (\n\t/* eslint-disable jsdoc/no-undefined-types */\n\tstate = /** @type {Record<string, TState>} */ ( {} ),\n\taction\n) => {\n\t// Retrieve subkey from action. Do not track if undefined; useful for cases\n\t// where reducer is scoped by action shape.\n\t/** @type {keyof state} */\n\t/* eslint-enable jsdoc/no-undefined-types */\n\tconst key = action[ actionProperty ];\n\tif ( key === undefined ) {\n\t\treturn state;\n\t}\n\n\t// Avoid updating state if unchanged. Note that this also accounts for a\n\t// reducer which returns undefined on a key which is not yet tracked.\n\tconst nextKeyState = reducer( state[ key ], action );\n\tif ( nextKeyState === state[ key ] ) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\t...state,\n\t\t[ key ]: nextKeyState,\n\t};\n};\n"]}
|