@tanstack/query-core 4.24.10 → 5.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/build/lib/focusManager.d.ts +1 -3
  2. package/build/lib/focusManager.esm.js +19 -36
  3. package/build/lib/focusManager.esm.js.map +1 -1
  4. package/build/lib/focusManager.js +19 -38
  5. package/build/lib/focusManager.js.map +1 -1
  6. package/build/lib/focusManager.mjs +19 -36
  7. package/build/lib/focusManager.mjs.map +1 -1
  8. package/build/lib/hydration.esm.js +21 -23
  9. package/build/lib/hydration.esm.js.map +1 -1
  10. package/build/lib/hydration.js +21 -25
  11. package/build/lib/hydration.js.map +1 -1
  12. package/build/lib/hydration.mjs +21 -23
  13. package/build/lib/hydration.mjs.map +1 -1
  14. package/build/lib/index.d.ts +1 -2
  15. package/build/lib/index.esm.js +1 -1
  16. package/build/lib/index.js +2 -8
  17. package/build/lib/index.js.map +1 -1
  18. package/build/lib/index.mjs +1 -1
  19. package/build/lib/infiniteQueryBehavior.d.ts +3 -7
  20. package/build/lib/infiniteQueryBehavior.esm.js +52 -75
  21. package/build/lib/infiniteQueryBehavior.esm.js.map +1 -1
  22. package/build/lib/infiniteQueryBehavior.js +50 -77
  23. package/build/lib/infiniteQueryBehavior.js.map +1 -1
  24. package/build/lib/infiniteQueryBehavior.mjs +52 -75
  25. package/build/lib/infiniteQueryBehavior.mjs.map +1 -1
  26. package/build/lib/infiniteQueryObserver.d.ts +4 -4
  27. package/build/lib/infiniteQueryObserver.esm.js +18 -26
  28. package/build/lib/infiniteQueryObserver.esm.js.map +1 -1
  29. package/build/lib/infiniteQueryObserver.js +18 -28
  30. package/build/lib/infiniteQueryObserver.js.map +1 -1
  31. package/build/lib/infiniteQueryObserver.mjs +18 -26
  32. package/build/lib/infiniteQueryObserver.mjs.map +1 -1
  33. package/build/lib/mutation.d.ts +11 -22
  34. package/build/lib/mutation.esm.js +73 -105
  35. package/build/lib/mutation.esm.js.map +1 -1
  36. package/build/lib/mutation.js +73 -107
  37. package/build/lib/mutation.js.map +1 -1
  38. package/build/lib/mutation.mjs +73 -105
  39. package/build/lib/mutation.mjs.map +1 -1
  40. package/build/lib/mutationCache.d.ts +4 -6
  41. package/build/lib/mutationCache.esm.js +23 -32
  42. package/build/lib/mutationCache.esm.js.map +1 -1
  43. package/build/lib/mutationCache.js +23 -34
  44. package/build/lib/mutationCache.js.map +1 -1
  45. package/build/lib/mutationCache.mjs +23 -32
  46. package/build/lib/mutationCache.mjs.map +1 -1
  47. package/build/lib/mutationObserver.d.ts +4 -9
  48. package/build/lib/mutationObserver.esm.js +42 -73
  49. package/build/lib/mutationObserver.esm.js.map +1 -1
  50. package/build/lib/mutationObserver.js +42 -75
  51. package/build/lib/mutationObserver.js.map +1 -1
  52. package/build/lib/mutationObserver.mjs +42 -73
  53. package/build/lib/mutationObserver.mjs.map +1 -1
  54. package/build/lib/notifyManager.esm.js +7 -17
  55. package/build/lib/notifyManager.esm.js.map +1 -1
  56. package/build/lib/notifyManager.js +7 -19
  57. package/build/lib/notifyManager.js.map +1 -1
  58. package/build/lib/notifyManager.mjs +7 -17
  59. package/build/lib/notifyManager.mjs.map +1 -1
  60. package/build/lib/onlineManager.d.ts +1 -3
  61. package/build/lib/onlineManager.esm.js +16 -30
  62. package/build/lib/onlineManager.esm.js.map +1 -1
  63. package/build/lib/onlineManager.js +16 -32
  64. package/build/lib/onlineManager.js.map +1 -1
  65. package/build/lib/onlineManager.mjs +16 -30
  66. package/build/lib/onlineManager.mjs.map +1 -1
  67. package/build/lib/queriesObserver.d.ts +3 -10
  68. package/build/lib/queriesObserver.esm.js +47 -71
  69. package/build/lib/queriesObserver.esm.js.map +1 -1
  70. package/build/lib/queriesObserver.js +49 -75
  71. package/build/lib/queriesObserver.js.map +1 -1
  72. package/build/lib/queriesObserver.mjs +47 -71
  73. package/build/lib/queriesObserver.mjs.map +1 -1
  74. package/build/lib/query.d.ts +14 -21
  75. package/build/lib/query.esm.js +140 -194
  76. package/build/lib/query.esm.js.map +1 -1
  77. package/build/lib/query.js +139 -195
  78. package/build/lib/query.js.map +1 -1
  79. package/build/lib/query.mjs +140 -194
  80. package/build/lib/query.mjs.map +1 -1
  81. package/build/lib/queryCache.d.ts +12 -7
  82. package/build/lib/queryCache.esm.js +21 -45
  83. package/build/lib/queryCache.esm.js.map +1 -1
  84. package/build/lib/queryCache.js +20 -46
  85. package/build/lib/queryCache.js.map +1 -1
  86. package/build/lib/queryCache.mjs +21 -45
  87. package/build/lib/queryCache.mjs.map +1 -1
  88. package/build/lib/queryClient.d.ts +18 -46
  89. package/build/lib/queryClient.esm.js +137 -216
  90. package/build/lib/queryClient.esm.js.map +1 -1
  91. package/build/lib/queryClient.js +136 -217
  92. package/build/lib/queryClient.js.map +1 -1
  93. package/build/lib/queryClient.mjs +137 -216
  94. package/build/lib/queryClient.mjs.map +1 -1
  95. package/build/lib/queryObserver.d.ts +4 -29
  96. package/build/lib/queryObserver.esm.js +176 -258
  97. package/build/lib/queryObserver.esm.js.map +1 -1
  98. package/build/lib/queryObserver.js +176 -260
  99. package/build/lib/queryObserver.js.map +1 -1
  100. package/build/lib/queryObserver.mjs +176 -258
  101. package/build/lib/queryObserver.mjs.map +1 -1
  102. package/build/lib/removable.d.ts +3 -3
  103. package/build/lib/removable.esm.js +10 -14
  104. package/build/lib/removable.esm.js.map +1 -1
  105. package/build/lib/removable.js +10 -16
  106. package/build/lib/removable.js.map +1 -1
  107. package/build/lib/removable.mjs +10 -14
  108. package/build/lib/removable.mjs.map +1 -1
  109. package/build/lib/retryer.d.ts +5 -5
  110. package/build/lib/retryer.esm.js +27 -44
  111. package/build/lib/retryer.esm.js.map +1 -1
  112. package/build/lib/retryer.js +27 -46
  113. package/build/lib/retryer.js.map +1 -1
  114. package/build/lib/retryer.mjs +27 -44
  115. package/build/lib/retryer.mjs.map +1 -1
  116. package/build/lib/subscribable.esm.js +4 -7
  117. package/build/lib/subscribable.esm.js.map +1 -1
  118. package/build/lib/subscribable.js +4 -9
  119. package/build/lib/subscribable.js.map +1 -1
  120. package/build/lib/subscribable.mjs +4 -7
  121. package/build/lib/subscribable.mjs.map +1 -1
  122. package/build/lib/tests/utils.d.ts +3 -12
  123. package/build/lib/types.d.ts +111 -99
  124. package/build/lib/utils.d.ts +8 -18
  125. package/build/lib/utils.esm.js +39 -132
  126. package/build/lib/utils.esm.js.map +1 -1
  127. package/build/lib/utils.js +42 -144
  128. package/build/lib/utils.js.map +1 -1
  129. package/build/lib/utils.mjs +39 -132
  130. package/build/lib/utils.mjs.map +1 -1
  131. package/build/umd/index.development.js +867 -1399
  132. package/build/umd/index.development.js.map +1 -1
  133. package/build/umd/index.production.js +1 -1
  134. package/build/umd/index.production.js.map +1 -1
  135. package/package.json +1 -1
  136. package/src/focusManager.ts +17 -24
  137. package/src/index.ts +1 -11
  138. package/src/infiniteQueryBehavior.ts +54 -94
  139. package/src/infiniteQueryObserver.ts +10 -12
  140. package/src/mutation.ts +68 -92
  141. package/src/mutationCache.ts +27 -27
  142. package/src/mutationObserver.ts +58 -97
  143. package/src/onlineManager.ts +14 -14
  144. package/src/queriesObserver.ts +50 -54
  145. package/src/query.ts +107 -111
  146. package/src/queryCache.ts +42 -41
  147. package/src/queryClient.ts +155 -434
  148. package/src/queryObserver.ts +155 -192
  149. package/src/removable.ts +13 -13
  150. package/src/retryer.ts +5 -5
  151. package/src/subscribable.ts +1 -1
  152. package/src/tests/focusManager.test.tsx +25 -25
  153. package/src/tests/hydration.test.tsx +167 -81
  154. package/src/tests/infiniteQueryBehavior.test.tsx +209 -17
  155. package/src/tests/infiniteQueryObserver.test.tsx +6 -2
  156. package/src/tests/mutationCache.test.tsx +127 -127
  157. package/src/tests/mutationObserver.test.tsx +1 -31
  158. package/src/tests/mutations.test.tsx +62 -43
  159. package/src/tests/onlineManager.test.tsx +12 -4
  160. package/src/tests/queriesObserver.test.tsx +41 -77
  161. package/src/tests/query.test.tsx +175 -243
  162. package/src/tests/queryCache.test.tsx +170 -93
  163. package/src/tests/queryClient.test.tsx +229 -378
  164. package/src/tests/queryObserver.test.tsx +23 -147
  165. package/src/tests/utils.test.tsx +84 -29
  166. package/src/tests/utils.ts +9 -18
  167. package/src/types.ts +187 -140
  168. package/src/utils.ts +31 -124
  169. package/build/lib/logger.d.ts +0 -8
  170. package/build/lib/logger.esm.js +0 -4
  171. package/build/lib/logger.esm.js.map +0 -1
  172. package/build/lib/logger.js +0 -8
  173. package/build/lib/logger.js.map +0 -1
  174. package/build/lib/logger.mjs +0 -4
  175. package/build/lib/logger.mjs.map +0 -1
  176. package/build/lib/logger.native.d.ts +0 -6
  177. package/build/lib/logger.native.esm.js +0 -12
  178. package/build/lib/logger.native.esm.js.map +0 -1
  179. package/build/lib/logger.native.js +0 -16
  180. package/build/lib/logger.native.js.map +0 -1
  181. package/build/lib/logger.native.mjs +0 -12
  182. package/build/lib/logger.native.mjs.map +0 -1
  183. package/src/logger.native.ts +0 -11
  184. package/src/logger.ts +0 -9
