@wordpress/data 9.4.0 → 9.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/components/use-dispatch/use-dispatch-with-map.js +2 -6
- package/build/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build/components/use-select/index.js +1 -1
- package/build/components/use-select/index.js.map +1 -1
- package/build/components/with-dispatch/index.js +3 -5
- package/build/components/with-dispatch/index.js.map +1 -1
- package/build/components/with-registry/index.js +2 -6
- package/build/components/with-registry/index.js.map +1 -1
- package/build/components/with-select/index.js +3 -3
- package/build/components/with-select/index.js.map +1 -1
- package/build/controls.js +18 -37
- package/build/controls.js.map +1 -1
- package/build/factory.js +2 -4
- package/build/factory.js.map +1 -1
- package/build/{private-apis.js → lock-unlock.js} +1 -1
- package/build/lock-unlock.js.map +1 -0
- package/build/redux-store/index.js +140 -204
- package/build/redux-store/index.js.map +1 -1
- package/build/redux-store/metadata/reducer.js +2 -8
- package/build/redux-store/metadata/reducer.js.map +1 -1
- package/build/redux-store/metadata/selectors.js +5 -15
- package/build/redux-store/metadata/selectors.js.map +1 -1
- package/build/redux-store/metadata/utils.js +1 -3
- package/build/redux-store/metadata/utils.js.map +1 -1
- package/build/registry.js +14 -24
- package/build/registry.js.map +1 -1
- package/build/resolvers-cache-middleware.js +3 -6
- package/build/resolvers-cache-middleware.js.map +1 -1
- package/build/store/index.js +2 -10
- package/build/store/index.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js +2 -6
- package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build-module/components/use-select/index.js +1 -1
- package/build-module/components/use-select/index.js.map +1 -1
- package/build-module/components/with-dispatch/index.js +3 -2
- package/build-module/components/with-dispatch/index.js.map +1 -1
- package/build-module/components/with-registry/index.js +2 -3
- package/build-module/components/with-registry/index.js.map +1 -1
- package/build-module/components/with-select/index.js +3 -2
- package/build-module/components/with-select/index.js.map +1 -1
- package/build-module/controls.js +18 -37
- package/build-module/controls.js.map +1 -1
- package/build-module/factory.js +2 -4
- package/build-module/factory.js.map +1 -1
- package/build-module/{private-apis.js → lock-unlock.js} +1 -1
- package/build-module/lock-unlock.js.map +1 -0
- package/build-module/redux-store/index.js +138 -202
- package/build-module/redux-store/index.js.map +1 -1
- package/build-module/redux-store/metadata/reducer.js +2 -8
- package/build-module/redux-store/metadata/reducer.js.map +1 -1
- package/build-module/redux-store/metadata/selectors.js +5 -15
- package/build-module/redux-store/metadata/selectors.js.map +1 -1
- package/build-module/redux-store/metadata/utils.js +1 -3
- package/build-module/redux-store/metadata/utils.js.map +1 -1
- package/build-module/registry.js +9 -19
- package/build-module/registry.js.map +1 -1
- package/build-module/resolvers-cache-middleware.js +3 -6
- package/build-module/resolvers-cache-middleware.js.map +1 -1
- package/build-module/store/index.js +2 -10
- package/build-module/store/index.js.map +1 -1
- package/build-types/{private-apis.d.ts → lock-unlock.d.ts} +1 -1
- package/build-types/lock-unlock.d.ts.map +1 -0
- package/build-types/redux-store/index.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/factory.js +1 -1
- package/src/redux-store/index.js +170 -224
- package/src/registry.js +1 -1
- package/src/test/privateAPIs.js +118 -11
- package/tsconfig.tsbuildinfo +1 -1
- package/build/private-apis.js.map +0 -1
- package/build-module/private-apis.js.map +0 -1
- package/build-types/private-apis.d.ts.map +0 -1
- /package/src/{private-apis.js → lock-unlock.js} +0 -0
|
@@ -15,7 +15,7 @@ import { compose } from '@wordpress/compose';
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { builtinControls } from '../controls';
|
|
18
|
-
import { lock } from '../
|
|
18
|
+
import { lock } from '../lock-unlock';
|
|
19
19
|
import promise from '../promise-middleware';
|
|
20
20
|
import createResolversCacheMiddleware from '../resolvers-cache-middleware';
|
|
21
21
|
import createThunkMiddleware from './thunk-middleware';
|
|
@@ -57,12 +57,7 @@ const trimUndefinedValues = array => {
|
|
|
57
57
|
*/
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
const mapValues = (obj, callback) => Object.entries(obj !== null && obj !== void 0 ? obj : {}).
|
|
61
|
-
let [key, value] = _ref;
|
|
62
|
-
return { ...acc,
|
|
63
|
-
[key]: callback(value, key)
|
|
64
|
-
};
|
|
65
|
-
}, {}); // Convert Map objects to plain objects
|
|
60
|
+
const mapValues = (obj, callback) => Object.fromEntries(Object.entries(obj !== null && obj !== void 0 ? obj : {}).map(([key, value]) => [key, callback(value, key)])); // Convert Map objects to plain objects
|
|
66
61
|
|
|
67
62
|
|
|
68
63
|
const mapToObject = (key, state) => {
|
|
@@ -102,6 +97,23 @@ function createResolversCache() {
|
|
|
102
97
|
|
|
103
98
|
};
|
|
104
99
|
}
|
|
100
|
+
|
|
101
|
+
function createBindingCache(bind) {
|
|
102
|
+
const cache = new WeakMap();
|
|
103
|
+
return {
|
|
104
|
+
get(item) {
|
|
105
|
+
let boundItem = cache.get(item);
|
|
106
|
+
|
|
107
|
+
if (!boundItem) {
|
|
108
|
+
boundItem = bind(item);
|
|
109
|
+
cache.set(item, boundItem);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return boundItem;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
};
|
|
116
|
+
}
|
|
105
117
|
/**
|
|
106
118
|
* Creates a data store descriptor for the provided Redux store configuration containing
|
|
107
119
|
* properties describing reducer, actions, selectors, controls and resolvers.
|
|
@@ -151,11 +163,11 @@ export default function createReduxStore(key, options) {
|
|
|
151
163
|
registry,
|
|
152
164
|
|
|
153
165
|
get dispatch() {
|
|
154
|
-
return
|
|
166
|
+
return thunkActions;
|
|
155
167
|
},
|
|
156
168
|
|
|
157
169
|
get select() {
|
|
158
|
-
return
|
|
170
|
+
return thunkSelectors;
|
|
159
171
|
},
|
|
160
172
|
|
|
161
173
|
get resolveSelect() {
|
|
@@ -168,60 +180,79 @@ export default function createReduxStore(key, options) {
|
|
|
168
180
|
|
|
169
181
|
lock(store, privateRegistrationFunctions);
|
|
170
182
|
const resolversCache = createResolversCache();
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
...
|
|
174
|
-
}
|
|
175
|
-
|
|
183
|
+
|
|
184
|
+
function bindAction(action) {
|
|
185
|
+
return (...args) => Promise.resolve(store.dispatch(action(...args)));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const actions = { ...mapValues(metadataActions, bindAction),
|
|
189
|
+
...mapValues(options.actions, bindAction)
|
|
190
|
+
};
|
|
191
|
+
const boundPrivateActions = createBindingCache(bindAction);
|
|
192
|
+
const allActions = new Proxy(() => {}, {
|
|
176
193
|
get: (target, prop) => {
|
|
177
|
-
|
|
194
|
+
const privateAction = privateActions[prop];
|
|
195
|
+
return privateAction ? boundPrivateActions.get(privateAction) : actions[prop];
|
|
178
196
|
}
|
|
179
|
-
})
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
197
|
+
});
|
|
198
|
+
const thunkActions = new Proxy(allActions, {
|
|
199
|
+
apply: (target, thisArg, [action]) => store.dispatch(action)
|
|
200
|
+
});
|
|
201
|
+
lock(actions, allActions);
|
|
202
|
+
|
|
203
|
+
function bindSelector(selector) {
|
|
204
|
+
if (selector.isRegistrySelector) {
|
|
205
|
+
selector.registry = registry;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const boundSelector = (...args) => {
|
|
209
|
+
const state = store.__unstableOriginalGetState();
|
|
210
|
+
|
|
211
|
+
return selector(state.root, ...args);
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
boundSelector.hasResolver = false;
|
|
215
|
+
return boundSelector;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function bindMetadataSelector(selector) {
|
|
219
|
+
const boundSelector = (...args) => {
|
|
220
|
+
const state = store.__unstableOriginalGetState();
|
|
184
221
|
|
|
185
222
|
return selector(state.metadata, ...args);
|
|
186
|
-
}
|
|
187
|
-
...mapValues(options.selectors, selector => {
|
|
188
|
-
if (selector.isRegistrySelector) {
|
|
189
|
-
selector.registry = registry;
|
|
190
|
-
}
|
|
223
|
+
};
|
|
191
224
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
225
|
+
boundSelector.hasResolver = false;
|
|
226
|
+
return boundSelector;
|
|
227
|
+
}
|
|
196
228
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
lock(selectors, new Proxy(privateSelectors, {
|
|
202
|
-
get: (target, prop) => {
|
|
203
|
-
return mapSelectors(mapValues(privateSelectors, selector => {
|
|
204
|
-
if (selector.isRegistrySelector) {
|
|
205
|
-
selector.registry = registry;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return function (state) {
|
|
209
|
-
for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
|
|
210
|
-
args[_key3 - 1] = arguments[_key3];
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return selector(state.root, ...args);
|
|
214
|
-
};
|
|
215
|
-
}), store)[prop] || selectors[prop];
|
|
216
|
-
}
|
|
217
|
-
}));
|
|
229
|
+
let selectors = { ...mapValues(metadataSelectors, bindMetadataSelector),
|
|
230
|
+
...mapValues(options.selectors, bindSelector)
|
|
231
|
+
};
|
|
232
|
+
let resolvers;
|
|
218
233
|
|
|
219
234
|
if (options.resolvers) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
selectors = result.selectors;
|
|
235
|
+
resolvers = mapResolvers(options.resolvers);
|
|
236
|
+
selectors = mapSelectorsWithResolvers(selectors, resolvers, store, resolversCache);
|
|
223
237
|
}
|
|
224
238
|
|
|
239
|
+
const boundPrivateSelectors = createBindingCache(bindSelector); // Pre-bind the private selectors that have been registered by the time of
|
|
240
|
+
// instantiation, so that registry selectors are bound to the registry.
|
|
241
|
+
|
|
242
|
+
for (const privateSelector of Object.values(privateSelectors)) {
|
|
243
|
+
boundPrivateSelectors.get(privateSelector);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const allSelectors = new Proxy(() => {}, {
|
|
247
|
+
get: (target, prop) => {
|
|
248
|
+
const privateSelector = privateSelectors[prop];
|
|
249
|
+
return privateSelector ? boundPrivateSelectors.get(privateSelector) : selectors[prop];
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
const thunkSelectors = new Proxy(allSelectors, {
|
|
253
|
+
apply: (target, thisArg, [selector]) => selector(store.__unstableOriginalGetState())
|
|
254
|
+
});
|
|
255
|
+
lock(selectors, allSelectors);
|
|
225
256
|
const resolveSelectors = mapResolveSelectors(selectors, store);
|
|
226
257
|
const suspendSelectors = mapSuspendSelectors(selectors, store);
|
|
227
258
|
|
|
@@ -321,61 +352,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
|
|
|
321
352
|
root: initialState
|
|
322
353
|
}, compose(enhancers));
|
|
323
354
|
}
|
|
324
|
-
/**
|
|
325
|
-
* Maps selectors to a store.
|
|
326
|
-
*
|
|
327
|
-
* @param {Object} selectors Selectors to register. Keys will be used as the
|
|
328
|
-
* public facing API. Selectors will get passed the
|
|
329
|
-
* state as first argument.
|
|
330
|
-
* @param {Object} store The store to which the selectors should be mapped.
|
|
331
|
-
* @return {Object} Selectors mapped to the provided store.
|
|
332
|
-
*/
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
function mapSelectors(selectors, store) {
|
|
336
|
-
const createStateSelector = registrySelector => {
|
|
337
|
-
const selector = function runSelector() {
|
|
338
|
-
// This function is an optimized implementation of:
|
|
339
|
-
//
|
|
340
|
-
// selector( store.getState(), ...arguments )
|
|
341
|
-
//
|
|
342
|
-
// Where the above would incur an `Array#concat` in its application,
|
|
343
|
-
// the logic here instead efficiently constructs an arguments array via
|
|
344
|
-
// direct assignment.
|
|
345
|
-
const argsLength = arguments.length;
|
|
346
|
-
const args = new Array(argsLength + 1);
|
|
347
|
-
args[0] = store.__unstableOriginalGetState();
|
|
348
|
-
|
|
349
|
-
for (let i = 0; i < argsLength; i++) {
|
|
350
|
-
args[i + 1] = arguments[i];
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
return registrySelector(...args);
|
|
354
|
-
};
|
|
355
|
-
|
|
356
|
-
selector.hasResolver = false;
|
|
357
|
-
return selector;
|
|
358
|
-
};
|
|
359
|
-
|
|
360
|
-
return mapValues(selectors, createStateSelector);
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Maps actions to dispatch from a given store.
|
|
364
|
-
*
|
|
365
|
-
* @param {Object} actions Actions to register.
|
|
366
|
-
* @param {Object} store The redux store to which the actions should be mapped.
|
|
367
|
-
*
|
|
368
|
-
* @return {Object} Actions mapped to the redux store provided.
|
|
369
|
-
*/
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
function mapActions(actions, store) {
|
|
373
|
-
const createBoundAction = action => function () {
|
|
374
|
-
return Promise.resolve(store.dispatch(action(...arguments)));
|
|
375
|
-
};
|
|
376
|
-
|
|
377
|
-
return mapValues(actions, createBoundAction);
|
|
378
|
-
}
|
|
379
355
|
/**
|
|
380
356
|
* Maps selectors to functions that return a resolution promise for them
|
|
381
357
|
*
|
|
@@ -402,20 +378,10 @@ function mapResolveSelectors(selectors, store) {
|
|
|
402
378
|
// If the selector doesn't have a resolver, just convert the return value
|
|
403
379
|
// (including exceptions) to a Promise, no additional extra behavior is needed.
|
|
404
380
|
if (!selector.hasResolver) {
|
|
405
|
-
return async
|
|
406
|
-
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
407
|
-
args[_key4] = arguments[_key4];
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
return selector.apply(null, args);
|
|
411
|
-
};
|
|
381
|
+
return async (...args) => selector.apply(null, args);
|
|
412
382
|
}
|
|
413
383
|
|
|
414
|
-
return
|
|
415
|
-
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
|
416
|
-
args[_key5] = arguments[_key5];
|
|
417
|
-
}
|
|
418
|
-
|
|
384
|
+
return (...args) => {
|
|
419
385
|
return new Promise((resolve, reject) => {
|
|
420
386
|
const hasFinished = () => selectors.hasFinishedResolution(selectorName, args);
|
|
421
387
|
|
|
@@ -466,11 +432,7 @@ function mapSuspendSelectors(selectors, store) {
|
|
|
466
432
|
return selector;
|
|
467
433
|
}
|
|
468
434
|
|
|
469
|
-
return
|
|
470
|
-
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
|
471
|
-
args[_key6] = arguments[_key6];
|
|
472
|
-
}
|
|
473
|
-
|
|
435
|
+
return (...args) => {
|
|
474
436
|
const result = selector.apply(null, args);
|
|
475
437
|
|
|
476
438
|
if (selectors.hasFinishedResolution(selectorName, args)) {
|
|
@@ -493,22 +455,15 @@ function mapSuspendSelectors(selectors, store) {
|
|
|
493
455
|
});
|
|
494
456
|
}
|
|
495
457
|
/**
|
|
496
|
-
*
|
|
497
|
-
*
|
|
498
|
-
* used in ensuring that the data needs for the selector are satisfied.
|
|
458
|
+
* Convert resolvers to a normalized form, an object with `fulfill` method and
|
|
459
|
+
* optional methods like `isFulfilled`.
|
|
499
460
|
*
|
|
500
|
-
* @param {Object} resolvers
|
|
501
|
-
* @param {Object} selectors The current selectors to be modified.
|
|
502
|
-
* @param {Object} store The redux store to which the resolvers should be mapped.
|
|
503
|
-
* @param {Object} resolversCache Resolvers Cache.
|
|
461
|
+
* @param {Object} resolvers Resolver to convert
|
|
504
462
|
*/
|
|
505
463
|
|
|
506
464
|
|
|
507
|
-
function mapResolvers(resolvers
|
|
508
|
-
|
|
509
|
-
// cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.
|
|
510
|
-
// Here we normalize the `resolver` function to an object with `fulfill` method.
|
|
511
|
-
const mappedResolvers = mapValues(resolvers, resolver => {
|
|
465
|
+
function mapResolvers(resolvers) {
|
|
466
|
+
return mapValues(resolvers, resolver => {
|
|
512
467
|
if (resolver.fulfill) {
|
|
513
468
|
return resolver;
|
|
514
469
|
}
|
|
@@ -519,87 +474,68 @@ function mapResolvers(resolvers, selectors, store, resolversCache) {
|
|
|
519
474
|
|
|
520
475
|
};
|
|
521
476
|
});
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Returns resolvers with matched selectors for a given namespace.
|
|
480
|
+
* Resolvers are side effects invoked once per argument set of a given selector call,
|
|
481
|
+
* used in ensuring that the data needs for the selector are satisfied.
|
|
482
|
+
*
|
|
483
|
+
* @param {Object} selectors The current selectors to be modified.
|
|
484
|
+
* @param {Object} resolvers Resolvers to register.
|
|
485
|
+
* @param {Object} store The redux store to which the resolvers should be mapped.
|
|
486
|
+
* @param {Object} resolversCache Resolvers Cache.
|
|
487
|
+
*/
|
|
522
488
|
|
|
523
|
-
const mapSelector = (selector, selectorName) => {
|
|
524
|
-
const resolver = resolvers[selectorName];
|
|
525
489
|
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
490
|
+
function mapSelectorsWithResolvers(selectors, resolvers, store, resolversCache) {
|
|
491
|
+
function fulfillSelector(resolver, selectorName, args) {
|
|
492
|
+
const state = store.getState();
|
|
493
|
+
|
|
494
|
+
if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === 'function' && resolver.isFulfilled(state, ...args)) {
|
|
495
|
+
return;
|
|
529
496
|
}
|
|
530
497
|
|
|
531
|
-
const
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
}
|
|
498
|
+
const {
|
|
499
|
+
metadata
|
|
500
|
+
} = store.__unstableOriginalGetState();
|
|
535
501
|
|
|
536
|
-
|
|
537
|
-
|
|
502
|
+
if (metadataSelectors.hasStartedResolution(metadata, selectorName, args)) {
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
538
505
|
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
506
|
+
resolversCache.markAsRunning(selectorName, args);
|
|
507
|
+
setTimeout(async () => {
|
|
508
|
+
resolversCache.clear(selectorName, args);
|
|
509
|
+
store.dispatch(metadataActions.startResolution(selectorName, args));
|
|
542
510
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
} = store.__unstableOriginalGetState();
|
|
511
|
+
try {
|
|
512
|
+
const action = resolver.fulfill(...args);
|
|
546
513
|
|
|
547
|
-
if (
|
|
548
|
-
|
|
514
|
+
if (action) {
|
|
515
|
+
await store.dispatch(action);
|
|
549
516
|
}
|
|
550
517
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
store.dispatch(metadataActions.startResolution(selectorName, args));
|
|
555
|
-
|
|
556
|
-
try {
|
|
557
|
-
await fulfillResolver(store, mappedResolvers, selectorName, ...args);
|
|
558
|
-
store.dispatch(metadataActions.finishResolution(selectorName, args));
|
|
559
|
-
} catch (error) {
|
|
560
|
-
store.dispatch(metadataActions.failResolution(selectorName, args, error));
|
|
561
|
-
}
|
|
562
|
-
});
|
|
518
|
+
store.dispatch(metadataActions.finishResolution(selectorName, args));
|
|
519
|
+
} catch (error) {
|
|
520
|
+
store.dispatch(metadataActions.failResolution(selectorName, args, error));
|
|
563
521
|
}
|
|
522
|
+
}, 0);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
return mapValues(selectors, (selector, selectorName) => {
|
|
526
|
+
const resolver = resolvers[selectorName];
|
|
527
|
+
|
|
528
|
+
if (!resolver) {
|
|
529
|
+
return selector;
|
|
530
|
+
}
|
|
564
531
|
|
|
565
|
-
|
|
532
|
+
const selectorResolver = (...args) => {
|
|
533
|
+
fulfillSelector(resolver, selectorName, args);
|
|
566
534
|
return selector(...args);
|
|
567
535
|
};
|
|
568
536
|
|
|
569
537
|
selectorResolver.hasResolver = true;
|
|
570
538
|
return selectorResolver;
|
|
571
|
-
};
|
|
572
|
-
|
|
573
|
-
return {
|
|
574
|
-
resolvers: mappedResolvers,
|
|
575
|
-
selectors: mapValues(selectors, mapSelector)
|
|
576
|
-
};
|
|
577
|
-
}
|
|
578
|
-
/**
|
|
579
|
-
* Calls a resolver given arguments
|
|
580
|
-
*
|
|
581
|
-
* @param {Object} store Store reference, for fulfilling via resolvers
|
|
582
|
-
* @param {Object} resolvers Store Resolvers
|
|
583
|
-
* @param {string} selectorName Selector name to fulfill.
|
|
584
|
-
* @param {Array} args Selector Arguments.
|
|
585
|
-
*/
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
async function fulfillResolver(store, resolvers, selectorName) {
|
|
589
|
-
const resolver = resolvers[selectorName];
|
|
590
|
-
|
|
591
|
-
if (!resolver) {
|
|
592
|
-
return;
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
for (var _len8 = arguments.length, args = new Array(_len8 > 3 ? _len8 - 3 : 0), _key8 = 3; _key8 < _len8; _key8++) {
|
|
596
|
-
args[_key8 - 3] = arguments[_key8];
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
const action = resolver.fulfill(...args);
|
|
600
|
-
|
|
601
|
-
if (action) {
|
|
602
|
-
await store.dispatch(action);
|
|
603
|
-
}
|
|
539
|
+
});
|
|
604
540
|
}
|
|
605
541
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","compose","builtinControls","lock","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","obj","callback","Object","entries","reduce","acc","key","value","mapToObject","state","Map","fromEntries","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","set","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","reducer","thunkArgs","dispatch","action","store","getActions","select","selector","__unstableOriginalGetState","getSelectors","resolveSelect","getResolveSelectors","instantiateReduxStore","resolversCache","resolvers","mapActions","Proxy","target","prop","mapSelectors","metadata","isRegistrySelector","root","mapResolvers","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSuspendSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","createStateSelector","registrySelector","runSelector","argsLength","arguments","Array","hasResolver","createBoundAction","Promise","resolve","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","storeSelectors","apply","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","mappedResolvers","resolver","fulfill","mapSelector","selectorResolver","fulfillSelector","isFulfilled","setTimeout","startResolution","fulfillResolver","finishResolution","failResolution"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport combineReducers from 'turbo-combine-reducers';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * WordPress dependencies\n */\nimport createReduxRoutineMiddleware from '@wordpress/redux-routine';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport { lock } from '../private-apis';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.entries( obj ?? {} ).reduce(\n\t\t( acc, [ key, value ] ) => ( {\n\t\t\t...acc,\n\t\t\t[ key ]: callback( value, key ),\n\t\t} ),\n\t\t{}\n\t);\n\n// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( action ) => store.dispatch( action ),\n\t\t\t\t\t\tgetActions()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t\t\t\tgetSelectors()\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tlet resolvers;\n\t\t\tconst actions = mapActions(\n\t\t\t\t{\n\t\t\t\t\t...metadataActions,\n\t\t\t\t\t...options.actions,\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tlock(\n\t\t\t\tactions,\n\t\t\t\tnew Proxy( privateActions, {\n\t\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tmapActions( privateActions, store )[ prop ] ||\n\t\t\t\t\t\t\tactions[ prop ]\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tlet selectors = mapSelectors(\n\t\t\t\t{\n\t\t\t\t\t...mapValues(\n\t\t\t\t\t\tmetadataSelectors,\n\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t( state, ...args ) =>\n\t\t\t\t\t\t\t\tselector( state.metadata, ...args )\n\t\t\t\t\t),\n\t\t\t\t\t...mapValues( options.selectors, ( selector ) => {\n\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\tstore\n\t\t\t);\n\t\t\tlock(\n\t\t\t\tselectors,\n\t\t\t\tnew Proxy( privateSelectors, {\n\t\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tmapSelectors(\n\t\t\t\t\t\t\t\tmapValues( privateSelectors, ( selector ) => {\n\t\t\t\t\t\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\t\t\t\t\t\tselector.registry = registry;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn ( state, ...args ) =>\n\t\t\t\t\t\t\t\t\t\tselector( state.root, ...args );\n\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t\tstore\n\t\t\t\t\t\t\t)[ prop ] || selectors[ prop ]\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tconst result = mapResolvers(\n\t\t\t\t\toptions.resolvers,\n\t\t\t\t\tselectors,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t\tresolvers = result.resolvers;\n\t\t\t\tselectors = result.selectors;\n\t\t\t}\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tcompose( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to a store.\n *\n * @param {Object} selectors Selectors to register. Keys will be used as the\n * public facing API. Selectors will get passed the\n * state as first argument.\n * @param {Object} store The store to which the selectors should be mapped.\n * @return {Object} Selectors mapped to the provided store.\n */\nfunction mapSelectors( selectors, store ) {\n\tconst createStateSelector = ( registrySelector ) => {\n\t\tconst selector = function runSelector() {\n\t\t\t// This function is an optimized implementation of:\n\t\t\t//\n\t\t\t// selector( store.getState(), ...arguments )\n\t\t\t//\n\t\t\t// Where the above would incur an `Array#concat` in its application,\n\t\t\t// the logic here instead efficiently constructs an arguments array via\n\t\t\t// direct assignment.\n\t\t\tconst argsLength = arguments.length;\n\t\t\tconst args = new Array( argsLength + 1 );\n\t\t\targs[ 0 ] = store.__unstableOriginalGetState();\n\t\t\tfor ( let i = 0; i < argsLength; i++ ) {\n\t\t\t\targs[ i + 1 ] = arguments[ i ];\n\t\t\t}\n\n\t\t\treturn registrySelector( ...args );\n\t\t};\n\t\tselector.hasResolver = false;\n\t\treturn selector;\n\t};\n\n\treturn mapValues( selectors, createStateSelector );\n}\n\n/**\n * Maps actions to dispatch from a given store.\n *\n * @param {Object} actions Actions to register.\n * @param {Object} store The redux store to which the actions should be mapped.\n *\n * @return {Object} Actions mapped to the redux store provided.\n */\nfunction mapActions( actions, store ) {\n\tconst createBoundAction =\n\t\t( action ) =>\n\t\t( ...args ) => {\n\t\t\treturn Promise.resolve( store.dispatch( action( ...args ) ) );\n\t\t};\n\n\treturn mapValues( actions, createBoundAction );\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\t...storeSelectors\n\t} = selectors;\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Maps selectors to functions that throw a suspense promise if not yet resolved.\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Returns resolvers with matched selectors for a given namespace.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} resolvers Resolvers to register.\n * @param {Object} selectors The current selectors to be modified.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapResolvers( resolvers, selectors, store, resolversCache ) {\n\t// The `resolver` can be either a function that does the resolution, or, in more advanced\n\t// cases, an object with a `fullfill` method and other optional methods like `isFulfilled`.\n\t// Here we normalize the `resolver` function to an object with `fulfill` method.\n\tconst mappedResolvers = mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n\n\tconst mapSelector = ( selector, selectorName ) => {\n\t\tconst resolver = resolvers[ selectorName ];\n\t\tif ( ! resolver ) {\n\t\t\tselector.hasResolver = false;\n\t\t\treturn selector;\n\t\t}\n\n\t\tconst selectorResolver = ( ...args ) => {\n\t\t\tasync function fulfillSelector() {\n\t\t\t\tconst state = store.getState();\n\n\t\t\t\tif (\n\t\t\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\t\t\tif (\n\t\t\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\t\t\tsetTimeout( async () => {\n\t\t\t\t\tresolversCache.clear( selectorName, args );\n\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait fulfillResolver(\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\tmappedResolvers,\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t...args\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\t\tmetadataActions.finishResolution(\n\t\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t\targs\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\tstore.dispatch(\n\t\t\t\t\t\t\tmetadataActions.failResolution(\n\t\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfulfillSelector( ...args );\n\t\t\treturn selector( ...args );\n\t\t};\n\t\tselectorResolver.hasResolver = true;\n\t\treturn selectorResolver;\n\t};\n\n\treturn {\n\t\tresolvers: mappedResolvers,\n\t\tselectors: mapValues( selectors, mapSelector ),\n\t};\n}\n\n/**\n * Calls a resolver given arguments\n *\n * @param {Object} store Store reference, for fulfilling via resolvers\n * @param {Object} resolvers Store Resolvers\n * @param {string} selectorName Selector name to fulfill.\n * @param {Array} args Selector Arguments.\n */\nasync function fulfillResolver( store, resolvers, selectorName, ...args ) {\n\tconst resolver = resolvers[ selectorName ];\n\tif ( ! resolver ) {\n\t\treturn;\n\t}\n\n\tconst action = resolver.fulfill( ...args );\n\tif ( action ) {\n\t\tawait store.dispatch( action );\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/redux-store/index.js"],"names":["createStore","applyMiddleware","combineReducers","EquivalentKeyMap","createReduxRoutineMiddleware","compose","builtinControls","lock","promise","createResolversCacheMiddleware","createThunkMiddleware","metadataReducer","metadataSelectors","metadataActions","trimUndefinedValues","array","result","i","length","undefined","splice","mapValues","obj","callback","Object","fromEntries","entries","map","key","value","mapToObject","state","Map","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","set","createBindingCache","bind","WeakMap","item","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","bindSelector","selector","isRegistrySelector","boundSelector","__unstableOriginalGetState","root","hasResolver","bindMetadataSelector","metadata","resolvers","mapResolvers","mapSelectorsWithResolvers","boundPrivateSelectors","privateSelector","values","allSelectors","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","resolver","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport combineReducers from 'turbo-combine-reducers';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * WordPress dependencies\n */\nimport createReduxRoutineMiddleware from '@wordpress/redux-routine';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { builtinControls } from '../controls';\nimport { lock } from '../lock-unlock';\nimport promise from '../promise-middleware';\nimport createResolversCacheMiddleware from '../resolvers-cache-middleware';\nimport createThunkMiddleware from './thunk-middleware';\nimport metadataReducer from './metadata/reducer';\nimport * as metadataSelectors from './metadata/selectors';\nimport * as metadataActions from './metadata/actions';\n\n/** @typedef {import('../types').DataRegistry} DataRegistry */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\n\n// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tfunction bindSelector( selector ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( selector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tlet selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tlet resolvers;\n\t\t\tif ( options.resolvers ) {\n\t\t\t\tresolvers = mapResolvers( options.resolvers );\n\t\t\t\tselectors = mapSelectorsWithResolvers(\n\t\t\t\t\tselectors,\n\t\t\t\t\tresolvers,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const privateSelector of Object.values( privateSelectors ) ) {\n\t\t\t\tboundPrivateSelectors.get( privateSelector );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\t\t\treturn store.subscribe( () => {\n\t\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\t\t\tlastState = state;\n\n\t\t\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\t\t\tlistener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tcompose( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\t...storeSelectors\n\t} = selectors;\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Maps selectors to functions that throw a suspense promise if not yet resolved.\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n}\n\n/**\n * Returns resolvers with matched selectors for a given namespace.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} selectors The current selectors to be modified.\n * @param {Object} resolvers Resolvers to register.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorsWithResolvers(\n\tselectors,\n\tresolvers,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( resolver, selectorName, args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\tconst resolver = resolvers[ selectorName ];\n\t\tif ( ! resolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\tconst selectorResolver = ( ...args ) => {\n\t\t\tfulfillSelector( resolver, selectorName, args );\n\t\t\treturn selector( ...args );\n\t\t};\n\t\tselectorResolver.hasResolver = true;\n\t\treturn selectorResolver;\n\t} );\n}\n"]}
|
|
@@ -14,10 +14,7 @@ import { selectorArgsToStateKey, onSubKey } from './utils';
|
|
|
14
14
|
*
|
|
15
15
|
* selectorName -> EquivalentKeyMap<Array,boolean>
|
|
16
16
|
*/
|
|
17
|
-
const subKeysIsResolved = onSubKey('selectorName')(
|
|
18
|
-
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new EquivalentKeyMap();
|
|
19
|
-
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
20
|
-
|
|
17
|
+
const subKeysIsResolved = onSubKey('selectorName')((state = new EquivalentKeyMap(), action) => {
|
|
21
18
|
switch (action.type) {
|
|
22
19
|
case 'START_RESOLUTION':
|
|
23
20
|
{
|
|
@@ -113,10 +110,7 @@ const subKeysIsResolved = onSubKey('selectorName')(function () {
|
|
|
113
110
|
* @return Next state.
|
|
114
111
|
*/
|
|
115
112
|
|
|
116
|
-
const isResolved =
|
|
117
|
-
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
118
|
-
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
119
|
-
|
|
113
|
+
const isResolved = (state = {}, action) => {
|
|
120
114
|
switch (action.type) {
|
|
121
115
|
case 'INVALIDATE_RESOLUTION_FOR_STORE':
|
|
122
116
|
return {};
|