@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.
Files changed (157) hide show
  1. package/build/components/async-mode-provider/context.js +35 -54
  2. package/build/components/async-mode-provider/context.js.map +7 -1
  3. package/build/components/async-mode-provider/index.js +40 -25
  4. package/build/components/async-mode-provider/index.js.map +7 -1
  5. package/build/components/async-mode-provider/use-async-mode.js +25 -16
  6. package/build/components/async-mode-provider/use-async-mode.js.map +7 -1
  7. package/build/components/registry-provider/context.js +46 -64
  8. package/build/components/registry-provider/context.js.map +7 -1
  9. package/build/components/registry-provider/index.js +40 -25
  10. package/build/components/registry-provider/index.js.map +7 -1
  11. package/build/components/registry-provider/use-registry.js +25 -55
  12. package/build/components/registry-provider/use-registry.js.map +7 -1
  13. package/build/components/use-dispatch/index.js +38 -17
  14. package/build/components/use-dispatch/index.js.map +7 -1
  15. package/build/components/use-dispatch/use-dispatch-with-map.js +59 -44
  16. package/build/components/use-dispatch/use-dispatch-with-map.js.map +7 -1
  17. package/build/components/use-dispatch/use-dispatch.js +36 -71
  18. package/build/components/use-dispatch/use-dispatch.js.map +7 -1
  19. package/build/components/use-select/index.js +79 -208
  20. package/build/components/use-select/index.js.map +7 -1
  21. package/build/components/with-dispatch/index.js +34 -107
  22. package/build/components/with-dispatch/index.js.map +7 -1
  23. package/build/components/with-registry/index.js +30 -30
  24. package/build/components/with-registry/index.js.map +7 -1
  25. package/build/components/with-select/index.js +44 -67
  26. package/build/components/with-select/index.js.map +7 -1
  27. package/build/controls.js +49 -110
  28. package/build/controls.js.map +7 -1
  29. package/build/create-selector.js +36 -11
  30. package/build/create-selector.js.map +7 -1
  31. package/build/default-registry.js +24 -10
  32. package/build/default-registry.js.map +7 -1
  33. package/build/dispatch.js +38 -31
  34. package/build/dispatch.js.map +7 -1
  35. package/build/factory.js +29 -85
  36. package/build/factory.js.map +7 -1
  37. package/build/index.js +114 -301
  38. package/build/index.js.map +7 -1
  39. package/build/lock-unlock.js +31 -14
  40. package/build/lock-unlock.js.map +7 -1
  41. package/build/plugins/index.js +36 -11
  42. package/build/plugins/index.js.map +7 -1
  43. package/build/plugins/persistence/index.js +74 -139
  44. package/build/plugins/persistence/index.js.map +7 -1
  45. package/build/plugins/persistence/storage/default.js +37 -18
  46. package/build/plugins/persistence/storage/default.js.map +7 -1
  47. package/build/plugins/persistence/storage/object.js +24 -7
  48. package/build/plugins/persistence/storage/object.js.map +7 -1
  49. package/build/promise-middleware.js +37 -20
  50. package/build/promise-middleware.js.map +7 -1
  51. package/build/redux-store/combine-reducers.js +26 -5
  52. package/build/redux-store/combine-reducers.js.map +7 -1
  53. package/build/redux-store/index.js +221 -331
  54. package/build/redux-store/index.js.map +7 -1
  55. package/build/redux-store/metadata/actions.js +51 -112
  56. package/build/redux-store/metadata/actions.js.map +7 -1
  57. package/build/redux-store/metadata/equivalent-key-map.d.js +1 -1
  58. package/build/redux-store/metadata/equivalent-key-map.d.js.map +7 -1
  59. package/build/redux-store/metadata/reducer.js +111 -115
  60. package/build/redux-store/metadata/reducer.js.map +7 -1
  61. package/build/redux-store/metadata/selectors.js +109 -181
  62. package/build/redux-store/metadata/selectors.js.map +7 -1
  63. package/build/redux-store/metadata/utils.js +32 -35
  64. package/build/redux-store/metadata/utils.js.map +7 -1
  65. package/build/redux-store/thunk-middleware.js +24 -7
  66. package/build/redux-store/thunk-middleware.js.map +7 -1
  67. package/build/registry.js +94 -198
  68. package/build/registry.js.map +7 -1
  69. package/build/resolvers-cache-middleware.js +26 -27
  70. package/build/resolvers-cache-middleware.js.map +7 -1
  71. package/build/select.js +38 -31
  72. package/build/select.js.map +7 -1
  73. package/build/store/index.js +52 -16
  74. package/build/store/index.js.map +7 -1
  75. package/build/types.js +16 -5
  76. package/build/types.js.map +7 -1
  77. package/build/utils/emitter.js +33 -16
  78. package/build/utils/emitter.js.map +7 -1
  79. package/build-module/components/async-mode-provider/context.js +12 -49
  80. package/build-module/components/async-mode-provider/context.js.map +7 -1
  81. package/build-module/components/async-mode-provider/index.js +8 -3
  82. package/build-module/components/async-mode-provider/index.js.map +7 -1
  83. package/build-module/components/async-mode-provider/use-async-mode.js +7 -11
  84. package/build-module/components/async-mode-provider/use-async-mode.js.map +7 -1
  85. package/build-module/components/registry-provider/context.js +13 -58
  86. package/build-module/components/registry-provider/context.js.map +7 -1
  87. package/build-module/components/registry-provider/index.js +8 -3
  88. package/build-module/components/registry-provider/index.js.map +7 -1
  89. package/build-module/components/registry-provider/use-registry.js +7 -51
  90. package/build-module/components/registry-provider/use-registry.js.map +7 -1
  91. package/build-module/components/use-dispatch/index.js +7 -3
  92. package/build-module/components/use-dispatch/index.js.map +7 -1
  93. package/build-module/components/use-dispatch/use-dispatch-with-map.js +27 -35
  94. package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +7 -1
  95. package/build-module/components/use-dispatch/use-dispatch.js +8 -66
  96. package/build-module/components/use-dispatch/use-dispatch.js.map +7 -1
  97. package/build-module/components/use-select/index.js +45 -193
  98. package/build-module/components/use-select/index.js.map +7 -1
  99. package/build-module/components/with-dispatch/index.js +16 -104
  100. package/build-module/components/with-dispatch/index.js.map +7 -1
  101. package/build-module/components/with-registry/index.js +12 -27
  102. package/build-module/components/with-registry/index.js.map +7 -1
  103. package/build-module/components/with-select/index.js +16 -63
  104. package/build-module/components/with-select/index.js.map +7 -1
  105. package/build-module/controls.js +25 -105
  106. package/build-module/controls.js.map +7 -1
  107. package/build-module/create-selector.js +5 -8
  108. package/build-module/create-selector.js.map +7 -1
  109. package/build-module/default-registry.js +6 -6
  110. package/build-module/default-registry.js.map +7 -1
  111. package/build-module/dispatch.js +6 -27
  112. package/build-module/dispatch.js.map +7 -1
  113. package/build-module/factory.js +8 -82
  114. package/build-module/factory.js.map +7 -1
  115. package/build-module/index.js +62 -185
  116. package/build-module/index.js.map +7 -1
  117. package/build-module/lock-unlock.js +8 -7
  118. package/build-module/lock-unlock.js.map +7 -1
  119. package/build-module/plugins/index.js +5 -2
  120. package/build-module/plugins/index.js.map +7 -1
  121. package/build-module/plugins/persistence/index.js +38 -129
  122. package/build-module/plugins/persistence/index.js.map +7 -1
  123. package/build-module/plugins/persistence/storage/default.js +8 -11
  124. package/build-module/plugins/persistence/storage/default.js.map +7 -1
  125. package/build-module/plugins/persistence/storage/object.js +6 -3
  126. package/build-module/plugins/persistence/storage/object.js.map +7 -1
  127. package/build-module/promise-middleware.js +8 -14
  128. package/build-module/promise-middleware.js.map +7 -1
  129. package/build-module/redux-store/combine-reducers.js +5 -2
  130. package/build-module/redux-store/combine-reducers.js.map +7 -1
  131. package/build-module/redux-store/index.js +180 -310
  132. package/build-module/redux-store/index.js.map +7 -1
  133. package/build-module/redux-store/metadata/actions.js +30 -109
  134. package/build-module/redux-store/metadata/actions.js.map +7 -1
  135. package/build-module/redux-store/metadata/equivalent-key-map.d.js +1 -2
  136. package/build-module/redux-store/metadata/equivalent-key-map.d.js.map +7 -1
  137. package/build-module/redux-store/metadata/reducer.js +83 -108
  138. package/build-module/redux-store/metadata/reducer.js.map +7 -1
  139. package/build-module/redux-store/metadata/selectors.js +76 -175
  140. package/build-module/redux-store/metadata/selectors.js.map +7 -1
  141. package/build-module/redux-store/metadata/utils.js +10 -30
  142. package/build-module/redux-store/metadata/utils.js.map +7 -1
  143. package/build-module/redux-store/thunk-middleware.js +7 -4
  144. package/build-module/redux-store/thunk-middleware.js.map +7 -1
  145. package/build-module/registry.js +56 -187
  146. package/build-module/registry.js.map +7 -1
  147. package/build-module/resolvers-cache-middleware.js +8 -23
  148. package/build-module/resolvers-cache-middleware.js.map +7 -1
  149. package/build-module/select.js +6 -27
  150. package/build-module/select.js.map +7 -1
  151. package/build-module/store/index.js +34 -12
  152. package/build-module/store/index.js.map +7 -1
  153. package/build-module/types.js +1 -2
  154. package/build-module/types.js.map +7 -1
  155. package/build-module/utils/emitter.js +12 -13
  156. package/build-module/utils/emitter.js.map +7 -1
  157. package/package.json +17 -10
