@tanstack/react-query 5.0.0-beta.9 → 5.0.0-rc.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/codemods/coverage/clover.xml +2 -2
- package/build/codemods/coverage/index.html +1 -1
- package/build/legacy/HydrationBoundary.cjs +37 -2
- package/build/legacy/HydrationBoundary.cjs.map +1 -1
- package/build/legacy/HydrationBoundary.d.cts +3 -1
- package/build/legacy/HydrationBoundary.d.ts +3 -1
- package/build/legacy/HydrationBoundary.js +37 -2
- package/build/legacy/HydrationBoundary.js.map +1 -1
- package/build/legacy/index.cjs +3 -0
- package/build/legacy/index.cjs.map +1 -1
- package/build/legacy/index.d.cts +1 -0
- package/build/legacy/index.d.ts +1 -0
- package/build/legacy/index.js +2 -0
- package/build/legacy/index.js.map +1 -1
- package/build/legacy/queryOptions.cjs.map +1 -1
- package/build/legacy/queryOptions.d.cts +7 -3
- package/build/legacy/queryOptions.d.ts +7 -3
- package/build/legacy/queryOptions.js.map +1 -1
- package/build/legacy/suspense.cjs +3 -0
- package/build/legacy/suspense.cjs.map +1 -1
- package/build/legacy/suspense.d.cts +3 -2
- package/build/legacy/suspense.d.ts +3 -2
- package/build/legacy/suspense.js +2 -0
- package/build/legacy/suspense.js.map +1 -1
- package/build/legacy/types.cjs.map +1 -1
- package/build/legacy/types.d.cts +4 -4
- package/build/legacy/types.d.ts +4 -4
- package/build/legacy/useQueries.cjs.map +1 -1
- package/build/legacy/useQueries.d.cts +4 -4
- package/build/legacy/useQueries.d.ts +4 -4
- package/build/legacy/useQueries.js.map +1 -1
- package/build/legacy/useSuspenseQueries.cjs +47 -0
- package/build/legacy/useSuspenseQueries.cjs.map +1 -0
- package/build/legacy/useSuspenseQueries.d.cts +66 -0
- package/build/legacy/useSuspenseQueries.d.ts +66 -0
- package/build/legacy/useSuspenseQueries.js +23 -0
- package/build/legacy/useSuspenseQueries.js.map +1 -0
- package/build/legacy/useSuspenseQuery.cjs +2 -1
- package/build/legacy/useSuspenseQuery.cjs.map +1 -1
- package/build/legacy/useSuspenseQuery.js +2 -1
- package/build/legacy/useSuspenseQuery.js.map +1 -1
- package/build/legacy/utils.cjs.map +1 -1
- package/build/legacy/utils.d.cts +1 -1
- package/build/legacy/utils.d.ts +1 -1
- package/build/legacy/utils.js.map +1 -1
- package/build/modern/HydrationBoundary.cjs +37 -2
- package/build/modern/HydrationBoundary.cjs.map +1 -1
- package/build/modern/HydrationBoundary.d.cts +3 -1
- package/build/modern/HydrationBoundary.d.ts +3 -1
- package/build/modern/HydrationBoundary.js +37 -2
- package/build/modern/HydrationBoundary.js.map +1 -1
- package/build/modern/index.cjs +3 -0
- package/build/modern/index.cjs.map +1 -1
- package/build/modern/index.d.cts +1 -0
- package/build/modern/index.d.ts +1 -0
- package/build/modern/index.js +2 -0
- package/build/modern/index.js.map +1 -1
- package/build/modern/queryOptions.cjs.map +1 -1
- package/build/modern/queryOptions.d.cts +7 -3
- package/build/modern/queryOptions.d.ts +7 -3
- package/build/modern/queryOptions.js.map +1 -1
- package/build/modern/suspense.cjs +3 -0
- package/build/modern/suspense.cjs.map +1 -1
- package/build/modern/suspense.d.cts +3 -2
- package/build/modern/suspense.d.ts +3 -2
- package/build/modern/suspense.js +2 -0
- package/build/modern/suspense.js.map +1 -1
- package/build/modern/types.cjs.map +1 -1
- package/build/modern/types.d.cts +4 -4
- package/build/modern/types.d.ts +4 -4
- package/build/modern/useQueries.cjs.map +1 -1
- package/build/modern/useQueries.d.cts +4 -4
- package/build/modern/useQueries.d.ts +4 -4
- package/build/modern/useQueries.js.map +1 -1
- package/build/modern/useSuspenseQueries.cjs +47 -0
- package/build/modern/useSuspenseQueries.cjs.map +1 -0
- package/build/modern/useSuspenseQueries.d.cts +66 -0
- package/build/modern/useSuspenseQueries.d.ts +66 -0
- package/build/modern/useSuspenseQueries.js +23 -0
- package/build/modern/useSuspenseQueries.js.map +1 -0
- package/build/modern/useSuspenseQuery.cjs +2 -1
- package/build/modern/useSuspenseQuery.cjs.map +1 -1
- package/build/modern/useSuspenseQuery.js +2 -1
- package/build/modern/useSuspenseQuery.js.map +1 -1
- package/build/modern/utils.cjs.map +1 -1
- package/build/modern/utils.d.cts +1 -1
- package/build/modern/utils.d.ts +1 -1
- package/build/modern/utils.js.map +1 -1
- package/package.json +7 -3
- package/src/HydrationBoundary.tsx +78 -8
- package/src/__tests__/HydrationBoundary.test.tsx +111 -7
- package/src/__tests__/QueryResetErrorBoundary.test.tsx +10 -6
- package/src/__tests__/fine-grained-persister.test.tsx +163 -0
- package/src/__tests__/queryOptions.types.test.tsx +31 -0
- package/src/__tests__/ssr.test.tsx +2 -2
- package/src/__tests__/suspense.test.tsx +94 -386
- package/src/__tests__/useInfiniteQuery.test.tsx +44 -44
- package/src/__tests__/useInfiniteQuery.type.test.tsx +10 -10
- package/src/__tests__/useIsFetching.test.tsx +2 -2
- package/src/__tests__/useMutation.test.tsx +4 -4
- package/src/__tests__/useMutationState.test.tsx +4 -4
- package/src/__tests__/useQueries.test.tsx +65 -64
- package/src/__tests__/useQuery.test.tsx +142 -141
- package/src/__tests__/useQuery.types.test.tsx +34 -0
- package/src/__tests__/utils.tsx +0 -7
- package/src/index.ts +5 -0
- package/src/queryOptions.ts +11 -3
- package/src/suspense.ts +12 -0
- package/src/types.ts +18 -12
- package/src/useQueries.ts +34 -28
- package/src/useSuspenseQueries.ts +164 -0
- package/src/useSuspenseQuery.ts +2 -1
- package/src/utils.ts +1 -1
|
@@ -6,7 +6,6 @@ import { vi } from 'vitest'
|
|
|
6
6
|
import { QueryCache, useQueries } from '..'
|
|
7
7
|
import {
|
|
8
8
|
createQueryClient,
|
|
9
|
-
expectType,
|
|
10
9
|
expectTypeNotAny,
|
|
11
10
|
queryKey,
|
|
12
11
|
renderWithClient,
|
|
@@ -28,7 +27,7 @@ describe('useQueries', () => {
|
|
|
28
27
|
it('should return the correct states', async () => {
|
|
29
28
|
const key1 = queryKey()
|
|
30
29
|
const key2 = queryKey()
|
|
31
|
-
const results: UseQueryResult
|
|
30
|
+
const results: Array<Array<UseQueryResult>> = []
|
|
32
31
|
|
|
33
32
|
function Page() {
|
|
34
33
|
const result = useQueries({
|
|
@@ -73,7 +72,7 @@ describe('useQueries', () => {
|
|
|
73
72
|
|
|
74
73
|
it('should track results', async () => {
|
|
75
74
|
const key1 = queryKey()
|
|
76
|
-
const results: UseQueryResult
|
|
75
|
+
const results: Array<Array<UseQueryResult>> = []
|
|
77
76
|
let count = 0
|
|
78
77
|
|
|
79
78
|
function Page() {
|
|
@@ -125,7 +124,9 @@ describe('useQueries', () => {
|
|
|
125
124
|
// @ts-expect-error (Page component is not rendered)
|
|
126
125
|
// eslint-disable-next-line
|
|
127
126
|
function Page() {
|
|
128
|
-
const result1 = useQueries<
|
|
127
|
+
const result1 = useQueries<
|
|
128
|
+
[[number], [string], [Array<string>, boolean]]
|
|
129
|
+
>({
|
|
129
130
|
queries: [
|
|
130
131
|
{
|
|
131
132
|
queryKey: key1,
|
|
@@ -141,13 +142,13 @@ describe('useQueries', () => {
|
|
|
141
142
|
},
|
|
142
143
|
],
|
|
143
144
|
})
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
145
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result1[0])
|
|
146
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result1[1])
|
|
147
|
+
expectTypeOf<QueryObserverResult<Array<string>, boolean>>(result1[2])
|
|
148
|
+
expectTypeOf<number | undefined>(result1[0].data)
|
|
149
|
+
expectTypeOf<string | undefined>(result1[1].data)
|
|
150
|
+
expectTypeOf<Array<string> | undefined>(result1[2].data)
|
|
151
|
+
expectTypeOf<boolean | null>(result1[2].error)
|
|
151
152
|
|
|
152
153
|
// TData (3rd element) takes precedence over TQueryFnData (1st element)
|
|
153
154
|
const result2 = useQueries<
|
|
@@ -158,7 +159,7 @@ describe('useQueries', () => {
|
|
|
158
159
|
queryKey: key1,
|
|
159
160
|
queryFn: () => 'string',
|
|
160
161
|
select: (a) => {
|
|
161
|
-
|
|
162
|
+
expectTypeOf<string>(a)
|
|
162
163
|
expectTypeNotAny(a)
|
|
163
164
|
return a.toLowerCase()
|
|
164
165
|
},
|
|
@@ -167,17 +168,17 @@ describe('useQueries', () => {
|
|
|
167
168
|
queryKey: key2,
|
|
168
169
|
queryFn: () => 'string',
|
|
169
170
|
select: (a) => {
|
|
170
|
-
|
|
171
|
+
expectTypeOf<string>(a)
|
|
171
172
|
expectTypeNotAny(a)
|
|
172
173
|
return parseInt(a)
|
|
173
174
|
},
|
|
174
175
|
},
|
|
175
176
|
],
|
|
176
177
|
})
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result2[0])
|
|
179
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result2[1])
|
|
180
|
+
expectTypeOf<string | undefined>(result2[0].data)
|
|
181
|
+
expectTypeOf<number | undefined>(result2[1].data)
|
|
181
182
|
|
|
182
183
|
// types should be enforced
|
|
183
184
|
useQueries<[[string, unknown, string], [string, boolean, number]]>({
|
|
@@ -186,7 +187,7 @@ describe('useQueries', () => {
|
|
|
186
187
|
queryKey: key1,
|
|
187
188
|
queryFn: () => 'string',
|
|
188
189
|
select: (a) => {
|
|
189
|
-
|
|
190
|
+
expectTypeOf<string>(a)
|
|
190
191
|
expectTypeNotAny(a)
|
|
191
192
|
return a.toLowerCase()
|
|
192
193
|
},
|
|
@@ -198,7 +199,7 @@ describe('useQueries', () => {
|
|
|
198
199
|
queryKey: key2,
|
|
199
200
|
queryFn: () => 'string',
|
|
200
201
|
select: (a) => {
|
|
201
|
-
|
|
202
|
+
expectTypeOf<string>(a)
|
|
202
203
|
expectTypeNotAny(a)
|
|
203
204
|
return parseInt(a)
|
|
204
205
|
},
|
|
@@ -235,7 +236,7 @@ describe('useQueries', () => {
|
|
|
235
236
|
[
|
|
236
237
|
{ queryFnData: number },
|
|
237
238
|
{ queryFnData: string },
|
|
238
|
-
{ queryFnData: string
|
|
239
|
+
{ queryFnData: Array<string>; error: boolean },
|
|
239
240
|
]
|
|
240
241
|
>({
|
|
241
242
|
queries: [
|
|
@@ -253,13 +254,13 @@ describe('useQueries', () => {
|
|
|
253
254
|
},
|
|
254
255
|
],
|
|
255
256
|
})
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
257
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result1[0])
|
|
258
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result1[1])
|
|
259
|
+
expectTypeOf<QueryObserverResult<Array<string>, boolean>>(result1[2])
|
|
260
|
+
expectTypeOf<number | undefined>(result1[0].data)
|
|
261
|
+
expectTypeOf<string | undefined>(result1[1].data)
|
|
262
|
+
expectTypeOf<Array<string> | undefined>(result1[2].data)
|
|
263
|
+
expectTypeOf<boolean | null>(result1[2].error)
|
|
263
264
|
|
|
264
265
|
// TData (data prop) takes precedence over TQueryFnData (queryFnData prop)
|
|
265
266
|
const result2 = useQueries<
|
|
@@ -273,7 +274,7 @@ describe('useQueries', () => {
|
|
|
273
274
|
queryKey: key1,
|
|
274
275
|
queryFn: () => 'string',
|
|
275
276
|
select: (a) => {
|
|
276
|
-
|
|
277
|
+
expectTypeOf<string>(a)
|
|
277
278
|
expectTypeNotAny(a)
|
|
278
279
|
return a.toLowerCase()
|
|
279
280
|
},
|
|
@@ -282,17 +283,17 @@ describe('useQueries', () => {
|
|
|
282
283
|
queryKey: key2,
|
|
283
284
|
queryFn: () => 'string',
|
|
284
285
|
select: (a) => {
|
|
285
|
-
|
|
286
|
+
expectTypeOf<string>(a)
|
|
286
287
|
expectTypeNotAny(a)
|
|
287
288
|
return parseInt(a)
|
|
288
289
|
},
|
|
289
290
|
},
|
|
290
291
|
],
|
|
291
292
|
})
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
293
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result2[0])
|
|
294
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result2[1])
|
|
295
|
+
expectTypeOf<string | undefined>(result2[0].data)
|
|
296
|
+
expectTypeOf<number | undefined>(result2[1].data)
|
|
296
297
|
|
|
297
298
|
// can pass only TData (data prop) although TQueryFnData will be left unknown
|
|
298
299
|
const result3 = useQueries<[{ data: string }, { data: number }]>({
|
|
@@ -301,7 +302,7 @@ describe('useQueries', () => {
|
|
|
301
302
|
queryKey: key1,
|
|
302
303
|
queryFn: () => 'string',
|
|
303
304
|
select: (a) => {
|
|
304
|
-
|
|
305
|
+
expectTypeOf<unknown>(a)
|
|
305
306
|
expectTypeNotAny(a)
|
|
306
307
|
return a as string
|
|
307
308
|
},
|
|
@@ -310,17 +311,17 @@ describe('useQueries', () => {
|
|
|
310
311
|
queryKey: key2,
|
|
311
312
|
queryFn: () => 'string',
|
|
312
313
|
select: (a) => {
|
|
313
|
-
|
|
314
|
+
expectTypeOf<unknown>(a)
|
|
314
315
|
expectTypeNotAny(a)
|
|
315
316
|
return a as number
|
|
316
317
|
},
|
|
317
318
|
},
|
|
318
319
|
],
|
|
319
320
|
})
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
321
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result3[0])
|
|
322
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result3[1])
|
|
323
|
+
expectTypeOf<string | undefined>(result3[0].data)
|
|
324
|
+
expectTypeOf<number | undefined>(result3[1].data)
|
|
324
325
|
|
|
325
326
|
// types should be enforced
|
|
326
327
|
useQueries<
|
|
@@ -334,7 +335,7 @@ describe('useQueries', () => {
|
|
|
334
335
|
queryKey: key1,
|
|
335
336
|
queryFn: () => 'string',
|
|
336
337
|
select: (a) => {
|
|
337
|
-
|
|
338
|
+
expectTypeOf<string>(a)
|
|
338
339
|
expectTypeNotAny(a)
|
|
339
340
|
return a.toLowerCase()
|
|
340
341
|
},
|
|
@@ -346,7 +347,7 @@ describe('useQueries', () => {
|
|
|
346
347
|
queryKey: key2,
|
|
347
348
|
queryFn: () => 'string',
|
|
348
349
|
select: (a) => {
|
|
349
|
-
|
|
350
|
+
expectTypeOf<string>(a)
|
|
350
351
|
expectTypeNotAny(a)
|
|
351
352
|
return parseInt(a)
|
|
352
353
|
},
|
|
@@ -387,8 +388,8 @@ describe('useQueries', () => {
|
|
|
387
388
|
queryFn: () => i + 10,
|
|
388
389
|
})),
|
|
389
390
|
})
|
|
390
|
-
|
|
391
|
-
|
|
391
|
+
expectTypeOf<Array<QueryObserverResult<number, unknown>>>(result1)
|
|
392
|
+
expectTypeOf<number | undefined>(result1[0]?.data)
|
|
392
393
|
|
|
393
394
|
// Array.map preserves TData
|
|
394
395
|
const result2 = useQueries({
|
|
@@ -398,7 +399,7 @@ describe('useQueries', () => {
|
|
|
398
399
|
select: (data: number) => data.toString(),
|
|
399
400
|
})),
|
|
400
401
|
})
|
|
401
|
-
|
|
402
|
+
expectTypeOf<Array<QueryObserverResult<string, unknown>>>(result2)
|
|
402
403
|
|
|
403
404
|
const result3 = useQueries({
|
|
404
405
|
queries: [
|
|
@@ -417,13 +418,13 @@ describe('useQueries', () => {
|
|
|
417
418
|
},
|
|
418
419
|
],
|
|
419
420
|
})
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
421
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result3[0])
|
|
422
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result3[1])
|
|
423
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result3[2])
|
|
424
|
+
expectTypeOf<number | undefined>(result3[0].data)
|
|
425
|
+
expectTypeOf<string | undefined>(result3[1].data)
|
|
425
426
|
// select takes precedence over queryFn
|
|
426
|
-
|
|
427
|
+
expectTypeOf<number | undefined>(result3[2].data)
|
|
427
428
|
|
|
428
429
|
// initialData/placeholderData are enforced
|
|
429
430
|
useQueries({
|
|
@@ -505,9 +506,9 @@ describe('useQueries', () => {
|
|
|
505
506
|
},
|
|
506
507
|
],
|
|
507
508
|
})
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
509
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result4[0])
|
|
510
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result4[1])
|
|
511
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result4[2])
|
|
511
512
|
|
|
512
513
|
// handles when queryFn returns a Promise
|
|
513
514
|
const result5 = useQueries({
|
|
@@ -518,7 +519,7 @@ describe('useQueries', () => {
|
|
|
518
519
|
},
|
|
519
520
|
],
|
|
520
521
|
})
|
|
521
|
-
|
|
522
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result5[0])
|
|
522
523
|
|
|
523
524
|
// Array as const does not throw error
|
|
524
525
|
const result6 = useQueries({
|
|
@@ -533,8 +534,8 @@ describe('useQueries', () => {
|
|
|
533
534
|
},
|
|
534
535
|
],
|
|
535
536
|
} as const)
|
|
536
|
-
|
|
537
|
-
|
|
537
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result6[0])
|
|
538
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result6[1])
|
|
538
539
|
|
|
539
540
|
// field names should be enforced - array literal
|
|
540
541
|
useQueries({
|
|
@@ -616,18 +617,18 @@ describe('useQueries', () => {
|
|
|
616
617
|
TError,
|
|
617
618
|
TData,
|
|
618
619
|
TQueryKey extends QueryKey,
|
|
619
|
-
>(queries: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey
|
|
620
|
+
>(queries: Array<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>>) {
|
|
620
621
|
return useQueries({
|
|
621
622
|
queries: queries.map(
|
|
622
623
|
// no need to type the mapped query
|
|
623
624
|
(query) => {
|
|
624
625
|
const { queryFn: fn, queryKey: key } = query
|
|
625
|
-
|
|
626
|
+
expectTypeOf<QueryFunction<TQueryFnData, TQueryKey> | undefined>(fn)
|
|
626
627
|
return {
|
|
627
628
|
queryKey: key,
|
|
628
629
|
queryFn: fn
|
|
629
630
|
? (ctx: QueryFunctionContext<TQueryKey>) => {
|
|
630
|
-
|
|
631
|
+
expectTypeOf<TQueryKey>(ctx.queryKey)
|
|
631
632
|
return fn.call({}, ctx)
|
|
632
633
|
}
|
|
633
634
|
: undefined,
|
|
@@ -652,8 +653,8 @@ describe('useQueries', () => {
|
|
|
652
653
|
},
|
|
653
654
|
],
|
|
654
655
|
})
|
|
655
|
-
|
|
656
|
-
|
|
656
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result[0])
|
|
657
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result[1])
|
|
657
658
|
|
|
658
659
|
const withSelector = useQueries({
|
|
659
660
|
queries: [
|
|
@@ -669,10 +670,10 @@ describe('useQueries', () => {
|
|
|
669
670
|
},
|
|
670
671
|
],
|
|
671
672
|
})
|
|
672
|
-
|
|
673
|
+
expectTypeOf<QueryObserverResult<[number, string], unknown>>(
|
|
673
674
|
withSelector[0],
|
|
674
675
|
)
|
|
675
|
-
|
|
676
|
+
expectTypeOf<QueryObserverResult<[string, number], unknown>>(
|
|
676
677
|
withSelector[1],
|
|
677
678
|
)
|
|
678
679
|
|
|
@@ -684,7 +685,7 @@ describe('useQueries', () => {
|
|
|
684
685
|
})),
|
|
685
686
|
)
|
|
686
687
|
|
|
687
|
-
|
|
688
|
+
expectTypeOf<Array<QueryObserverResult<number | undefined, unknown>>>(
|
|
688
689
|
withWrappedQueries,
|
|
689
690
|
)
|
|
690
691
|
}
|