@depup/reduxjs__toolkit 2.12.0-depup.28

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 (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -0
  3. package/changes.json +18 -0
  4. package/dist/cjs/index.js +6 -0
  5. package/dist/cjs/redux-toolkit.development.cjs +2406 -0
  6. package/dist/cjs/redux-toolkit.development.cjs.map +1 -0
  7. package/dist/cjs/redux-toolkit.production.min.cjs +3 -0
  8. package/dist/cjs/redux-toolkit.production.min.cjs.map +1 -0
  9. package/dist/index.d.mts +2665 -0
  10. package/dist/index.d.ts +2665 -0
  11. package/dist/query/cjs/index.js +6 -0
  12. package/dist/query/cjs/rtk-query.development.cjs +3092 -0
  13. package/dist/query/cjs/rtk-query.development.cjs.map +1 -0
  14. package/dist/query/cjs/rtk-query.production.min.cjs +2 -0
  15. package/dist/query/cjs/rtk-query.production.min.cjs.map +1 -0
  16. package/dist/query/index.d.mts +3066 -0
  17. package/dist/query/index.d.ts +3066 -0
  18. package/dist/query/react/cjs/index.js +6 -0
  19. package/dist/query/react/cjs/rtk-query-react.development.cjs +748 -0
  20. package/dist/query/react/cjs/rtk-query-react.development.cjs.map +1 -0
  21. package/dist/query/react/cjs/rtk-query-react.production.min.cjs +2 -0
  22. package/dist/query/react/cjs/rtk-query-react.production.min.cjs.map +1 -0
  23. package/dist/query/react/index.d.mts +1009 -0
  24. package/dist/query/react/index.d.ts +1009 -0
  25. package/dist/query/react/rtk-query-react.browser.mjs +2 -0
  26. package/dist/query/react/rtk-query-react.browser.mjs.map +1 -0
  27. package/dist/query/react/rtk-query-react.legacy-esm.js +740 -0
  28. package/dist/query/react/rtk-query-react.legacy-esm.js.map +1 -0
  29. package/dist/query/react/rtk-query-react.modern.mjs +705 -0
  30. package/dist/query/react/rtk-query-react.modern.mjs.map +1 -0
  31. package/dist/query/rtk-query.browser.mjs +2 -0
  32. package/dist/query/rtk-query.browser.mjs.map +1 -0
  33. package/dist/query/rtk-query.legacy-esm.js +3117 -0
  34. package/dist/query/rtk-query.legacy-esm.js.map +1 -0
  35. package/dist/query/rtk-query.modern.mjs +3052 -0
  36. package/dist/query/rtk-query.modern.mjs.map +1 -0
  37. package/dist/react/cjs/index.js +6 -0
  38. package/dist/react/cjs/redux-toolkit-react.development.cjs +55 -0
  39. package/dist/react/cjs/redux-toolkit-react.development.cjs.map +1 -0
  40. package/dist/react/cjs/redux-toolkit-react.production.min.cjs +2 -0
  41. package/dist/react/cjs/redux-toolkit-react.production.min.cjs.map +1 -0
  42. package/dist/react/index.d.mts +22 -0
  43. package/dist/react/index.d.ts +22 -0
  44. package/dist/react/redux-toolkit-react.browser.mjs +2 -0
  45. package/dist/react/redux-toolkit-react.browser.mjs.map +1 -0
  46. package/dist/react/redux-toolkit-react.legacy-esm.js +47 -0
  47. package/dist/react/redux-toolkit-react.legacy-esm.js.map +1 -0
  48. package/dist/react/redux-toolkit-react.modern.mjs +28 -0
  49. package/dist/react/redux-toolkit-react.modern.mjs.map +1 -0
  50. package/dist/redux-toolkit.browser.mjs +3 -0
  51. package/dist/redux-toolkit.browser.mjs.map +1 -0
  52. package/dist/redux-toolkit.legacy-esm.js +2351 -0
  53. package/dist/redux-toolkit.legacy-esm.js.map +1 -0
  54. package/dist/redux-toolkit.modern.mjs +2330 -0
  55. package/dist/redux-toolkit.modern.mjs.map +1 -0
  56. package/dist/uncheckedindexed.ts +16 -0
  57. package/package.json +310 -0
  58. package/query/package.json +13 -0
  59. package/query/react/package.json +13 -0
  60. package/react/package.json +13 -0
  61. package/skills/build-modern-redux-apps/modern-redux/SKILL.md +304 -0
  62. package/skills/build-modern-redux-apps/modern-redux/references/store-lifetime.md +53 -0
  63. package/skills/build-modern-redux-apps/redux-dataflow/SKILL.md +264 -0
  64. package/skills/evolve-and-diagnose-redux-apps/debug-redux-toolkit-apps/SKILL.md +269 -0
  65. package/skills/evolve-and-diagnose-redux-apps/migrate-to-modern-redux/SKILL.md +226 -0
  66. package/skills/manage-server-data/adopt-rtk-query/SKILL.md +385 -0
  67. package/skills/manage-server-data/adopt-rtk-query/references/endpoint-lifecycle.md +36 -0
  68. package/skills/model-redux-state/build-slices-and-selectors/SKILL.md +364 -0
  69. package/skills/model-redux-state/build-slices-and-selectors/references/slice-patterns.md +59 -0
  70. package/skills/model-redux-state/design-state-ownership/SKILL.md +322 -0
  71. package/skills/model-redux-state/design-state-ownership/references/state-ownership.md +28 -0
  72. package/skills/orchestrate-side-effects/handle-side-effects/SKILL.md +271 -0
  73. package/skills/orchestrate-side-effects/handle-side-effects/references/listener-workflows.md +34 -0
  74. package/src/actionCreatorInvariantMiddleware.ts +34 -0
  75. package/src/autoBatchEnhancer.ts +146 -0
  76. package/src/combineSlices.ts +487 -0
  77. package/src/configureStore.ts +248 -0
  78. package/src/createAction.ts +324 -0
  79. package/src/createAsyncThunk.ts +791 -0
  80. package/src/createDraftSafeSelector.ts +30 -0
  81. package/src/createReducer.ts +217 -0
  82. package/src/createSlice.ts +1079 -0
  83. package/src/devtoolsExtension.ts +241 -0
  84. package/src/dynamicMiddleware/index.ts +93 -0
  85. package/src/dynamicMiddleware/react/index.ts +101 -0
  86. package/src/dynamicMiddleware/types.ts +82 -0
  87. package/src/entities/create_adapter.ts +47 -0
  88. package/src/entities/entity_state.ts +38 -0
  89. package/src/entities/index.ts +8 -0
  90. package/src/entities/models.ts +198 -0
  91. package/src/entities/sorted_state_adapter.ts +266 -0
  92. package/src/entities/state_adapter.ts +58 -0
  93. package/src/entities/state_selectors.ts +73 -0
  94. package/src/entities/unsorted_state_adapter.ts +204 -0
  95. package/src/entities/utils.ts +68 -0
  96. package/src/formatProdErrorMessage.ts +13 -0
  97. package/src/getDefaultEnhancers.ts +31 -0
  98. package/src/getDefaultMiddleware.ts +113 -0
  99. package/src/immerImports.ts +7 -0
  100. package/src/immutableStateInvariantMiddleware.ts +274 -0
  101. package/src/index.ts +213 -0
  102. package/src/listenerMiddleware/exceptions.ts +20 -0
  103. package/src/listenerMiddleware/index.ts +562 -0
  104. package/src/listenerMiddleware/task.ts +100 -0
  105. package/src/listenerMiddleware/types.ts +886 -0
  106. package/src/listenerMiddleware/utils.ts +30 -0
  107. package/src/mapBuilders.ts +298 -0
  108. package/src/matchers.ts +365 -0
  109. package/src/nanoid.ts +20 -0
  110. package/src/query/HandledError.ts +6 -0
  111. package/src/query/apiTypes.ts +120 -0
  112. package/src/query/baseQueryTypes.ts +101 -0
  113. package/src/query/core/apiState.ts +377 -0
  114. package/src/query/core/buildInitiate.ts +596 -0
  115. package/src/query/core/buildMiddleware/batchActions.ts +207 -0
  116. package/src/query/core/buildMiddleware/cacheCollection.ts +204 -0
  117. package/src/query/core/buildMiddleware/cacheLifecycle.ts +379 -0
  118. package/src/query/core/buildMiddleware/devMiddleware.ts +34 -0
  119. package/src/query/core/buildMiddleware/index.ts +162 -0
  120. package/src/query/core/buildMiddleware/invalidationByTags.ts +139 -0
  121. package/src/query/core/buildMiddleware/polling.ts +187 -0
  122. package/src/query/core/buildMiddleware/queryLifecycle.ts +508 -0
  123. package/src/query/core/buildMiddleware/types.ts +173 -0
  124. package/src/query/core/buildMiddleware/windowEventHandling.ts +64 -0
  125. package/src/query/core/buildSelectors.ts +413 -0
  126. package/src/query/core/buildSlice.ts +735 -0
  127. package/src/query/core/buildThunks.ts +1124 -0
  128. package/src/query/core/index.ts +58 -0
  129. package/src/query/core/module.ts +727 -0
  130. package/src/query/core/rtkImports.ts +24 -0
  131. package/src/query/core/setupListeners.ts +118 -0
  132. package/src/query/createApi.ts +506 -0
  133. package/src/query/defaultSerializeQueryArgs.ts +52 -0
  134. package/src/query/endpointDefinitions.ts +1717 -0
  135. package/src/query/fakeBaseQuery.ts +21 -0
  136. package/src/query/fetchBaseQuery.ts +385 -0
  137. package/src/query/index.ts +105 -0
  138. package/src/query/react/ApiProvider.tsx +69 -0
  139. package/src/query/react/buildHooks.ts +2297 -0
  140. package/src/query/react/constants.ts +2 -0
  141. package/src/query/react/index.ts +45 -0
  142. package/src/query/react/module.ts +275 -0
  143. package/src/query/react/namedHooks.ts +59 -0
  144. package/src/query/react/reactImports.ts +10 -0
  145. package/src/query/react/reactReduxImports.ts +1 -0
  146. package/src/query/react/rtkqImports.ts +8 -0
  147. package/src/query/react/useSerializedStableValue.ts +17 -0
  148. package/src/query/react/useShallowStableValue.ts +13 -0
  149. package/src/query/retry.ts +233 -0
  150. package/src/query/standardSchema.ts +35 -0
  151. package/src/query/tsHelpers.ts +48 -0
  152. package/src/query/utils/capitalize.ts +3 -0
  153. package/src/query/utils/copyWithStructuralSharing.ts +27 -0
  154. package/src/query/utils/countObjectKeys.ts +14 -0
  155. package/src/query/utils/filterMap.ts +27 -0
  156. package/src/query/utils/getCurrent.ts +6 -0
  157. package/src/query/utils/getOrInsert.ts +41 -0
  158. package/src/query/utils/immerImports.ts +9 -0
  159. package/src/query/utils/index.ts +11 -0
  160. package/src/query/utils/isAbsoluteUrl.ts +9 -0
  161. package/src/query/utils/isDocumentVisible.ts +12 -0
  162. package/src/query/utils/isNotNullish.ts +7 -0
  163. package/src/query/utils/isOnline.ts +12 -0
  164. package/src/query/utils/isValidUrl.ts +9 -0
  165. package/src/query/utils/joinUrls.ts +26 -0
  166. package/src/query/utils/signals.ts +33 -0
  167. package/src/react/index.ts +7 -0
  168. package/src/reduxImports.ts +8 -0
  169. package/src/reselectImports.ts +1 -0
  170. package/src/serializableStateInvariantMiddleware.ts +285 -0
  171. package/src/tsHelpers.ts +214 -0
  172. package/src/uncheckedindexed.ts +16 -0
  173. package/src/utils.ts +125 -0
@@ -0,0 +1,705 @@
1
+ // src/query/react/rtkqImports.ts
2
+ import { buildCreateApi, coreModule, copyWithStructuralSharing, setupListeners, QueryStatus, skipToken } from "@reduxjs/toolkit/query";
3
+
4
+ // src/query/react/module.ts
5
+ import { formatProdErrorMessage as _formatProdErrorMessage4 } from "@reduxjs/toolkit";
6
+ import { batch as rrBatch, useDispatch as rrUseDispatch, useSelector as rrUseSelector, useStore as rrUseStore } from "react-redux";
7
+ import { createSelector as _createSelector } from "reselect";
8
+
9
+ // src/query/utils/capitalize.ts
10
+ function capitalize(str) {
11
+ return str.replace(str[0], str[0].toUpperCase());
12
+ }
13
+
14
+ // src/query/utils/countObjectKeys.ts
15
+ function countObjectKeys(obj) {
16
+ let count = 0;
17
+ for (const _key in obj) {
18
+ count++;
19
+ }
20
+ return count;
21
+ }
22
+
23
+ // src/query/endpointDefinitions.ts
24
+ var ENDPOINT_QUERY = "query" /* query */;
25
+ var ENDPOINT_MUTATION = "mutation" /* mutation */;
26
+ var ENDPOINT_INFINITEQUERY = "infinitequery" /* infinitequery */;
27
+ function isQueryDefinition(e) {
28
+ return e.type === ENDPOINT_QUERY;
29
+ }
30
+ function isMutationDefinition(e) {
31
+ return e.type === ENDPOINT_MUTATION;
32
+ }
33
+ function isInfiniteQueryDefinition(e) {
34
+ return e.type === ENDPOINT_INFINITEQUERY;
35
+ }
36
+
37
+ // src/query/tsHelpers.ts
38
+ function safeAssign(target, ...args) {
39
+ return Object.assign(target, ...args);
40
+ }
41
+
42
+ // src/query/react/buildHooks.ts
43
+ import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from "@reduxjs/toolkit";
44
+
45
+ // src/query/react/constants.ts
46
+ var UNINITIALIZED_VALUE = /* @__PURE__ */ Symbol();
47
+
48
+ // src/query/react/reactImports.ts
49
+ import { useEffect, useRef, useMemo, useContext, useCallback, useDebugValue, useLayoutEffect, useState } from "react";
50
+
51
+ // src/query/react/reactReduxImports.ts
52
+ import { shallowEqual, Provider, ReactReduxContext } from "react-redux";
53
+
54
+ // src/query/react/useSerializedStableValue.ts
55
+ function useStableQueryArgs(queryArgs) {
56
+ const cache = useRef(queryArgs);
57
+ const copy = useMemo(() => copyWithStructuralSharing(cache.current, queryArgs), [queryArgs]);
58
+ useEffect(() => {
59
+ if (cache.current !== copy) {
60
+ cache.current = copy;
61
+ }
62
+ }, [copy]);
63
+ return copy;
64
+ }
65
+
66
+ // src/query/react/useShallowStableValue.ts
67
+ function useShallowStableValue(value) {
68
+ const cache = useRef(value);
69
+ useEffect(() => {
70
+ if (!shallowEqual(cache.current, value)) {
71
+ cache.current = value;
72
+ }
73
+ }, [value]);
74
+ return shallowEqual(cache.current, value) ? cache.current : value;
75
+ }
76
+
77
+ // src/query/react/buildHooks.ts
78
+ var canUseDOM = () => !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
79
+ var isDOM = /* @__PURE__ */ canUseDOM();
80
+ var isRunningInReactNative = () => typeof navigator !== "undefined" && navigator.product === "ReactNative";
81
+ var isReactNative = /* @__PURE__ */ isRunningInReactNative();
82
+ var getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? useLayoutEffect : useEffect;
83
+ var useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();
84
+ var noPendingQueryStateSelector = (selected) => {
85
+ if (selected.isUninitialized) {
86
+ return {
87
+ ...selected,
88
+ isUninitialized: false,
89
+ isFetching: true,
90
+ isLoading: selected.data !== void 0 ? false : true,
91
+ // This is the one place where we still have to use `QueryStatus` as an enum,
92
+ // since it's the only reference in the React package and not in the core.
93
+ status: QueryStatus.pending
94
+ };
95
+ }
96
+ return selected;
97
+ };
98
+ function pick(obj, ...keys) {
99
+ const ret = {};
100
+ keys.forEach((key) => {
101
+ ret[key] = obj[key];
102
+ });
103
+ return ret;
104
+ }
105
+ var COMMON_HOOK_DEBUG_FIELDS = ["data", "status", "isLoading", "isSuccess", "isError", "error"];
106
+ function buildHooks({
107
+ api,
108
+ moduleOptions: {
109
+ batch,
110
+ hooks: {
111
+ useDispatch,
112
+ useSelector,
113
+ useStore
114
+ },
115
+ unstable__sideEffectsInRender,
116
+ createSelector
117
+ },
118
+ serializeQueryArgs,
119
+ context
120
+ }) {
121
+ const usePossiblyImmediateEffect = unstable__sideEffectsInRender ? (cb) => cb() : useEffect;
122
+ const unsubscribePromiseRef = (ref) => ref.current?.unsubscribe?.();
123
+ const endpointDefinitions = context.endpointDefinitions;
124
+ return {
125
+ buildQueryHooks,
126
+ buildInfiniteQueryHooks,
127
+ buildMutationHook,
128
+ usePrefetch
129
+ };
130
+ function queryStatePreSelector(currentState, lastResult, queryArgs) {
131
+ if (lastResult?.endpointName && currentState.isUninitialized) {
132
+ const {
133
+ endpointName
134
+ } = lastResult;
135
+ const endpointDefinition = endpointDefinitions[endpointName];
136
+ if (queryArgs !== skipToken && serializeQueryArgs({
137
+ queryArgs: lastResult.originalArgs,
138
+ endpointDefinition,
139
+ endpointName
140
+ }) === serializeQueryArgs({
141
+ queryArgs,
142
+ endpointDefinition,
143
+ endpointName
144
+ })) lastResult = void 0;
145
+ }
146
+ let data = currentState.isSuccess ? currentState.data : lastResult?.data;
147
+ if (data === void 0) data = currentState.data;
148
+ const hasData = data !== void 0;
149
+ const isFetching = currentState.isLoading;
150
+ const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;
151
+ const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);
152
+ return {
153
+ ...currentState,
154
+ data,
155
+ currentData: currentState.data,
156
+ isFetching,
157
+ isLoading,
158
+ isSuccess
159
+ };
160
+ }
161
+ function infiniteQueryStatePreSelector(currentState, lastResult, queryArgs) {
162
+ if (lastResult?.endpointName && currentState.isUninitialized) {
163
+ const {
164
+ endpointName
165
+ } = lastResult;
166
+ const endpointDefinition = endpointDefinitions[endpointName];
167
+ if (queryArgs !== skipToken && serializeQueryArgs({
168
+ queryArgs: lastResult.originalArgs,
169
+ endpointDefinition,
170
+ endpointName
171
+ }) === serializeQueryArgs({
172
+ queryArgs,
173
+ endpointDefinition,
174
+ endpointName
175
+ })) lastResult = void 0;
176
+ }
177
+ let data = currentState.isSuccess ? currentState.data : lastResult?.data;
178
+ if (data === void 0) data = currentState.data;
179
+ const hasData = data !== void 0;
180
+ const isFetching = currentState.isLoading;
181
+ const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;
182
+ const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);
183
+ return {
184
+ ...currentState,
185
+ data,
186
+ currentData: currentState.data,
187
+ isFetching,
188
+ isLoading,
189
+ isSuccess
190
+ };
191
+ }
192
+ function usePrefetch(endpointName, defaultOptions) {
193
+ const dispatch = useDispatch();
194
+ const stableDefaultOptions = useShallowStableValue(defaultOptions);
195
+ return useCallback((arg, options) => dispatch(api.util.prefetch(endpointName, arg, {
196
+ ...stableDefaultOptions,
197
+ ...options
198
+ })), [endpointName, dispatch, stableDefaultOptions]);
199
+ }
200
+ function useQuerySubscriptionCommonImpl(endpointName, arg, {
201
+ refetchOnReconnect,
202
+ refetchOnFocus,
203
+ refetchOnMountOrArgChange,
204
+ skip = false,
205
+ pollingInterval = 0,
206
+ skipPollingIfUnfocused = false,
207
+ ...rest
208
+ } = {}) {
209
+ const {
210
+ initiate
211
+ } = api.endpoints[endpointName];
212
+ const dispatch = useDispatch();
213
+ const subscriptionSelectorsRef = useRef(void 0);
214
+ if (!subscriptionSelectorsRef.current) {
215
+ const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());
216
+ if (process.env.NODE_ENV !== "production") {
217
+ if (typeof returnedValue !== "object" || typeof returnedValue?.type === "string") {
218
+ throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
219
+ You must add the middleware for RTK-Query to function correctly!`);
220
+ }
221
+ }
222
+ subscriptionSelectorsRef.current = returnedValue;
223
+ }
224
+ const stableArg = useStableQueryArgs(skip ? skipToken : arg);
225
+ const stableSubscriptionOptions = useShallowStableValue({
226
+ refetchOnReconnect,
227
+ refetchOnFocus,
228
+ pollingInterval,
229
+ skipPollingIfUnfocused
230
+ });
231
+ const initialPageParam = rest.initialPageParam;
232
+ const stableInitialPageParam = useShallowStableValue(initialPageParam);
233
+ const refetchCachedPages = rest.refetchCachedPages;
234
+ const stableRefetchCachedPages = useShallowStableValue(refetchCachedPages);
235
+ const promiseRef = useRef(void 0);
236
+ let {
237
+ queryCacheKey,
238
+ requestId
239
+ } = promiseRef.current || {};
240
+ let currentRenderHasSubscription = false;
241
+ if (queryCacheKey && requestId) {
242
+ currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);
243
+ }
244
+ const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== void 0;
245
+ usePossiblyImmediateEffect(() => {
246
+ if (subscriptionRemoved) {
247
+ promiseRef.current = void 0;
248
+ }
249
+ }, [subscriptionRemoved]);
250
+ usePossiblyImmediateEffect(() => {
251
+ const lastPromise = promiseRef.current;
252
+ if (typeof process !== "undefined" && process.env.NODE_ENV === "removeMeOnCompilation") {
253
+ console.log(subscriptionRemoved);
254
+ }
255
+ if (stableArg === skipToken) {
256
+ lastPromise?.unsubscribe();
257
+ promiseRef.current = void 0;
258
+ return;
259
+ }
260
+ const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;
261
+ if (!lastPromise || lastPromise.arg !== stableArg) {
262
+ lastPromise?.unsubscribe();
263
+ const promise = dispatch(initiate(stableArg, {
264
+ subscriptionOptions: stableSubscriptionOptions,
265
+ forceRefetch: refetchOnMountOrArgChange,
266
+ ...isInfiniteQueryDefinition(endpointDefinitions[endpointName]) ? {
267
+ initialPageParam: stableInitialPageParam,
268
+ refetchCachedPages: stableRefetchCachedPages
269
+ } : {}
270
+ }));
271
+ promiseRef.current = promise;
272
+ } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {
273
+ lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);
274
+ }
275
+ }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, stableRefetchCachedPages, endpointName]);
276
+ return [promiseRef, dispatch, initiate, stableSubscriptionOptions];
277
+ }
278
+ function buildUseQueryState(endpointName, preSelector) {
279
+ const useQueryState = (arg, {
280
+ skip = false,
281
+ selectFromResult
282
+ } = {}) => {
283
+ const {
284
+ select
285
+ } = api.endpoints[endpointName];
286
+ const stableArg = useStableQueryArgs(skip ? skipToken : arg);
287
+ const lastValue = useRef(void 0);
288
+ const selectDefaultResult = useMemo(() => (
289
+ // Normally ts-ignores are bad and should be avoided, but we're
290
+ // already casting this selector to be `Selector<any>` anyway,
291
+ // so the inconsistencies don't matter here
292
+ // @ts-ignore
293
+ createSelector([
294
+ // @ts-ignore
295
+ select(stableArg),
296
+ (_, lastResult) => lastResult,
297
+ (_) => stableArg
298
+ ], preSelector, {
299
+ memoizeOptions: {
300
+ resultEqualityCheck: shallowEqual
301
+ }
302
+ })
303
+ ), [select, stableArg]);
304
+ const querySelector = useMemo(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {
305
+ devModeChecks: {
306
+ identityFunctionCheck: "never"
307
+ }
308
+ }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);
309
+ const currentState = useSelector((state) => querySelector(state, lastValue.current), shallowEqual);
310
+ const store = useStore();
311
+ const newLastValue = selectDefaultResult(store.getState(), lastValue.current);
312
+ useIsomorphicLayoutEffect(() => {
313
+ lastValue.current = newLastValue;
314
+ }, [newLastValue]);
315
+ return currentState;
316
+ };
317
+ return useQueryState;
318
+ }
319
+ function usePromiseRefUnsubscribeOnUnmount(promiseRef) {
320
+ useEffect(() => {
321
+ return () => {
322
+ unsubscribePromiseRef(promiseRef);
323
+ promiseRef.current = void 0;
324
+ };
325
+ }, [promiseRef]);
326
+ }
327
+ function refetchOrErrorIfUnmounted(promiseRef) {
328
+ if (!promiseRef.current) throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage2(38) : "Cannot refetch a query that has not been started yet.");
329
+ return promiseRef.current.refetch();
330
+ }
331
+ function buildQueryHooks(endpointName) {
332
+ const useQuerySubscription = (arg, options = {}) => {
333
+ const [promiseRef] = useQuerySubscriptionCommonImpl(endpointName, arg, options);
334
+ usePromiseRefUnsubscribeOnUnmount(promiseRef);
335
+ return useMemo(() => ({
336
+ /**
337
+ * A method to manually refetch data for the query
338
+ */
339
+ refetch: () => refetchOrErrorIfUnmounted(promiseRef)
340
+ }), [promiseRef]);
341
+ };
342
+ const useLazyQuerySubscription = ({
343
+ refetchOnReconnect,
344
+ refetchOnFocus,
345
+ pollingInterval = 0,
346
+ skipPollingIfUnfocused = false
347
+ } = {}) => {
348
+ const {
349
+ initiate
350
+ } = api.endpoints[endpointName];
351
+ const dispatch = useDispatch();
352
+ const [arg, setArg] = useState(UNINITIALIZED_VALUE);
353
+ const promiseRef = useRef(void 0);
354
+ const stableSubscriptionOptions = useShallowStableValue({
355
+ refetchOnReconnect,
356
+ refetchOnFocus,
357
+ pollingInterval,
358
+ skipPollingIfUnfocused
359
+ });
360
+ usePossiblyImmediateEffect(() => {
361
+ const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;
362
+ if (stableSubscriptionOptions !== lastSubscriptionOptions) {
363
+ promiseRef.current?.updateSubscriptionOptions(stableSubscriptionOptions);
364
+ }
365
+ }, [stableSubscriptionOptions]);
366
+ const subscriptionOptionsRef = useRef(stableSubscriptionOptions);
367
+ usePossiblyImmediateEffect(() => {
368
+ subscriptionOptionsRef.current = stableSubscriptionOptions;
369
+ }, [stableSubscriptionOptions]);
370
+ const trigger = useCallback(function(arg2, preferCacheValue = false) {
371
+ let promise;
372
+ batch(() => {
373
+ unsubscribePromiseRef(promiseRef);
374
+ promiseRef.current = promise = dispatch(initiate(arg2, {
375
+ subscriptionOptions: subscriptionOptionsRef.current,
376
+ forceRefetch: !preferCacheValue
377
+ }));
378
+ setArg(arg2);
379
+ });
380
+ return promise;
381
+ }, [dispatch, initiate]);
382
+ const reset = useCallback(() => {
383
+ if (promiseRef.current?.queryCacheKey) {
384
+ dispatch(api.internalActions.removeQueryResult({
385
+ queryCacheKey: promiseRef.current?.queryCacheKey
386
+ }));
387
+ }
388
+ }, [dispatch]);
389
+ useEffect(() => {
390
+ return () => {
391
+ unsubscribePromiseRef(promiseRef);
392
+ };
393
+ }, []);
394
+ useEffect(() => {
395
+ if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {
396
+ trigger(arg, true);
397
+ }
398
+ }, [arg, trigger]);
399
+ return useMemo(() => [trigger, arg, {
400
+ reset
401
+ }], [trigger, arg, reset]);
402
+ };
403
+ const useQueryState = buildUseQueryState(endpointName, queryStatePreSelector);
404
+ return {
405
+ useQueryState,
406
+ useQuerySubscription,
407
+ useLazyQuerySubscription,
408
+ useLazyQuery(options) {
409
+ const [trigger, arg, {
410
+ reset
411
+ }] = useLazyQuerySubscription(options);
412
+ const queryStateResults = useQueryState(arg, {
413
+ ...options,
414
+ skip: arg === UNINITIALIZED_VALUE
415
+ });
416
+ const info = useMemo(() => ({
417
+ lastArg: arg
418
+ }), [arg]);
419
+ return useMemo(() => [trigger, {
420
+ ...queryStateResults,
421
+ reset
422
+ }, info], [trigger, queryStateResults, reset, info]);
423
+ },
424
+ useQuery(arg, options) {
425
+ const querySubscriptionResults = useQuerySubscription(arg, options);
426
+ const queryStateResults = useQueryState(arg, {
427
+ selectFromResult: arg === skipToken || options?.skip ? void 0 : noPendingQueryStateSelector,
428
+ ...options
429
+ });
430
+ const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);
431
+ useDebugValue(debugValue);
432
+ return useMemo(() => ({
433
+ ...queryStateResults,
434
+ ...querySubscriptionResults
435
+ }), [queryStateResults, querySubscriptionResults]);
436
+ }
437
+ };
438
+ }
439
+ function buildInfiniteQueryHooks(endpointName) {
440
+ const useInfiniteQuerySubscription = (arg, options = {}) => {
441
+ const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl(endpointName, arg, options);
442
+ const subscriptionOptionsRef = useRef(stableSubscriptionOptions);
443
+ usePossiblyImmediateEffect(() => {
444
+ subscriptionOptionsRef.current = stableSubscriptionOptions;
445
+ }, [stableSubscriptionOptions]);
446
+ const hookRefetchCachedPages = options.refetchCachedPages;
447
+ const stableHookRefetchCachedPages = useShallowStableValue(hookRefetchCachedPages);
448
+ const trigger = useCallback(function(arg2, direction) {
449
+ let promise;
450
+ batch(() => {
451
+ unsubscribePromiseRef(promiseRef);
452
+ promiseRef.current = promise = dispatch(initiate(arg2, {
453
+ subscriptionOptions: subscriptionOptionsRef.current,
454
+ direction
455
+ }));
456
+ });
457
+ return promise;
458
+ }, [promiseRef, dispatch, initiate]);
459
+ usePromiseRefUnsubscribeOnUnmount(promiseRef);
460
+ const stableArg = useStableQueryArgs(options.skip ? skipToken : arg);
461
+ const refetch = useCallback((options2) => {
462
+ if (!promiseRef.current) throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage3(38) : "Cannot refetch a query that has not been started yet.");
463
+ const mergedOptions = {
464
+ refetchCachedPages: options2?.refetchCachedPages ?? stableHookRefetchCachedPages
465
+ };
466
+ return promiseRef.current.refetch(mergedOptions);
467
+ }, [promiseRef, stableHookRefetchCachedPages]);
468
+ return useMemo(() => {
469
+ const fetchNextPage = () => {
470
+ return trigger(stableArg, "forward");
471
+ };
472
+ const fetchPreviousPage = () => {
473
+ return trigger(stableArg, "backward");
474
+ };
475
+ return {
476
+ trigger,
477
+ /**
478
+ * A method to manually refetch data for the query
479
+ */
480
+ refetch,
481
+ fetchNextPage,
482
+ fetchPreviousPage
483
+ };
484
+ }, [refetch, trigger, stableArg]);
485
+ };
486
+ const useInfiniteQueryState = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);
487
+ return {
488
+ useInfiniteQueryState,
489
+ useInfiniteQuerySubscription,
490
+ useInfiniteQuery(arg, options) {
491
+ const {
492
+ refetch,
493
+ fetchNextPage,
494
+ fetchPreviousPage
495
+ } = useInfiniteQuerySubscription(arg, options);
496
+ const queryStateResults = useInfiniteQueryState(arg, {
497
+ selectFromResult: arg === skipToken || options?.skip ? void 0 : noPendingQueryStateSelector,
498
+ ...options
499
+ });
500
+ const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, "hasNextPage", "hasPreviousPage");
501
+ useDebugValue(debugValue);
502
+ return useMemo(() => ({
503
+ ...queryStateResults,
504
+ fetchNextPage,
505
+ fetchPreviousPage,
506
+ refetch
507
+ }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);
508
+ }
509
+ };
510
+ }
511
+ function buildMutationHook(name) {
512
+ return ({
513
+ selectFromResult,
514
+ fixedCacheKey
515
+ } = {}) => {
516
+ const {
517
+ select,
518
+ initiate
519
+ } = api.endpoints[name];
520
+ const dispatch = useDispatch();
521
+ const [promise, setPromise] = useState();
522
+ useEffect(() => () => {
523
+ if (!promise?.arg.fixedCacheKey) {
524
+ promise?.reset();
525
+ }
526
+ }, [promise]);
527
+ const triggerMutation = useCallback(function(arg) {
528
+ const promise2 = dispatch(initiate(arg, {
529
+ fixedCacheKey
530
+ }));
531
+ setPromise(promise2);
532
+ return promise2;
533
+ }, [dispatch, initiate, fixedCacheKey]);
534
+ const {
535
+ requestId
536
+ } = promise || {};
537
+ const selectDefaultResult = useMemo(() => select({
538
+ fixedCacheKey,
539
+ requestId: promise?.requestId
540
+ }), [fixedCacheKey, promise, select]);
541
+ const mutationSelector = useMemo(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);
542
+ const currentState = useSelector(mutationSelector, shallowEqual);
543
+ const originalArgs = fixedCacheKey == null ? promise?.arg.originalArgs : void 0;
544
+ const reset = useCallback(() => {
545
+ batch(() => {
546
+ if (promise) {
547
+ setPromise(void 0);
548
+ }
549
+ if (fixedCacheKey) {
550
+ dispatch(api.internalActions.removeMutationResult({
551
+ requestId,
552
+ fixedCacheKey
553
+ }));
554
+ }
555
+ });
556
+ }, [dispatch, fixedCacheKey, promise, requestId]);
557
+ const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, "endpointName");
558
+ useDebugValue(debugValue);
559
+ const finalState = useMemo(() => ({
560
+ ...currentState,
561
+ originalArgs,
562
+ reset
563
+ }), [currentState, originalArgs, reset]);
564
+ return useMemo(() => [triggerMutation, finalState], [triggerMutation, finalState]);
565
+ };
566
+ }
567
+ }
568
+
569
+ // src/query/react/module.ts
570
+ var reactHooksModuleName = /* @__PURE__ */ Symbol();
571
+ var reactHooksModule = ({
572
+ batch = rrBatch,
573
+ hooks = {
574
+ useDispatch: rrUseDispatch,
575
+ useSelector: rrUseSelector,
576
+ useStore: rrUseStore
577
+ },
578
+ createSelector = _createSelector,
579
+ unstable__sideEffectsInRender = false,
580
+ ...rest
581
+ } = {}) => {
582
+ if (process.env.NODE_ENV !== "production") {
583
+ const hookNames = ["useDispatch", "useSelector", "useStore"];
584
+ let warned = false;
585
+ for (const hookName of hookNames) {
586
+ if (countObjectKeys(rest) > 0) {
587
+ if (rest[hookName]) {
588
+ if (!warned) {
589
+ console.warn("As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`");
590
+ warned = true;
591
+ }
592
+ }
593
+ hooks[hookName] = rest[hookName];
594
+ }
595
+ if (typeof hooks[hookName] !== "function") {
596
+ throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage4(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(", ")}.
597
+ Hook ${hookName} was either not provided or not a function.`);
598
+ }
599
+ }
600
+ }
601
+ return {
602
+ name: reactHooksModuleName,
603
+ init(api, {
604
+ serializeQueryArgs
605
+ }, context) {
606
+ const anyApi = api;
607
+ const {
608
+ buildQueryHooks,
609
+ buildInfiniteQueryHooks,
610
+ buildMutationHook,
611
+ usePrefetch
612
+ } = buildHooks({
613
+ api,
614
+ moduleOptions: {
615
+ batch,
616
+ hooks,
617
+ unstable__sideEffectsInRender,
618
+ createSelector
619
+ },
620
+ serializeQueryArgs,
621
+ context
622
+ });
623
+ safeAssign(anyApi, {
624
+ usePrefetch
625
+ });
626
+ safeAssign(context, {
627
+ batch
628
+ });
629
+ return {
630
+ injectEndpoint(endpointName, definition) {
631
+ if (isQueryDefinition(definition)) {
632
+ const {
633
+ useQuery,
634
+ useLazyQuery,
635
+ useLazyQuerySubscription,
636
+ useQueryState,
637
+ useQuerySubscription
638
+ } = buildQueryHooks(endpointName);
639
+ safeAssign(anyApi.endpoints[endpointName], {
640
+ useQuery,
641
+ useLazyQuery,
642
+ useLazyQuerySubscription,
643
+ useQueryState,
644
+ useQuerySubscription
645
+ });
646
+ api[`use${capitalize(endpointName)}Query`] = useQuery;
647
+ api[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;
648
+ }
649
+ if (isMutationDefinition(definition)) {
650
+ const useMutation = buildMutationHook(endpointName);
651
+ safeAssign(anyApi.endpoints[endpointName], {
652
+ useMutation
653
+ });
654
+ api[`use${capitalize(endpointName)}Mutation`] = useMutation;
655
+ } else if (isInfiniteQueryDefinition(definition)) {
656
+ const {
657
+ useInfiniteQuery,
658
+ useInfiniteQuerySubscription,
659
+ useInfiniteQueryState
660
+ } = buildInfiniteQueryHooks(endpointName);
661
+ safeAssign(anyApi.endpoints[endpointName], {
662
+ useInfiniteQuery,
663
+ useInfiniteQuerySubscription,
664
+ useInfiniteQueryState
665
+ });
666
+ api[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;
667
+ }
668
+ }
669
+ };
670
+ }
671
+ };
672
+ };
673
+
674
+ // src/query/react/index.ts
675
+ export * from "@reduxjs/toolkit/query";
676
+
677
+ // src/query/react/ApiProvider.tsx
678
+ import { configureStore, formatProdErrorMessage as _formatProdErrorMessage5 } from "@reduxjs/toolkit";
679
+ import * as React from "react";
680
+ function ApiProvider(props) {
681
+ const context = props.context || ReactReduxContext;
682
+ const existingContext = useContext(context);
683
+ if (existingContext) {
684
+ throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage5(35) : "Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.");
685
+ }
686
+ const [store] = React.useState(() => configureStore({
687
+ reducer: {
688
+ [props.api.reducerPath]: props.api.reducer
689
+ },
690
+ middleware: (gDM) => gDM().concat(props.api.middleware)
691
+ }));
692
+ useEffect(() => props.setupListeners === false ? void 0 : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);
693
+ return /* @__PURE__ */ React.createElement(Provider, { store, context }, props.children);
694
+ }
695
+
696
+ // src/query/react/index.ts
697
+ var createApi = /* @__PURE__ */ buildCreateApi(coreModule(), reactHooksModule());
698
+ export {
699
+ ApiProvider,
700
+ UNINITIALIZED_VALUE,
701
+ createApi,
702
+ reactHooksModule,
703
+ reactHooksModuleName
704
+ };
705
+ //# sourceMappingURL=rtk-query-react.modern.mjs.map