@wordpress/data 10.32.0 → 10.32.1-next.47f435fc9.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/build/components/async-mode-provider/context.js +35 -54
- package/build/components/async-mode-provider/context.js.map +7 -1
- package/build/components/async-mode-provider/index.js +40 -25
- package/build/components/async-mode-provider/index.js.map +7 -1
- package/build/components/async-mode-provider/use-async-mode.js +25 -16
- package/build/components/async-mode-provider/use-async-mode.js.map +7 -1
- package/build/components/registry-provider/context.js +46 -64
- package/build/components/registry-provider/context.js.map +7 -1
- package/build/components/registry-provider/index.js +40 -25
- package/build/components/registry-provider/index.js.map +7 -1
- package/build/components/registry-provider/use-registry.js +25 -55
- package/build/components/registry-provider/use-registry.js.map +7 -1
- package/build/components/use-dispatch/index.js +38 -17
- package/build/components/use-dispatch/index.js.map +7 -1
- package/build/components/use-dispatch/use-dispatch-with-map.js +59 -44
- package/build/components/use-dispatch/use-dispatch-with-map.js.map +7 -1
- package/build/components/use-dispatch/use-dispatch.js +36 -71
- package/build/components/use-dispatch/use-dispatch.js.map +7 -1
- package/build/components/use-select/index.js +79 -208
- package/build/components/use-select/index.js.map +7 -1
- package/build/components/with-dispatch/index.js +34 -107
- package/build/components/with-dispatch/index.js.map +7 -1
- package/build/components/with-registry/index.js +30 -30
- package/build/components/with-registry/index.js.map +7 -1
- package/build/components/with-select/index.js +44 -67
- package/build/components/with-select/index.js.map +7 -1
- package/build/controls.js +49 -110
- package/build/controls.js.map +7 -1
- package/build/create-selector.js +36 -11
- package/build/create-selector.js.map +7 -1
- package/build/default-registry.js +24 -10
- package/build/default-registry.js.map +7 -1
- package/build/dispatch.js +38 -31
- package/build/dispatch.js.map +7 -1
- package/build/factory.js +29 -85
- package/build/factory.js.map +7 -1
- package/build/index.js +114 -301
- package/build/index.js.map +7 -1
- package/build/lock-unlock.js +31 -14
- package/build/lock-unlock.js.map +7 -1
- package/build/plugins/index.js +36 -11
- package/build/plugins/index.js.map +7 -1
- package/build/plugins/persistence/index.js +74 -139
- package/build/plugins/persistence/index.js.map +7 -1
- package/build/plugins/persistence/storage/default.js +37 -18
- package/build/plugins/persistence/storage/default.js.map +7 -1
- package/build/plugins/persistence/storage/object.js +24 -7
- package/build/plugins/persistence/storage/object.js.map +7 -1
- package/build/promise-middleware.js +37 -20
- package/build/promise-middleware.js.map +7 -1
- package/build/redux-store/combine-reducers.js +26 -5
- package/build/redux-store/combine-reducers.js.map +7 -1
- package/build/redux-store/index.js +221 -331
- package/build/redux-store/index.js.map +7 -1
- package/build/redux-store/metadata/actions.js +51 -112
- package/build/redux-store/metadata/actions.js.map +7 -1
- package/build/redux-store/metadata/equivalent-key-map.d.js +1 -1
- package/build/redux-store/metadata/equivalent-key-map.d.js.map +7 -1
- package/build/redux-store/metadata/reducer.js +111 -115
- package/build/redux-store/metadata/reducer.js.map +7 -1
- package/build/redux-store/metadata/selectors.js +109 -181
- package/build/redux-store/metadata/selectors.js.map +7 -1
- package/build/redux-store/metadata/utils.js +32 -35
- package/build/redux-store/metadata/utils.js.map +7 -1
- package/build/redux-store/thunk-middleware.js +24 -7
- package/build/redux-store/thunk-middleware.js.map +7 -1
- package/build/registry.js +94 -198
- package/build/registry.js.map +7 -1
- package/build/resolvers-cache-middleware.js +26 -27
- package/build/resolvers-cache-middleware.js.map +7 -1
- package/build/select.js +38 -31
- package/build/select.js.map +7 -1
- package/build/store/index.js +52 -16
- package/build/store/index.js.map +7 -1
- package/build/types.js +16 -5
- package/build/types.js.map +7 -1
- package/build/utils/emitter.js +33 -16
- package/build/utils/emitter.js.map +7 -1
- package/build-module/components/async-mode-provider/context.js +12 -49
- package/build-module/components/async-mode-provider/context.js.map +7 -1
- package/build-module/components/async-mode-provider/index.js +8 -3
- package/build-module/components/async-mode-provider/index.js.map +7 -1
- package/build-module/components/async-mode-provider/use-async-mode.js +7 -11
- package/build-module/components/async-mode-provider/use-async-mode.js.map +7 -1
- package/build-module/components/registry-provider/context.js +13 -58
- package/build-module/components/registry-provider/context.js.map +7 -1
- package/build-module/components/registry-provider/index.js +8 -3
- package/build-module/components/registry-provider/index.js.map +7 -1
- package/build-module/components/registry-provider/use-registry.js +7 -51
- package/build-module/components/registry-provider/use-registry.js.map +7 -1
- package/build-module/components/use-dispatch/index.js +7 -3
- package/build-module/components/use-dispatch/index.js.map +7 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js +27 -35
- package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +7 -1
- package/build-module/components/use-dispatch/use-dispatch.js +8 -66
- package/build-module/components/use-dispatch/use-dispatch.js.map +7 -1
- package/build-module/components/use-select/index.js +45 -193
- package/build-module/components/use-select/index.js.map +7 -1
- package/build-module/components/with-dispatch/index.js +16 -104
- package/build-module/components/with-dispatch/index.js.map +7 -1
- package/build-module/components/with-registry/index.js +12 -27
- package/build-module/components/with-registry/index.js.map +7 -1
- package/build-module/components/with-select/index.js +16 -63
- package/build-module/components/with-select/index.js.map +7 -1
- package/build-module/controls.js +25 -105
- package/build-module/controls.js.map +7 -1
- package/build-module/create-selector.js +5 -8
- package/build-module/create-selector.js.map +7 -1
- package/build-module/default-registry.js +6 -6
- package/build-module/default-registry.js.map +7 -1
- package/build-module/dispatch.js +6 -27
- package/build-module/dispatch.js.map +7 -1
- package/build-module/factory.js +8 -82
- package/build-module/factory.js.map +7 -1
- package/build-module/index.js +62 -185
- package/build-module/index.js.map +7 -1
- package/build-module/lock-unlock.js +8 -7
- package/build-module/lock-unlock.js.map +7 -1
- package/build-module/plugins/index.js +5 -2
- package/build-module/plugins/index.js.map +7 -1
- package/build-module/plugins/persistence/index.js +38 -129
- package/build-module/plugins/persistence/index.js.map +7 -1
- package/build-module/plugins/persistence/storage/default.js +8 -11
- package/build-module/plugins/persistence/storage/default.js.map +7 -1
- package/build-module/plugins/persistence/storage/object.js +6 -3
- package/build-module/plugins/persistence/storage/object.js.map +7 -1
- package/build-module/promise-middleware.js +8 -14
- package/build-module/promise-middleware.js.map +7 -1
- package/build-module/redux-store/combine-reducers.js +5 -2
- package/build-module/redux-store/combine-reducers.js.map +7 -1
- package/build-module/redux-store/index.js +180 -310
- package/build-module/redux-store/index.js.map +7 -1
- package/build-module/redux-store/metadata/actions.js +30 -109
- package/build-module/redux-store/metadata/actions.js.map +7 -1
- package/build-module/redux-store/metadata/equivalent-key-map.d.js +1 -2
- package/build-module/redux-store/metadata/equivalent-key-map.d.js.map +7 -1
- package/build-module/redux-store/metadata/reducer.js +83 -108
- package/build-module/redux-store/metadata/reducer.js.map +7 -1
- package/build-module/redux-store/metadata/selectors.js +76 -175
- package/build-module/redux-store/metadata/selectors.js.map +7 -1
- package/build-module/redux-store/metadata/utils.js +10 -30
- package/build-module/redux-store/metadata/utils.js.map +7 -1
- package/build-module/redux-store/thunk-middleware.js +7 -4
- package/build-module/redux-store/thunk-middleware.js.map +7 -1
- package/build-module/registry.js +56 -187
- package/build-module/registry.js.map +7 -1
- package/build-module/resolvers-cache-middleware.js +8 -23
- package/build-module/resolvers-cache-middleware.js.map +7 -1
- package/build-module/select.js +6 -27
- package/build-module/select.js.map +7 -1
- package/build-module/store/index.js +34 -12
- package/build-module/store/index.js.map +7 -1
- package/build-module/types.js +1 -2
- package/build-module/types.js.map +7 -1
- package/build-module/utils/emitter.js +12 -13
- package/build-module/utils/emitter.js.map +7 -1
- package/package.json +17 -10
|
@@ -1,77 +1,65 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
Object.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Object.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
17
|
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var redux_store_exports = {};
|
|
30
|
+
__export(redux_store_exports, {
|
|
31
|
+
combineReducers: () => import_combine_reducers.combineReducers,
|
|
32
|
+
default: () => createReduxStore
|
|
12
33
|
});
|
|
13
|
-
exports
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var metadataSelectors =
|
|
26
|
-
var metadataActions =
|
|
27
|
-
|
|
28
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
29
|
-
/**
|
|
30
|
-
* External dependencies
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* WordPress dependencies
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Internal dependencies
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
/** @typedef {import('../types').DataRegistry} DataRegistry */
|
|
42
|
-
/** @typedef {import('../types').ListenerFunction} ListenerFunction */
|
|
43
|
-
/**
|
|
44
|
-
* @typedef {import('../types').StoreDescriptor<C>} StoreDescriptor
|
|
45
|
-
* @template {import('../types').AnyConfig} C
|
|
46
|
-
*/
|
|
47
|
-
/**
|
|
48
|
-
* @typedef {import('../types').ReduxStoreConfig<State,Actions,Selectors>} ReduxStoreConfig
|
|
49
|
-
* @template State
|
|
50
|
-
* @template {Record<string,import('../types').ActionCreator>} Actions
|
|
51
|
-
* @template Selectors
|
|
52
|
-
*/
|
|
53
|
-
|
|
54
|
-
const trimUndefinedValues = array => {
|
|
34
|
+
module.exports = __toCommonJS(redux_store_exports);
|
|
35
|
+
var import_redux = require("redux");
|
|
36
|
+
var import_equivalent_key_map = __toESM(require("equivalent-key-map"));
|
|
37
|
+
var import_redux_routine = __toESM(require("@wordpress/redux-routine"));
|
|
38
|
+
var import_compose = require("@wordpress/compose");
|
|
39
|
+
var import_combine_reducers = require("./combine-reducers");
|
|
40
|
+
var import_controls = require("../controls");
|
|
41
|
+
var import_lock_unlock = require("../lock-unlock");
|
|
42
|
+
var import_promise_middleware = __toESM(require("../promise-middleware"));
|
|
43
|
+
var import_resolvers_cache_middleware = __toESM(require("../resolvers-cache-middleware"));
|
|
44
|
+
var import_thunk_middleware = __toESM(require("./thunk-middleware"));
|
|
45
|
+
var import_reducer = __toESM(require("./metadata/reducer"));
|
|
46
|
+
var metadataSelectors = __toESM(require("./metadata/selectors"));
|
|
47
|
+
var metadataActions = __toESM(require("./metadata/actions"));
|
|
48
|
+
const trimUndefinedValues = (array) => {
|
|
55
49
|
const result = [...array];
|
|
56
50
|
for (let i = result.length - 1; i >= 0; i--) {
|
|
57
|
-
if (result[i] ===
|
|
51
|
+
if (result[i] === void 0) {
|
|
58
52
|
result.splice(i, 1);
|
|
59
53
|
}
|
|
60
54
|
}
|
|
61
55
|
return result;
|
|
62
56
|
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
* @param {Function} callback The function to transform each object value.
|
|
70
|
-
* @return {Array} Transformed object.
|
|
71
|
-
*/
|
|
72
|
-
const mapValues = (obj, callback) => Object.fromEntries(Object.entries(obj !== null && obj !== void 0 ? obj : {}).map(([key, value]) => [key, callback(value, key)]));
|
|
73
|
-
|
|
74
|
-
// Convert non serializable types to plain objects
|
|
57
|
+
const mapValues = (obj, callback) => Object.fromEntries(
|
|
58
|
+
Object.entries(obj ?? {}).map(([key, value]) => [
|
|
59
|
+
key,
|
|
60
|
+
callback(value, key)
|
|
61
|
+
])
|
|
62
|
+
);
|
|
75
63
|
const devToolsReplacer = (key, state) => {
|
|
76
64
|
if (state instanceof Map) {
|
|
77
65
|
return Object.fromEntries(state);
|
|
@@ -81,12 +69,6 @@ const devToolsReplacer = (key, state) => {
|
|
|
81
69
|
}
|
|
82
70
|
return state;
|
|
83
71
|
};
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Create a cache to track whether resolvers started running or not.
|
|
87
|
-
*
|
|
88
|
-
* @return {Object} Resolvers Cache.
|
|
89
|
-
*/
|
|
90
72
|
function createResolversCache() {
|
|
91
73
|
const cache = {};
|
|
92
74
|
return {
|
|
@@ -100,14 +82,14 @@ function createResolversCache() {
|
|
|
100
82
|
},
|
|
101
83
|
markAsRunning(selectorName, args) {
|
|
102
84
|
if (!cache[selectorName]) {
|
|
103
|
-
cache[selectorName] = new
|
|
85
|
+
cache[selectorName] = new import_equivalent_key_map.default();
|
|
104
86
|
}
|
|
105
87
|
cache[selectorName].set(trimUndefinedValues(args), true);
|
|
106
88
|
}
|
|
107
89
|
};
|
|
108
90
|
}
|
|
109
91
|
function createBindingCache(getItem, bindItem) {
|
|
110
|
-
const cache = new WeakMap();
|
|
92
|
+
const cache = /* @__PURE__ */ new WeakMap();
|
|
111
93
|
return {
|
|
112
94
|
get(itemName) {
|
|
113
95
|
const item = getItem(itemName);
|
|
@@ -128,67 +110,24 @@ function createPrivateProxy(publicItems, privateItems) {
|
|
|
128
110
|
get: (target, itemName) => privateItems.get(itemName) || Reflect.get(target, itemName)
|
|
129
111
|
});
|
|
130
112
|
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Creates a data store descriptor for the provided Redux store configuration containing
|
|
134
|
-
* properties describing reducer, actions, selectors, controls and resolvers.
|
|
135
|
-
*
|
|
136
|
-
* @example
|
|
137
|
-
* ```js
|
|
138
|
-
* import { createReduxStore } from '@wordpress/data';
|
|
139
|
-
*
|
|
140
|
-
* const store = createReduxStore( 'demo', {
|
|
141
|
-
* reducer: ( state = 'OK' ) => state,
|
|
142
|
-
* selectors: {
|
|
143
|
-
* getValue: ( state ) => state,
|
|
144
|
-
* },
|
|
145
|
-
* } );
|
|
146
|
-
* ```
|
|
147
|
-
*
|
|
148
|
-
* @template State
|
|
149
|
-
* @template {Record<string,import('../types').ActionCreator>} Actions
|
|
150
|
-
* @template Selectors
|
|
151
|
-
* @param {string} key Unique namespace identifier.
|
|
152
|
-
* @param {ReduxStoreConfig<State,Actions,Selectors>} options Registered store options, with properties
|
|
153
|
-
* describing reducer, actions, selectors,
|
|
154
|
-
* and resolvers.
|
|
155
|
-
*
|
|
156
|
-
* @return {StoreDescriptor<ReduxStoreConfig<State,Actions,Selectors>>} Store Object.
|
|
157
|
-
*/
|
|
158
113
|
function createReduxStore(key, options) {
|
|
159
114
|
const privateActions = {};
|
|
160
115
|
const privateSelectors = {};
|
|
161
116
|
const privateRegistrationFunctions = {
|
|
162
117
|
privateActions,
|
|
163
|
-
registerPrivateActions: actions => {
|
|
118
|
+
registerPrivateActions: (actions) => {
|
|
164
119
|
Object.assign(privateActions, actions);
|
|
165
120
|
},
|
|
166
121
|
privateSelectors,
|
|
167
|
-
registerPrivateSelectors: selectors => {
|
|
122
|
+
registerPrivateSelectors: (selectors) => {
|
|
168
123
|
Object.assign(privateSelectors, selectors);
|
|
169
124
|
}
|
|
170
125
|
};
|
|
171
126
|
const storeDescriptor = {
|
|
172
127
|
name: key,
|
|
173
|
-
instantiate: registry => {
|
|
174
|
-
|
|
175
|
-
* Stores listener functions registered with `subscribe()`.
|
|
176
|
-
*
|
|
177
|
-
* When functions register to listen to store changes with
|
|
178
|
-
* `subscribe()` they get added here. Although Redux offers
|
|
179
|
-
* its own `subscribe()` function directly, by wrapping the
|
|
180
|
-
* subscription in this store instance it's possible to
|
|
181
|
-
* optimize checking if the state has changed before calling
|
|
182
|
-
* each listener.
|
|
183
|
-
*
|
|
184
|
-
* @type {Set<ListenerFunction>}
|
|
185
|
-
*/
|
|
186
|
-
const listeners = new Set();
|
|
128
|
+
instantiate: (registry) => {
|
|
129
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
187
130
|
const reducer = options.reducer;
|
|
188
|
-
|
|
189
|
-
// Object that every thunk function receives as the first argument. It contains the
|
|
190
|
-
// `registry`, `dispatch`, `select` and `resolveSelect` fields. Some of them are
|
|
191
|
-
// constructed as getters to avoid circular dependencies.
|
|
192
131
|
const thunkArgs = {
|
|
193
132
|
registry,
|
|
194
133
|
get dispatch() {
|
|
@@ -201,52 +140,34 @@ function createReduxStore(key, options) {
|
|
|
201
140
|
return resolveSelectors;
|
|
202
141
|
}
|
|
203
142
|
};
|
|
204
|
-
const store = instantiateReduxStore(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
143
|
+
const store = instantiateReduxStore(
|
|
144
|
+
key,
|
|
145
|
+
options,
|
|
146
|
+
registry,
|
|
147
|
+
thunkArgs
|
|
148
|
+
);
|
|
149
|
+
(0, import_lock_unlock.lock)(store, privateRegistrationFunctions);
|
|
209
150
|
const resolversCache = createResolversCache();
|
|
210
|
-
|
|
211
|
-
// Binds an action creator (`action`) to the `store`, making it a callable function.
|
|
212
|
-
// These are the functions that are returned by `useDispatch`, for example.
|
|
213
|
-
// It always returns a `Promise`, although actions are not always async. That's an
|
|
214
|
-
// unfortunate backward compatibility measure.
|
|
215
151
|
function bindAction(action) {
|
|
216
152
|
return (...args) => Promise.resolve(store.dispatch(action(...args)));
|
|
217
153
|
}
|
|
218
|
-
|
|
219
|
-
/*
|
|
220
|
-
* Object with all public actions, both metadata and store actions.
|
|
221
|
-
*/
|
|
222
154
|
const actions = {
|
|
223
155
|
...mapValues(metadataActions, bindAction),
|
|
224
156
|
...mapValues(options.actions, bindAction)
|
|
225
157
|
};
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
get: (target, name) => allActions[name]
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
// To the public `actions` object, add the "locked" `allActions` object. When used,
|
|
242
|
-
// `unlock( actions )` will return `allActions`, implementing a way how to get at the private actions.
|
|
243
|
-
(0, _lockUnlock.lock)(actions, allActions);
|
|
244
|
-
|
|
245
|
-
// If we have selector resolvers, convert them to a normalized form.
|
|
158
|
+
const allActions = createPrivateProxy(
|
|
159
|
+
actions,
|
|
160
|
+
createBindingCache(
|
|
161
|
+
(name) => privateActions[name],
|
|
162
|
+
bindAction
|
|
163
|
+
)
|
|
164
|
+
);
|
|
165
|
+
const thunkDispatch = new Proxy(
|
|
166
|
+
(action) => store.dispatch(action),
|
|
167
|
+
{ get: (target, name) => allActions[name] }
|
|
168
|
+
);
|
|
169
|
+
(0, import_lock_unlock.lock)(actions, allActions);
|
|
246
170
|
const resolvers = options.resolvers ? mapValues(options.resolvers, mapResolver) : {};
|
|
247
|
-
|
|
248
|
-
// Bind a selector to the store. Call the selector with the current state, correct registry,
|
|
249
|
-
// and if there is a resolver, attach the resolver logic to the selector.
|
|
250
171
|
function bindSelector(selector, selectorName) {
|
|
251
172
|
if (selector.isRegistrySelector) {
|
|
252
173
|
selector.registry = registry;
|
|
@@ -254,114 +175,113 @@ function createReduxStore(key, options) {
|
|
|
254
175
|
const boundSelector = (...args) => {
|
|
255
176
|
args = normalize(selector, args);
|
|
256
177
|
const state = store.__unstableOriginalGetState();
|
|
257
|
-
// Before calling the selector, switch to the correct registry.
|
|
258
178
|
if (selector.isRegistrySelector) {
|
|
259
179
|
selector.registry = registry;
|
|
260
180
|
}
|
|
261
181
|
return selector(state.root, ...args);
|
|
262
182
|
};
|
|
263
|
-
|
|
264
|
-
// Expose normalization method on the bound selector
|
|
265
|
-
// in order that it can be called when fulfilling
|
|
266
|
-
// the resolver.
|
|
267
183
|
boundSelector.__unstableNormalizeArgs = selector.__unstableNormalizeArgs;
|
|
268
184
|
const resolver = resolvers[selectorName];
|
|
269
185
|
if (!resolver) {
|
|
270
186
|
boundSelector.hasResolver = false;
|
|
271
187
|
return boundSelector;
|
|
272
188
|
}
|
|
273
|
-
return mapSelectorWithResolver(
|
|
189
|
+
return mapSelectorWithResolver(
|
|
190
|
+
boundSelector,
|
|
191
|
+
selectorName,
|
|
192
|
+
resolver,
|
|
193
|
+
store,
|
|
194
|
+
resolversCache,
|
|
195
|
+
boundMetadataSelectors
|
|
196
|
+
);
|
|
274
197
|
}
|
|
275
|
-
|
|
276
|
-
// Metadata selectors are bound differently: different state (`state.metadata`), no resolvers,
|
|
277
|
-
// normalization depending on the target selector.
|
|
278
198
|
function bindMetadataSelector(metaDataSelector) {
|
|
279
199
|
const boundSelector = (selectorName, selectorArgs, ...args) => {
|
|
280
|
-
// Normalize the arguments passed to the target selector.
|
|
281
200
|
if (selectorName) {
|
|
282
201
|
const targetSelector = options.selectors?.[selectorName];
|
|
283
202
|
if (targetSelector) {
|
|
284
|
-
selectorArgs = normalize(
|
|
203
|
+
selectorArgs = normalize(
|
|
204
|
+
targetSelector,
|
|
205
|
+
selectorArgs
|
|
206
|
+
);
|
|
285
207
|
}
|
|
286
208
|
}
|
|
287
209
|
const state = store.__unstableOriginalGetState();
|
|
288
|
-
return metaDataSelector(
|
|
210
|
+
return metaDataSelector(
|
|
211
|
+
state.metadata,
|
|
212
|
+
selectorName,
|
|
213
|
+
selectorArgs,
|
|
214
|
+
...args
|
|
215
|
+
);
|
|
289
216
|
};
|
|
290
217
|
boundSelector.hasResolver = false;
|
|
291
218
|
return boundSelector;
|
|
292
219
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
220
|
+
const boundMetadataSelectors = mapValues(
|
|
221
|
+
metadataSelectors,
|
|
222
|
+
bindMetadataSelector
|
|
223
|
+
);
|
|
297
224
|
const boundSelectors = mapValues(options.selectors, bindSelector);
|
|
298
225
|
const selectors = {
|
|
299
226
|
...boundMetadataSelectors,
|
|
300
227
|
...boundSelectors
|
|
301
228
|
};
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
const
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
// instantiation, so that registry selectors are bound to the registry.
|
|
229
|
+
const boundPrivateSelectors = createBindingCache(
|
|
230
|
+
(name) => privateSelectors[name],
|
|
231
|
+
bindSelector
|
|
232
|
+
);
|
|
233
|
+
const allSelectors = createPrivateProxy(
|
|
234
|
+
selectors,
|
|
235
|
+
boundPrivateSelectors
|
|
236
|
+
);
|
|
311
237
|
for (const selectorName of Object.keys(privateSelectors)) {
|
|
312
238
|
boundPrivateSelectors.get(selectorName);
|
|
313
239
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
const
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
// Now, in a way very similar to `bindResolveSelector`, we create a function that maps
|
|
340
|
-
// selectors to functions that throw a suspense promise if not yet resolved.
|
|
341
|
-
const bindSuspendSelector = mapSuspendSelector(store, boundMetadataSelectors);
|
|
240
|
+
const thunkSelect = new Proxy(
|
|
241
|
+
(selector) => selector(store.__unstableOriginalGetState()),
|
|
242
|
+
{ get: (target, name) => allSelectors[name] }
|
|
243
|
+
);
|
|
244
|
+
(0, import_lock_unlock.lock)(selectors, allSelectors);
|
|
245
|
+
const bindResolveSelector = mapResolveSelector(
|
|
246
|
+
store,
|
|
247
|
+
boundMetadataSelectors
|
|
248
|
+
);
|
|
249
|
+
const resolveSelectors = mapValues(
|
|
250
|
+
boundSelectors,
|
|
251
|
+
bindResolveSelector
|
|
252
|
+
);
|
|
253
|
+
const allResolveSelectors = createPrivateProxy(
|
|
254
|
+
resolveSelectors,
|
|
255
|
+
createBindingCache(
|
|
256
|
+
(name) => boundPrivateSelectors.get(name),
|
|
257
|
+
bindResolveSelector
|
|
258
|
+
)
|
|
259
|
+
);
|
|
260
|
+
(0, import_lock_unlock.lock)(resolveSelectors, allResolveSelectors);
|
|
261
|
+
const bindSuspendSelector = mapSuspendSelector(
|
|
262
|
+
store,
|
|
263
|
+
boundMetadataSelectors
|
|
264
|
+
);
|
|
342
265
|
const suspendSelectors = {
|
|
343
266
|
...boundMetadataSelectors,
|
|
344
267
|
// no special suspense behavior
|
|
345
268
|
...mapValues(boundSelectors, bindSuspendSelector)
|
|
346
269
|
};
|
|
347
|
-
const allSuspendSelectors = createPrivateProxy(
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
270
|
+
const allSuspendSelectors = createPrivateProxy(
|
|
271
|
+
suspendSelectors,
|
|
272
|
+
createBindingCache(
|
|
273
|
+
(name) => boundPrivateSelectors.get(name),
|
|
274
|
+
bindSuspendSelector
|
|
275
|
+
)
|
|
276
|
+
);
|
|
277
|
+
(0, import_lock_unlock.lock)(suspendSelectors, allSuspendSelectors);
|
|
351
278
|
const getSelectors = () => selectors;
|
|
352
279
|
const getActions = () => actions;
|
|
353
280
|
const getResolveSelectors = () => resolveSelectors;
|
|
354
281
|
const getSuspendSelectors = () => suspendSelectors;
|
|
355
|
-
|
|
356
|
-
// We have some modules monkey-patching the store object
|
|
357
|
-
// It's wrong to do so but until we refactor all of our effects to controls
|
|
358
|
-
// We need to keep the same "store" instance here.
|
|
359
282
|
store.__unstableOriginalGetState = store.getState;
|
|
360
283
|
store.getState = () => store.__unstableOriginalGetState().root;
|
|
361
|
-
|
|
362
|
-
// Customize subscribe behavior to call listeners only on effective change,
|
|
363
|
-
// not on every dispatch.
|
|
364
|
-
const subscribe = store && (listener => {
|
|
284
|
+
const subscribe = store && ((listener) => {
|
|
365
285
|
listeners.add(listener);
|
|
366
286
|
return () => listeners.delete(listener);
|
|
367
287
|
});
|
|
@@ -376,9 +296,6 @@ function createReduxStore(key, options) {
|
|
|
376
296
|
}
|
|
377
297
|
}
|
|
378
298
|
});
|
|
379
|
-
|
|
380
|
-
// This can be simplified to just { subscribe, getSelectors, getActions }
|
|
381
|
-
// Once we remove the use function.
|
|
382
299
|
return {
|
|
383
300
|
reducer,
|
|
384
301
|
store,
|
|
@@ -393,86 +310,75 @@ function createReduxStore(key, options) {
|
|
|
393
310
|
};
|
|
394
311
|
}
|
|
395
312
|
};
|
|
396
|
-
|
|
397
|
-
// Expose the private registration functions on the store
|
|
398
|
-
// descriptor. That's a natural choice since that's where the
|
|
399
|
-
// public actions and selectors are stored.
|
|
400
|
-
(0, _lockUnlock.lock)(storeDescriptor, privateRegistrationFunctions);
|
|
313
|
+
(0, import_lock_unlock.lock)(storeDescriptor, privateRegistrationFunctions);
|
|
401
314
|
return storeDescriptor;
|
|
402
315
|
}
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* Creates a redux store for a namespace.
|
|
406
|
-
*
|
|
407
|
-
* @param {string} key Unique namespace identifier.
|
|
408
|
-
* @param {Object} options Registered store options, with properties
|
|
409
|
-
* describing reducer, actions, selectors,
|
|
410
|
-
* and resolvers.
|
|
411
|
-
* @param {DataRegistry} registry Registry reference.
|
|
412
|
-
* @param {Object} thunkArgs Argument object for the thunk middleware.
|
|
413
|
-
* @return {Object} Newly created redux store.
|
|
414
|
-
*/
|
|
415
316
|
function instantiateReduxStore(key, options, registry, thunkArgs) {
|
|
416
317
|
const controls = {
|
|
417
318
|
...options.controls,
|
|
418
|
-
...
|
|
319
|
+
...import_controls.builtinControls
|
|
419
320
|
};
|
|
420
|
-
const normalizedControls = mapValues(
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
321
|
+
const normalizedControls = mapValues(
|
|
322
|
+
controls,
|
|
323
|
+
(control) => control.isRegistryControl ? control(registry) : control
|
|
324
|
+
);
|
|
325
|
+
const middlewares = [
|
|
326
|
+
(0, import_resolvers_cache_middleware.default)(registry, key),
|
|
327
|
+
import_promise_middleware.default,
|
|
328
|
+
(0, import_redux_routine.default)(normalizedControls),
|
|
329
|
+
(0, import_thunk_middleware.default)(thunkArgs)
|
|
330
|
+
];
|
|
331
|
+
const enhancers = [(0, import_redux.applyMiddleware)(...middlewares)];
|
|
332
|
+
if (typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION__) {
|
|
333
|
+
enhancers.push(
|
|
334
|
+
window.__REDUX_DEVTOOLS_EXTENSION__({
|
|
335
|
+
name: key,
|
|
336
|
+
instanceId: key,
|
|
337
|
+
serialize: {
|
|
338
|
+
replacer: devToolsReplacer
|
|
339
|
+
}
|
|
340
|
+
})
|
|
341
|
+
);
|
|
431
342
|
}
|
|
432
|
-
const {
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
} = options;
|
|
436
|
-
const enhancedReducer = (0, _combineReducers.combineReducers)({
|
|
437
|
-
metadata: _reducer.default,
|
|
343
|
+
const { reducer, initialState } = options;
|
|
344
|
+
const enhancedReducer = (0, import_combine_reducers.combineReducers)({
|
|
345
|
+
metadata: import_reducer.default,
|
|
438
346
|
root: reducer
|
|
439
347
|
});
|
|
440
|
-
return (0,
|
|
441
|
-
|
|
442
|
-
|
|
348
|
+
return (0, import_redux.createStore)(
|
|
349
|
+
enhancedReducer,
|
|
350
|
+
{ root: initialState },
|
|
351
|
+
(0, import_compose.compose)(enhancers)
|
|
352
|
+
);
|
|
443
353
|
}
|
|
444
|
-
|
|
445
|
-
/**
|
|
446
|
-
* Maps selectors to functions that return a resolution promise for them.
|
|
447
|
-
*
|
|
448
|
-
* @param {Object} store The redux store the selectors are bound to.
|
|
449
|
-
* @param {Object} boundMetadataSelectors The bound metadata selectors.
|
|
450
|
-
*
|
|
451
|
-
* @return {Function} Function that maps selectors to resolvers.
|
|
452
|
-
*/
|
|
453
354
|
function mapResolveSelector(store, boundMetadataSelectors) {
|
|
454
355
|
return (selector, selectorName) => {
|
|
455
|
-
// If the selector doesn't have a resolver, just convert the return value
|
|
456
|
-
// (including exceptions) to a Promise, no additional extra behavior is needed.
|
|
457
356
|
if (!selector.hasResolver) {
|
|
458
357
|
return async (...args) => selector.apply(null, args);
|
|
459
358
|
}
|
|
460
359
|
return (...args) => new Promise((resolve, reject) => {
|
|
461
360
|
const hasFinished = () => {
|
|
462
|
-
return boundMetadataSelectors.hasFinishedResolution(
|
|
361
|
+
return boundMetadataSelectors.hasFinishedResolution(
|
|
362
|
+
selectorName,
|
|
363
|
+
args
|
|
364
|
+
);
|
|
463
365
|
};
|
|
464
|
-
const finalize =
|
|
465
|
-
const hasFailed = boundMetadataSelectors.hasResolutionFailed(
|
|
366
|
+
const finalize = (result2) => {
|
|
367
|
+
const hasFailed = boundMetadataSelectors.hasResolutionFailed(
|
|
368
|
+
selectorName,
|
|
369
|
+
args
|
|
370
|
+
);
|
|
466
371
|
if (hasFailed) {
|
|
467
|
-
const error = boundMetadataSelectors.getResolutionError(
|
|
372
|
+
const error = boundMetadataSelectors.getResolutionError(
|
|
373
|
+
selectorName,
|
|
374
|
+
args
|
|
375
|
+
);
|
|
468
376
|
reject(error);
|
|
469
377
|
} else {
|
|
470
|
-
resolve(
|
|
378
|
+
resolve(result2);
|
|
471
379
|
}
|
|
472
380
|
};
|
|
473
381
|
const getResult = () => selector.apply(null, args);
|
|
474
|
-
|
|
475
|
-
// Trigger the selector (to trigger the resolver)
|
|
476
382
|
const result = getResult();
|
|
477
383
|
if (hasFinished()) {
|
|
478
384
|
return finalize(result);
|
|
@@ -486,32 +392,34 @@ function mapResolveSelector(store, boundMetadataSelectors) {
|
|
|
486
392
|
});
|
|
487
393
|
};
|
|
488
394
|
}
|
|
489
|
-
|
|
490
|
-
/**
|
|
491
|
-
* Maps selectors to functions that throw a suspense promise if not yet resolved.
|
|
492
|
-
*
|
|
493
|
-
* @param {Object} store The redux store the selectors select from.
|
|
494
|
-
* @param {Object} boundMetadataSelectors The bound metadata selectors.
|
|
495
|
-
*
|
|
496
|
-
* @return {Function} Function that maps selectors to their suspending versions.
|
|
497
|
-
*/
|
|
498
395
|
function mapSuspendSelector(store, boundMetadataSelectors) {
|
|
499
396
|
return (selector, selectorName) => {
|
|
500
|
-
// Selector without a resolver doesn't have any extra suspense behavior.
|
|
501
397
|
if (!selector.hasResolver) {
|
|
502
398
|
return selector;
|
|
503
399
|
}
|
|
504
400
|
return (...args) => {
|
|
505
401
|
const result = selector.apply(null, args);
|
|
506
|
-
if (boundMetadataSelectors.hasFinishedResolution(
|
|
507
|
-
|
|
508
|
-
|
|
402
|
+
if (boundMetadataSelectors.hasFinishedResolution(
|
|
403
|
+
selectorName,
|
|
404
|
+
args
|
|
405
|
+
)) {
|
|
406
|
+
if (boundMetadataSelectors.hasResolutionFailed(
|
|
407
|
+
selectorName,
|
|
408
|
+
args
|
|
409
|
+
)) {
|
|
410
|
+
throw boundMetadataSelectors.getResolutionError(
|
|
411
|
+
selectorName,
|
|
412
|
+
args
|
|
413
|
+
);
|
|
509
414
|
}
|
|
510
415
|
return result;
|
|
511
416
|
}
|
|
512
|
-
throw new Promise(resolve => {
|
|
417
|
+
throw new Promise((resolve) => {
|
|
513
418
|
const unsubscribe = store.subscribe(() => {
|
|
514
|
-
if (boundMetadataSelectors.hasFinishedResolution(
|
|
419
|
+
if (boundMetadataSelectors.hasFinishedResolution(
|
|
420
|
+
selectorName,
|
|
421
|
+
args
|
|
422
|
+
)) {
|
|
515
423
|
resolve();
|
|
516
424
|
unsubscribe();
|
|
517
425
|
}
|
|
@@ -520,13 +428,6 @@ function mapSuspendSelector(store, boundMetadataSelectors) {
|
|
|
520
428
|
};
|
|
521
429
|
};
|
|
522
430
|
}
|
|
523
|
-
|
|
524
|
-
/**
|
|
525
|
-
* Convert a resolver to a normalized form, an object with `fulfill` method and
|
|
526
|
-
* optional methods like `isFulfilled`.
|
|
527
|
-
*
|
|
528
|
-
* @param {Function} resolver Resolver to convert
|
|
529
|
-
*/
|
|
530
431
|
function mapResolver(resolver) {
|
|
531
432
|
if (resolver.fulfill) {
|
|
532
433
|
return resolver;
|
|
@@ -534,26 +435,14 @@ function mapResolver(resolver) {
|
|
|
534
435
|
return {
|
|
535
436
|
...resolver,
|
|
536
437
|
// Copy the enumerable properties of the resolver function.
|
|
537
|
-
fulfill: resolver
|
|
438
|
+
fulfill: resolver
|
|
439
|
+
// Add the fulfill method.
|
|
538
440
|
};
|
|
539
441
|
}
|
|
540
|
-
|
|
541
|
-
/**
|
|
542
|
-
* Returns a selector with a matched resolver.
|
|
543
|
-
* Resolvers are side effects invoked once per argument set of a given selector call,
|
|
544
|
-
* used in ensuring that the data needs for the selector are satisfied.
|
|
545
|
-
*
|
|
546
|
-
* @param {Object} selector The selector function to be bound.
|
|
547
|
-
* @param {string} selectorName The selector name.
|
|
548
|
-
* @param {Object} resolver Resolver to call.
|
|
549
|
-
* @param {Object} store The redux store to which the resolvers should be mapped.
|
|
550
|
-
* @param {Object} resolversCache Resolvers Cache.
|
|
551
|
-
* @param {Object} boundMetadataSelectors The bound metadata selectors.
|
|
552
|
-
*/
|
|
553
442
|
function mapSelectorWithResolver(selector, selectorName, resolver, store, resolversCache, boundMetadataSelectors) {
|
|
554
443
|
function fulfillSelector(args) {
|
|
555
444
|
const state = store.getState();
|
|
556
|
-
if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled ===
|
|
445
|
+
if (resolversCache.isRunning(selectorName, args) || typeof resolver.isFulfilled === "function" && resolver.isFulfilled(state, ...args)) {
|
|
557
446
|
return;
|
|
558
447
|
}
|
|
559
448
|
if (boundMetadataSelectors.hasStartedResolution(selectorName, args)) {
|
|
@@ -562,15 +451,21 @@ function mapSelectorWithResolver(selector, selectorName, resolver, store, resolv
|
|
|
562
451
|
resolversCache.markAsRunning(selectorName, args);
|
|
563
452
|
setTimeout(async () => {
|
|
564
453
|
resolversCache.clear(selectorName, args);
|
|
565
|
-
store.dispatch(
|
|
454
|
+
store.dispatch(
|
|
455
|
+
metadataActions.startResolution(selectorName, args)
|
|
456
|
+
);
|
|
566
457
|
try {
|
|
567
458
|
const action = resolver.fulfill(...args);
|
|
568
459
|
if (action) {
|
|
569
460
|
await store.dispatch(action);
|
|
570
461
|
}
|
|
571
|
-
store.dispatch(
|
|
462
|
+
store.dispatch(
|
|
463
|
+
metadataActions.finishResolution(selectorName, args)
|
|
464
|
+
);
|
|
572
465
|
} catch (error) {
|
|
573
|
-
store.dispatch(
|
|
466
|
+
store.dispatch(
|
|
467
|
+
metadataActions.failResolution(selectorName, args, error)
|
|
468
|
+
);
|
|
574
469
|
}
|
|
575
470
|
}, 0);
|
|
576
471
|
}
|
|
@@ -582,19 +477,14 @@ function mapSelectorWithResolver(selector, selectorName, resolver, store, resolv
|
|
|
582
477
|
selectorResolver.hasResolver = true;
|
|
583
478
|
return selectorResolver;
|
|
584
479
|
}
|
|
585
|
-
|
|
586
|
-
/**
|
|
587
|
-
* Applies selector's normalization function to the given arguments
|
|
588
|
-
* if it exists.
|
|
589
|
-
*
|
|
590
|
-
* @param {Object} selector The selector potentially with a normalization method property.
|
|
591
|
-
* @param {Array} args selector arguments to normalize.
|
|
592
|
-
* @return {Array} Potentially normalized arguments.
|
|
593
|
-
*/
|
|
594
480
|
function normalize(selector, args) {
|
|
595
|
-
if (selector.__unstableNormalizeArgs && typeof selector.__unstableNormalizeArgs ===
|
|
481
|
+
if (selector.__unstableNormalizeArgs && typeof selector.__unstableNormalizeArgs === "function" && args?.length) {
|
|
596
482
|
return selector.__unstableNormalizeArgs(args);
|
|
597
483
|
}
|
|
598
484
|
return args;
|
|
599
485
|
}
|
|
600
|
-
|
|
486
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
487
|
+
0 && (module.exports = {
|
|
488
|
+
combineReducers
|
|
489
|
+
});
|
|
490
|
+
//# sourceMappingURL=index.js.map
|