@tanstack/query-core 4.24.10 → 5.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/focusManager.d.ts +1 -3
- package/build/lib/focusManager.esm.js +19 -36
- package/build/lib/focusManager.esm.js.map +1 -1
- package/build/lib/focusManager.js +19 -38
- package/build/lib/focusManager.js.map +1 -1
- package/build/lib/focusManager.mjs +19 -36
- package/build/lib/focusManager.mjs.map +1 -1
- package/build/lib/hydration.esm.js +21 -23
- package/build/lib/hydration.esm.js.map +1 -1
- package/build/lib/hydration.js +21 -25
- package/build/lib/hydration.js.map +1 -1
- package/build/lib/hydration.mjs +21 -23
- package/build/lib/hydration.mjs.map +1 -1
- package/build/lib/index.d.ts +1 -2
- package/build/lib/index.esm.js +1 -1
- package/build/lib/index.js +2 -8
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +1 -1
- package/build/lib/infiniteQueryBehavior.d.ts +3 -7
- package/build/lib/infiniteQueryBehavior.esm.js +52 -75
- package/build/lib/infiniteQueryBehavior.esm.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.js +50 -77
- package/build/lib/infiniteQueryBehavior.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.mjs +52 -75
- package/build/lib/infiniteQueryBehavior.mjs.map +1 -1
- package/build/lib/infiniteQueryObserver.d.ts +4 -4
- package/build/lib/infiniteQueryObserver.esm.js +18 -26
- package/build/lib/infiniteQueryObserver.esm.js.map +1 -1
- package/build/lib/infiniteQueryObserver.js +18 -28
- package/build/lib/infiniteQueryObserver.js.map +1 -1
- package/build/lib/infiniteQueryObserver.mjs +18 -26
- package/build/lib/infiniteQueryObserver.mjs.map +1 -1
- package/build/lib/mutation.d.ts +11 -22
- package/build/lib/mutation.esm.js +73 -105
- package/build/lib/mutation.esm.js.map +1 -1
- package/build/lib/mutation.js +73 -107
- package/build/lib/mutation.js.map +1 -1
- package/build/lib/mutation.mjs +73 -105
- package/build/lib/mutation.mjs.map +1 -1
- package/build/lib/mutationCache.d.ts +4 -6
- package/build/lib/mutationCache.esm.js +23 -32
- package/build/lib/mutationCache.esm.js.map +1 -1
- package/build/lib/mutationCache.js +23 -34
- package/build/lib/mutationCache.js.map +1 -1
- package/build/lib/mutationCache.mjs +23 -32
- package/build/lib/mutationCache.mjs.map +1 -1
- package/build/lib/mutationObserver.d.ts +4 -9
- package/build/lib/mutationObserver.esm.js +43 -72
- package/build/lib/mutationObserver.esm.js.map +1 -1
- package/build/lib/mutationObserver.js +43 -74
- package/build/lib/mutationObserver.js.map +1 -1
- package/build/lib/mutationObserver.mjs +43 -72
- package/build/lib/mutationObserver.mjs.map +1 -1
- package/build/lib/notifyManager.esm.js +7 -17
- package/build/lib/notifyManager.esm.js.map +1 -1
- package/build/lib/notifyManager.js +7 -19
- package/build/lib/notifyManager.js.map +1 -1
- package/build/lib/notifyManager.mjs +7 -17
- package/build/lib/notifyManager.mjs.map +1 -1
- package/build/lib/onlineManager.d.ts +1 -3
- package/build/lib/onlineManager.esm.js +16 -30
- package/build/lib/onlineManager.esm.js.map +1 -1
- package/build/lib/onlineManager.js +16 -32
- package/build/lib/onlineManager.js.map +1 -1
- package/build/lib/onlineManager.mjs +16 -30
- package/build/lib/onlineManager.mjs.map +1 -1
- package/build/lib/queriesObserver.d.ts +3 -10
- package/build/lib/queriesObserver.esm.js +47 -71
- package/build/lib/queriesObserver.esm.js.map +1 -1
- package/build/lib/queriesObserver.js +49 -75
- package/build/lib/queriesObserver.js.map +1 -1
- package/build/lib/queriesObserver.mjs +47 -71
- package/build/lib/queriesObserver.mjs.map +1 -1
- package/build/lib/query.d.ts +14 -21
- package/build/lib/query.esm.js +140 -194
- package/build/lib/query.esm.js.map +1 -1
- package/build/lib/query.js +139 -195
- package/build/lib/query.js.map +1 -1
- package/build/lib/query.mjs +140 -194
- package/build/lib/query.mjs.map +1 -1
- package/build/lib/queryCache.d.ts +12 -7
- package/build/lib/queryCache.esm.js +21 -45
- package/build/lib/queryCache.esm.js.map +1 -1
- package/build/lib/queryCache.js +20 -46
- package/build/lib/queryCache.js.map +1 -1
- package/build/lib/queryCache.mjs +21 -45
- package/build/lib/queryCache.mjs.map +1 -1
- package/build/lib/queryClient.d.ts +18 -46
- package/build/lib/queryClient.esm.js +137 -216
- package/build/lib/queryClient.esm.js.map +1 -1
- package/build/lib/queryClient.js +136 -217
- package/build/lib/queryClient.js.map +1 -1
- package/build/lib/queryClient.mjs +137 -216
- package/build/lib/queryClient.mjs.map +1 -1
- package/build/lib/queryObserver.d.ts +4 -29
- package/build/lib/queryObserver.esm.js +176 -258
- package/build/lib/queryObserver.esm.js.map +1 -1
- package/build/lib/queryObserver.js +176 -260
- package/build/lib/queryObserver.js.map +1 -1
- package/build/lib/queryObserver.mjs +176 -258
- package/build/lib/queryObserver.mjs.map +1 -1
- package/build/lib/removable.d.ts +3 -3
- package/build/lib/removable.esm.js +10 -14
- package/build/lib/removable.esm.js.map +1 -1
- package/build/lib/removable.js +10 -16
- package/build/lib/removable.js.map +1 -1
- package/build/lib/removable.mjs +10 -14
- package/build/lib/removable.mjs.map +1 -1
- package/build/lib/retryer.d.ts +5 -5
- package/build/lib/retryer.esm.js +27 -44
- package/build/lib/retryer.esm.js.map +1 -1
- package/build/lib/retryer.js +27 -46
- package/build/lib/retryer.js.map +1 -1
- package/build/lib/retryer.mjs +27 -44
- package/build/lib/retryer.mjs.map +1 -1
- package/build/lib/subscribable.esm.js +4 -7
- package/build/lib/subscribable.esm.js.map +1 -1
- package/build/lib/subscribable.js +4 -9
- package/build/lib/subscribable.js.map +1 -1
- package/build/lib/subscribable.mjs +4 -7
- package/build/lib/subscribable.mjs.map +1 -1
- package/build/lib/tests/utils.d.ts +3 -12
- package/build/lib/types.d.ts +111 -99
- package/build/lib/utils.d.ts +8 -18
- package/build/lib/utils.esm.js +39 -132
- package/build/lib/utils.esm.js.map +1 -1
- package/build/lib/utils.js +42 -144
- package/build/lib/utils.js.map +1 -1
- package/build/lib/utils.mjs +39 -132
- package/build/lib/utils.mjs.map +1 -1
- package/build/umd/index.development.js +868 -1398
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/focusManager.ts +17 -24
- package/src/index.ts +1 -11
- package/src/infiniteQueryBehavior.ts +54 -94
- package/src/infiniteQueryObserver.ts +10 -12
- package/src/mutation.ts +68 -92
- package/src/mutationCache.ts +27 -27
- package/src/mutationObserver.ts +60 -97
- package/src/onlineManager.ts +14 -14
- package/src/queriesObserver.ts +50 -54
- package/src/query.ts +106 -110
- package/src/queryCache.ts +42 -41
- package/src/queryClient.ts +155 -434
- package/src/queryObserver.ts +155 -192
- package/src/removable.ts +13 -13
- package/src/retryer.ts +5 -5
- package/src/tests/focusManager.test.tsx +25 -25
- package/src/tests/hydration.test.tsx +167 -81
- package/src/tests/infiniteQueryBehavior.test.tsx +209 -17
- package/src/tests/infiniteQueryObserver.test.tsx +6 -2
- package/src/tests/mutationCache.test.tsx +127 -127
- package/src/tests/mutationObserver.test.tsx +1 -31
- package/src/tests/mutations.test.tsx +62 -43
- package/src/tests/onlineManager.test.tsx +12 -4
- package/src/tests/queriesObserver.test.tsx +41 -77
- package/src/tests/query.test.tsx +175 -243
- package/src/tests/queryCache.test.tsx +170 -93
- package/src/tests/queryClient.test.tsx +229 -378
- package/src/tests/queryObserver.test.tsx +23 -147
- package/src/tests/utils.test.tsx +84 -29
- package/src/tests/utils.ts +9 -18
- package/src/types.ts +187 -140
- package/src/utils.ts +31 -124
- package/build/lib/logger.d.ts +0 -8
- package/build/lib/logger.esm.js +0 -4
- package/build/lib/logger.esm.js.map +0 -1
- package/build/lib/logger.js +0 -8
- package/build/lib/logger.js.map +0 -1
- package/build/lib/logger.mjs +0 -4
- package/build/lib/logger.mjs.map +0 -1
- package/build/lib/logger.native.d.ts +0 -6
- package/build/lib/logger.native.esm.js +0 -12
- package/build/lib/logger.native.esm.js.map +0 -1
- package/build/lib/logger.native.js +0 -16
- package/build/lib/logger.native.js.map +0 -1
- package/build/lib/logger.native.mjs +0 -12
- package/build/lib/logger.native.mjs.map +0 -1
- package/src/logger.native.ts +0 -11
- package/src/logger.ts +0 -9
package/src/tests/query.test.tsx
CHANGED
|
@@ -2,7 +2,6 @@ import {
|
|
|
2
2
|
sleep,
|
|
3
3
|
queryKey,
|
|
4
4
|
mockVisibilityState,
|
|
5
|
-
mockLogger,
|
|
6
5
|
createQueryClient,
|
|
7
6
|
} from './utils'
|
|
8
7
|
import type {
|
|
@@ -11,7 +10,7 @@ import type {
|
|
|
11
10
|
QueryFunctionContext,
|
|
12
11
|
QueryObserverResult,
|
|
13
12
|
} from '..'
|
|
14
|
-
import { QueryObserver, isCancelledError,
|
|
13
|
+
import { QueryObserver, isCancelledError, onlineManager } from '..'
|
|
15
14
|
import { waitFor } from '@testing-library/react'
|
|
16
15
|
|
|
17
16
|
describe('query', () => {
|
|
@@ -28,19 +27,25 @@ describe('query', () => {
|
|
|
28
27
|
queryClient.clear()
|
|
29
28
|
})
|
|
30
29
|
|
|
31
|
-
test('should use the longest
|
|
30
|
+
test('should use the longest garbage collection time it has seen', async () => {
|
|
32
31
|
const key = queryKey()
|
|
33
|
-
await queryClient.prefetchQuery(
|
|
34
|
-
|
|
32
|
+
await queryClient.prefetchQuery({
|
|
33
|
+
queryKey: key,
|
|
34
|
+
queryFn: () => 'data',
|
|
35
|
+
gcTime: 100,
|
|
35
36
|
})
|
|
36
|
-
await queryClient.prefetchQuery(
|
|
37
|
-
|
|
37
|
+
await queryClient.prefetchQuery({
|
|
38
|
+
queryKey: key,
|
|
39
|
+
queryFn: () => 'data',
|
|
40
|
+
gcTime: 200,
|
|
38
41
|
})
|
|
39
|
-
await queryClient.prefetchQuery(
|
|
40
|
-
|
|
42
|
+
await queryClient.prefetchQuery({
|
|
43
|
+
queryKey: key,
|
|
44
|
+
queryFn: () => 'data',
|
|
45
|
+
gcTime: 10,
|
|
41
46
|
})
|
|
42
|
-
const query = queryCache.find(key)!
|
|
43
|
-
expect(query.
|
|
47
|
+
const query = queryCache.find({ queryKey: key })!
|
|
48
|
+
expect(query.gcTime).toBe(200)
|
|
44
49
|
})
|
|
45
50
|
|
|
46
51
|
it('should continue retry after focus regain and resolve all promises', async () => {
|
|
@@ -52,9 +57,9 @@ describe('query', () => {
|
|
|
52
57
|
let count = 0
|
|
53
58
|
let result
|
|
54
59
|
|
|
55
|
-
const promise = queryClient.fetchQuery(
|
|
56
|
-
key,
|
|
57
|
-
async () => {
|
|
60
|
+
const promise = queryClient.fetchQuery({
|
|
61
|
+
queryKey: key,
|
|
62
|
+
queryFn: async () => {
|
|
58
63
|
count++
|
|
59
64
|
|
|
60
65
|
if (count === 3) {
|
|
@@ -63,11 +68,9 @@ describe('query', () => {
|
|
|
63
68
|
|
|
64
69
|
throw new Error(`error${count}`)
|
|
65
70
|
},
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
},
|
|
70
|
-
)
|
|
71
|
+
retry: 3,
|
|
72
|
+
retryDelay: 1,
|
|
73
|
+
})
|
|
71
74
|
|
|
72
75
|
promise.then((data) => {
|
|
73
76
|
result = data
|
|
@@ -82,7 +85,7 @@ describe('query', () => {
|
|
|
82
85
|
|
|
83
86
|
// Reset visibilityState to original value
|
|
84
87
|
visibilityMock.mockRestore()
|
|
85
|
-
window.dispatchEvent(new
|
|
88
|
+
window.dispatchEvent(new Event('visibilitychange'))
|
|
86
89
|
|
|
87
90
|
// There should not be a result yet
|
|
88
91
|
expect(result).toBeUndefined()
|
|
@@ -100,9 +103,9 @@ describe('query', () => {
|
|
|
100
103
|
let count = 0
|
|
101
104
|
let result
|
|
102
105
|
|
|
103
|
-
const promise = queryClient.fetchQuery(
|
|
104
|
-
key,
|
|
105
|
-
async () => {
|
|
106
|
+
const promise = queryClient.fetchQuery({
|
|
107
|
+
queryKey: key,
|
|
108
|
+
queryFn: async () => {
|
|
106
109
|
count++
|
|
107
110
|
|
|
108
111
|
if (count === 3) {
|
|
@@ -111,11 +114,9 @@ describe('query', () => {
|
|
|
111
114
|
|
|
112
115
|
throw new Error(`error${count}`)
|
|
113
116
|
},
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
},
|
|
118
|
-
)
|
|
117
|
+
retry: 3,
|
|
118
|
+
retryDelay: 1,
|
|
119
|
+
})
|
|
119
120
|
|
|
120
121
|
promise.then((data) => {
|
|
121
122
|
result = data
|
|
@@ -148,23 +149,21 @@ describe('query', () => {
|
|
|
148
149
|
let count = 0
|
|
149
150
|
let result
|
|
150
151
|
|
|
151
|
-
const promise = queryClient.fetchQuery(
|
|
152
|
-
key,
|
|
153
|
-
async (): Promise<unknown> => {
|
|
152
|
+
const promise = queryClient.fetchQuery({
|
|
153
|
+
queryKey: key,
|
|
154
|
+
queryFn: async (): Promise<unknown> => {
|
|
154
155
|
count++
|
|
155
156
|
throw new Error(`error${count}`)
|
|
156
157
|
},
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
},
|
|
161
|
-
)
|
|
158
|
+
retry: 3,
|
|
159
|
+
retryDelay: 1,
|
|
160
|
+
})
|
|
162
161
|
|
|
163
162
|
promise.catch((data) => {
|
|
164
163
|
result = data
|
|
165
164
|
})
|
|
166
165
|
|
|
167
|
-
const query = queryCache.find(key)!
|
|
166
|
+
const query = queryCache.find({ queryKey: key })!
|
|
168
167
|
|
|
169
168
|
// Check if the query is really paused
|
|
170
169
|
await sleep(50)
|
|
@@ -181,7 +180,6 @@ describe('query', () => {
|
|
|
181
180
|
} finally {
|
|
182
181
|
// Reset visibilityState to original value
|
|
183
182
|
visibilityMock.mockRestore()
|
|
184
|
-
window.dispatchEvent(new FocusEvent('focus'))
|
|
185
183
|
}
|
|
186
184
|
})
|
|
187
185
|
|
|
@@ -195,13 +193,14 @@ describe('query', () => {
|
|
|
195
193
|
>()
|
|
196
194
|
.mockResolvedValue('data')
|
|
197
195
|
|
|
198
|
-
queryClient.prefetchQuery(key, queryFn)
|
|
196
|
+
queryClient.prefetchQuery({ queryKey: key, queryFn })
|
|
199
197
|
|
|
200
198
|
await sleep(10)
|
|
201
199
|
|
|
202
200
|
expect(queryFn).toHaveBeenCalledTimes(1)
|
|
203
201
|
const args = queryFn.mock.calls[0]![0]
|
|
204
202
|
expect(args).toBeDefined()
|
|
203
|
+
// @ts-expect-error page param should be undefined
|
|
205
204
|
expect(args.pageParam).toBeUndefined()
|
|
206
205
|
expect(args.queryKey).toEqual(key)
|
|
207
206
|
expect(args.signal).toBeInstanceOf(AbortSignal)
|
|
@@ -210,9 +209,12 @@ describe('query', () => {
|
|
|
210
209
|
test('should continue if cancellation is not supported and signal is not consumed', async () => {
|
|
211
210
|
const key = queryKey()
|
|
212
211
|
|
|
213
|
-
queryClient.prefetchQuery(
|
|
214
|
-
|
|
215
|
-
|
|
212
|
+
queryClient.prefetchQuery({
|
|
213
|
+
queryKey: key,
|
|
214
|
+
queryFn: async () => {
|
|
215
|
+
await sleep(100)
|
|
216
|
+
return 'data'
|
|
217
|
+
},
|
|
216
218
|
})
|
|
217
219
|
|
|
218
220
|
await sleep(10)
|
|
@@ -227,7 +229,7 @@ describe('query', () => {
|
|
|
227
229
|
|
|
228
230
|
await sleep(100)
|
|
229
231
|
|
|
230
|
-
const query = queryCache.find(key)!
|
|
232
|
+
const query = queryCache.find({ queryKey: key })!
|
|
231
233
|
|
|
232
234
|
expect(query.state).toMatchObject({
|
|
233
235
|
data: 'data',
|
|
@@ -239,9 +241,12 @@ describe('query', () => {
|
|
|
239
241
|
test('should not continue when last observer unsubscribed if the signal was consumed', async () => {
|
|
240
242
|
const key = queryKey()
|
|
241
243
|
|
|
242
|
-
queryClient.prefetchQuery(
|
|
243
|
-
|
|
244
|
-
|
|
244
|
+
queryClient.prefetchQuery({
|
|
245
|
+
queryKey: key,
|
|
246
|
+
queryFn: async ({ signal }) => {
|
|
247
|
+
await sleep(100)
|
|
248
|
+
return signal.aborted ? 'aborted' : 'data'
|
|
249
|
+
},
|
|
245
250
|
})
|
|
246
251
|
|
|
247
252
|
await sleep(10)
|
|
@@ -256,11 +261,11 @@ describe('query', () => {
|
|
|
256
261
|
|
|
257
262
|
await sleep(100)
|
|
258
263
|
|
|
259
|
-
const query = queryCache.find(key)!
|
|
264
|
+
const query = queryCache.find({ queryKey: key })!
|
|
260
265
|
|
|
261
266
|
expect(query.state).toMatchObject({
|
|
262
267
|
data: undefined,
|
|
263
|
-
status: '
|
|
268
|
+
status: 'pending',
|
|
264
269
|
fetchStatus: 'idle',
|
|
265
270
|
})
|
|
266
271
|
})
|
|
@@ -277,19 +282,17 @@ describe('query', () => {
|
|
|
277
282
|
let error
|
|
278
283
|
|
|
279
284
|
queryFn.mockImplementation(async ({ signal }) => {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
signal.addEventListener('abort', abortListener)
|
|
283
|
-
}
|
|
285
|
+
signal.onabort = onAbort
|
|
286
|
+
signal.addEventListener('abort', abortListener)
|
|
284
287
|
await sleep(10)
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
signal.removeEventListener('abort', abortListener)
|
|
288
|
-
}
|
|
288
|
+
signal.onabort = null
|
|
289
|
+
signal.removeEventListener('abort', abortListener)
|
|
289
290
|
throw new Error()
|
|
290
291
|
})
|
|
291
292
|
|
|
292
|
-
const promise = queryClient.fetchQuery(
|
|
293
|
+
const promise = queryClient.fetchQuery({
|
|
294
|
+
queryKey: key,
|
|
295
|
+
queryFn,
|
|
293
296
|
retry: 3,
|
|
294
297
|
retryDelay: 10,
|
|
295
298
|
})
|
|
@@ -298,12 +301,12 @@ describe('query', () => {
|
|
|
298
301
|
error = e
|
|
299
302
|
})
|
|
300
303
|
|
|
301
|
-
const query = queryCache.find(key)!
|
|
304
|
+
const query = queryCache.find({ queryKey: key })!
|
|
302
305
|
|
|
303
306
|
expect(queryFn).toHaveBeenCalledTimes(1)
|
|
304
307
|
|
|
305
308
|
const signal = queryFn.mock.calls[0]![0].signal
|
|
306
|
-
expect(signal
|
|
309
|
+
expect(signal.aborted).toBe(false)
|
|
307
310
|
expect(onAbort).not.toHaveBeenCalled()
|
|
308
311
|
expect(abortListener).not.toHaveBeenCalled()
|
|
309
312
|
|
|
@@ -311,7 +314,7 @@ describe('query', () => {
|
|
|
311
314
|
|
|
312
315
|
await sleep(100)
|
|
313
316
|
|
|
314
|
-
expect(signal
|
|
317
|
+
expect(signal.aborted).toBe(true)
|
|
315
318
|
expect(onAbort).toHaveBeenCalledTimes(1)
|
|
316
319
|
expect(abortListener).toHaveBeenCalledTimes(1)
|
|
317
320
|
expect(isCancelledError(error)).toBe(true)
|
|
@@ -329,7 +332,9 @@ describe('query', () => {
|
|
|
329
332
|
|
|
330
333
|
let error
|
|
331
334
|
|
|
332
|
-
const promise = queryClient.fetchQuery(
|
|
335
|
+
const promise = queryClient.fetchQuery({
|
|
336
|
+
queryKey: key,
|
|
337
|
+
queryFn,
|
|
333
338
|
retry: 3,
|
|
334
339
|
retryDelay: 10,
|
|
335
340
|
})
|
|
@@ -338,7 +343,7 @@ describe('query', () => {
|
|
|
338
343
|
error = e
|
|
339
344
|
})
|
|
340
345
|
|
|
341
|
-
const query = queryCache.find(key)!
|
|
346
|
+
const query = queryCache.find({ queryKey: key })!
|
|
342
347
|
query.cancel()
|
|
343
348
|
|
|
344
349
|
await sleep(100)
|
|
@@ -347,7 +352,7 @@ describe('query', () => {
|
|
|
347
352
|
expect(isCancelledError(error)).toBe(true)
|
|
348
353
|
})
|
|
349
354
|
|
|
350
|
-
test('should not error if reset while
|
|
355
|
+
test('should not error if reset while pending', async () => {
|
|
351
356
|
const key = queryKey()
|
|
352
357
|
|
|
353
358
|
const queryFn = jest.fn<unknown, unknown[]>()
|
|
@@ -357,16 +362,13 @@ describe('query', () => {
|
|
|
357
362
|
throw new Error()
|
|
358
363
|
})
|
|
359
364
|
|
|
360
|
-
queryClient.fetchQuery(key, queryFn,
|
|
361
|
-
retry: 3,
|
|
362
|
-
retryDelay: 10,
|
|
363
|
-
})
|
|
365
|
+
queryClient.fetchQuery({ queryKey: key, queryFn, retry: 3, retryDelay: 10 })
|
|
364
366
|
|
|
365
|
-
// Ensure the query is
|
|
366
|
-
const query = queryCache.find(key)!
|
|
367
|
-
expect(query.state.status).toBe('
|
|
367
|
+
// Ensure the query is pending
|
|
368
|
+
const query = queryCache.find({ queryKey: key })!
|
|
369
|
+
expect(query.state.status).toBe('pending')
|
|
368
370
|
|
|
369
|
-
// Reset the query while it is
|
|
371
|
+
// Reset the query while it is pending
|
|
370
372
|
query.reset()
|
|
371
373
|
|
|
372
374
|
await sleep(100)
|
|
@@ -387,8 +389,8 @@ describe('query', () => {
|
|
|
387
389
|
return 'data'
|
|
388
390
|
})
|
|
389
391
|
|
|
390
|
-
queryClient.prefetchQuery(key, queryFn)
|
|
391
|
-
const query = queryCache.find(key)!
|
|
392
|
+
queryClient.prefetchQuery({ queryKey: key, queryFn })
|
|
393
|
+
const query = queryCache.find({ queryKey: key })!
|
|
392
394
|
await sleep(10)
|
|
393
395
|
query.cancel()
|
|
394
396
|
await sleep(100)
|
|
@@ -403,8 +405,11 @@ describe('query', () => {
|
|
|
403
405
|
|
|
404
406
|
test('cancelling a resolved query should not have any effect', async () => {
|
|
405
407
|
const key = queryKey()
|
|
406
|
-
await queryClient.prefetchQuery(
|
|
407
|
-
|
|
408
|
+
await queryClient.prefetchQuery({
|
|
409
|
+
queryKey: key,
|
|
410
|
+
queryFn: async () => 'data',
|
|
411
|
+
})
|
|
412
|
+
const query = queryCache.find({ queryKey: key })!
|
|
408
413
|
query.cancel()
|
|
409
414
|
await sleep(10)
|
|
410
415
|
expect(query.state.data).toBe('data')
|
|
@@ -412,49 +417,51 @@ describe('query', () => {
|
|
|
412
417
|
|
|
413
418
|
test('cancelling a rejected query should not have any effect', async () => {
|
|
414
419
|
const key = queryKey()
|
|
420
|
+
const error = new Error('error')
|
|
415
421
|
|
|
416
|
-
await queryClient.prefetchQuery(
|
|
417
|
-
|
|
422
|
+
await queryClient.prefetchQuery({
|
|
423
|
+
queryKey: key,
|
|
424
|
+
queryFn: async (): Promise<unknown> => {
|
|
425
|
+
throw error
|
|
426
|
+
},
|
|
418
427
|
})
|
|
419
|
-
const query = queryCache.find(key)!
|
|
428
|
+
const query = queryCache.find({ queryKey: key })!
|
|
420
429
|
query.cancel()
|
|
421
430
|
await sleep(10)
|
|
422
431
|
|
|
423
|
-
expect(
|
|
432
|
+
expect(query.state.error).toBe(error)
|
|
424
433
|
expect(isCancelledError(query.state.error)).toBe(false)
|
|
425
434
|
})
|
|
426
435
|
|
|
427
436
|
test('the previous query status should be kept when refetching', async () => {
|
|
428
437
|
const key = queryKey()
|
|
429
438
|
|
|
430
|
-
await queryClient.prefetchQuery(key, () => 'data')
|
|
431
|
-
const query = queryCache.find(key)!
|
|
439
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data' })
|
|
440
|
+
const query = queryCache.find({ queryKey: key })!
|
|
432
441
|
expect(query.state.status).toBe('success')
|
|
433
442
|
|
|
434
|
-
await queryClient.prefetchQuery(
|
|
435
|
-
key,
|
|
436
|
-
() => Promise.reject<string>('reject'),
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
},
|
|
440
|
-
)
|
|
443
|
+
await queryClient.prefetchQuery({
|
|
444
|
+
queryKey: key,
|
|
445
|
+
queryFn: () => Promise.reject<string>('reject'),
|
|
446
|
+
retry: false,
|
|
447
|
+
})
|
|
441
448
|
expect(query.state.status).toBe('error')
|
|
442
449
|
|
|
443
|
-
queryClient.prefetchQuery(
|
|
444
|
-
key,
|
|
445
|
-
async () => {
|
|
450
|
+
queryClient.prefetchQuery({
|
|
451
|
+
queryKey: key,
|
|
452
|
+
queryFn: async () => {
|
|
446
453
|
await sleep(10)
|
|
447
454
|
return Promise.reject<unknown>('reject')
|
|
448
455
|
},
|
|
449
|
-
|
|
450
|
-
)
|
|
456
|
+
retry: false,
|
|
457
|
+
})
|
|
451
458
|
expect(query.state.status).toBe('error')
|
|
452
459
|
|
|
453
460
|
await sleep(100)
|
|
454
461
|
expect(query.state.status).toBe('error')
|
|
455
462
|
})
|
|
456
463
|
|
|
457
|
-
test('queries with
|
|
464
|
+
test('queries with gcTime 0 should be removed immediately after unsubscribing', async () => {
|
|
458
465
|
const key = queryKey()
|
|
459
466
|
let count = 0
|
|
460
467
|
const observer = new QueryObserver(queryClient, {
|
|
@@ -463,16 +470,20 @@ describe('query', () => {
|
|
|
463
470
|
count++
|
|
464
471
|
return 'data'
|
|
465
472
|
},
|
|
466
|
-
|
|
473
|
+
gcTime: 0,
|
|
467
474
|
staleTime: Infinity,
|
|
468
475
|
})
|
|
469
476
|
const unsubscribe1 = observer.subscribe(() => undefined)
|
|
470
477
|
unsubscribe1()
|
|
471
|
-
await waitFor(() =>
|
|
478
|
+
await waitFor(() =>
|
|
479
|
+
expect(queryCache.find({ queryKey: key })).toBeUndefined(),
|
|
480
|
+
)
|
|
472
481
|
const unsubscribe2 = observer.subscribe(() => undefined)
|
|
473
482
|
unsubscribe2()
|
|
474
483
|
|
|
475
|
-
await waitFor(() =>
|
|
484
|
+
await waitFor(() =>
|
|
485
|
+
expect(queryCache.find({ queryKey: key })).toBeUndefined(),
|
|
486
|
+
)
|
|
476
487
|
expect(count).toBe(1)
|
|
477
488
|
})
|
|
478
489
|
|
|
@@ -481,13 +492,15 @@ describe('query', () => {
|
|
|
481
492
|
const observer = new QueryObserver(queryClient, {
|
|
482
493
|
queryKey: key,
|
|
483
494
|
queryFn: async () => 'data',
|
|
484
|
-
|
|
495
|
+
gcTime: 0,
|
|
485
496
|
})
|
|
486
|
-
expect(queryCache.find(key)).toBeDefined()
|
|
497
|
+
expect(queryCache.find({ queryKey: key })).toBeDefined()
|
|
487
498
|
const unsubscribe = observer.subscribe(() => undefined)
|
|
488
|
-
expect(queryCache.find(key)).toBeDefined()
|
|
499
|
+
expect(queryCache.find({ queryKey: key })).toBeDefined()
|
|
489
500
|
unsubscribe()
|
|
490
|
-
await waitFor(() =>
|
|
501
|
+
await waitFor(() =>
|
|
502
|
+
expect(queryCache.find({ queryKey: key })).toBeUndefined(),
|
|
503
|
+
)
|
|
491
504
|
})
|
|
492
505
|
|
|
493
506
|
test('should be garbage collected later when unsubscribed and query is fetching', async () => {
|
|
@@ -498,19 +511,21 @@ describe('query', () => {
|
|
|
498
511
|
await sleep(20)
|
|
499
512
|
return 'data'
|
|
500
513
|
},
|
|
501
|
-
|
|
514
|
+
gcTime: 10,
|
|
502
515
|
})
|
|
503
516
|
const unsubscribe = observer.subscribe(() => undefined)
|
|
504
517
|
await sleep(20)
|
|
505
|
-
expect(queryCache.find(key)).toBeDefined()
|
|
518
|
+
expect(queryCache.find({ queryKey: key })).toBeDefined()
|
|
506
519
|
observer.refetch()
|
|
507
520
|
unsubscribe()
|
|
508
521
|
await sleep(10)
|
|
509
|
-
// unsubscribe should not remove even though
|
|
510
|
-
expect(queryCache.find(key)).toBeDefined()
|
|
522
|
+
// unsubscribe should not remove even though gcTime has elapsed b/c query is still fetching
|
|
523
|
+
expect(queryCache.find({ queryKey: key })).toBeDefined()
|
|
511
524
|
await sleep(10)
|
|
512
525
|
// should be removed after an additional staleTime wait
|
|
513
|
-
await waitFor(() =>
|
|
526
|
+
await waitFor(() =>
|
|
527
|
+
expect(queryCache.find({ queryKey: key })).toBeUndefined(),
|
|
528
|
+
)
|
|
514
529
|
})
|
|
515
530
|
|
|
516
531
|
test('should not be garbage collected unless there are no subscribers', async () => {
|
|
@@ -518,18 +533,18 @@ describe('query', () => {
|
|
|
518
533
|
const observer = new QueryObserver(queryClient, {
|
|
519
534
|
queryKey: key,
|
|
520
535
|
queryFn: async () => 'data',
|
|
521
|
-
|
|
536
|
+
gcTime: 0,
|
|
522
537
|
})
|
|
523
|
-
expect(queryCache.find(key)).toBeDefined()
|
|
538
|
+
expect(queryCache.find({ queryKey: key })).toBeDefined()
|
|
524
539
|
const unsubscribe = observer.subscribe(() => undefined)
|
|
525
540
|
await sleep(100)
|
|
526
|
-
expect(queryCache.find(key)).toBeDefined()
|
|
541
|
+
expect(queryCache.find({ queryKey: key })).toBeDefined()
|
|
527
542
|
unsubscribe()
|
|
528
543
|
await sleep(100)
|
|
529
|
-
expect(queryCache.find(key)).toBeUndefined()
|
|
544
|
+
expect(queryCache.find({ queryKey: key })).toBeUndefined()
|
|
530
545
|
queryClient.setQueryData(key, 'data')
|
|
531
546
|
await sleep(100)
|
|
532
|
-
expect(queryCache.find(key)).toBeDefined()
|
|
547
|
+
expect(queryCache.find({ queryKey: key })).toBeDefined()
|
|
533
548
|
})
|
|
534
549
|
|
|
535
550
|
test('should return proper count of observers', async () => {
|
|
@@ -538,7 +553,7 @@ describe('query', () => {
|
|
|
538
553
|
const observer = new QueryObserver(queryClient, options)
|
|
539
554
|
const observer2 = new QueryObserver(queryClient, options)
|
|
540
555
|
const observer3 = new QueryObserver(queryClient, options)
|
|
541
|
-
const query = queryCache.find(key)
|
|
556
|
+
const query = queryCache.find({ queryKey: key })
|
|
542
557
|
|
|
543
558
|
expect(query?.getObserversCount()).toEqual(0)
|
|
544
559
|
|
|
@@ -564,11 +579,13 @@ describe('query', () => {
|
|
|
564
579
|
|
|
565
580
|
const key = queryKey()
|
|
566
581
|
|
|
567
|
-
await queryClient.prefetchQuery(
|
|
582
|
+
await queryClient.prefetchQuery({
|
|
583
|
+
queryKey: key,
|
|
584
|
+
queryFn: () => 'data',
|
|
568
585
|
meta,
|
|
569
586
|
})
|
|
570
587
|
|
|
571
|
-
const query = queryCache.find(key)!
|
|
588
|
+
const query = queryCache.find({ queryKey: key })!
|
|
572
589
|
|
|
573
590
|
expect(query.meta).toBe(meta)
|
|
574
591
|
expect(query.options.meta).toBe(meta)
|
|
@@ -582,15 +599,11 @@ describe('query', () => {
|
|
|
582
599
|
const key = queryKey()
|
|
583
600
|
const queryFn = () => 'data'
|
|
584
601
|
|
|
585
|
-
await queryClient.prefetchQuery(key, queryFn,
|
|
586
|
-
meta,
|
|
587
|
-
})
|
|
602
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn, meta })
|
|
588
603
|
|
|
589
|
-
await queryClient.prefetchQuery(key, queryFn,
|
|
590
|
-
meta: undefined,
|
|
591
|
-
})
|
|
604
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn, meta: undefined })
|
|
592
605
|
|
|
593
|
-
const query = queryCache.find(key)!
|
|
606
|
+
const query = queryCache.find({ queryKey: key })!
|
|
594
607
|
|
|
595
608
|
expect(query.meta).toBeUndefined()
|
|
596
609
|
expect(query.options.meta).toBeUndefined()
|
|
@@ -606,9 +619,9 @@ describe('query', () => {
|
|
|
606
619
|
|
|
607
620
|
queryClient.setQueryDefaults(key, { meta })
|
|
608
621
|
|
|
609
|
-
await queryClient.prefetchQuery(key, queryFn)
|
|
622
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn })
|
|
610
623
|
|
|
611
|
-
const query = queryCache.find(key)!
|
|
624
|
+
const query = queryCache.find({ queryKey: key })!
|
|
612
625
|
|
|
613
626
|
expect(query.meta).toBe(meta)
|
|
614
627
|
})
|
|
@@ -622,9 +635,7 @@ describe('query', () => {
|
|
|
622
635
|
|
|
623
636
|
const key = queryKey()
|
|
624
637
|
|
|
625
|
-
await queryClient.prefetchQuery(key, queryFn,
|
|
626
|
-
meta,
|
|
627
|
-
})
|
|
638
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn, meta })
|
|
628
639
|
|
|
629
640
|
expect(queryFn).toBeCalledWith(
|
|
630
641
|
expect.objectContaining({
|
|
@@ -655,8 +666,8 @@ describe('query', () => {
|
|
|
655
666
|
test('should not add an existing observer', async () => {
|
|
656
667
|
const key = queryKey()
|
|
657
668
|
|
|
658
|
-
await queryClient.prefetchQuery(key, () => 'data')
|
|
659
|
-
const query = queryCache.find(key)!
|
|
669
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data' })
|
|
670
|
+
const query = queryCache.find({ queryKey: key })!
|
|
660
671
|
expect(query.getObserversCount()).toEqual(0)
|
|
661
672
|
|
|
662
673
|
const observer = new QueryObserver(queryClient, {
|
|
@@ -674,8 +685,8 @@ describe('query', () => {
|
|
|
674
685
|
test('should not try to remove an observer that does not exist', async () => {
|
|
675
686
|
const key = queryKey()
|
|
676
687
|
|
|
677
|
-
await queryClient.prefetchQuery(key, () => 'data')
|
|
678
|
-
const query = queryCache.find(key)!
|
|
688
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data' })
|
|
689
|
+
const query = queryCache.find({ queryKey: key })!
|
|
679
690
|
const observer = new QueryObserver(queryClient, {
|
|
680
691
|
queryKey: key,
|
|
681
692
|
})
|
|
@@ -688,28 +699,23 @@ describe('query', () => {
|
|
|
688
699
|
notifySpy.mockRestore()
|
|
689
700
|
})
|
|
690
701
|
|
|
691
|
-
test('should not
|
|
702
|
+
test('should not change state on invalidate() if already invalidated', async () => {
|
|
692
703
|
const key = queryKey()
|
|
693
704
|
|
|
694
|
-
await queryClient.prefetchQuery(key, () => 'data')
|
|
695
|
-
const query = queryCache.find(key)!
|
|
705
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data' })
|
|
706
|
+
const query = queryCache.find({ queryKey: key })!
|
|
696
707
|
|
|
697
708
|
query.invalidate()
|
|
698
709
|
expect(query.state.isInvalidated).toBeTruthy()
|
|
699
710
|
|
|
700
|
-
const
|
|
701
|
-
const dispatchSpy = jest.fn()
|
|
702
|
-
query['dispatch'] = dispatchSpy
|
|
711
|
+
const previousState = query.state
|
|
703
712
|
|
|
704
713
|
query.invalidate()
|
|
705
714
|
|
|
706
|
-
expect(query.state
|
|
707
|
-
expect(dispatchSpy).not.toHaveBeenCalled()
|
|
708
|
-
|
|
709
|
-
query['dispatch'] = dispatchOriginal
|
|
715
|
+
expect(query.state).toBe(previousState)
|
|
710
716
|
})
|
|
711
717
|
|
|
712
|
-
test('fetch should not dispatch "fetch"
|
|
718
|
+
test('fetch should not dispatch "fetch" query is already fetching', async () => {
|
|
713
719
|
const key = queryKey()
|
|
714
720
|
|
|
715
721
|
const queryFn = async () => {
|
|
@@ -717,71 +723,31 @@ describe('query', () => {
|
|
|
717
723
|
return 'data'
|
|
718
724
|
}
|
|
719
725
|
|
|
720
|
-
|
|
721
|
-
const query = queryCache.find(key)!
|
|
722
|
-
|
|
723
|
-
const meta = { meta1: '1' }
|
|
724
|
-
|
|
725
|
-
// This first fetch will set the state.meta value
|
|
726
|
-
query.fetch(
|
|
727
|
-
{
|
|
728
|
-
queryKey: key,
|
|
729
|
-
queryFn,
|
|
730
|
-
},
|
|
731
|
-
{
|
|
732
|
-
meta,
|
|
733
|
-
},
|
|
734
|
-
)
|
|
735
|
-
|
|
736
|
-
// Spy on private dispatch method
|
|
737
|
-
const dispatchOriginal = query['dispatch']
|
|
738
|
-
const dispatchSpy = jest.fn()
|
|
739
|
-
query['dispatch'] = dispatchSpy
|
|
726
|
+
const updates: Array<string> = []
|
|
740
727
|
|
|
741
|
-
|
|
742
|
-
query.
|
|
743
|
-
{
|
|
744
|
-
queryKey: key,
|
|
745
|
-
queryFn,
|
|
746
|
-
},
|
|
747
|
-
{
|
|
748
|
-
meta,
|
|
749
|
-
// cancelRefetch must be set to true to enter in the case to test
|
|
750
|
-
// where isFetching is true
|
|
751
|
-
cancelRefetch: true,
|
|
752
|
-
},
|
|
753
|
-
)
|
|
728
|
+
await queryClient.prefetchQuery({ queryKey: key, queryFn })
|
|
729
|
+
const query = queryCache.find({ queryKey: key })!
|
|
754
730
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
meta,
|
|
758
|
-
type: 'fetch',
|
|
731
|
+
const unsubscribe = queryClient.getQueryCache().subscribe((event) => {
|
|
732
|
+
updates.push(event.type)
|
|
759
733
|
})
|
|
760
734
|
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
test('fetch should not set the signal in the queryFnContext if AbortController is undefined', async () => {
|
|
767
|
-
const key = queryKey()
|
|
768
|
-
|
|
769
|
-
// Mock the AbortController to be undefined
|
|
770
|
-
const AbortControllerOriginal = globalThis['AbortController']
|
|
771
|
-
//@ts-expect-error
|
|
772
|
-
globalThis['AbortController'] = undefined
|
|
735
|
+
void query.fetch({
|
|
736
|
+
queryKey: key,
|
|
737
|
+
queryFn,
|
|
738
|
+
})
|
|
773
739
|
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
return 'data'
|
|
740
|
+
await query.fetch({
|
|
741
|
+
queryKey: key,
|
|
742
|
+
queryFn,
|
|
778
743
|
})
|
|
779
744
|
|
|
780
|
-
expect(
|
|
745
|
+
expect(updates).toEqual([
|
|
746
|
+
'updated', // type: 'fetch'
|
|
747
|
+
'updated', // type: 'success'
|
|
748
|
+
])
|
|
781
749
|
|
|
782
|
-
|
|
783
|
-
//@ts-ignore
|
|
784
|
-
globalThis['AbortController'] = AbortControllerOriginal
|
|
750
|
+
unsubscribe()
|
|
785
751
|
})
|
|
786
752
|
|
|
787
753
|
test('fetch should throw an error if the queryFn is not defined', async () => {
|
|
@@ -795,12 +761,16 @@ describe('query', () => {
|
|
|
795
761
|
|
|
796
762
|
const unsubscribe = observer.subscribe(() => undefined)
|
|
797
763
|
await sleep(10)
|
|
798
|
-
expect(
|
|
799
|
-
|
|
764
|
+
expect(observer.getCurrentResult()).toMatchObject({
|
|
765
|
+
status: 'error',
|
|
766
|
+
error: new Error('Missing queryFn'),
|
|
767
|
+
})
|
|
800
768
|
unsubscribe()
|
|
801
769
|
})
|
|
802
770
|
|
|
803
771
|
test('fetch should dispatch an error if the queryFn returns undefined', async () => {
|
|
772
|
+
const consoleMock = jest.spyOn(console, 'error')
|
|
773
|
+
consoleMock.mockImplementation(() => undefined)
|
|
804
774
|
const key = queryKey()
|
|
805
775
|
|
|
806
776
|
const observer = new QueryObserver(queryClient, {
|
|
@@ -824,49 +794,11 @@ describe('query', () => {
|
|
|
824
794
|
error,
|
|
825
795
|
})
|
|
826
796
|
|
|
827
|
-
expect(
|
|
797
|
+
expect(consoleMock).toHaveBeenCalledWith(
|
|
798
|
+
`Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ["${key}"]`,
|
|
799
|
+
)
|
|
828
800
|
unsubscribe()
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
test('fetch should dispatch fetch if is fetching and current promise is undefined', async () => {
|
|
832
|
-
const key = queryKey()
|
|
833
|
-
|
|
834
|
-
const queryFn = async () => {
|
|
835
|
-
await sleep(10)
|
|
836
|
-
return 'data'
|
|
837
|
-
}
|
|
838
|
-
|
|
839
|
-
await queryClient.prefetchQuery(key, queryFn)
|
|
840
|
-
const query = queryCache.find(key)!
|
|
841
|
-
|
|
842
|
-
query.fetch({
|
|
843
|
-
queryKey: key,
|
|
844
|
-
queryFn,
|
|
845
|
-
})
|
|
846
|
-
|
|
847
|
-
// Force promise to undefined
|
|
848
|
-
// because no use case have been identified
|
|
849
|
-
query['promise'] = undefined
|
|
850
|
-
|
|
851
|
-
// Spy on private dispatch method
|
|
852
|
-
const dispatchOriginal = query['dispatch']
|
|
853
|
-
const dispatchSpy = jest.fn()
|
|
854
|
-
query['dispatch'] = dispatchSpy
|
|
855
|
-
|
|
856
|
-
query.fetch({
|
|
857
|
-
queryKey: key,
|
|
858
|
-
queryFn,
|
|
859
|
-
})
|
|
860
|
-
|
|
861
|
-
// Should call dispatch with type set to fetch
|
|
862
|
-
expect(dispatchSpy).toHaveBeenCalledWith({
|
|
863
|
-
meta: undefined,
|
|
864
|
-
type: 'fetch',
|
|
865
|
-
})
|
|
866
|
-
|
|
867
|
-
// Clean-up
|
|
868
|
-
await sleep(20)
|
|
869
|
-
query['dispatch'] = dispatchOriginal
|
|
801
|
+
consoleMock.mockRestore()
|
|
870
802
|
})
|
|
871
803
|
|
|
872
804
|
test('constructor should call initialDataUpdatedAt if defined as a function', async () => {
|
|
@@ -887,7 +819,7 @@ describe('query', () => {
|
|
|
887
819
|
test('queries should be garbage collected even if they never fetched', async () => {
|
|
888
820
|
const key = queryKey()
|
|
889
821
|
|
|
890
|
-
queryClient.setQueryDefaults(key, {
|
|
822
|
+
queryClient.setQueryDefaults(key, { gcTime: 10 })
|
|
891
823
|
|
|
892
824
|
const fn = jest.fn()
|
|
893
825
|
|