@@ -1,77 +1,65 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- Object.defineProperty(exports, "combineReducers", {
8
- enumerable: true,
9
- get: function () {
10
- return _combineReducers.combineReducers;
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.default = createReduxStore;
14
- var _redux = require("redux");
15
- var _equivalentKeyMap = _interopRequireDefault(require("equivalent-key-map"));
16
- var _reduxRoutine = _interopRequireDefault(require("@wordpress/redux-routine"));
17
- var _compose = require("@wordpress/compose");
18
- var _combineReducers = require("./combine-reducers");
19
- var _controls = require("../controls");
20
- var _lockUnlock = require("../lock-unlock");
21
- var _promiseMiddleware = _interopRequireDefault(require("../promise-middleware"));
22
- var _resolversCacheMiddleware = _interopRequireDefault(require("../resolvers-cache-middleware"));
23
- var _thunkMiddleware = _interopRequireDefault(require("./thunk-middleware"));
24
- var _reducer = _interopRequireDefault(require("./metadata/reducer"));
25
- var metadataSelectors = _interopRequireWildcard(require("./metadata/selectors"));
26
- var metadataActions = _interopRequireWildcard(require("./metadata/actions"));
27
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
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] === undefined) {
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
- * Creates a new object with the same keys, but with `callback()` called as
66
- * a transformer function on each of the values.
67
- *
68
- * @param {Object} obj The object to transform.
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 _equivalentKeyMap.default();
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(key, options, registry, thunkArgs);
205
-
206
- // Expose the private registration functions on the store
207
- // so they can be copied to a sub registry in registry.js.
208
- (0, _lockUnlock.lock)(store, privateRegistrationFunctions);
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
- // Object with both public and private actions. Private actions are accessed through a proxy,
228
- // which looks them up in real time on the `privateActions` object. That's because private
229
- // actions can be registered at any time with `registerPrivateActions`. Also once a private
230
- // action creator is bound to the store, it is cached to give it a stable identity.
231
- const allActions = createPrivateProxy(actions, createBindingCache(name => privateActions[name], bindAction));
232
-
233
- // An object that implements the `dispatch` object that is passed to thunk functions.
234
- // It is callable (`dispatch( action )`) and also has methods (`dispatch.foo()`) that
235
- // correspond to bound registered actions, both public and private. Implemented with the proxy
236
- // `get` method, delegating to `allActions`.
237
- const thunkDispatch = new Proxy(action => store.dispatch(action), {
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(boundSelector, selectorName, resolver, store, resolversCache, boundMetadataSelectors);
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(targetSelector, selectorArgs);
203
+ selectorArgs = normalize(
204
+ targetSelector,
205
+ selectorArgs
206
+ );
285
207
  }
286
208
  }
287
209
  const state = store.__unstableOriginalGetState();
288
- return metaDataSelector(state.metadata, selectorName, selectorArgs, ...args);
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
- // Perform binding of both metadata and store selectors and combine them in one
295
- // `selectors` object. These are all public selectors of the store.
296
- const boundMetadataSelectors = mapValues(metadataSelectors, bindMetadataSelector);
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
- // Cache of bould private selectors. They are bound only when first accessed, because
304
- // new private selectors can be registered at any time (with `registerPrivateSelectors`).
305
- // Once bound, they are cached to give them a stable identity.
306
- const boundPrivateSelectors = createBindingCache(name => privateSelectors[name], bindSelector);
307
- const allSelectors = createPrivateProxy(selectors, boundPrivateSelectors);
308
-
309
- // Pre-bind the private selectors that have been registered by the time of
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
- // An object that implements the `select` object that is passed to thunk functions.
316
- // It is callable (`select( selector )`) and also has methods (`select.foo()`) that
317
- // correspond to bound registered selectors, both public and private. Implemented with the proxy
318
- // `get` method, delegating to `allSelectors`.
319
- const thunkSelect = new Proxy(selector => selector(store.__unstableOriginalGetState()), {
320
- get: (target, name) => allSelectors[name]
321
- });
322
-
323
- // To the public `selectors` object, add the "locked" `allSelectors` object. When used,
324
- // `unlock( selectors )` will return `allSelectors`, implementing a way how to get at the private selectors.
325
- (0, _lockUnlock.lock)(selectors, allSelectors);
326
-
327
- // For each selector, create a function that calls the selector, waits for resolution and returns
328
- // a promise that resolves when the resolution is finished.
329
- const bindResolveSelector = mapResolveSelector(store, boundMetadataSelectors);
330
-
331
- // Now apply this function to all bound selectors, public and private. We are excluding
332
- // metadata selectors because they don't have resolvers.
333
- const resolveSelectors = mapValues(boundSelectors, bindResolveSelector);
334
- const allResolveSelectors = createPrivateProxy(resolveSelectors, createBindingCache(name => boundPrivateSelectors.get(name), bindResolveSelector));
335
-
336
- // Lock the selectors so that `unlock( resolveSelectors )` returns `allResolveSelectors`.
337
- (0, _lockUnlock.lock)(resolveSelectors, allResolveSelectors);
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(suspendSelectors, createBindingCache(name => boundPrivateSelectors.get(name), bindSuspendSelector));
348
-
349
- // Lock the selectors so that `unlock( suspendSelectors )` returns 'allSuspendSelectors`.
350
- (0, _lockUnlock.lock)(suspendSelectors, allSuspendSelectors);
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
- ..._controls.builtinControls
319
+ ...import_controls.builtinControls
419
320
  };
420
- const normalizedControls = mapValues(controls, control => control.isRegistryControl ? control(registry) : control);
421
- const middlewares = [(0, _resolversCacheMiddleware.default)(registry, key), _promiseMiddleware.default, (0, _reduxRoutine.default)(normalizedControls), (0, _thunkMiddleware.default)(thunkArgs)];
422
- const enhancers = [(0, _redux.applyMiddleware)(...middlewares)];
423
- if (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__) {
424
- enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__({
425
- name: key,
426
- instanceId: key,
427
- serialize: {
428
- replacer: devToolsReplacer
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
- reducer,
434
- initialState
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, _redux.createStore)(enhancedReducer, {
441
- root: initialState
442
- }, (0, _compose.compose)(enhancers));
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(selectorName, args);
361
+ return boundMetadataSelectors.hasFinishedResolution(
362
+ selectorName,
363
+ args
364
+ );
463
365
  };
464
- const finalize = result => {
465
- const hasFailed = boundMetadataSelectors.hasResolutionFailed(selectorName, args);
366
+ const finalize = (result2) => {
367
+ const hasFailed = boundMetadataSelectors.hasResolutionFailed(
368
+ selectorName,
369
+ args
370
+ );
466
371
  if (hasFailed) {
467
- const error = boundMetadataSelectors.getResolutionError(selectorName, args);
372
+ const error = boundMetadataSelectors.getResolutionError(
373
+ selectorName,
374
+ args
375
+ );
468
376
  reject(error);
469
377
  } else {
470
- resolve(result);
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(selectorName, args)) {
507
- if (boundMetadataSelectors.hasResolutionFailed(selectorName, args)) {
508
- throw boundMetadataSelectors.getResolutionError(selectorName, args);
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(selectorName, args)) {
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 // Add the fulfill method.
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 === 'function' && resolver.isFulfilled(state, ...args)) {
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(metadataActions.startResolution(selectorName, args));
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(metadataActions.finishResolution(selectorName, args));
462
+ store.dispatch(
463
+ metadataActions.finishResolution(selectorName, args)
464
+ );
572
465
  } catch (error) {
573
- store.dispatch(metadataActions.failResolution(selectorName, args, error));
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 === 'function' && args?.length) {
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
- //# sourceMappingURL=index.js.map
486
+ // Annotate the CommonJS export names for ESM import in node:
487
+ 0 && (module.exports = {
488
+ combineReducers
489
+ });
490
+ //# sourceMappingURL=index.js.map