@@ -1,9 +1,7 @@
1
1
  import type { QueryFilters, Updater, MutationFilters } from './utils'
2
2
  import {
3
- hashQueryKey,
3
+ hashKey,
4
4
  noop,
5
- parseFilterArgs,
6
- parseQueryArgs,
7
5
  partialMatchKey,
8
6
  hashQueryKeyByOptions,
9
7
  functionalUpdate,
@@ -19,16 +17,14 @@ import type {
19
17
  MutationKey,
20
18
  MutationObserverOptions,
21
19
  MutationOptions,
22
- QueryFunction,
23
20
  QueryKey,
24
21
  QueryObserverOptions,
25
22
  QueryOptions,
26
23
  RefetchOptions,
27
24
  RefetchQueryFilters,
28
25
  ResetOptions,
29
- ResetQueryFilters,
30
26
  SetDataOptions,
31
- WithRequired,
27
+ RegisteredError,
32
28
  } from './types'
33
29
  import type { QueryState } from './query'
34
30
  import { QueryCache } from './queryCache'
@@ -38,8 +34,6 @@ import { onlineManager } from './onlineManager'
38
34
  import { notifyManager } from './notifyManager'
39
35
  import { infiniteQueryBehavior } from './infiniteQueryBehavior'
40
36
  import type { CancelOptions, DefaultedQueryObserverOptions } from './types'
41
- import type { Logger } from './logger'
42
- import { defaultLogger } from './logger'
43
37
 
44
38
  // TYPES
45
39
 
@@ -56,152 +50,86 @@ interface MutationDefaults {
56
50
  // CLASS
57
51
 
58
52
  export class QueryClient {
59
- private queryCache: QueryCache
60
- private mutationCache: MutationCache
61
- private logger: Logger
62
- private defaultOptions: DefaultOptions
63
- private queryDefaults: QueryDefaults[]
64
- private mutationDefaults: MutationDefaults[]
65
- private mountCount: number
66
- private unsubscribeFocus?: () => void
67
- private unsubscribeOnline?: () => void
53
+ #queryCache: QueryCache
54
+ #mutationCache: MutationCache
55
+ #defaultOptions: DefaultOptions
56
+ #queryDefaults: Map<string, QueryDefaults>
57
+ #mutationDefaults: Map<string, MutationDefaults>
58
+ #mountCount: number
59
+ #unsubscribeFocus?: () => void
60
+ #unsubscribeOnline?: () => void
68
61
 
69
62
  constructor(config: QueryClientConfig = {}) {
70
- this.queryCache = config.queryCache || new QueryCache()
71
- this.mutationCache = config.mutationCache || new MutationCache()
72
- this.logger = config.logger || defaultLogger
73
- this.defaultOptions = config.defaultOptions || {}
74
- this.queryDefaults = []
75
- this.mutationDefaults = []
76
- this.mountCount = 0
77
-
78
- if (process.env.NODE_ENV !== 'production' && config.logger) {
79
- this.logger.error(
80
- `Passing a custom logger has been deprecated and will be removed in the next major version.`,
81
- )
82
- }
63
+ this.#queryCache = config.queryCache || new QueryCache()
64
+ this.#mutationCache = config.mutationCache || new MutationCache()
65
+ this.#defaultOptions = config.defaultOptions || {}
66
+ this.#queryDefaults = new Map()
67
+ this.#mutationDefaults = new Map()
68
+ this.#mountCount = 0
83
69
  }
84
70
 
85
71
  mount(): void {
86
- this.mountCount++
87
- if (this.mountCount !== 1) return
72
+ this.#mountCount++
73
+ if (this.#mountCount !== 1) return
88
74
 
89
- this.unsubscribeFocus = focusManager.subscribe(() => {
75
+ this.#unsubscribeFocus = focusManager.subscribe(() => {
90
76
  if (focusManager.isFocused()) {
91
77
  this.resumePausedMutations()
92
- this.queryCache.onFocus()
78
+ this.#queryCache.onFocus()
93
79
  }
94
80
  })
95
- this.unsubscribeOnline = onlineManager.subscribe(() => {
81
+ this.#unsubscribeOnline = onlineManager.subscribe(() => {
96
82
  if (onlineManager.isOnline()) {
97
83
  this.resumePausedMutations()
98
- this.queryCache.onOnline()
84
+ this.#queryCache.onOnline()
99
85
  }
100
86
  })
101
87
  }
102
88
 
103
89
  unmount(): void {
104
- this.mountCount--
105
- if (this.mountCount !== 0) return
90
+ this.#mountCount--
91
+ if (this.#mountCount !== 0) return
106
92
 
107
- this.unsubscribeFocus?.()
108
- this.unsubscribeFocus = undefined
93
+ this.#unsubscribeFocus?.()
94
+ this.#unsubscribeFocus = undefined
109
95
 
110
- this.unsubscribeOnline?.()
111
- this.unsubscribeOnline = undefined
96
+ this.#unsubscribeOnline?.()
97
+ this.#unsubscribeOnline = undefined
112
98
  }
113
99
 
114
- isFetching(filters?: QueryFilters): number
115
- isFetching(queryKey?: QueryKey, filters?: QueryFilters): number
116
- isFetching(arg1?: QueryKey | QueryFilters, arg2?: QueryFilters): number {
117
- const [filters] = parseFilterArgs(arg1, arg2)
118
- filters.fetchStatus = 'fetching'
119
- return this.queryCache.findAll(filters).length
100
+ isFetching(filters?: QueryFilters): number {
101
+ return this.#queryCache.findAll({ ...filters, fetchStatus: 'fetching' })
102
+ .length
120
103
  }
121
104
 
122
105
  isMutating(filters?: MutationFilters): number {
123
- return this.mutationCache.findAll({ ...filters, fetching: true }).length
106
+ return this.#mutationCache.findAll({ ...filters, status: 'pending' }).length
124
107
  }
125
108
 
126
109
  getQueryData<TQueryFnData = unknown>(
127
110
  queryKey: QueryKey,
128
- filters?: QueryFilters,
129
111
  ): TQueryFnData | undefined {
130
- return this.queryCache.find<TQueryFnData>(queryKey, filters)?.state.data
112
+ return this.#queryCache.find<TQueryFnData>({ queryKey })?.state.data
131
113
  }
132
114
 
133
- ensureQueryData<
134
- TQueryFnData = unknown,
135
- TError = unknown,
136
- TData = TQueryFnData,
137
- TQueryKey extends QueryKey = QueryKey,
138
- >(
139
- options: WithRequired<
140
- FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
141
- 'queryKey'
142
- >,
143
- ): Promise<TData>
144
- ensureQueryData<
145
- TQueryFnData = unknown,
146
- TError = unknown,
147
- TData = TQueryFnData,
148
- TQueryKey extends QueryKey = QueryKey,
149
- >(
150
- queryKey: TQueryKey,
151
- options?: Omit<
152
- FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
153
- 'queryKey'
154
- >,
155
- ): Promise<TData>
156
- ensureQueryData<
157
- TQueryFnData = unknown,
158
- TError = unknown,
159
- TData = TQueryFnData,
160
- TQueryKey extends QueryKey = QueryKey,
161
- >(
162
- queryKey: TQueryKey,
163
- queryFn: QueryFunction<TQueryFnData, TQueryKey>,
164
- options?: Omit<
165
- FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
166
- 'queryKey' | 'queryFn'
167
- >,
168
- ): Promise<TData>
169
115
  ensureQueryData<
170
116
  TQueryFnData,
171
117
  TError,
172
118
  TData = TQueryFnData,
173
119
  TQueryKey extends QueryKey = QueryKey,
174
120
  >(
175
- arg1:
176
- | TQueryKey
177
- | WithRequired<
178
- FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
179
- 'queryKey'
180
- >,
181
- arg2?:
182
- | QueryFunction<TQueryFnData, TQueryKey>
183
- | FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
184
- arg3?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
121
+ options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
185
122
  ): Promise<TData> {
186
- const parsedOptions = parseQueryArgs(arg1, arg2, arg3)
187
- const cachedData = this.getQueryData<TData>(parsedOptions.queryKey!)
123
+ const cachedData = this.getQueryData<TData>(options.queryKey)
188
124
 
189
- return cachedData
190
- ? Promise.resolve(cachedData)
191
- : this.fetchQuery(parsedOptions)
125
+ return cachedData ? Promise.resolve(cachedData) : this.fetchQuery(options)
192
126
  }
193
127
 
194
- getQueriesData<TQueryFnData = unknown>(
195
- queryKey: QueryKey,
196
- ): [QueryKey, TQueryFnData | undefined][]
197
128
  getQueriesData<TQueryFnData = unknown>(
198
129
  filters: QueryFilters,
199
- ): [QueryKey, TQueryFnData | undefined][]
200
- getQueriesData<TQueryFnData = unknown>(
201
- queryKeyOrFilters: QueryKey | QueryFilters,
202
130
  ): [QueryKey, TQueryFnData | undefined][] {
203
131
  return this.getQueryCache()
204
- .findAll(queryKeyOrFilters)
132
+ .findAll(filters)
205
133
  .map(({ queryKey, state }) => {
206
134
  const data = state.data as TQueryFnData | undefined
207
135
  return [queryKey, data]
@@ -213,7 +141,7 @@ export class QueryClient {
213
141
  updater: Updater<TQueryFnData | undefined, TQueryFnData | undefined>,
214
142
  options?: SetDataOptions,
215
143
  ): TQueryFnData | undefined {
216
- const query = this.queryCache.find<TQueryFnData>(queryKey)
144
+ const query = this.#queryCache.find<TQueryFnData>({ queryKey })
217
145
  const prevData = query?.state.data
218
146
  const data = functionalUpdate(updater, prevData)
219
147
 
@@ -221,33 +149,27 @@ export class QueryClient {
221
149
  return undefined
222
150
  }
223
151
 
224
- const parsedOptions = parseQueryArgs(queryKey)
225
- const defaultedOptions = this.defaultQueryOptions(parsedOptions)
226
- return this.queryCache
152
+ const defaultedOptions = this.defaultQueryOptions<
153
+ any,
154
+ any,
155
+ unknown,
156
+ any,
157
+ QueryKey
158
+ >({ queryKey })
159
+
160
+ return this.#queryCache
227
161
  .build(this, defaultedOptions)
228
162
  .setData(data, { ...options, manual: true })
229
163
  }
230
164
 
231
- setQueriesData<TQueryFnData>(
232
- queryKey: QueryKey,
233
- updater: Updater<TQueryFnData | undefined, TQueryFnData | undefined>,
234
- options?: SetDataOptions,
235
- ): [QueryKey, TQueryFnData | undefined][]
236
-
237
165
  setQueriesData<TQueryFnData>(
238
166
  filters: QueryFilters,
239
167
  updater: Updater<TQueryFnData | undefined, TQueryFnData | undefined>,
240
168
  options?: SetDataOptions,
241
- ): [QueryKey, TQueryFnData | undefined][]
242
-
243
- setQueriesData<TQueryFnData>(
244
- queryKeyOrFilters: QueryKey | QueryFilters,
245
- updater: Updater<TQueryFnData | undefined, TQueryFnData | undefined>,
246
- options?: SetDataOptions,
247
169
  ): [QueryKey, TQueryFnData | undefined][] {
248
170
  return notifyManager.batch(() =>
249
171
  this.getQueryCache()
250
- .findAll(queryKeyOrFilters)
172
+ .findAll(filters)
251
173
  .map(({ queryKey }) => [
252
174
  queryKey,
253
175
  this.setQueryData<TQueryFnData>(queryKey, updater, options),
@@ -255,18 +177,14 @@ export class QueryClient {
255
177
  )
256
178
  }
257
179
 
258
- getQueryState<TQueryFnData = unknown, TError = undefined>(
180
+ getQueryState<TQueryFnData = unknown, TError = RegisteredError>(
259
181
  queryKey: QueryKey,
260
- filters?: QueryFilters,
261
182
  ): QueryState<TQueryFnData, TError> | undefined {
262
- return this.queryCache.find<TQueryFnData, TError>(queryKey, filters)?.state
183
+ return this.#queryCache.find<TQueryFnData, TError>({ queryKey })?.state
263
184
  }
264
185
 
265
- removeQueries(filters?: QueryFilters): void
266
- removeQueries(queryKey?: QueryKey, filters?: QueryFilters): void
267
- removeQueries(arg1?: QueryKey | QueryFilters, arg2?: QueryFilters): void {
268
- const [filters] = parseFilterArgs(arg1, arg2)
269
- const queryCache = this.queryCache
186
+ removeQueries(filters?: QueryFilters): void {
187
+ const queryCache = this.#queryCache
270
188
  notifyManager.batch(() => {
271
189
  queryCache.findAll(filters).forEach((query) => {
272
190
  queryCache.remove(query)
@@ -274,22 +192,8 @@ export class QueryClient {
274
192
  })
275
193
  }
276
194
 
277
- resetQueries<TPageData = unknown>(
278
- filters?: ResetQueryFilters<TPageData>,
279
- options?: ResetOptions,
280
- ): Promise<void>
281
- resetQueries<TPageData = unknown>(
282
- queryKey?: QueryKey,
283
- filters?: ResetQueryFilters<TPageData>,
284
- options?: ResetOptions,
285
- ): Promise<void>
286
- resetQueries(
287
- arg1?: QueryKey | ResetQueryFilters,
288
- arg2?: ResetQueryFilters | ResetOptions,
289
- arg3?: ResetOptions,
290
- ): Promise<void> {
291
- const [filters, options] = parseFilterArgs(arg1, arg2, arg3)
292
- const queryCache = this.queryCache
195
+ resetQueries(filters?: QueryFilters, options?: ResetOptions): Promise<void> {
196
+ const queryCache = this.#queryCache
293
197
 
294
198
  const refetchFilters: RefetchQueryFilters = {
295
199
  type: 'active',
@@ -304,25 +208,16 @@ export class QueryClient {
304
208
  })
305
209
  }
306
210
 
307
- cancelQueries(filters?: QueryFilters, options?: CancelOptions): Promise<void>
308
211
  cancelQueries(
309
- queryKey?: QueryKey,
310
- filters?: QueryFilters,
311
- options?: CancelOptions,
312
- ): Promise<void>
313
- cancelQueries(
314
- arg1?: QueryKey | QueryFilters,
315
- arg2?: QueryFilters | CancelOptions,
316
- arg3?: CancelOptions,
212
+ filters: QueryFilters = {},
213
+ cancelOptions: CancelOptions = {},
317
214
  ): Promise<void> {
318
- const [filters, cancelOptions = {}] = parseFilterArgs(arg1, arg2, arg3)
319
-
320
215
  if (typeof cancelOptions.revert === 'undefined') {
321
216
  cancelOptions.revert = true
322
217
  }
323
218
 
324
219
  const promises = notifyManager.batch(() =>
325
- this.queryCache
220
+ this.#queryCache
326
221
  .findAll(filters)
327
222
  .map((query) => query.cancel(cancelOptions)),
328
223
  )
@@ -330,24 +225,12 @@ export class QueryClient {
330
225
  return Promise.all(promises).then(noop).catch(noop)
331
226
  }
332
227
 
333
- invalidateQueries<TPageData = unknown>(
334
- filters?: InvalidateQueryFilters<TPageData>,
335
- options?: InvalidateOptions,
336
- ): Promise<void>
337
- invalidateQueries<TPageData = unknown>(
338
- queryKey?: QueryKey,
339
- filters?: InvalidateQueryFilters<TPageData>,
340
- options?: InvalidateOptions,
341
- ): Promise<void>
342
228
  invalidateQueries(
343
- arg1?: QueryKey | InvalidateQueryFilters,
344
- arg2?: InvalidateQueryFilters | InvalidateOptions,
345
- arg3?: InvalidateOptions,
229
+ filters: InvalidateQueryFilters = {},
230
+ options: InvalidateOptions = {},
346
231
  ): Promise<void> {
347
- const [filters, options] = parseFilterArgs(arg1, arg2, arg3)
348
-
349
232
  return notifyManager.batch(() => {
350
- this.queryCache.findAll(filters).forEach((query) => {
233
+ this.#queryCache.findAll(filters).forEach((query) => {
351
234
  query.invalidate()
352
235
  })
353
236
 
@@ -362,31 +245,18 @@ export class QueryClient {
362
245
  })
363
246
  }
364
247
 
365
- refetchQueries<TPageData = unknown>(
366
- filters?: RefetchQueryFilters<TPageData>,
367
- options?: RefetchOptions,
368
- ): Promise<void>
369
- refetchQueries<TPageData = unknown>(
370
- queryKey?: QueryKey,
371
- filters?: RefetchQueryFilters<TPageData>,
372
- options?: RefetchOptions,
373
- ): Promise<void>
374
248
  refetchQueries(
375
- arg1?: QueryKey | RefetchQueryFilters,
376
- arg2?: RefetchQueryFilters | RefetchOptions,
377
- arg3?: RefetchOptions,
249
+ filters: RefetchQueryFilters = {},
250
+ options?: RefetchOptions,
378
251
  ): Promise<void> {
379
- const [filters, options] = parseFilterArgs(arg1, arg2, arg3)
380
-
381
252
  const promises = notifyManager.batch(() =>
382
- this.queryCache
253
+ this.#queryCache
383
254
  .findAll(filters)
384
255
  .filter((query) => !query.isDisabled())
385
256
  .map((query) =>
386
257
  query.fetch(undefined, {
387
258
  ...options,
388
259
  cancelRefetch: options?.cancelRefetch ?? true,
389
- meta: { refetchPage: filters.refetchPage },
390
260
  }),
391
261
  ),
392
262
  )
@@ -400,54 +270,29 @@ export class QueryClient {
400
270
  return promise
401
271
  }
402
272
 
403
- fetchQuery<
404
- TQueryFnData = unknown,
405
- TError = unknown,
406
- TData = TQueryFnData,
407
- TQueryKey extends QueryKey = QueryKey,
408
- >(
409
- options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
410
- ): Promise<TData>
411
- fetchQuery<
412
- TQueryFnData = unknown,
413
- TError = unknown,
414
- TData = TQueryFnData,
415
- TQueryKey extends QueryKey = QueryKey,
416
- >(
417
- queryKey: TQueryKey,
418
- options?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
419
- ): Promise<TData>
420
- fetchQuery<
421
- TQueryFnData = unknown,
422
- TError = unknown,
423
- TData = TQueryFnData,
424
- TQueryKey extends QueryKey = QueryKey,
425
- >(
426
- queryKey: TQueryKey,
427
- queryFn: QueryFunction<TQueryFnData, TQueryKey>,
428
- options?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
429
- ): Promise<TData>
430
273
  fetchQuery<
431
274
  TQueryFnData,
432
- TError,
275
+ TError = RegisteredError,
433
276
  TData = TQueryFnData,
434
277
  TQueryKey extends QueryKey = QueryKey,
278
+ TPageParam = never,
435
279
  >(
436
- arg1: TQueryKey | FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
437
- arg2?:
438
- | QueryFunction<TQueryFnData, TQueryKey>
439
- | FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
440
- arg3?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
280
+ options: FetchQueryOptions<
281
+ TQueryFnData,
282
+ TError,
283
+ TData,
284
+ TQueryKey,
285
+ TPageParam
286
+ >,
441
287
  ): Promise<TData> {
442
- const parsedOptions = parseQueryArgs(arg1, arg2, arg3)
443
- const defaultedOptions = this.defaultQueryOptions(parsedOptions)
288
+ const defaultedOptions = this.defaultQueryOptions(options)
444
289
 
445
290
  // https://github.com/tannerlinsley/react-query/issues/652
446
291
  if (typeof defaultedOptions.retry === 'undefined') {
447
292
  defaultedOptions.retry = false
448
293
  }
449
294
 
450
- const query = this.queryCache.build(this, defaultedOptions)
295
+ const query = this.#queryCache.build(this, defaultedOptions)
451
296
 
452
297
  return query.isStaleByTime(defaultedOptions.staleTime)
453
298
  ? query.fetch(defaultedOptions)
@@ -456,267 +301,142 @@ export class QueryClient {
456
301
 
457
302
  prefetchQuery<
458
303
  TQueryFnData = unknown,
459
- TError = unknown,
304
+ TError = RegisteredError,
460
305
  TData = TQueryFnData,
461
306
  TQueryKey extends QueryKey = QueryKey,
462
307
  >(
463
308
  options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
464
- ): Promise<void>
465
- prefetchQuery<
466
- TQueryFnData = unknown,
467
- TError = unknown,
468
- TData = TQueryFnData,
469
- TQueryKey extends QueryKey = QueryKey,
470
- >(
471
- queryKey: TQueryKey,
472
- options?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
473
- ): Promise<void>
474
- prefetchQuery<
475
- TQueryFnData = unknown,
476
- TError = unknown,
477
- TData = TQueryFnData,
478
- TQueryKey extends QueryKey = QueryKey,
479
- >(
480
- queryKey: TQueryKey,
481
- queryFn: QueryFunction<TQueryFnData, TQueryKey>,
482
- options?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
483
- ): Promise<void>
484
- prefetchQuery<
485
- TQueryFnData = unknown,
486
- TError = unknown,
487
- TData = TQueryFnData,
488
- TQueryKey extends QueryKey = QueryKey,
489
- >(
490
- arg1: TQueryKey | FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
491
- arg2?:
492
- | QueryFunction<TQueryFnData, TQueryKey>
493
- | FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
494
- arg3?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
495
309
  ): Promise<void> {
496
- return this.fetchQuery(arg1 as any, arg2 as any, arg3)
497
- .then(noop)
498
- .catch(noop)
310
+ return this.fetchQuery(options).then(noop).catch(noop)
499
311
  }
500
312
 
501
- fetchInfiniteQuery<
502
- TQueryFnData = unknown,
503
- TError = unknown,
504
- TData = TQueryFnData,
505
- TQueryKey extends QueryKey = QueryKey,
506
- >(
507
- options: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
508
- ): Promise<InfiniteData<TData>>
509
- fetchInfiniteQuery<
510
- TQueryFnData = unknown,
511
- TError = unknown,
512
- TData = TQueryFnData,
513
- TQueryKey extends QueryKey = QueryKey,
514
- >(
515
- queryKey: TQueryKey,
516
- options?: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
517
- ): Promise<InfiniteData<TData>>
518
- fetchInfiniteQuery<
519
- TQueryFnData = unknown,
520
- TError = unknown,
521
- TData = TQueryFnData,
522
- TQueryKey extends QueryKey = QueryKey,
523
- >(
524
- queryKey: TQueryKey,
525
- queryFn: QueryFunction<TQueryFnData, TQueryKey>,
526
- options?: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
527
- ): Promise<InfiniteData<TData>>
528
313
  fetchInfiniteQuery<
529
314
  TQueryFnData,
530
- TError,
315
+ TError = RegisteredError,
531
316
  TData = TQueryFnData,
532
317
  TQueryKey extends QueryKey = QueryKey,
318
+ TPageParam = unknown,
533
319
  >(
534
- arg1:
535
- | TQueryKey
536
- | FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
537
- arg2?:
538
- | QueryFunction<TQueryFnData, TQueryKey>
539
- | FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
540
- arg3?: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
541
- ): Promise<InfiniteData<TData>> {
542
- const parsedOptions = parseQueryArgs(arg1, arg2, arg3)
543
- parsedOptions.behavior = infiniteQueryBehavior<
320
+ options: FetchInfiniteQueryOptions<
544
321
  TQueryFnData,
545
322
  TError,
546
- TData
547
- >()
548
- return this.fetchQuery(parsedOptions)
323
+ TData,
324
+ TQueryKey,
325
+ TPageParam
326
+ >,
327
+ ): Promise<InfiniteData<TData>> {
328
+ options.behavior = infiniteQueryBehavior<TQueryFnData, TError, TData>()
329
+ return this.fetchQuery(options)
549
330
  }
550
331
 
551
- prefetchInfiniteQuery<
552
- TQueryFnData = unknown,
553
- TError = unknown,
554
- TData = TQueryFnData,
555
- TQueryKey extends QueryKey = QueryKey,
556
- >(
557
- options: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
558
- ): Promise<void>
559
- prefetchInfiniteQuery<
560
- TQueryFnData = unknown,
561
- TError = unknown,
562
- TData = TQueryFnData,
563
- TQueryKey extends QueryKey = QueryKey,
564
- >(
565
- queryKey: TQueryKey,
566
- options?: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
567
- ): Promise<void>
568
- prefetchInfiniteQuery<
569
- TQueryFnData = unknown,
570
- TError = unknown,
571
- TData = TQueryFnData,
572
- TQueryKey extends QueryKey = QueryKey,
573
- >(
574
- queryKey: TQueryKey,
575
- queryFn: QueryFunction<TQueryFnData, TQueryKey>,
576
- options?: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
577
- ): Promise<void>
578
332
  prefetchInfiniteQuery<
579
333
  TQueryFnData,
580
- TError,
334
+ TError = RegisteredError,
581
335
  TData = TQueryFnData,
582
336
  TQueryKey extends QueryKey = QueryKey,
337
+ TPageParam = unknown,
583
338
  >(
584
- arg1:
585
- | TQueryKey
586
- | FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
587
- arg2?:
588
- | QueryFunction<TQueryFnData, TQueryKey>
589
- | FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
590
- arg3?: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
339
+ options: FetchInfiniteQueryOptions<
340
+ TQueryFnData,
341
+ TError,
342
+ TData,
343
+ TQueryKey,
344
+ TPageParam
345
+ >,
591
346
  ): Promise<void> {
592
- return this.fetchInfiniteQuery(arg1 as any, arg2 as any, arg3)
593
- .then(noop)
594
- .catch(noop)
347
+ return this.fetchInfiniteQuery(options).then(noop).catch(noop)
595
348
  }
596
349
 
597
350
  resumePausedMutations(): Promise<unknown> {
598
- return this.mutationCache.resumePausedMutations()
351
+ return this.#mutationCache.resumePausedMutations()
599
352
  }
600
353
 
601
354
  getQueryCache(): QueryCache {
602
- return this.queryCache
355
+ return this.#queryCache
603
356
  }
604
357
 
605
358
  getMutationCache(): MutationCache {
606
- return this.mutationCache
607
- }
608
-
609
- getLogger(): Logger {
610
- return this.logger
359
+ return this.#mutationCache
611
360
  }
612
361
 
613
362
  getDefaultOptions(): DefaultOptions {
614
- return this.defaultOptions
363
+ return this.#defaultOptions
615
364
  }
616
365
 
617
366
  setDefaultOptions(options: DefaultOptions): void {
618
- this.defaultOptions = options
367
+ this.#defaultOptions = options
619
368
  }
620
369
 
621
370
  setQueryDefaults(
622
371
  queryKey: QueryKey,
623
- options: QueryObserverOptions<unknown, any, any, any>,
372
+ options: Partial<
373
+ Omit<QueryObserverOptions<unknown, any, any, any>, 'queryKey'>
374
+ >,
624
375
  ): void {
625
- const result = this.queryDefaults.find(
626
- (x) => hashQueryKey(queryKey) === hashQueryKey(x.queryKey),
627
- )
628
- if (result) {
629
- result.defaultOptions = options
630
- } else {
631
- this.queryDefaults.push({ queryKey, defaultOptions: options })
632
- }
376
+ this.#queryDefaults.set(hashKey(queryKey), {
377
+ queryKey,
378
+ defaultOptions: options,
379
+ })
633
380
  }
634
381
 
635
382
  getQueryDefaults(
636
- queryKey?: QueryKey,
637
- ): QueryObserverOptions<any, any, any, any, any> | undefined {
638
- if (!queryKey) {
639
- return undefined
640
- }
383
+ queryKey: QueryKey,
384
+ ): QueryObserverOptions<any, any, any, any, any> {
385
+ const defaults = [...this.#queryDefaults.values()]
641
386
 
642
- // Get the first matching defaults
643
- const firstMatchingDefaults = this.queryDefaults.find((x) =>
644
- partialMatchKey(queryKey, x.queryKey),
645
- )
387
+ let result: QueryObserverOptions<any, any, any, any, any> = {}
646
388
 
647
- // Additional checks and error in dev mode
648
- if (process.env.NODE_ENV !== 'production') {
649
- // Retrieve all matching defaults for the given key
650
- const matchingDefaults = this.queryDefaults.filter((x) =>
651
- partialMatchKey(queryKey, x.queryKey),
652
- )
653
- // It is ok not having defaults, but it is error prone to have more than 1 default for a given key
654
- if (matchingDefaults.length > 1) {
655
- this.logger.error(
656
- `[QueryClient] Several query defaults match with key '${JSON.stringify(
657
- queryKey,
658
- )}'. The first matching query defaults are used. Please check how query defaults are registered. Order does matter here. cf. https://react-query.tanstack.com/reference/QueryClient#queryclientsetquerydefaults.`,
659
- )
389
+ defaults.forEach((queryDefault) => {
390
+ if (partialMatchKey(queryKey, queryDefault.queryKey)) {
391
+ result = { ...result, ...queryDefault.defaultOptions }
660
392
  }
661
- }
662
-
663
- return firstMatchingDefaults?.defaultOptions
393
+ })
394
+ return result
664
395
  }
665
396
 
666
397
  setMutationDefaults(
667
398
  mutationKey: MutationKey,
668
- options: MutationObserverOptions<any, any, any, any>,
399
+ options: Omit<MutationObserverOptions<any, any, any, any>, 'mutationKey'>,
669
400
  ): void {
670
- const result = this.mutationDefaults.find(
671
- (x) => hashQueryKey(mutationKey) === hashQueryKey(x.mutationKey),
672
- )
673
- if (result) {
674
- result.defaultOptions = options
675
- } else {
676
- this.mutationDefaults.push({ mutationKey, defaultOptions: options })
677
- }
401
+ this.#mutationDefaults.set(hashKey(mutationKey), {
402
+ mutationKey,
403
+ defaultOptions: options,
404
+ })
678
405
  }
679
406
 
680
407
  getMutationDefaults(
681
- mutationKey?: MutationKey,
682
- ): MutationObserverOptions<any, any, any, any> | undefined {
683
- if (!mutationKey) {
684
- return undefined
685
- }
408
+ mutationKey: MutationKey,
409
+ ): MutationObserverOptions<any, any, any, any> {
410
+ const defaults = [...this.#mutationDefaults.values()]
686
411
 
687
- // Get the first matching defaults
688
- const firstMatchingDefaults = this.mutationDefaults.find((x) =>
689
- partialMatchKey(mutationKey, x.mutationKey),
690
- )
412
+ let result: MutationObserverOptions<any, any, any, any> = {}
691
413
 
692
- // Additional checks and error in dev mode
693
- if (process.env.NODE_ENV !== 'production') {
694
- // Retrieve all matching defaults for the given key
695
- const matchingDefaults = this.mutationDefaults.filter((x) =>
696
- partialMatchKey(mutationKey, x.mutationKey),
697
- )
698
- // It is ok not having defaults, but it is error prone to have more than 1 default for a given key
699
- if (matchingDefaults.length > 1) {
700
- this.logger.error(
701
- `[QueryClient] Several mutation defaults match with key '${JSON.stringify(
702
- mutationKey,
703
- )}'. The first matching mutation defaults are used. Please check how mutation defaults are registered. Order does matter here. cf. https://react-query.tanstack.com/reference/QueryClient#queryclientsetmutationdefaults.`,
704
- )
414
+ defaults.forEach((queryDefault) => {
415
+ if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {
416
+ result = { ...result, ...queryDefault.defaultOptions }
705
417
  }
706
- }
418
+ })
707
419
 
708
- return firstMatchingDefaults?.defaultOptions
420
+ return result
709
421
  }
710
422
 
711
423
  defaultQueryOptions<
712
- TQueryFnData,
713
- TError,
714
- TData,
715
- TQueryData,
716
- TQueryKey extends QueryKey,
424
+ TQueryFnData = unknown,
425
+ TError = RegisteredError,
426
+ TData = TQueryFnData,
427
+ TQueryData = TQueryFnData,
428
+ TQueryKey extends QueryKey = QueryKey,
429
+ TPageParam = never,
717
430
  >(
718
431
  options?:
719
- | QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>
432
+ | QueryObserverOptions<
433
+ TQueryFnData,
434
+ TError,
435
+ TData,
436
+ TQueryData,
437
+ TQueryKey,
438
+ TPageParam
439
+ >
720
440
  | DefaultedQueryObserverOptions<
721
441
  TQueryFnData,
722
442
  TError,
@@ -742,13 +462,13 @@ export class QueryClient {
742
462
  }
743
463
 
744
464
  const defaultedOptions = {
745
- ...this.defaultOptions.queries,
746
- ...this.getQueryDefaults(options?.queryKey),
465
+ ...this.#defaultOptions.queries,
466
+ ...(options?.queryKey && this.getQueryDefaults(options.queryKey)),
747
467
  ...options,
748
468
  _defaulted: true,
749
469
  }
750
470
 
751
- if (!defaultedOptions.queryHash && defaultedOptions.queryKey) {
471
+ if (!defaultedOptions.queryHash) {
752
472
  defaultedOptions.queryHash = hashQueryKeyByOptions(
753
473
  defaultedOptions.queryKey,
754
474
  defaultedOptions,
@@ -760,8 +480,8 @@ export class QueryClient {
760
480
  defaultedOptions.refetchOnReconnect =
761
481
  defaultedOptions.networkMode !== 'always'
762
482
  }
763
- if (typeof defaultedOptions.useErrorBoundary === 'undefined') {
764
- defaultedOptions.useErrorBoundary = !!defaultedOptions.suspense
483
+ if (typeof defaultedOptions.throwErrors === 'undefined') {
484
+ defaultedOptions.throwErrors = !!defaultedOptions.suspense
765
485
  }
766
486
 
767
487
  return defaultedOptions as DefaultedQueryObserverOptions<
@@ -780,15 +500,16 @@ export class QueryClient {
780
500
  return options
781
501
  }
782
502
  return {
783
- ...this.defaultOptions.mutations,
784
- ...this.getMutationDefaults(options?.mutationKey),
503
+ ...this.#defaultOptions.mutations,
504
+ ...(options?.mutationKey &&
505
+ this.getMutationDefaults(options.mutationKey)),
785
506
  ...options,
786
507
  _defaulted: true,
787
508
  } as T
788
509
  }
789
510
 
790
511
  clear(): void {
791
- this.queryCache.clear()
792
- this.mutationCache.clear()
512
+ this.#queryCache.clear()
513
+ this.#mutationCache.clear()
793
514
  }
794
515
  }