@wordpress/data 9.8.0 → 9.10.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 +17 -4
- package/README.md +101 -2
- package/build/components/async-mode-provider/context.js +2 -3
- package/build/components/async-mode-provider/context.js.map +1 -1
- package/build/components/async-mode-provider/index.js +0 -5
- package/build/components/async-mode-provider/index.js.map +1 -1
- package/build/components/async-mode-provider/use-async-mode.js +1 -3
- package/build/components/async-mode-provider/use-async-mode.js.map +1 -1
- package/build/components/registry-provider/context.js +3 -6
- package/build/components/registry-provider/context.js.map +1 -1
- package/build/components/registry-provider/index.js +0 -5
- package/build/components/registry-provider/index.js.map +1 -1
- package/build/components/registry-provider/use-registry.js +0 -3
- package/build/components/registry-provider/use-registry.js.map +1 -1
- package/build/components/use-dispatch/index.js +0 -3
- package/build/components/use-dispatch/index.js.map +1 -1
- package/build/components/use-dispatch/use-dispatch-with-map.js +0 -7
- package/build/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build/components/use-dispatch/use-dispatch.js +0 -5
- package/build/components/use-dispatch/use-dispatch.js.map +1 -1
- package/build/components/use-select/index.js +35 -53
- package/build/components/use-select/index.js.map +1 -1
- package/build/components/with-dispatch/index.js +2 -7
- package/build/components/with-dispatch/index.js.map +1 -1
- package/build/components/with-registry/index.js +2 -5
- package/build/components/with-registry/index.js.map +1 -1
- package/build/components/with-select/index.js +2 -8
- package/build/components/with-select/index.js.map +1 -1
- package/build/controls.js +4 -10
- package/build/controls.js.map +1 -1
- package/build/default-registry.js +0 -3
- package/build/default-registry.js.map +1 -1
- package/build/dispatch.js +0 -3
- package/build/dispatch.js.map +1 -1
- package/build/factory.js +2 -5
- package/build/factory.js.map +1 -1
- package/build/index.js +7 -28
- package/build/index.js.map +1 -1
- package/build/lock-unlock.js +1 -2
- package/build/lock-unlock.js.map +1 -1
- package/build/plugins/index.js +0 -2
- package/build/plugins/index.js.map +1 -1
- package/build/plugins/persistence/index.js +13 -37
- package/build/plugins/persistence/index.js.map +1 -1
- package/build/plugins/persistence/storage/default.js +1 -5
- package/build/plugins/persistence/storage/default.js.map +1 -1
- package/build/plugins/persistence/storage/object.js +0 -5
- package/build/plugins/persistence/storage/object.js.map +1 -1
- package/build/promise-middleware.js +0 -5
- package/build/promise-middleware.js.map +1 -1
- package/build/redux-store/index.js +36 -117
- package/build/redux-store/index.js.map +1 -1
- package/build/redux-store/metadata/actions.js +8 -17
- package/build/redux-store/metadata/actions.js.map +1 -1
- package/build/redux-store/metadata/equivalent-key-map.d.js.map +1 -1
- package/build/redux-store/metadata/reducer.js +1 -23
- package/build/redux-store/metadata/reducer.js.map +1 -1
- package/build/redux-store/metadata/selectors.js +8 -22
- package/build/redux-store/metadata/selectors.js.map +1 -1
- package/build/redux-store/metadata/utils.js +6 -14
- package/build/redux-store/metadata/utils.js.map +1 -1
- package/build/redux-store/thunk-middleware.js +0 -2
- package/build/redux-store/thunk-middleware.js.map +1 -1
- package/build/registry.js +29 -73
- package/build/registry.js.map +1 -1
- package/build/resolvers-cache-middleware.js +2 -8
- package/build/resolvers-cache-middleware.js.map +1 -1
- package/build/select.js +0 -3
- package/build/select.js.map +1 -1
- package/build/store/index.js +0 -7
- package/build/store/index.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils/emitter.js +2 -11
- package/build/utils/emitter.js.map +1 -1
- package/build-module/components/async-mode-provider/context.js +1 -1
- package/build-module/components/async-mode-provider/context.js.map +1 -1
- package/build-module/components/async-mode-provider/index.js.map +1 -1
- package/build-module/components/async-mode-provider/use-async-mode.js +1 -1
- package/build-module/components/async-mode-provider/use-async-mode.js.map +1 -1
- package/build-module/components/registry-provider/context.js +3 -3
- package/build-module/components/registry-provider/context.js.map +1 -1
- package/build-module/components/registry-provider/index.js.map +1 -1
- package/build-module/components/registry-provider/use-registry.js +2 -2
- package/build-module/components/registry-provider/use-registry.js.map +1 -1
- package/build-module/components/use-dispatch/index.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js +2 -4
- package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch.js +1 -3
- package/build-module/components/use-dispatch/use-dispatch.js.map +1 -1
- package/build-module/components/use-select/index.js +35 -46
- package/build-module/components/use-select/index.js.map +1 -1
- package/build-module/components/with-dispatch/index.js +4 -6
- package/build-module/components/with-dispatch/index.js.map +1 -1
- package/build-module/components/with-registry/index.js +4 -4
- package/build-module/components/with-registry/index.js.map +1 -1
- package/build-module/components/with-select/index.js +4 -6
- package/build-module/components/with-select/index.js.map +1 -1
- package/build-module/controls.js +4 -8
- package/build-module/controls.js.map +1 -1
- package/build-module/default-registry.js.map +1 -1
- package/build-module/dispatch.js +2 -1
- package/build-module/dispatch.js.map +1 -1
- package/build-module/factory.js +2 -3
- package/build-module/factory.js.map +1 -1
- package/build-module/index.js +11 -10
- package/build-module/index.js.map +1 -1
- package/build-module/lock-unlock.js.map +1 -1
- package/build-module/plugins/index.js.map +1 -1
- package/build-module/plugins/persistence/index.js +15 -30
- package/build-module/plugins/persistence/index.js.map +1 -1
- package/build-module/plugins/persistence/storage/default.js +0 -2
- package/build-module/plugins/persistence/storage/default.js.map +1 -1
- package/build-module/plugins/persistence/storage/object.js +0 -5
- package/build-module/plugins/persistence/storage/object.js.map +1 -1
- package/build-module/promise-middleware.js +1 -3
- package/build-module/promise-middleware.js.map +1 -1
- package/build-module/redux-store/index.js +38 -101
- package/build-module/redux-store/index.js.map +1 -1
- package/build-module/redux-store/metadata/actions.js +8 -8
- package/build-module/redux-store/metadata/actions.js.map +1 -1
- package/build-module/redux-store/metadata/equivalent-key-map.d.js.map +1 -1
- package/build-module/redux-store/metadata/reducer.js +1 -21
- package/build-module/redux-store/metadata/reducer.js.map +1 -1
- package/build-module/redux-store/metadata/selectors.js +9 -13
- package/build-module/redux-store/metadata/selectors.js.map +1 -1
- package/build-module/redux-store/metadata/utils.js +6 -11
- package/build-module/redux-store/metadata/utils.js.map +1 -1
- package/build-module/redux-store/thunk-middleware.js +0 -1
- package/build-module/redux-store/thunk-middleware.js.map +1 -1
- package/build-module/registry.js +30 -67
- 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/select.js +2 -1
- package/build-module/select.js.map +1 -1
- package/build-module/store/index.js +0 -7
- package/build-module/store/index.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-module/utils/emitter.js +2 -10
- package/build-module/utils/emitter.js.map +1 -1
- package/build-types/components/use-select/index.d.ts.map +1 -1
- package/build-types/dispatch.d.ts +2 -2
- package/build-types/dispatch.d.ts.map +1 -1
- package/build-types/index.d.ts +1 -1
- package/build-types/index.d.ts.map +1 -1
- package/build-types/plugins/persistence/index.d.ts.map +1 -1
- package/build-types/private-apis.d.ts +3 -0
- package/build-types/private-apis.d.ts.map +1 -0
- package/build-types/store/index.d.ts +1 -1
- package/build-types/types.d.ts +9 -3
- package/build-types/types.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/components/use-select/index.js +14 -0
- package/src/dispatch.ts +6 -9
- package/src/plugins/persistence/index.js +0 -1
- package/src/types.ts +38 -5
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -4,16 +4,16 @@
|
|
|
4
4
|
import { createStore, applyMiddleware } from 'redux';
|
|
5
5
|
import combineReducers from 'turbo-combine-reducers';
|
|
6
6
|
import EquivalentKeyMap from 'equivalent-key-map';
|
|
7
|
+
|
|
7
8
|
/**
|
|
8
9
|
* WordPress dependencies
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
11
|
import createReduxRoutineMiddleware from '@wordpress/redux-routine';
|
|
12
12
|
import { compose } from '@wordpress/compose';
|
|
13
|
+
|
|
13
14
|
/**
|
|
14
15
|
* Internal dependencies
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
17
|
import { builtinControls } from '../controls';
|
|
18
18
|
import { lock } from '../lock-unlock';
|
|
19
19
|
import promise from '../promise-middleware';
|
|
@@ -22,15 +22,13 @@ import createThunkMiddleware from './thunk-middleware';
|
|
|
22
22
|
import metadataReducer from './metadata/reducer';
|
|
23
23
|
import * as metadataSelectors from './metadata/selectors';
|
|
24
24
|
import * as metadataActions from './metadata/actions';
|
|
25
|
-
/** @typedef {import('../types').DataRegistry} DataRegistry */
|
|
26
25
|
|
|
26
|
+
/** @typedef {import('../types').DataRegistry} DataRegistry */
|
|
27
27
|
/** @typedef {import('../types').ListenerFunction} ListenerFunction */
|
|
28
|
-
|
|
29
28
|
/**
|
|
30
29
|
* @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor
|
|
31
30
|
* @template {import('../types').AnyConfig} C
|
|
32
31
|
*/
|
|
33
|
-
|
|
34
32
|
/**
|
|
35
33
|
* @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig
|
|
36
34
|
* @template State
|
|
@@ -40,15 +38,14 @@ import * as metadataActions from './metadata/actions';
|
|
|
40
38
|
|
|
41
39
|
const trimUndefinedValues = array => {
|
|
42
40
|
const result = [...array];
|
|
43
|
-
|
|
44
41
|
for (let i = result.length - 1; i >= 0; i--) {
|
|
45
42
|
if (result[i] === undefined) {
|
|
46
43
|
result.splice(i, 1);
|
|
47
44
|
}
|
|
48
45
|
}
|
|
49
|
-
|
|
50
46
|
return result;
|
|
51
47
|
};
|
|
48
|
+
|
|
52
49
|
/**
|
|
53
50
|
* Creates a new object with the same keys, but with `callback()` called as
|
|
54
51
|
* a transformer function on each of the values.
|
|
@@ -57,65 +54,54 @@ const trimUndefinedValues = array => {
|
|
|
57
54
|
* @param {Function} callback The function to transform each object value.
|
|
58
55
|
* @return {Array} Transformed object.
|
|
59
56
|
*/
|
|
57
|
+
const mapValues = (obj, callback) => Object.fromEntries(Object.entries(obj !== null && obj !== void 0 ? obj : {}).map(([key, value]) => [key, callback(value, key)]));
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
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
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
// Convert Map objects to plain objects
|
|
65
60
|
const mapToObject = (key, state) => {
|
|
66
61
|
if (state instanceof Map) {
|
|
67
62
|
return Object.fromEntries(state);
|
|
68
63
|
}
|
|
69
|
-
|
|
70
64
|
return state;
|
|
71
65
|
};
|
|
66
|
+
|
|
72
67
|
/**
|
|
73
68
|
* Create a cache to track whether resolvers started running or not.
|
|
74
69
|
*
|
|
75
70
|
* @return {Object} Resolvers Cache.
|
|
76
71
|
*/
|
|
77
|
-
|
|
78
|
-
|
|
79
72
|
function createResolversCache() {
|
|
80
73
|
const cache = {};
|
|
81
74
|
return {
|
|
82
75
|
isRunning(selectorName, args) {
|
|
83
76
|
return cache[selectorName] && cache[selectorName].get(trimUndefinedValues(args));
|
|
84
77
|
},
|
|
85
|
-
|
|
86
78
|
clear(selectorName, args) {
|
|
87
79
|
if (cache[selectorName]) {
|
|
88
80
|
cache[selectorName].delete(trimUndefinedValues(args));
|
|
89
81
|
}
|
|
90
82
|
},
|
|
91
|
-
|
|
92
83
|
markAsRunning(selectorName, args) {
|
|
93
84
|
if (!cache[selectorName]) {
|
|
94
85
|
cache[selectorName] = new EquivalentKeyMap();
|
|
95
86
|
}
|
|
96
|
-
|
|
97
87
|
cache[selectorName].set(trimUndefinedValues(args), true);
|
|
98
88
|
}
|
|
99
|
-
|
|
100
89
|
};
|
|
101
90
|
}
|
|
102
|
-
|
|
103
91
|
function createBindingCache(bind) {
|
|
104
92
|
const cache = new WeakMap();
|
|
105
93
|
return {
|
|
106
94
|
get(item, itemName) {
|
|
107
95
|
let boundItem = cache.get(item);
|
|
108
|
-
|
|
109
96
|
if (!boundItem) {
|
|
110
97
|
boundItem = bind(item, itemName);
|
|
111
98
|
cache.set(item, boundItem);
|
|
112
99
|
}
|
|
113
|
-
|
|
114
100
|
return boundItem;
|
|
115
101
|
}
|
|
116
|
-
|
|
117
102
|
};
|
|
118
103
|
}
|
|
104
|
+
|
|
119
105
|
/**
|
|
120
106
|
* Creates a data store descriptor for the provided Redux store configuration containing
|
|
121
107
|
* properties describing reducer, actions, selectors, controls and resolvers.
|
|
@@ -142,8 +128,6 @@ function createBindingCache(bind) {
|
|
|
142
128
|
*
|
|
143
129
|
* @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.
|
|
144
130
|
*/
|
|
145
|
-
|
|
146
|
-
|
|
147
131
|
export default function createReduxStore(key, options) {
|
|
148
132
|
const privateActions = {};
|
|
149
133
|
const privateSelectors = {};
|
|
@@ -176,31 +160,26 @@ export default function createReduxStore(key, options) {
|
|
|
176
160
|
const reducer = options.reducer;
|
|
177
161
|
const thunkArgs = {
|
|
178
162
|
registry,
|
|
179
|
-
|
|
180
163
|
get dispatch() {
|
|
181
164
|
return thunkActions;
|
|
182
165
|
},
|
|
183
|
-
|
|
184
166
|
get select() {
|
|
185
167
|
return thunkSelectors;
|
|
186
168
|
},
|
|
187
|
-
|
|
188
169
|
get resolveSelect() {
|
|
189
170
|
return getResolveSelectors();
|
|
190
171
|
}
|
|
191
|
-
|
|
192
172
|
};
|
|
193
|
-
const store = instantiateReduxStore(key, options, registry, thunkArgs);
|
|
173
|
+
const store = instantiateReduxStore(key, options, registry, thunkArgs);
|
|
174
|
+
// Expose the private registration functions on the store
|
|
194
175
|
// so they can be copied to a sub registry in registry.js.
|
|
195
|
-
|
|
196
176
|
lock(store, privateRegistrationFunctions);
|
|
197
177
|
const resolversCache = createResolversCache();
|
|
198
|
-
|
|
199
178
|
function bindAction(action) {
|
|
200
179
|
return (...args) => Promise.resolve(store.dispatch(action(...args)));
|
|
201
180
|
}
|
|
202
|
-
|
|
203
|
-
|
|
181
|
+
const actions = {
|
|
182
|
+
...mapValues(metadataActions, bindAction),
|
|
204
183
|
...mapValues(options.actions, bindAction)
|
|
205
184
|
};
|
|
206
185
|
const boundPrivateActions = createBindingCache(bindAction);
|
|
@@ -215,49 +194,40 @@ export default function createReduxStore(key, options) {
|
|
|
215
194
|
});
|
|
216
195
|
lock(actions, allActions);
|
|
217
196
|
const resolvers = options.resolvers ? mapResolvers(options.resolvers) : {};
|
|
218
|
-
|
|
219
197
|
function bindSelector(selector, selectorName) {
|
|
220
198
|
if (selector.isRegistrySelector) {
|
|
221
199
|
selector.registry = registry;
|
|
222
200
|
}
|
|
223
|
-
|
|
224
201
|
const boundSelector = (...args) => {
|
|
225
202
|
const state = store.__unstableOriginalGetState();
|
|
226
|
-
|
|
227
203
|
return selector(state.root, ...args);
|
|
228
204
|
};
|
|
229
|
-
|
|
230
205
|
const resolver = resolvers[selectorName];
|
|
231
|
-
|
|
232
206
|
if (!resolver) {
|
|
233
207
|
boundSelector.hasResolver = false;
|
|
234
208
|
return boundSelector;
|
|
235
209
|
}
|
|
236
|
-
|
|
237
210
|
return mapSelectorWithResolver(boundSelector, selectorName, resolver, store, resolversCache);
|
|
238
211
|
}
|
|
239
|
-
|
|
240
212
|
function bindMetadataSelector(selector) {
|
|
241
213
|
const boundSelector = (...args) => {
|
|
242
214
|
const state = store.__unstableOriginalGetState();
|
|
243
|
-
|
|
244
215
|
return selector(state.metadata, ...args);
|
|
245
216
|
};
|
|
246
|
-
|
|
247
217
|
boundSelector.hasResolver = false;
|
|
248
218
|
return boundSelector;
|
|
249
219
|
}
|
|
250
|
-
|
|
251
|
-
|
|
220
|
+
const selectors = {
|
|
221
|
+
...mapValues(metadataSelectors, bindMetadataSelector),
|
|
252
222
|
...mapValues(options.selectors, bindSelector)
|
|
253
223
|
};
|
|
254
|
-
const boundPrivateSelectors = createBindingCache(bindSelector);
|
|
255
|
-
// instantiation, so that registry selectors are bound to the registry.
|
|
224
|
+
const boundPrivateSelectors = createBindingCache(bindSelector);
|
|
256
225
|
|
|
226
|
+
// Pre-bind the private selectors that have been registered by the time of
|
|
227
|
+
// instantiation, so that registry selectors are bound to the registry.
|
|
257
228
|
for (const [selectorName, selector] of Object.entries(privateSelectors)) {
|
|
258
229
|
boundPrivateSelectors.get(selector, selectorName);
|
|
259
230
|
}
|
|
260
|
-
|
|
261
231
|
const allSelectors = new Proxy(() => {}, {
|
|
262
232
|
get: (target, prop) => {
|
|
263
233
|
const privateSelector = privateSelectors[prop];
|
|
@@ -270,45 +240,37 @@ export default function createReduxStore(key, options) {
|
|
|
270
240
|
lock(selectors, allSelectors);
|
|
271
241
|
const resolveSelectors = mapResolveSelectors(selectors, store);
|
|
272
242
|
const suspendSelectors = mapSuspendSelectors(selectors, store);
|
|
273
|
-
|
|
274
243
|
const getSelectors = () => selectors;
|
|
275
|
-
|
|
276
244
|
const getActions = () => actions;
|
|
277
|
-
|
|
278
245
|
const getResolveSelectors = () => resolveSelectors;
|
|
246
|
+
const getSuspendSelectors = () => suspendSelectors;
|
|
279
247
|
|
|
280
|
-
|
|
248
|
+
// We have some modules monkey-patching the store object
|
|
281
249
|
// It's wrong to do so but until we refactor all of our effects to controls
|
|
282
250
|
// We need to keep the same "store" instance here.
|
|
283
|
-
|
|
284
|
-
|
|
285
251
|
store.__unstableOriginalGetState = store.getState;
|
|
252
|
+
store.getState = () => store.__unstableOriginalGetState().root;
|
|
286
253
|
|
|
287
|
-
|
|
254
|
+
// Customize subscribe behavior to call listeners only on effective change,
|
|
288
255
|
// not on every dispatch.
|
|
289
|
-
|
|
290
|
-
|
|
291
256
|
const subscribe = store && (listener => {
|
|
292
257
|
listeners.add(listener);
|
|
293
258
|
return () => listeners.delete(listener);
|
|
294
259
|
});
|
|
295
|
-
|
|
296
260
|
let lastState = store.__unstableOriginalGetState();
|
|
297
|
-
|
|
298
261
|
store.subscribe(() => {
|
|
299
262
|
const state = store.__unstableOriginalGetState();
|
|
300
|
-
|
|
301
263
|
const hasChanged = state !== lastState;
|
|
302
264
|
lastState = state;
|
|
303
|
-
|
|
304
265
|
if (hasChanged) {
|
|
305
266
|
for (const listener of listeners) {
|
|
306
267
|
listener();
|
|
307
268
|
}
|
|
308
269
|
}
|
|
309
|
-
});
|
|
310
|
-
// Once we remove the use function.
|
|
270
|
+
});
|
|
311
271
|
|
|
272
|
+
// This can be simplified to just { subscribe, getSelectors, getActions }
|
|
273
|
+
// Once we remove the use function.
|
|
312
274
|
return {
|
|
313
275
|
reducer,
|
|
314
276
|
store,
|
|
@@ -322,13 +284,15 @@ export default function createReduxStore(key, options) {
|
|
|
322
284
|
subscribe
|
|
323
285
|
};
|
|
324
286
|
}
|
|
325
|
-
};
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
// Expose the private registration functions on the store
|
|
326
290
|
// descriptor. That's a natural choice since that's where the
|
|
327
291
|
// public actions and selectors are stored .
|
|
328
|
-
|
|
329
292
|
lock(storeDescriptor, privateRegistrationFunctions);
|
|
330
293
|
return storeDescriptor;
|
|
331
294
|
}
|
|
295
|
+
|
|
332
296
|
/**
|
|
333
297
|
* Creates a redux store for a namespace.
|
|
334
298
|
*
|
|
@@ -340,15 +304,14 @@ export default function createReduxStore(key, options) {
|
|
|
340
304
|
* @param {Object} thunkArgs Argument object for the thunk middleware.
|
|
341
305
|
* @return {Object} Newly created redux store.
|
|
342
306
|
*/
|
|
343
|
-
|
|
344
307
|
function instantiateReduxStore(key, options, registry, thunkArgs) {
|
|
345
|
-
const controls = {
|
|
308
|
+
const controls = {
|
|
309
|
+
...options.controls,
|
|
346
310
|
...builtinControls
|
|
347
311
|
};
|
|
348
312
|
const normalizedControls = mapValues(controls, control => control.isRegistryControl ? control(registry) : control);
|
|
349
313
|
const middlewares = [createResolversCacheMiddleware(registry, key), promise, createReduxRoutineMiddleware(normalizedControls), createThunkMiddleware(thunkArgs)];
|
|
350
314
|
const enhancers = [applyMiddleware(...middlewares)];
|
|
351
|
-
|
|
352
315
|
if (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__) {
|
|
353
316
|
enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__({
|
|
354
317
|
name: key,
|
|
@@ -358,7 +321,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
|
|
|
358
321
|
}
|
|
359
322
|
}));
|
|
360
323
|
}
|
|
361
|
-
|
|
362
324
|
const {
|
|
363
325
|
reducer,
|
|
364
326
|
initialState
|
|
@@ -371,6 +333,7 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
|
|
|
371
333
|
root: initialState
|
|
372
334
|
}, compose(enhancers));
|
|
373
335
|
}
|
|
336
|
+
|
|
374
337
|
/**
|
|
375
338
|
* Maps selectors to functions that return a resolution promise for them
|
|
376
339
|
*
|
|
@@ -379,8 +342,6 @@ function instantiateReduxStore(key, options, registry, thunkArgs) {
|
|
|
379
342
|
*
|
|
380
343
|
* @return {Object} Selectors mapped to their resolution functions.
|
|
381
344
|
*/
|
|
382
|
-
|
|
383
|
-
|
|
384
345
|
function mapResolveSelectors(selectors, store) {
|
|
385
346
|
const {
|
|
386
347
|
getIsResolving,
|
|
@@ -400,14 +361,11 @@ function mapResolveSelectors(selectors, store) {
|
|
|
400
361
|
if (!selector.hasResolver) {
|
|
401
362
|
return async (...args) => selector.apply(null, args);
|
|
402
363
|
}
|
|
403
|
-
|
|
404
364
|
return (...args) => {
|
|
405
365
|
return new Promise((resolve, reject) => {
|
|
406
366
|
const hasFinished = () => selectors.hasFinishedResolution(selectorName, args);
|
|
407
|
-
|
|
408
367
|
const finalize = result => {
|
|
409
368
|
const hasFailed = selectors.hasResolutionFailed(selectorName, args);
|
|
410
|
-
|
|
411
369
|
if (hasFailed) {
|
|
412
370
|
const error = selectors.getResolutionError(selectorName, args);
|
|
413
371
|
reject(error);
|
|
@@ -415,16 +373,12 @@ function mapResolveSelectors(selectors, store) {
|
|
|
415
373
|
resolve(result);
|
|
416
374
|
}
|
|
417
375
|
};
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
376
|
+
const getResult = () => selector.apply(null, args);
|
|
377
|
+
// Trigger the selector (to trigger the resolver)
|
|
422
378
|
const result = getResult();
|
|
423
|
-
|
|
424
379
|
if (hasFinished()) {
|
|
425
380
|
return finalize(result);
|
|
426
381
|
}
|
|
427
|
-
|
|
428
382
|
const unsubscribe = store.subscribe(() => {
|
|
429
383
|
if (hasFinished()) {
|
|
430
384
|
unsubscribe();
|
|
@@ -435,6 +389,7 @@ function mapResolveSelectors(selectors, store) {
|
|
|
435
389
|
};
|
|
436
390
|
});
|
|
437
391
|
}
|
|
392
|
+
|
|
438
393
|
/**
|
|
439
394
|
* Maps selectors to functions that throw a suspense promise if not yet resolved.
|
|
440
395
|
*
|
|
@@ -443,26 +398,20 @@ function mapResolveSelectors(selectors, store) {
|
|
|
443
398
|
*
|
|
444
399
|
* @return {Object} Selectors mapped to their suspense functions.
|
|
445
400
|
*/
|
|
446
|
-
|
|
447
|
-
|
|
448
401
|
function mapSuspendSelectors(selectors, store) {
|
|
449
402
|
return mapValues(selectors, (selector, selectorName) => {
|
|
450
403
|
// Selector without a resolver doesn't have any extra suspense behavior.
|
|
451
404
|
if (!selector.hasResolver) {
|
|
452
405
|
return selector;
|
|
453
406
|
}
|
|
454
|
-
|
|
455
407
|
return (...args) => {
|
|
456
408
|
const result = selector.apply(null, args);
|
|
457
|
-
|
|
458
409
|
if (selectors.hasFinishedResolution(selectorName, args)) {
|
|
459
410
|
if (selectors.hasResolutionFailed(selectorName, args)) {
|
|
460
411
|
throw selectors.getResolutionError(selectorName, args);
|
|
461
412
|
}
|
|
462
|
-
|
|
463
413
|
return result;
|
|
464
414
|
}
|
|
465
|
-
|
|
466
415
|
throw new Promise(resolve => {
|
|
467
416
|
const unsubscribe = store.subscribe(() => {
|
|
468
417
|
if (selectors.hasFinishedResolution(selectorName, args)) {
|
|
@@ -474,27 +423,26 @@ function mapSuspendSelectors(selectors, store) {
|
|
|
474
423
|
};
|
|
475
424
|
});
|
|
476
425
|
}
|
|
426
|
+
|
|
477
427
|
/**
|
|
478
428
|
* Convert resolvers to a normalized form, an object with `fulfill` method and
|
|
479
429
|
* optional methods like `isFulfilled`.
|
|
480
430
|
*
|
|
481
431
|
* @param {Object} resolvers Resolver to convert
|
|
482
432
|
*/
|
|
483
|
-
|
|
484
|
-
|
|
485
433
|
function mapResolvers(resolvers) {
|
|
486
434
|
return mapValues(resolvers, resolver => {
|
|
487
435
|
if (resolver.fulfill) {
|
|
488
436
|
return resolver;
|
|
489
437
|
}
|
|
490
|
-
|
|
491
|
-
|
|
438
|
+
return {
|
|
439
|
+
...resolver,
|
|
492
440
|
// Copy the enumerable properties of the resolver function.
|
|
493
441
|
fulfill: resolver // Add the fulfill method.
|
|
494
|
-
|
|
495
442
|
};
|
|
496
443
|
});
|
|
497
444
|
}
|
|
445
|
+
|
|
498
446
|
/**
|
|
499
447
|
* Returns a selector with a matched resolver.
|
|
500
448
|
* Resolvers are side effects invoked once per argument set of a given selector call,
|
|
@@ -506,48 +454,37 @@ function mapResolvers(resolvers) {
|
|
|
506
454
|
* @param {Object} store The redux store to which the resolvers should be mapped.
|
|
507
455
|
* @param {Object} resolversCache Resolvers Cache.
|
|
508
456
|
*/
|
|
509
|
-
|
|
510
|
-
|
|
511
457
|
function mapSelectorWithResolver(selector, selectorName, resolver, store, resolversCache) {
|
|
512
458
|
function fulfillSelector(args) {
|
|
513
459
|
const state = store.getState();
|
|
514
|
-
|
|
515
460
|
if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === 'function' && resolver.isFulfilled(state, ...args)) {
|
|
516
461
|
return;
|
|
517
462
|
}
|
|
518
|
-
|
|
519
463
|
const {
|
|
520
464
|
metadata
|
|
521
465
|
} = store.__unstableOriginalGetState();
|
|
522
|
-
|
|
523
466
|
if (metadataSelectors.hasStartedResolution(metadata, selectorName, args)) {
|
|
524
467
|
return;
|
|
525
468
|
}
|
|
526
|
-
|
|
527
469
|
resolversCache.markAsRunning(selectorName, args);
|
|
528
470
|
setTimeout(async () => {
|
|
529
471
|
resolversCache.clear(selectorName, args);
|
|
530
472
|
store.dispatch(metadataActions.startResolution(selectorName, args));
|
|
531
|
-
|
|
532
473
|
try {
|
|
533
474
|
const action = resolver.fulfill(...args);
|
|
534
|
-
|
|
535
475
|
if (action) {
|
|
536
476
|
await store.dispatch(action);
|
|
537
477
|
}
|
|
538
|
-
|
|
539
478
|
store.dispatch(metadataActions.finishResolution(selectorName, args));
|
|
540
479
|
} catch (error) {
|
|
541
480
|
store.dispatch(metadataActions.failResolution(selectorName, args, error));
|
|
542
481
|
}
|
|
543
482
|
}, 0);
|
|
544
483
|
}
|
|
545
|
-
|
|
546
484
|
const selectorResolver = (...args) => {
|
|
547
485
|
fulfillSelector(args);
|
|
548
486
|
return selector(...args);
|
|
549
487
|
};
|
|
550
|
-
|
|
551
488
|
selectorResolver.hasResolver = true;
|
|
552
489
|
return selectorResolver;
|
|
553
490
|
}
|
|
@@ -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","fromEntries","entries","map","key","value","mapToObject","state","Map","createResolversCache","cache","isRunning","selectorName","args","get","clear","delete","markAsRunning","set","createBindingCache","bind","WeakMap","item","itemName","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","listeners","Set","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","resolvers","mapResolvers","bindSelector","selector","isRegistrySelector","boundSelector","__unstableOriginalGetState","root","resolver","hasResolver","mapSelectorWithResolver","bindMetadataSelector","metadata","boundPrivateSelectors","allSelectors","privateSelector","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","add","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","hasResolvingSelectors","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAT,EAAsBC,eAAtB,QAA6C,OAA7C;AACA,OAAOC,eAAP,MAA4B,wBAA5B;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;AAEA;AACA;AACA;;AACA,OAAOC,4BAAP,MAAyC,0BAAzC;AACA,SAASC,OAAT,QAAwB,oBAAxB;AAEA;AACA;AACA;;AACA,SAASC,eAAT,QAAgC,aAAhC;AACA,SAASC,IAAT,QAAqB,gBAArB;AACA,OAAOC,OAAP,MAAoB,uBAApB;AACA,OAAOC,8BAAP,MAA2C,+BAA3C;AACA,OAAOC,qBAAP,MAAkC,oBAAlC;AACA,OAAOC,eAAP,MAA4B,oBAA5B;AACA,OAAO,KAAKC,iBAAZ,MAAmC,sBAAnC;AACA,OAAO,KAAKC,eAAZ,MAAiC,oBAAjC;AAEA;;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,mBAAmB,GAAKC,KAAF,IAAa;AACxC,QAAMC,MAAM,GAAG,CAAE,GAAGD,KAAL,CAAf;;AACA,OAAM,IAAIE,CAAC,GAAGD,MAAM,CAACE,MAAP,GAAgB,CAA9B,EAAiCD,CAAC,IAAI,CAAtC,EAAyCA,CAAC,EAA1C,EAA+C;AAC9C,QAAKD,MAAM,CAAEC,CAAF,CAAN,KAAgBE,SAArB,EAAiC;AAChCH,MAAAA,MAAM,CAACI,MAAP,CAAeH,CAAf,EAAkB,CAAlB;AACA;AACD;;AACD,SAAOD,MAAP;AACA,CARD;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMK,SAAS,GAAG,CAAEC,GAAF,EAAOC,QAAP,KACjBC,MAAM,CAACC,WAAP,CACCD,MAAM,CAACE,OAAP,CAAgBJ,GAAhB,aAAgBA,GAAhB,cAAgBA,GAAhB,GAAuB,EAAvB,EAA4BK,GAA5B,CAAiC,CAAE,CAAEC,GAAF,EAAOC,KAAP,CAAF,KAAsB,CACtDD,GADsD,EAEtDL,QAAQ,CAAEM,KAAF,EAASD,GAAT,CAF8C,CAAvD,CADD,CADD,C,CAQA;;;AACA,MAAME,WAAW,GAAG,CAAEF,GAAF,EAAOG,KAAP,KAAkB;AACrC,MAAKA,KAAK,YAAYC,GAAtB,EAA4B;AAC3B,WAAOR,MAAM,CAACC,WAAP,CAAoBM,KAApB,CAAP;AACA;;AAED,SAAOA,KAAP;AACA,CAND;AAQA;AACA;AACA;AACA;AACA;;;AACA,SAASE,oBAAT,GAAgC;AAC/B,QAAMC,KAAK,GAAG,EAAd;AACA,SAAO;AACNC,IAAAA,SAAS,CAAEC,YAAF,EAAgBC,IAAhB,EAAuB;AAC/B,aACCH,KAAK,CAAEE,YAAF,CAAL,IACAF,KAAK,CAAEE,YAAF,CAAL,CAAsBE,GAAtB,CAA2BxB,mBAAmB,CAAEuB,IAAF,CAA9C,CAFD;AAIA,KANK;;AAQNE,IAAAA,KAAK,CAAEH,YAAF,EAAgBC,IAAhB,EAAuB;AAC3B,UAAKH,KAAK,CAAEE,YAAF,CAAV,EAA6B;AAC5BF,QAAAA,KAAK,CAAEE,YAAF,CAAL,CAAsBI,MAAtB,CAA8B1B,mBAAmB,CAAEuB,IAAF,CAAjD;AACA;AACD,KAZK;;AAcNI,IAAAA,aAAa,CAAEL,YAAF,EAAgBC,IAAhB,EAAuB;AACnC,UAAK,CAAEH,KAAK,CAAEE,YAAF,CAAZ,EAA+B;AAC9BF,QAAAA,KAAK,CAAEE,YAAF,CAAL,GAAwB,IAAIjC,gBAAJ,EAAxB;AACA;;AAED+B,MAAAA,KAAK,CAAEE,YAAF,CAAL,CAAsBM,GAAtB,CAA2B5B,mBAAmB,CAAEuB,IAAF,CAA9C,EAAwD,IAAxD;AACA;;AApBK,GAAP;AAsBA;;AAED,SAASM,kBAAT,CAA6BC,IAA7B,EAAoC;AACnC,QAAMV,KAAK,GAAG,IAAIW,OAAJ,EAAd;AAEA,SAAO;AACNP,IAAAA,GAAG,CAAEQ,IAAF,EAAQC,QAAR,EAAmB;AACrB,UAAIC,SAAS,GAAGd,KAAK,CAACI,GAAN,CAAWQ,IAAX,CAAhB;;AACA,UAAK,CAAEE,SAAP,EAAmB;AAClBA,QAAAA,SAAS,GAAGJ,IAAI,CAAEE,IAAF,EAAQC,QAAR,CAAhB;AACAb,QAAAA,KAAK,CAACQ,GAAN,CAAWI,IAAX,EAAiBE,SAAjB;AACA;;AACD,aAAOA,SAAP;AACA;;AARK,GAAP;AAUA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe,SAASC,gBAAT,CAA2BrB,GAA3B,EAAgCsB,OAAhC,EAA0C;AACxD,QAAMC,cAAc,GAAG,EAAvB;AACA,QAAMC,gBAAgB,GAAG,EAAzB;AACA,QAAMC,4BAA4B,GAAG;AACpCF,IAAAA,cADoC;AAEpCG,IAAAA,sBAAsB,EAAIC,OAAF,IAAe;AACtC/B,MAAAA,MAAM,CAACgC,MAAP,CAAeL,cAAf,EAA+BI,OAA/B;AACA,KAJmC;AAKpCH,IAAAA,gBALoC;AAMpCK,IAAAA,wBAAwB,EAAIC,SAAF,IAAiB;AAC1ClC,MAAAA,MAAM,CAACgC,MAAP,CAAeJ,gBAAf,EAAiCM,SAAjC;AACA;AARmC,GAArC;AAUA,QAAMC,eAAe,GAAG;AACvBC,IAAAA,IAAI,EAAEhC,GADiB;AAEvBiC,IAAAA,WAAW,EAAIC,QAAF,IAAgB;AAC5B;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,YAAMC,SAAS,GAAG,IAAIC,GAAJ,EAAlB;AACA,YAAMC,OAAO,GAAGf,OAAO,CAACe,OAAxB;AACA,YAAMC,SAAS,GAAG;AACjBJ,QAAAA,QADiB;;AAEjB,YAAIK,QAAJ,GAAe;AACd,iBAAOC,YAAP;AACA,SAJgB;;AAKjB,YAAIC,MAAJ,GAAa;AACZ,iBAAOC,cAAP;AACA,SAPgB;;AAQjB,YAAIC,aAAJ,GAAoB;AACnB,iBAAOC,mBAAmB,EAA1B;AACA;;AAVgB,OAAlB;AAaA,YAAMC,KAAK,GAAGC,qBAAqB,CAClC9C,GADkC,EAElCsB,OAFkC,EAGlCY,QAHkC,EAIlCI,SAJkC,CAAnC,CA5B4B,CAkC5B;AACA;;AACA3D,MAAAA,IAAI,CAAEkE,KAAF,EAASpB,4BAAT,CAAJ;AACA,YAAMsB,cAAc,GAAG1C,oBAAoB,EAA3C;;AAEA,eAAS2C,UAAT,CAAqBC,MAArB,EAA8B;AAC7B,eAAO,CAAE,GAAGxC,IAAL,KACNyC,OAAO,CAACC,OAAR,CAAiBN,KAAK,CAACN,QAAN,CAAgBU,MAAM,CAAE,GAAGxC,IAAL,CAAtB,CAAjB,CADD;AAEA;;AAED,YAAMkB,OAAO,GAAG,EACf,GAAGlC,SAAS,CAAER,eAAF,EAAmB+D,UAAnB,CADG;AAEf,WAAGvD,SAAS,CAAE6B,OAAO,CAACK,OAAV,EAAmBqB,UAAnB;AAFG,OAAhB;AAKA,YAAMI,mBAAmB,GAAGrC,kBAAkB,CAAEiC,UAAF,CAA9C;AACA,YAAMK,UAAU,GAAG,IAAIC,KAAJ,CAAW,MAAM,CAAE,CAAnB,EAAqB;AACvC5C,QAAAA,GAAG,EAAE,CAAE6C,MAAF,EAAUC,IAAV,KAAoB;AACxB,gBAAMC,aAAa,GAAGlC,cAAc,CAAEiC,IAAF,CAApC;AACA,iBAAOC,aAAa,GACjBL,mBAAmB,CAAC1C,GAApB,CAAyB+C,aAAzB,EAAwCD,IAAxC,CADiB,GAEjB7B,OAAO,CAAE6B,IAAF,CAFV;AAGA;AANsC,OAArB,CAAnB;AASA,YAAMhB,YAAY,GAAG,IAAIc,KAAJ,CAAWD,UAAX,EAAuB;AAC3CK,QAAAA,KAAK,EAAE,CAAEH,MAAF,EAAUI,OAAV,EAAmB,CAAEV,MAAF,CAAnB,KACNJ,KAAK,CAACN,QAAN,CAAgBU,MAAhB;AAF0C,OAAvB,CAArB;AAKAtE,MAAAA,IAAI,CAAEgD,OAAF,EAAW0B,UAAX,CAAJ;AAEA,YAAMO,SAAS,GAAGtC,OAAO,CAACsC,SAAR,GACfC,YAAY,CAAEvC,OAAO,CAACsC,SAAV,CADG,GAEf,EAFH;;AAIA,eAASE,YAAT,CAAuBC,QAAvB,EAAiCvD,YAAjC,EAAgD;AAC/C,YAAKuD,QAAQ,CAACC,kBAAd,EAAmC;AAClCD,UAAAA,QAAQ,CAAC7B,QAAT,GAAoBA,QAApB;AACA;;AACD,cAAM+B,aAAa,GAAG,CAAE,GAAGxD,IAAL,KAAe;AACpC,gBAAMN,KAAK,GAAG0C,KAAK,CAACqB,0BAAN,EAAd;;AACA,iBAAOH,QAAQ,CAAE5D,KAAK,CAACgE,IAAR,EAAc,GAAG1D,IAAjB,CAAf;AACA,SAHD;;AAKA,cAAM2D,QAAQ,GAAGR,SAAS,CAAEpD,YAAF,CAA1B;;AACA,YAAK,CAAE4D,QAAP,EAAkB;AACjBH,UAAAA,aAAa,CAACI,WAAd,GAA4B,KAA5B;AACA,iBAAOJ,aAAP;AACA;;AAED,eAAOK,uBAAuB,CAC7BL,aAD6B,EAE7BzD,YAF6B,EAG7B4D,QAH6B,EAI7BvB,KAJ6B,EAK7BE,cAL6B,CAA9B;AAOA;;AAED,eAASwB,oBAAT,CAA+BR,QAA/B,EAA0C;AACzC,cAAME,aAAa,GAAG,CAAE,GAAGxD,IAAL,KAAe;AACpC,gBAAMN,KAAK,GAAG0C,KAAK,CAACqB,0BAAN,EAAd;;AACA,iBAAOH,QAAQ,CAAE5D,KAAK,CAACqE,QAAR,EAAkB,GAAG/D,IAArB,CAAf;AACA,SAHD;;AAIAwD,QAAAA,aAAa,CAACI,WAAd,GAA4B,KAA5B;AACA,eAAOJ,aAAP;AACA;;AAED,YAAMnC,SAAS,GAAG,EACjB,GAAGrC,SAAS,CAAET,iBAAF,EAAqBuF,oBAArB,CADK;AAEjB,WAAG9E,SAAS,CAAE6B,OAAO,CAACQ,SAAV,EAAqBgC,YAArB;AAFK,OAAlB;AAKA,YAAMW,qBAAqB,GAAG1D,kBAAkB,CAAE+C,YAAF,CAAhD,CA5G4B,CA8G5B;AACA;;AACA,WAAM,MAAM,CAAEtD,YAAF,EAAgBuD,QAAhB,CAAZ,IAA0CnE,MAAM,CAACE,OAAP,CACzC0B,gBADyC,CAA1C,EAEI;AACHiD,QAAAA,qBAAqB,CAAC/D,GAAtB,CAA2BqD,QAA3B,EAAqCvD,YAArC;AACA;;AAED,YAAMkE,YAAY,GAAG,IAAIpB,KAAJ,CAAW,MAAM,CAAE,CAAnB,EAAqB;AACzC5C,QAAAA,GAAG,EAAE,CAAE6C,MAAF,EAAUC,IAAV,KAAoB;AACxB,gBAAMmB,eAAe,GAAGnD,gBAAgB,CAAEgC,IAAF,CAAxC;AACA,iBAAOmB,eAAe,GACnBF,qBAAqB,CAAC/D,GAAtB,CAA2BiE,eAA3B,EAA4CnB,IAA5C,CADmB,GAEnB1B,SAAS,CAAE0B,IAAF,CAFZ;AAGA;AANwC,OAArB,CAArB;AASA,YAAMd,cAAc,GAAG,IAAIY,KAAJ,CAAWoB,YAAX,EAAyB;AAC/ChB,QAAAA,KAAK,EAAE,CAAEH,MAAF,EAAUI,OAAV,EAAmB,CAAEI,QAAF,CAAnB,KACNA,QAAQ,CAAElB,KAAK,CAACqB,0BAAN,EAAF;AAFsC,OAAzB,CAAvB;AAKAvF,MAAAA,IAAI,CAAEmD,SAAF,EAAa4C,YAAb,CAAJ;AAEA,YAAME,gBAAgB,GAAGC,mBAAmB,CAAE/C,SAAF,EAAae,KAAb,CAA5C;AACA,YAAMiC,gBAAgB,GAAGC,mBAAmB,CAAEjD,SAAF,EAAae,KAAb,CAA5C;;AAEA,YAAMmC,YAAY,GAAG,MAAMlD,SAA3B;;AACA,YAAMmD,UAAU,GAAG,MAAMtD,OAAzB;;AACA,YAAMiB,mBAAmB,GAAG,MAAMgC,gBAAlC;;AACA,YAAMM,mBAAmB,GAAG,MAAMJ,gBAAlC,CA5I4B,CA8I5B;AACA;AACA;;;AACAjC,MAAAA,KAAK,CAACqB,0BAAN,GAAmCrB,KAAK,CAACsC,QAAzC;;AACAtC,MAAAA,KAAK,CAACsC,QAAN,GAAiB,MAAMtC,KAAK,CAACqB,0BAAN,GAAmCC,IAA1D,CAlJ4B,CAoJ5B;AACA;;;AACA,YAAMiB,SAAS,GACdvC,KAAK,KACDwC,QAAF,IAAgB;AACjBlD,QAAAA,SAAS,CAACmD,GAAV,CAAeD,QAAf;AAEA,eAAO,MAAMlD,SAAS,CAACvB,MAAV,CAAkByE,QAAlB,CAAb;AACA,OALI,CADN;;AAQA,UAAIE,SAAS,GAAG1C,KAAK,CAACqB,0BAAN,EAAhB;;AACArB,MAAAA,KAAK,CAACuC,SAAN,CAAiB,MAAM;AACtB,cAAMjF,KAAK,GAAG0C,KAAK,CAACqB,0BAAN,EAAd;;AACA,cAAMsB,UAAU,GAAGrF,KAAK,KAAKoF,SAA7B;AACAA,QAAAA,SAAS,GAAGpF,KAAZ;;AAEA,YAAKqF,UAAL,EAAkB;AACjB,eAAM,MAAMH,QAAZ,IAAwBlD,SAAxB,EAAoC;AACnCkD,YAAAA,QAAQ;AACR;AACD;AACD,OAVD,EA/J4B,CA2K5B;AACA;;AACA,aAAO;AACNhD,QAAAA,OADM;AAENQ,QAAAA,KAFM;AAGNlB,QAAAA,OAHM;AAING,QAAAA,SAJM;AAKN8B,QAAAA,SALM;AAMNoB,QAAAA,YANM;AAONpC,QAAAA,mBAPM;AAQNsC,QAAAA,mBARM;AASND,QAAAA,UATM;AAUNG,QAAAA;AAVM,OAAP;AAYA;AA3LsB,GAAxB,CAbwD,CA2MxD;AACA;AACA;;AACAzG,EAAAA,IAAI,CAAEoD,eAAF,EAAmBN,4BAAnB,CAAJ;AAEA,SAAOM,eAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASe,qBAAT,CAAgC9C,GAAhC,EAAqCsB,OAArC,EAA8CY,QAA9C,EAAwDI,SAAxD,EAAoE;AACnE,QAAMmD,QAAQ,GAAG,EAChB,GAAGnE,OAAO,CAACmE,QADK;AAEhB,OAAG/G;AAFa,GAAjB;AAKA,QAAMgH,kBAAkB,GAAGjG,SAAS,CAAEgG,QAAF,EAAcE,OAAF,IAC/CA,OAAO,CAACC,iBAAR,GAA4BD,OAAO,CAAEzD,QAAF,CAAnC,GAAkDyD,OADf,CAApC;AAIA,QAAME,WAAW,GAAG,CACnBhH,8BAA8B,CAAEqD,QAAF,EAAYlC,GAAZ,CADX,EAEnBpB,OAFmB,EAGnBJ,4BAA4B,CAAEkH,kBAAF,CAHT,EAInB5G,qBAAqB,CAAEwD,SAAF,CAJF,CAApB;AAOA,QAAMwD,SAAS,GAAG,CAAEzH,eAAe,CAAE,GAAGwH,WAAL,CAAjB,CAAlB;;AACA,MACC,OAAOE,MAAP,KAAkB,WAAlB,IACAA,MAAM,CAACC,4BAFR,EAGE;AACDF,IAAAA,SAAS,CAACG,IAAV,CACCF,MAAM,CAACC,4BAAP,CAAqC;AACpChE,MAAAA,IAAI,EAAEhC,GAD8B;AAEpCkG,MAAAA,UAAU,EAAElG,GAFwB;AAGpCmG,MAAAA,SAAS,EAAE;AACVC,QAAAA,QAAQ,EAAElG;AADA;AAHyB,KAArC,CADD;AASA;;AAED,QAAM;AAAEmC,IAAAA,OAAF;AAAWgE,IAAAA;AAAX,MAA4B/E,OAAlC;AACA,QAAMgF,eAAe,GAAGhI,eAAe,CAAE;AACxCkG,IAAAA,QAAQ,EAAEzF,eAD8B;AAExCoF,IAAAA,IAAI,EAAE9B;AAFkC,GAAF,CAAvC;AAKA,SAAOjE,WAAW,CACjBkI,eADiB,EAEjB;AAAEnC,IAAAA,IAAI,EAAEkC;AAAR,GAFiB,EAGjB5H,OAAO,CAAEqH,SAAF,CAHU,CAAlB;AAKA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASjB,mBAAT,CAA8B/C,SAA9B,EAAyCe,KAAzC,EAAiD;AAChD,QAAM;AACL0D,IAAAA,cADK;AAELC,IAAAA,oBAFK;AAGLC,IAAAA,qBAHK;AAILC,IAAAA,mBAJK;AAKLC,IAAAA,WALK;AAMLC,IAAAA,kBANK;AAOLC,IAAAA,kBAPK;AAQLC,IAAAA,kBARK;AASLC,IAAAA,qBATK;AAUL,OAAGC;AAVE,MAWFlF,SAXJ;AAaA,SAAOrC,SAAS,CAAEuH,cAAF,EAAkB,CAAEjD,QAAF,EAAYvD,YAAZ,KAA8B;AAC/D;AACA;AACA,QAAK,CAAEuD,QAAQ,CAACM,WAAhB,EAA8B;AAC7B,aAAO,OAAQ,GAAG5D,IAAX,KAAqBsD,QAAQ,CAACL,KAAT,CAAgB,IAAhB,EAAsBjD,IAAtB,CAA5B;AACA;;AAED,WAAO,CAAE,GAAGA,IAAL,KAAe;AACrB,aAAO,IAAIyC,OAAJ,CAAa,CAAEC,OAAF,EAAW8D,MAAX,KAAuB;AAC1C,cAAMC,WAAW,GAAG,MACnBpF,SAAS,CAAC2E,qBAAV,CAAiCjG,YAAjC,EAA+CC,IAA/C,CADD;;AAEA,cAAM0G,QAAQ,GAAK/H,MAAF,IAAc;AAC9B,gBAAMgI,SAAS,GAAGtF,SAAS,CAAC4E,mBAAV,CACjBlG,YADiB,EAEjBC,IAFiB,CAAlB;;AAIA,cAAK2G,SAAL,EAAiB;AAChB,kBAAMC,KAAK,GAAGvF,SAAS,CAACgF,kBAAV,CACbtG,YADa,EAEbC,IAFa,CAAd;AAIAwG,YAAAA,MAAM,CAAEI,KAAF,CAAN;AACA,WAND,MAMO;AACNlE,YAAAA,OAAO,CAAE/D,MAAF,CAAP;AACA;AACD,SAdD;;AAeA,cAAMkI,SAAS,GAAG,MAAMvD,QAAQ,CAACL,KAAT,CAAgB,IAAhB,EAAsBjD,IAAtB,CAAxB,CAlB0C,CAmB1C;;;AACA,cAAMrB,MAAM,GAAGkI,SAAS,EAAxB;;AACA,YAAKJ,WAAW,EAAhB,EAAqB;AACpB,iBAAOC,QAAQ,CAAE/H,MAAF,CAAf;AACA;;AAED,cAAMmI,WAAW,GAAG1E,KAAK,CAACuC,SAAN,CAAiB,MAAM;AAC1C,cAAK8B,WAAW,EAAhB,EAAqB;AACpBK,YAAAA,WAAW;AACXJ,YAAAA,QAAQ,CAAEG,SAAS,EAAX,CAAR;AACA;AACD,SALmB,CAApB;AAMA,OA/BM,CAAP;AAgCA,KAjCD;AAkCA,GAzCe,CAAhB;AA0CA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASvC,mBAAT,CAA8BjD,SAA9B,EAAyCe,KAAzC,EAAiD;AAChD,SAAOpD,SAAS,CAAEqC,SAAF,EAAa,CAAEiC,QAAF,EAAYvD,YAAZ,KAA8B;AAC1D;AACA,QAAK,CAAEuD,QAAQ,CAACM,WAAhB,EAA8B;AAC7B,aAAON,QAAP;AACA;;AAED,WAAO,CAAE,GAAGtD,IAAL,KAAe;AACrB,YAAMrB,MAAM,GAAG2E,QAAQ,CAACL,KAAT,CAAgB,IAAhB,EAAsBjD,IAAtB,CAAf;;AAEA,UAAKqB,SAAS,CAAC2E,qBAAV,CAAiCjG,YAAjC,EAA+CC,IAA/C,CAAL,EAA6D;AAC5D,YAAKqB,SAAS,CAAC4E,mBAAV,CAA+BlG,YAA/B,EAA6CC,IAA7C,CAAL,EAA2D;AAC1D,gBAAMqB,SAAS,CAACgF,kBAAV,CAA8BtG,YAA9B,EAA4CC,IAA5C,CAAN;AACA;;AAED,eAAOrB,MAAP;AACA;;AAED,YAAM,IAAI8D,OAAJ,CAAeC,OAAF,IAAe;AACjC,cAAMoE,WAAW,GAAG1E,KAAK,CAACuC,SAAN,CAAiB,MAAM;AAC1C,cACCtD,SAAS,CAAC2E,qBAAV,CAAiCjG,YAAjC,EAA+CC,IAA/C,CADD,EAEE;AACD0C,YAAAA,OAAO;AACPoE,YAAAA,WAAW;AACX;AACD,SAPmB,CAApB;AAQA,OATK,CAAN;AAUA,KArBD;AAsBA,GA5Be,CAAhB;AA6BA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS1D,YAAT,CAAuBD,SAAvB,EAAmC;AAClC,SAAOnE,SAAS,CAAEmE,SAAF,EAAeQ,QAAF,IAAgB;AAC5C,QAAKA,QAAQ,CAACoD,OAAd,EAAwB;AACvB,aAAOpD,QAAP;AACA;;AAED,WAAO,EACN,GAAGA,QADG;AACO;AACboD,MAAAA,OAAO,EAAEpD,QAFH,CAEa;;AAFb,KAAP;AAIA,GATe,CAAhB;AAUA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASE,uBAAT,CACCP,QADD,EAECvD,YAFD,EAGC4D,QAHD,EAICvB,KAJD,EAKCE,cALD,EAME;AACD,WAAS0E,eAAT,CAA0BhH,IAA1B,EAAiC;AAChC,UAAMN,KAAK,GAAG0C,KAAK,CAACsC,QAAN,EAAd;;AAEA,QACCpC,cAAc,CAACxC,SAAf,CAA0BC,YAA1B,EAAwCC,IAAxC,KACE,OAAO2D,QAAQ,CAACsD,WAAhB,KAAgC,UAAhC,IACDtD,QAAQ,CAACsD,WAAT,CAAsBvH,KAAtB,EAA6B,GAAGM,IAAhC,CAHF,EAIE;AACD;AACA;;AAED,UAAM;AAAE+D,MAAAA;AAAF,QAAe3B,KAAK,CAACqB,0BAAN,EAArB;;AAEA,QACClF,iBAAiB,CAACwH,oBAAlB,CACChC,QADD,EAEChE,YAFD,EAGCC,IAHD,CADD,EAME;AACD;AACA;;AAEDsC,IAAAA,cAAc,CAAClC,aAAf,CAA8BL,YAA9B,EAA4CC,IAA5C;AAEAkH,IAAAA,UAAU,CAAE,YAAY;AACvB5E,MAAAA,cAAc,CAACpC,KAAf,CAAsBH,YAAtB,EAAoCC,IAApC;AACAoC,MAAAA,KAAK,CAACN,QAAN,CACCtD,eAAe,CAAC2I,eAAhB,CAAiCpH,YAAjC,EAA+CC,IAA/C,CADD;;AAGA,UAAI;AACH,cAAMwC,MAAM,GAAGmB,QAAQ,CAACoD,OAAT,CAAkB,GAAG/G,IAArB,CAAf;;AACA,YAAKwC,MAAL,EAAc;AACb,gBAAMJ,KAAK,CAACN,QAAN,CAAgBU,MAAhB,CAAN;AACA;;AACDJ,QAAAA,KAAK,CAACN,QAAN,CACCtD,eAAe,CAAC4I,gBAAhB,CAAkCrH,YAAlC,EAAgDC,IAAhD,CADD;AAGA,OARD,CAQE,OAAQ4G,KAAR,EAAgB;AACjBxE,QAAAA,KAAK,CAACN,QAAN,CACCtD,eAAe,CAAC6I,cAAhB,CAAgCtH,YAAhC,EAA8CC,IAA9C,EAAoD4G,KAApD,CADD;AAGA;AACD,KAlBS,EAkBP,CAlBO,CAAV;AAmBA;;AAED,QAAMU,gBAAgB,GAAG,CAAE,GAAGtH,IAAL,KAAe;AACvCgH,IAAAA,eAAe,CAAEhH,IAAF,CAAf;AACA,WAAOsD,QAAQ,CAAE,GAAGtD,IAAL,CAAf;AACA,GAHD;;AAIAsH,EAAAA,gBAAgB,CAAC1D,WAAjB,GAA+B,IAA/B;AACA,SAAO0D,gBAAP;AACA","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/** @typedef {import('../types').ListenerFunction} ListenerFunction */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\n\n// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item, itemName ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item, itemName );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\t/**\n\t\t\t * Stores listener functions registered with `subscribe()`.\n\t\t\t *\n\t\t\t * When functions register to listen to store changes with\n\t\t\t * `subscribe()` they get added here. Although Redux offers\n\t\t\t * its own `subscribe()` function directly, by wrapping the\n\t\t\t * subscription in this store instance it's possible to\n\t\t\t * optimize checking if the state has changed before calling\n\t\t\t * each listener.\n\t\t\t *\n\t\t\t * @type {Set<ListenerFunction>}\n\t\t\t */\n\t\t\tconst listeners = new Set();\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction, prop )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tconst resolvers = options.resolvers\n\t\t\t\t? mapResolvers( options.resolvers )\n\t\t\t\t: {};\n\n\t\t\tfunction bindSelector( selector, selectorName ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\n\t\t\t\tconst resolver = resolvers[ selectorName ];\n\t\t\t\tif ( ! resolver ) {\n\t\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\t\treturn boundSelector;\n\t\t\t\t}\n\n\t\t\t\treturn mapSelectorWithResolver(\n\t\t\t\t\tboundSelector,\n\t\t\t\t\tselectorName,\n\t\t\t\t\tresolver,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( selector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tconst selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const [ selectorName, selector ] of Object.entries(\n\t\t\t\tprivateSelectors\n\t\t\t) ) {\n\t\t\t\tboundPrivateSelectors.get( selector, selectorName );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector, prop )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlisteners.add( listener );\n\n\t\t\t\t\treturn () => listeners.delete( listener );\n\t\t\t\t} );\n\n\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\tstore.subscribe( () => {\n\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\tlastState = state;\n\n\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\tfor ( const listener of listeners ) {\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tcompose( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\thasResolvingSelectors,\n\t\t...storeSelectors\n\t} = selectors;\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Maps selectors to functions that throw a suspense promise if not yet resolved.\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n}\n\n/**\n * Returns a selector with a matched resolver.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} selector The selector function to be bound.\n * @param {string} selectorName The selector name.\n * @param {Object} resolver Resolver to call.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorWithResolver(\n\tselector,\n\tselectorName,\n\tresolver,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\tconst selectorResolver = ( ...args ) => {\n\t\tfulfillSelector( args );\n\t\treturn selector( ...args );\n\t};\n\tselectorResolver.hasResolver = true;\n\treturn selectorResolver;\n}\n"]}
|
|
1
|
+
{"version":3,"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","itemName","boundItem","createReduxStore","options","privateActions","privateSelectors","privateRegistrationFunctions","registerPrivateActions","actions","assign","registerPrivateSelectors","selectors","storeDescriptor","name","instantiate","registry","listeners","Set","reducer","thunkArgs","dispatch","thunkActions","select","thunkSelectors","resolveSelect","getResolveSelectors","store","instantiateReduxStore","resolversCache","bindAction","action","Promise","resolve","boundPrivateActions","allActions","Proxy","target","prop","privateAction","apply","thisArg","resolvers","mapResolvers","bindSelector","selector","isRegistrySelector","boundSelector","__unstableOriginalGetState","root","resolver","hasResolver","mapSelectorWithResolver","bindMetadataSelector","metadata","boundPrivateSelectors","allSelectors","privateSelector","resolveSelectors","mapResolveSelectors","suspendSelectors","mapSuspendSelectors","getSelectors","getActions","getSuspendSelectors","getState","subscribe","listener","add","lastState","hasChanged","controls","normalizedControls","control","isRegistryControl","middlewares","enhancers","window","__REDUX_DEVTOOLS_EXTENSION__","push","instanceId","serialize","replacer","initialState","enhancedReducer","getIsResolving","hasStartedResolution","hasFinishedResolution","hasResolutionFailed","isResolving","getCachedResolvers","getResolutionState","getResolutionError","hasResolvingSelectors","storeSelectors","reject","hasFinished","finalize","hasFailed","error","getResult","unsubscribe","fulfill","fulfillSelector","isFulfilled","setTimeout","startResolution","finishResolution","failResolution","selectorResolver"],"sources":["@wordpress/data/src/redux-store/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { createStore, applyMiddleware } from 'redux';\nimport 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/** @typedef {import('../types').ListenerFunction} ListenerFunction */\n/**\n * @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor\n * @template {import('../types').AnyConfig} C\n */\n/**\n * @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n */\n\nconst trimUndefinedValues = ( array ) => {\n\tconst result = [ ...array ];\n\tfor ( let i = result.length - 1; i >= 0; i-- ) {\n\t\tif ( result[ i ] === undefined ) {\n\t\t\tresult.splice( i, 1 );\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * Creates a new object with the same keys, but with `callback()` called as\n * a transformer function on each of the values.\n *\n * @param {Object} obj The object to transform.\n * @param {Function} callback The function to transform each object value.\n * @return {Array} Transformed object.\n */\nconst mapValues = ( obj, callback ) =>\n\tObject.fromEntries(\n\t\tObject.entries( obj ?? {} ).map( ( [ key, value ] ) => [\n\t\t\tkey,\n\t\t\tcallback( value, key ),\n\t\t] )\n\t);\n\n// Convert Map objects to plain objects\nconst mapToObject = ( key, state ) => {\n\tif ( state instanceof Map ) {\n\t\treturn Object.fromEntries( state );\n\t}\n\n\treturn state;\n};\n\n/**\n * Create a cache to track whether resolvers started running or not.\n *\n * @return {Object} Resolvers Cache.\n */\nfunction createResolversCache() {\n\tconst cache = {};\n\treturn {\n\t\tisRunning( selectorName, args ) {\n\t\t\treturn (\n\t\t\t\tcache[ selectorName ] &&\n\t\t\t\tcache[ selectorName ].get( trimUndefinedValues( args ) )\n\t\t\t);\n\t\t},\n\n\t\tclear( selectorName, args ) {\n\t\t\tif ( cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ].delete( trimUndefinedValues( args ) );\n\t\t\t}\n\t\t},\n\n\t\tmarkAsRunning( selectorName, args ) {\n\t\t\tif ( ! cache[ selectorName ] ) {\n\t\t\t\tcache[ selectorName ] = new EquivalentKeyMap();\n\t\t\t}\n\n\t\t\tcache[ selectorName ].set( trimUndefinedValues( args ), true );\n\t\t},\n\t};\n}\n\nfunction createBindingCache( bind ) {\n\tconst cache = new WeakMap();\n\n\treturn {\n\t\tget( item, itemName ) {\n\t\t\tlet boundItem = cache.get( item );\n\t\t\tif ( ! boundItem ) {\n\t\t\t\tboundItem = bind( item, itemName );\n\t\t\t\tcache.set( item, boundItem );\n\t\t\t}\n\t\t\treturn boundItem;\n\t\t},\n\t};\n}\n\n/**\n * Creates a data store descriptor for the provided Redux store configuration containing\n * properties describing reducer, actions, selectors, controls and resolvers.\n *\n * @example\n * ```js\n * import { createReduxStore } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * ```\n *\n * @template State\n * @template {Record<string,import('../../types').ActionCreator>} Actions\n * @template Selectors\n * @param {string} key Unique namespace identifier.\n * @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n *\n * @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.\n */\nexport default function createReduxStore( key, options ) {\n\tconst privateActions = {};\n\tconst privateSelectors = {};\n\tconst privateRegistrationFunctions = {\n\t\tprivateActions,\n\t\tregisterPrivateActions: ( actions ) => {\n\t\t\tObject.assign( privateActions, actions );\n\t\t},\n\t\tprivateSelectors,\n\t\tregisterPrivateSelectors: ( selectors ) => {\n\t\t\tObject.assign( privateSelectors, selectors );\n\t\t},\n\t};\n\tconst storeDescriptor = {\n\t\tname: key,\n\t\tinstantiate: ( registry ) => {\n\t\t\t/**\n\t\t\t * Stores listener functions registered with `subscribe()`.\n\t\t\t *\n\t\t\t * When functions register to listen to store changes with\n\t\t\t * `subscribe()` they get added here. Although Redux offers\n\t\t\t * its own `subscribe()` function directly, by wrapping the\n\t\t\t * subscription in this store instance it's possible to\n\t\t\t * optimize checking if the state has changed before calling\n\t\t\t * each listener.\n\t\t\t *\n\t\t\t * @type {Set<ListenerFunction>}\n\t\t\t */\n\t\t\tconst listeners = new Set();\n\t\t\tconst reducer = options.reducer;\n\t\t\tconst thunkArgs = {\n\t\t\t\tregistry,\n\t\t\t\tget dispatch() {\n\t\t\t\t\treturn thunkActions;\n\t\t\t\t},\n\t\t\t\tget select() {\n\t\t\t\t\treturn thunkSelectors;\n\t\t\t\t},\n\t\t\t\tget resolveSelect() {\n\t\t\t\t\treturn getResolveSelectors();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst store = instantiateReduxStore(\n\t\t\t\tkey,\n\t\t\t\toptions,\n\t\t\t\tregistry,\n\t\t\t\tthunkArgs\n\t\t\t);\n\t\t\t// Expose the private registration functions on the store\n\t\t\t// so they can be copied to a sub registry in registry.js.\n\t\t\tlock( store, privateRegistrationFunctions );\n\t\t\tconst resolversCache = createResolversCache();\n\n\t\t\tfunction bindAction( action ) {\n\t\t\t\treturn ( ...args ) =>\n\t\t\t\t\tPromise.resolve( store.dispatch( action( ...args ) ) );\n\t\t\t}\n\n\t\t\tconst actions = {\n\t\t\t\t...mapValues( metadataActions, bindAction ),\n\t\t\t\t...mapValues( options.actions, bindAction ),\n\t\t\t};\n\n\t\t\tconst boundPrivateActions = createBindingCache( bindAction );\n\t\t\tconst allActions = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateAction = privateActions[ prop ];\n\t\t\t\t\treturn privateAction\n\t\t\t\t\t\t? boundPrivateActions.get( privateAction, prop )\n\t\t\t\t\t\t: actions[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkActions = new Proxy( allActions, {\n\t\t\t\tapply: ( target, thisArg, [ action ] ) =>\n\t\t\t\t\tstore.dispatch( action ),\n\t\t\t} );\n\n\t\t\tlock( actions, allActions );\n\n\t\t\tconst resolvers = options.resolvers\n\t\t\t\t? mapResolvers( options.resolvers )\n\t\t\t\t: {};\n\n\t\t\tfunction bindSelector( selector, selectorName ) {\n\t\t\t\tif ( selector.isRegistrySelector ) {\n\t\t\t\t\tselector.registry = registry;\n\t\t\t\t}\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.root, ...args );\n\t\t\t\t};\n\n\t\t\t\tconst resolver = resolvers[ selectorName ];\n\t\t\t\tif ( ! resolver ) {\n\t\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\t\treturn boundSelector;\n\t\t\t\t}\n\n\t\t\t\treturn mapSelectorWithResolver(\n\t\t\t\t\tboundSelector,\n\t\t\t\t\tselectorName,\n\t\t\t\t\tresolver,\n\t\t\t\t\tstore,\n\t\t\t\t\tresolversCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction bindMetadataSelector( selector ) {\n\t\t\t\tconst boundSelector = ( ...args ) => {\n\t\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\t\treturn selector( state.metadata, ...args );\n\t\t\t\t};\n\t\t\t\tboundSelector.hasResolver = false;\n\t\t\t\treturn boundSelector;\n\t\t\t}\n\n\t\t\tconst selectors = {\n\t\t\t\t...mapValues( metadataSelectors, bindMetadataSelector ),\n\t\t\t\t...mapValues( options.selectors, bindSelector ),\n\t\t\t};\n\n\t\t\tconst boundPrivateSelectors = createBindingCache( bindSelector );\n\n\t\t\t// Pre-bind the private selectors that have been registered by the time of\n\t\t\t// instantiation, so that registry selectors are bound to the registry.\n\t\t\tfor ( const [ selectorName, selector ] of Object.entries(\n\t\t\t\tprivateSelectors\n\t\t\t) ) {\n\t\t\t\tboundPrivateSelectors.get( selector, selectorName );\n\t\t\t}\n\n\t\t\tconst allSelectors = new Proxy( () => {}, {\n\t\t\t\tget: ( target, prop ) => {\n\t\t\t\t\tconst privateSelector = privateSelectors[ prop ];\n\t\t\t\t\treturn privateSelector\n\t\t\t\t\t\t? boundPrivateSelectors.get( privateSelector, prop )\n\t\t\t\t\t\t: selectors[ prop ];\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\tconst thunkSelectors = new Proxy( allSelectors, {\n\t\t\t\tapply: ( target, thisArg, [ selector ] ) =>\n\t\t\t\t\tselector( store.__unstableOriginalGetState() ),\n\t\t\t} );\n\n\t\t\tlock( selectors, allSelectors );\n\n\t\t\tconst resolveSelectors = mapResolveSelectors( selectors, store );\n\t\t\tconst suspendSelectors = mapSuspendSelectors( selectors, store );\n\n\t\t\tconst getSelectors = () => selectors;\n\t\t\tconst getActions = () => actions;\n\t\t\tconst getResolveSelectors = () => resolveSelectors;\n\t\t\tconst getSuspendSelectors = () => suspendSelectors;\n\n\t\t\t// We have some modules monkey-patching the store object\n\t\t\t// It's wrong to do so but until we refactor all of our effects to controls\n\t\t\t// We need to keep the same \"store\" instance here.\n\t\t\tstore.__unstableOriginalGetState = store.getState;\n\t\t\tstore.getState = () => store.__unstableOriginalGetState().root;\n\n\t\t\t// Customize subscribe behavior to call listeners only on effective change,\n\t\t\t// not on every dispatch.\n\t\t\tconst subscribe =\n\t\t\t\tstore &&\n\t\t\t\t( ( listener ) => {\n\t\t\t\t\tlisteners.add( listener );\n\n\t\t\t\t\treturn () => listeners.delete( listener );\n\t\t\t\t} );\n\n\t\t\tlet lastState = store.__unstableOriginalGetState();\n\t\t\tstore.subscribe( () => {\n\t\t\t\tconst state = store.__unstableOriginalGetState();\n\t\t\t\tconst hasChanged = state !== lastState;\n\t\t\t\tlastState = state;\n\n\t\t\t\tif ( hasChanged ) {\n\t\t\t\t\tfor ( const listener of listeners ) {\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// This can be simplified to just { subscribe, getSelectors, getActions }\n\t\t\t// Once we remove the use function.\n\t\t\treturn {\n\t\t\t\treducer,\n\t\t\t\tstore,\n\t\t\t\tactions,\n\t\t\t\tselectors,\n\t\t\t\tresolvers,\n\t\t\t\tgetSelectors,\n\t\t\t\tgetResolveSelectors,\n\t\t\t\tgetSuspendSelectors,\n\t\t\t\tgetActions,\n\t\t\t\tsubscribe,\n\t\t\t};\n\t\t},\n\t};\n\n\t// Expose the private registration functions on the store\n\t// descriptor. That's a natural choice since that's where the\n\t// public actions and selectors are stored .\n\tlock( storeDescriptor, privateRegistrationFunctions );\n\n\treturn storeDescriptor;\n}\n\n/**\n * Creates a redux store for a namespace.\n *\n * @param {string} key Unique namespace identifier.\n * @param {Object} options Registered store options, with properties\n * describing reducer, actions, selectors,\n * and resolvers.\n * @param {DataRegistry} registry Registry reference.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @return {Object} Newly created redux store.\n */\nfunction instantiateReduxStore( key, options, registry, thunkArgs ) {\n\tconst controls = {\n\t\t...options.controls,\n\t\t...builtinControls,\n\t};\n\n\tconst normalizedControls = mapValues( controls, ( control ) =>\n\t\tcontrol.isRegistryControl ? control( registry ) : control\n\t);\n\n\tconst middlewares = [\n\t\tcreateResolversCacheMiddleware( registry, key ),\n\t\tpromise,\n\t\tcreateReduxRoutineMiddleware( normalizedControls ),\n\t\tcreateThunkMiddleware( thunkArgs ),\n\t];\n\n\tconst enhancers = [ applyMiddleware( ...middlewares ) ];\n\tif (\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__REDUX_DEVTOOLS_EXTENSION__\n\t) {\n\t\tenhancers.push(\n\t\t\twindow.__REDUX_DEVTOOLS_EXTENSION__( {\n\t\t\t\tname: key,\n\t\t\t\tinstanceId: key,\n\t\t\t\tserialize: {\n\t\t\t\t\treplacer: mapToObject,\n\t\t\t\t},\n\t\t\t} )\n\t\t);\n\t}\n\n\tconst { reducer, initialState } = options;\n\tconst enhancedReducer = combineReducers( {\n\t\tmetadata: metadataReducer,\n\t\troot: reducer,\n\t} );\n\n\treturn createStore(\n\t\tenhancedReducer,\n\t\t{ root: initialState },\n\t\tcompose( enhancers )\n\t);\n}\n\n/**\n * Maps selectors to functions that return a resolution promise for them\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their resolution functions.\n */\nfunction mapResolveSelectors( selectors, store ) {\n\tconst {\n\t\tgetIsResolving,\n\t\thasStartedResolution,\n\t\thasFinishedResolution,\n\t\thasResolutionFailed,\n\t\tisResolving,\n\t\tgetCachedResolvers,\n\t\tgetResolutionState,\n\t\tgetResolutionError,\n\t\thasResolvingSelectors,\n\t\t...storeSelectors\n\t} = selectors;\n\n\treturn mapValues( storeSelectors, ( selector, selectorName ) => {\n\t\t// If the selector doesn't have a resolver, just convert the return value\n\t\t// (including exceptions) to a Promise, no additional extra behavior is needed.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn async ( ...args ) => selector.apply( null, args );\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst hasFinished = () =>\n\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args );\n\t\t\t\tconst finalize = ( result ) => {\n\t\t\t\t\tconst hasFailed = selectors.hasResolutionFailed(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasFailed ) {\n\t\t\t\t\t\tconst error = selectors.getResolutionError(\n\t\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\t\targs\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve( result );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst getResult = () => selector.apply( null, args );\n\t\t\t\t// Trigger the selector (to trigger the resolver)\n\t\t\t\tconst result = getResult();\n\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\treturn finalize( result );\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif ( hasFinished() ) {\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t\tfinalize( getResult() );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Maps selectors to functions that throw a suspense promise if not yet resolved.\n *\n * @param {Object} selectors Selectors to map.\n * @param {Object} store The redux store the selectors select from.\n *\n * @return {Object} Selectors mapped to their suspense functions.\n */\nfunction mapSuspendSelectors( selectors, store ) {\n\treturn mapValues( selectors, ( selector, selectorName ) => {\n\t\t// Selector without a resolver doesn't have any extra suspense behavior.\n\t\tif ( ! selector.hasResolver ) {\n\t\t\treturn selector;\n\t\t}\n\n\t\treturn ( ...args ) => {\n\t\t\tconst result = selector.apply( null, args );\n\n\t\t\tif ( selectors.hasFinishedResolution( selectorName, args ) ) {\n\t\t\t\tif ( selectors.hasResolutionFailed( selectorName, args ) ) {\n\t\t\t\t\tthrow selectors.getResolutionError( selectorName, args );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tthrow new Promise( ( resolve ) => {\n\t\t\t\tconst unsubscribe = store.subscribe( () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.hasFinishedResolution( selectorName, args )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tunsubscribe();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t} );\n}\n\n/**\n * Convert resolvers to a normalized form, an object with `fulfill` method and\n * optional methods like `isFulfilled`.\n *\n * @param {Object} resolvers Resolver to convert\n */\nfunction mapResolvers( resolvers ) {\n\treturn mapValues( resolvers, ( resolver ) => {\n\t\tif ( resolver.fulfill ) {\n\t\t\treturn resolver;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolver, // Copy the enumerable properties of the resolver function.\n\t\t\tfulfill: resolver, // Add the fulfill method.\n\t\t};\n\t} );\n}\n\n/**\n * Returns a selector with a matched resolver.\n * Resolvers are side effects invoked once per argument set of a given selector call,\n * used in ensuring that the data needs for the selector are satisfied.\n *\n * @param {Object} selector The selector function to be bound.\n * @param {string} selectorName The selector name.\n * @param {Object} resolver Resolver to call.\n * @param {Object} store The redux store to which the resolvers should be mapped.\n * @param {Object} resolversCache Resolvers Cache.\n */\nfunction mapSelectorWithResolver(\n\tselector,\n\tselectorName,\n\tresolver,\n\tstore,\n\tresolversCache\n) {\n\tfunction fulfillSelector( args ) {\n\t\tconst state = store.getState();\n\n\t\tif (\n\t\t\tresolversCache.isRunning( selectorName, args ) ||\n\t\t\t( typeof resolver.isFulfilled === 'function' &&\n\t\t\t\tresolver.isFulfilled( state, ...args ) )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { metadata } = store.__unstableOriginalGetState();\n\n\t\tif (\n\t\t\tmetadataSelectors.hasStartedResolution(\n\t\t\t\tmetadata,\n\t\t\t\tselectorName,\n\t\t\t\targs\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tresolversCache.markAsRunning( selectorName, args );\n\n\t\tsetTimeout( async () => {\n\t\t\tresolversCache.clear( selectorName, args );\n\t\t\tstore.dispatch(\n\t\t\t\tmetadataActions.startResolution( selectorName, args )\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst action = resolver.fulfill( ...args );\n\t\t\t\tif ( action ) {\n\t\t\t\t\tawait store.dispatch( action );\n\t\t\t\t}\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.finishResolution( selectorName, args )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tstore.dispatch(\n\t\t\t\t\tmetadataActions.failResolution( selectorName, args, error )\n\t\t\t\t);\n\t\t\t}\n\t\t}, 0 );\n\t}\n\n\tconst selectorResolver = ( ...args ) => {\n\t\tfulfillSelector( args );\n\t\treturn selector( ...args );\n\t};\n\tselectorResolver.hasResolver = true;\n\treturn selectorResolver;\n}\n"],"mappings":"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"}
|