@tanstack/react-query 5.0.0-rc.1 → 5.0.0-rc.16
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/legacy/infiniteQueryOptions.cjs.map +1 -1
- package/build/legacy/infiniteQueryOptions.d.cts +11 -6
- package/build/legacy/infiniteQueryOptions.d.ts +11 -6
- package/build/legacy/infiniteQueryOptions.js.map +1 -1
- package/build/legacy/queryOptions.cjs.map +1 -1
- package/build/legacy/queryOptions.d.cts +6 -5
- package/build/legacy/queryOptions.d.ts +6 -5
- package/build/legacy/queryOptions.js.map +1 -1
- package/build/legacy/types.cjs.map +1 -1
- package/build/legacy/types.d.cts +3 -3
- package/build/legacy/types.d.ts +3 -3
- package/build/legacy/useInfiniteQuery.cjs.map +1 -1
- package/build/legacy/useInfiniteQuery.d.cts +2 -2
- package/build/legacy/useInfiniteQuery.d.ts +2 -2
- package/build/legacy/useInfiniteQuery.js.map +1 -1
- package/build/legacy/useQueries.cjs.map +1 -1
- package/build/legacy/useQueries.d.cts +9 -5
- package/build/legacy/useQueries.d.ts +9 -5
- package/build/legacy/useQueries.js.map +1 -1
- package/build/legacy/useSuspenseInfiniteQuery.cjs +2 -1
- package/build/legacy/useSuspenseInfiniteQuery.cjs.map +1 -1
- package/build/legacy/useSuspenseInfiniteQuery.js +2 -1
- package/build/legacy/useSuspenseInfiniteQuery.js.map +1 -1
- package/build/legacy/useSuspenseQueries.cjs.map +1 -1
- package/build/legacy/useSuspenseQueries.d.cts +9 -5
- package/build/legacy/useSuspenseQueries.d.ts +9 -5
- package/build/legacy/useSuspenseQueries.js.map +1 -1
- package/build/modern/infiniteQueryOptions.cjs.map +1 -1
- package/build/modern/infiniteQueryOptions.d.cts +11 -6
- package/build/modern/infiniteQueryOptions.d.ts +11 -6
- package/build/modern/infiniteQueryOptions.js.map +1 -1
- package/build/modern/queryOptions.cjs.map +1 -1
- package/build/modern/queryOptions.d.cts +6 -5
- package/build/modern/queryOptions.d.ts +6 -5
- package/build/modern/queryOptions.js.map +1 -1
- package/build/modern/types.cjs.map +1 -1
- package/build/modern/types.d.cts +3 -3
- package/build/modern/types.d.ts +3 -3
- package/build/modern/useInfiniteQuery.cjs.map +1 -1
- package/build/modern/useInfiniteQuery.d.cts +2 -2
- package/build/modern/useInfiniteQuery.d.ts +2 -2
- package/build/modern/useInfiniteQuery.js.map +1 -1
- package/build/modern/useQueries.cjs.map +1 -1
- package/build/modern/useQueries.d.cts +9 -5
- package/build/modern/useQueries.d.ts +9 -5
- package/build/modern/useQueries.js.map +1 -1
- package/build/modern/useSuspenseInfiniteQuery.cjs +2 -1
- package/build/modern/useSuspenseInfiniteQuery.cjs.map +1 -1
- package/build/modern/useSuspenseInfiniteQuery.js +2 -1
- package/build/modern/useSuspenseInfiniteQuery.js.map +1 -1
- package/build/modern/useSuspenseQueries.cjs.map +1 -1
- package/build/modern/useSuspenseQueries.d.cts +9 -5
- package/build/modern/useSuspenseQueries.d.ts +9 -5
- package/build/modern/useSuspenseQueries.js.map +1 -1
- package/package.json +2 -3
- package/src/__tests__/infiniteQueryOptions.types.test.tsx +163 -0
- package/src/__tests__/queryOptions.types.test.tsx +154 -3
- package/src/__tests__/suspense.types.test.tsx +146 -0
- package/src/__tests__/useQueries.test.tsx +53 -1
- package/src/__tests__/useQuery.test.tsx +3 -3
- package/src/__tests__/useQuery.types.test.tsx +7 -1
- package/src/infiniteQueryOptions.ts +21 -22
- package/src/queryOptions.ts +11 -19
- package/src/types.ts +2 -4
- package/src/useInfiniteQuery.ts +0 -2
- package/src/useQueries.ts +24 -7
- package/src/useSuspenseInfiniteQuery.ts +2 -1
- package/src/useSuspenseQueries.ts +21 -6
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { useSuspenseQuery } from '../useSuspenseQuery'
|
|
2
|
+
import { useSuspenseInfiniteQuery } from '../useSuspenseInfiniteQuery'
|
|
3
|
+
import { doNotExecute } from './utils'
|
|
4
|
+
import type { InfiniteData } from '@tanstack/query-core'
|
|
5
|
+
import type { Equal, Expect } from './utils'
|
|
6
|
+
|
|
7
|
+
describe('useSuspenseQuery', () => {
|
|
8
|
+
it('should always have data defined', () => {
|
|
9
|
+
doNotExecute(() => {
|
|
10
|
+
const { data } = useSuspenseQuery({
|
|
11
|
+
queryKey: ['key'],
|
|
12
|
+
queryFn: () => Promise.resolve(5),
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const result: Expect<Equal<typeof data, number>> = true
|
|
16
|
+
return result
|
|
17
|
+
})
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('should not have pending status', () => {
|
|
21
|
+
doNotExecute(() => {
|
|
22
|
+
const { status } = useSuspenseQuery({
|
|
23
|
+
queryKey: ['key'],
|
|
24
|
+
queryFn: () => Promise.resolve(5),
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const result: Expect<Equal<typeof status, 'error' | 'success'>> = true
|
|
28
|
+
return result
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('should not allow placeholderData, enabled or throwOnError props', () => {
|
|
33
|
+
doNotExecute(() => {
|
|
34
|
+
useSuspenseQuery({
|
|
35
|
+
queryKey: ['key'],
|
|
36
|
+
queryFn: () => Promise.resolve(5),
|
|
37
|
+
// @ts-expect-error TS2345
|
|
38
|
+
placeholderData: 5,
|
|
39
|
+
enabled: true,
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
useSuspenseQuery({
|
|
43
|
+
queryKey: ['key'],
|
|
44
|
+
queryFn: () => Promise.resolve(5),
|
|
45
|
+
// @ts-expect-error TS2345
|
|
46
|
+
enabled: true,
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
useSuspenseQuery({
|
|
50
|
+
queryKey: ['key'],
|
|
51
|
+
queryFn: () => Promise.resolve(5),
|
|
52
|
+
// @ts-expect-error TS2345
|
|
53
|
+
throwOnError: true,
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
it('should not return isPlaceholderData', () => {
|
|
59
|
+
doNotExecute(() => {
|
|
60
|
+
const query = useSuspenseQuery({
|
|
61
|
+
queryKey: ['key'],
|
|
62
|
+
queryFn: () => Promise.resolve(5),
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
// @ts-expect-error TS2339
|
|
66
|
+
void query.isPlaceholderData
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
describe('useSuspenseInfiniteQuery', () => {
|
|
72
|
+
it('should always have data defined', () => {
|
|
73
|
+
doNotExecute(() => {
|
|
74
|
+
const { data } = useSuspenseInfiniteQuery({
|
|
75
|
+
queryKey: ['key'],
|
|
76
|
+
queryFn: () => Promise.resolve(5),
|
|
77
|
+
initialPageParam: 1,
|
|
78
|
+
getNextPageParam: () => 1,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const result: Expect<Equal<typeof data, InfiniteData<number, unknown>>> =
|
|
82
|
+
true
|
|
83
|
+
return result
|
|
84
|
+
})
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
it('should not have pending status', () => {
|
|
88
|
+
doNotExecute(() => {
|
|
89
|
+
const { status } = useSuspenseInfiniteQuery({
|
|
90
|
+
queryKey: ['key'],
|
|
91
|
+
queryFn: () => Promise.resolve(5),
|
|
92
|
+
initialPageParam: 1,
|
|
93
|
+
getNextPageParam: () => 1,
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
const result: Expect<Equal<typeof status, 'error' | 'success'>> = true
|
|
97
|
+
return result
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
it('should not allow placeholderData, enabled or throwOnError props', () => {
|
|
102
|
+
doNotExecute(() => {
|
|
103
|
+
useSuspenseInfiniteQuery({
|
|
104
|
+
queryKey: ['key'],
|
|
105
|
+
queryFn: () => Promise.resolve(5),
|
|
106
|
+
initialPageParam: 1,
|
|
107
|
+
getNextPageParam: () => 1,
|
|
108
|
+
// @ts-expect-error TS2345
|
|
109
|
+
placeholderData: 5,
|
|
110
|
+
enabled: true,
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
useSuspenseInfiniteQuery({
|
|
114
|
+
queryKey: ['key'],
|
|
115
|
+
queryFn: () => Promise.resolve(5),
|
|
116
|
+
initialPageParam: 1,
|
|
117
|
+
getNextPageParam: () => 1,
|
|
118
|
+
// @ts-expect-error TS2345
|
|
119
|
+
enabled: true,
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
useSuspenseInfiniteQuery({
|
|
123
|
+
queryKey: ['key'],
|
|
124
|
+
queryFn: () => Promise.resolve(5),
|
|
125
|
+
initialPageParam: 1,
|
|
126
|
+
getNextPageParam: () => 1,
|
|
127
|
+
// @ts-expect-error TS2345
|
|
128
|
+
throwOnError: true,
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
it('should not return isPlaceholderData', () => {
|
|
134
|
+
doNotExecute(() => {
|
|
135
|
+
const query = useSuspenseInfiniteQuery({
|
|
136
|
+
queryKey: ['key'],
|
|
137
|
+
queryFn: () => Promise.resolve(5),
|
|
138
|
+
initialPageParam: 1,
|
|
139
|
+
getNextPageParam: () => 1,
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
// @ts-expect-error TS2339
|
|
143
|
+
void query.isPlaceholderData
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
})
|
|
@@ -377,6 +377,10 @@ describe('useQueries', () => {
|
|
|
377
377
|
const key2 = queryKey()
|
|
378
378
|
const key3 = queryKey()
|
|
379
379
|
const key4 = queryKey()
|
|
380
|
+
const key5 = queryKey()
|
|
381
|
+
|
|
382
|
+
type BizError = { code: number }
|
|
383
|
+
const throwOnError = (_error: BizError) => true
|
|
380
384
|
|
|
381
385
|
// @ts-expect-error (Page component is not rendered)
|
|
382
386
|
// eslint-disable-next-line
|
|
@@ -391,6 +395,18 @@ describe('useQueries', () => {
|
|
|
391
395
|
expectTypeOf<Array<QueryObserverResult<number, unknown>>>(result1)
|
|
392
396
|
expectTypeOf<number | undefined>(result1[0]?.data)
|
|
393
397
|
|
|
398
|
+
// Array.map preserves TError
|
|
399
|
+
const result1_err = useQueries({
|
|
400
|
+
queries: Array(50).map((_, i) => ({
|
|
401
|
+
queryKey: ['key', i] as const,
|
|
402
|
+
queryFn: () => i + 10,
|
|
403
|
+
throwOnError,
|
|
404
|
+
})),
|
|
405
|
+
})
|
|
406
|
+
expectTypeOf<Array<QueryObserverResult<number, unknown>>>(result1_err)
|
|
407
|
+
expectTypeOf<number | undefined>(result1_err[0]?.data)
|
|
408
|
+
expectTypeOf<BizError | null | undefined>(result1_err[0]?.error)
|
|
409
|
+
|
|
394
410
|
// Array.map preserves TData
|
|
395
411
|
const result2 = useQueries({
|
|
396
412
|
queries: Array(50).map((_, i) => ({
|
|
@@ -401,6 +417,16 @@ describe('useQueries', () => {
|
|
|
401
417
|
})
|
|
402
418
|
expectTypeOf<Array<QueryObserverResult<string, unknown>>>(result2)
|
|
403
419
|
|
|
420
|
+
const result2_err = useQueries({
|
|
421
|
+
queries: Array(50).map((_, i) => ({
|
|
422
|
+
queryKey: ['key', i] as const,
|
|
423
|
+
queryFn: () => i + 10,
|
|
424
|
+
select: (data: number) => data.toString(),
|
|
425
|
+
throwOnError,
|
|
426
|
+
})),
|
|
427
|
+
})
|
|
428
|
+
expectTypeOf<Array<QueryObserverResult<string, BizError>>>(result2_err)
|
|
429
|
+
|
|
404
430
|
const result3 = useQueries({
|
|
405
431
|
queries: [
|
|
406
432
|
{
|
|
@@ -416,6 +442,11 @@ describe('useQueries', () => {
|
|
|
416
442
|
queryFn: () => ['string[]'],
|
|
417
443
|
select: () => 123,
|
|
418
444
|
},
|
|
445
|
+
{
|
|
446
|
+
queryKey: key5,
|
|
447
|
+
queryFn: () => 'string',
|
|
448
|
+
throwOnError,
|
|
449
|
+
},
|
|
419
450
|
],
|
|
420
451
|
})
|
|
421
452
|
expectTypeOf<QueryObserverResult<number, unknown>>(result3[0])
|
|
@@ -423,8 +454,11 @@ describe('useQueries', () => {
|
|
|
423
454
|
expectTypeOf<QueryObserverResult<number, unknown>>(result3[2])
|
|
424
455
|
expectTypeOf<number | undefined>(result3[0].data)
|
|
425
456
|
expectTypeOf<string | undefined>(result3[1].data)
|
|
457
|
+
expectTypeOf<string | undefined>(result3[3].data)
|
|
426
458
|
// select takes precedence over queryFn
|
|
427
459
|
expectTypeOf<number | undefined>(result3[2].data)
|
|
460
|
+
// infer TError from throwOnError
|
|
461
|
+
expectTypeOf<BizError | null | undefined>(result3[3].error)
|
|
428
462
|
|
|
429
463
|
// initialData/placeholderData are enforced
|
|
430
464
|
useQueries({
|
|
@@ -446,7 +480,7 @@ describe('useQueries', () => {
|
|
|
446
480
|
],
|
|
447
481
|
})
|
|
448
482
|
|
|
449
|
-
// select params are "indirectly" enforced
|
|
483
|
+
// select and throwOnError params are "indirectly" enforced
|
|
450
484
|
useQueries({
|
|
451
485
|
queries: [
|
|
452
486
|
// unfortunately TS will not suggest the type for you
|
|
@@ -469,6 +503,11 @@ describe('useQueries', () => {
|
|
|
469
503
|
queryFn: () => 'string',
|
|
470
504
|
select: (a: string) => parseInt(a),
|
|
471
505
|
},
|
|
506
|
+
{
|
|
507
|
+
queryKey: key5,
|
|
508
|
+
queryFn: () => 'string',
|
|
509
|
+
throwOnError,
|
|
510
|
+
},
|
|
472
511
|
],
|
|
473
512
|
})
|
|
474
513
|
|
|
@@ -504,11 +543,18 @@ describe('useQueries', () => {
|
|
|
504
543
|
queryFn: () => 'string',
|
|
505
544
|
select: (a: string) => parseInt(a),
|
|
506
545
|
},
|
|
546
|
+
{
|
|
547
|
+
queryKey: key5,
|
|
548
|
+
queryFn: () => 'string',
|
|
549
|
+
select: (a: string) => parseInt(a),
|
|
550
|
+
throwOnError,
|
|
551
|
+
},
|
|
507
552
|
],
|
|
508
553
|
})
|
|
509
554
|
expectTypeOf<QueryObserverResult<string, unknown>>(result4[0])
|
|
510
555
|
expectTypeOf<QueryObserverResult<string, unknown>>(result4[1])
|
|
511
556
|
expectTypeOf<QueryObserverResult<number, unknown>>(result4[2])
|
|
557
|
+
expectTypeOf<QueryObserverResult<number, BizError>>(result4[3])
|
|
512
558
|
|
|
513
559
|
// handles when queryFn returns a Promise
|
|
514
560
|
const result5 = useQueries({
|
|
@@ -532,10 +578,16 @@ describe('useQueries', () => {
|
|
|
532
578
|
queryKey: ['key1'],
|
|
533
579
|
queryFn: () => 123,
|
|
534
580
|
},
|
|
581
|
+
{
|
|
582
|
+
queryKey: key5,
|
|
583
|
+
queryFn: () => 'string',
|
|
584
|
+
throwOnError,
|
|
585
|
+
},
|
|
535
586
|
],
|
|
536
587
|
} as const)
|
|
537
588
|
expectTypeOf<QueryObserverResult<string, unknown>>(result6[0])
|
|
538
589
|
expectTypeOf<QueryObserverResult<number, unknown>>(result6[1])
|
|
590
|
+
expectTypeOf<QueryObserverResult<string, BizError>>(result6[2])
|
|
539
591
|
|
|
540
592
|
// field names should be enforced - array literal
|
|
541
593
|
useQueries({
|
|
@@ -4146,7 +4146,7 @@ describe('useQuery', () => {
|
|
|
4146
4146
|
await sleep(10)
|
|
4147
4147
|
return count++
|
|
4148
4148
|
},
|
|
4149
|
-
refetchInterval: (data = 0) => (data < 2 ? 10 : false),
|
|
4149
|
+
refetchInterval: ({ state: { data = 0 } }) => (data < 2 ? 10 : false),
|
|
4150
4150
|
})
|
|
4151
4151
|
|
|
4152
4152
|
states.push(queryInfo)
|
|
@@ -5975,11 +5975,11 @@ describe('useQuery', () => {
|
|
|
5975
5975
|
<div>data: {state.data}</div>
|
|
5976
5976
|
<div>dataUpdatedAt: {state.dataUpdatedAt}</div>
|
|
5977
5977
|
<button
|
|
5978
|
-
onClick={() =>
|
|
5978
|
+
onClick={() => {
|
|
5979
5979
|
queryClient.setQueryData(key, 'newData', {
|
|
5980
5980
|
updatedAt: 100,
|
|
5981
5981
|
})
|
|
5982
|
-
}
|
|
5982
|
+
}}
|
|
5983
5983
|
>
|
|
5984
5984
|
setQueryData
|
|
5985
5985
|
</button>
|
|
@@ -51,10 +51,16 @@ describe('initialData', () => {
|
|
|
51
51
|
queryKey: ['key'],
|
|
52
52
|
queryFn: () => Promise.resolve(1),
|
|
53
53
|
})
|
|
54
|
-
|
|
54
|
+
|
|
55
|
+
const query = useQuery({
|
|
55
56
|
...options,
|
|
56
57
|
select: (data) => data > 1,
|
|
57
58
|
})
|
|
59
|
+
|
|
60
|
+
const result: Expect<
|
|
61
|
+
Equal<boolean | undefined, (typeof query)['data']>
|
|
62
|
+
> = true
|
|
63
|
+
return result
|
|
58
64
|
})
|
|
59
65
|
})
|
|
60
66
|
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
+
import type { DataTag } from '@tanstack/query-core'
|
|
1
2
|
import type { InfiniteData } from '@tanstack/query-core'
|
|
2
3
|
import type { UseInfiniteQueryOptions } from './types'
|
|
3
4
|
import type { DefaultError, QueryKey } from '@tanstack/query-core'
|
|
4
5
|
|
|
5
6
|
export type UndefinedInitialDataInfiniteOptions<
|
|
6
|
-
TQueryFnData
|
|
7
|
+
TQueryFnData,
|
|
7
8
|
TError = DefaultError,
|
|
8
|
-
TData = TQueryFnData
|
|
9
|
-
TQueryData = TQueryFnData,
|
|
9
|
+
TData = InfiniteData<TQueryFnData>,
|
|
10
10
|
TQueryKey extends QueryKey = QueryKey,
|
|
11
11
|
TPageParam = unknown,
|
|
12
12
|
> = UseInfiniteQueryOptions<
|
|
13
13
|
TQueryFnData,
|
|
14
14
|
TError,
|
|
15
15
|
TData,
|
|
16
|
-
|
|
16
|
+
TQueryFnData,
|
|
17
17
|
TQueryKey,
|
|
18
18
|
TPageParam
|
|
19
19
|
> & {
|
|
20
20
|
initialData?: undefined
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
type NonUndefinedGuard<T> = T extends undefined ? never : T
|
|
24
|
+
|
|
23
25
|
export type DefinedInitialDataInfiniteOptions<
|
|
24
|
-
TQueryFnData
|
|
26
|
+
TQueryFnData,
|
|
25
27
|
TError = DefaultError,
|
|
26
|
-
TData = TQueryFnData
|
|
27
|
-
TQueryData = TQueryFnData,
|
|
28
|
+
TData = InfiniteData<TQueryFnData>,
|
|
28
29
|
TQueryKey extends QueryKey = QueryKey,
|
|
29
30
|
TPageParam = unknown,
|
|
30
31
|
> = UseInfiniteQueryOptions<
|
|
31
32
|
TQueryFnData,
|
|
32
33
|
TError,
|
|
33
34
|
TData,
|
|
34
|
-
|
|
35
|
+
TQueryFnData,
|
|
35
36
|
TQueryKey,
|
|
36
37
|
TPageParam
|
|
37
38
|
> & {
|
|
38
39
|
initialData:
|
|
39
|
-
| InfiniteData<
|
|
40
|
-
| (() => InfiniteData<
|
|
40
|
+
| NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>
|
|
41
|
+
| (() => NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>)
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
export function infiniteQueryOptions<
|
|
44
|
-
TQueryFnData
|
|
45
|
+
TQueryFnData,
|
|
45
46
|
TError = DefaultError,
|
|
46
|
-
TData = TQueryFnData
|
|
47
|
-
TQueryData = TQueryFnData,
|
|
47
|
+
TData = InfiniteData<TQueryFnData>,
|
|
48
48
|
TQueryKey extends QueryKey = QueryKey,
|
|
49
49
|
TPageParam = unknown,
|
|
50
50
|
>(
|
|
@@ -52,7 +52,6 @@ export function infiniteQueryOptions<
|
|
|
52
52
|
TQueryFnData,
|
|
53
53
|
TError,
|
|
54
54
|
TData,
|
|
55
|
-
TQueryFnData,
|
|
56
55
|
TQueryKey,
|
|
57
56
|
TPageParam
|
|
58
57
|
>,
|
|
@@ -60,16 +59,16 @@ export function infiniteQueryOptions<
|
|
|
60
59
|
TQueryFnData,
|
|
61
60
|
TError,
|
|
62
61
|
TData,
|
|
63
|
-
TQueryFnData,
|
|
64
62
|
TQueryKey,
|
|
65
63
|
TPageParam
|
|
66
|
-
>
|
|
64
|
+
> & {
|
|
65
|
+
queryKey: DataTag<TQueryKey, TData>
|
|
66
|
+
}
|
|
67
67
|
|
|
68
68
|
export function infiniteQueryOptions<
|
|
69
|
-
TQueryFnData
|
|
69
|
+
TQueryFnData,
|
|
70
70
|
TError = DefaultError,
|
|
71
|
-
TData = TQueryFnData
|
|
72
|
-
TQueryData = TQueryFnData,
|
|
71
|
+
TData = InfiniteData<TQueryFnData>,
|
|
73
72
|
TQueryKey extends QueryKey = QueryKey,
|
|
74
73
|
TPageParam = unknown,
|
|
75
74
|
>(
|
|
@@ -77,7 +76,6 @@ export function infiniteQueryOptions<
|
|
|
77
76
|
TQueryFnData,
|
|
78
77
|
TError,
|
|
79
78
|
TData,
|
|
80
|
-
TQueryFnData,
|
|
81
79
|
TQueryKey,
|
|
82
80
|
TPageParam
|
|
83
81
|
>,
|
|
@@ -85,10 +83,11 @@ export function infiniteQueryOptions<
|
|
|
85
83
|
TQueryFnData,
|
|
86
84
|
TError,
|
|
87
85
|
TData,
|
|
88
|
-
TQueryFnData,
|
|
89
86
|
TQueryKey,
|
|
90
87
|
TPageParam
|
|
91
|
-
>
|
|
88
|
+
> & {
|
|
89
|
+
queryKey: DataTag<TQueryKey, TData>
|
|
90
|
+
}
|
|
92
91
|
|
|
93
92
|
export function infiniteQueryOptions(options: unknown) {
|
|
94
93
|
return options
|
package/src/queryOptions.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DefaultError, QueryKey } from '@tanstack/query-core'
|
|
1
|
+
import type { DataTag, DefaultError, QueryKey } from '@tanstack/query-core'
|
|
2
2
|
import type { UseQueryOptions } from './types'
|
|
3
3
|
|
|
4
4
|
export type UndefinedInitialDataOptions<
|
|
@@ -23,35 +23,27 @@ export type DefinedInitialDataOptions<
|
|
|
23
23
|
| (() => NonUndefinedGuard<TQueryFnData>)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
type ValidateQueryOptions<T> = {
|
|
27
|
-
[K in keyof T]: K extends keyof UseQueryOptions ? T[K] : never
|
|
28
|
-
}
|
|
29
|
-
|
|
30
26
|
export function queryOptions<
|
|
31
27
|
TQueryFnData = unknown,
|
|
32
28
|
TError = DefaultError,
|
|
33
29
|
TData = TQueryFnData,
|
|
34
30
|
TQueryKey extends QueryKey = QueryKey,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
> = UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
41
|
-
>(options: ValidateQueryOptions<TOptions>): TOptions
|
|
31
|
+
>(
|
|
32
|
+
options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
33
|
+
): UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
34
|
+
queryKey: DataTag<TQueryKey, TData>
|
|
35
|
+
}
|
|
42
36
|
|
|
43
37
|
export function queryOptions<
|
|
44
38
|
TQueryFnData = unknown,
|
|
45
39
|
TError = DefaultError,
|
|
46
40
|
TData = TQueryFnData,
|
|
47
41
|
TQueryKey extends QueryKey = QueryKey,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
> = DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
54
|
-
>(options: ValidateQueryOptions<TOptions>): TOptions
|
|
42
|
+
>(
|
|
43
|
+
options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
44
|
+
): DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
45
|
+
queryKey: DataTag<TQueryKey, TData>
|
|
46
|
+
}
|
|
55
47
|
|
|
56
48
|
export function queryOptions(options: unknown) {
|
|
57
49
|
return options
|
package/src/types.ts
CHANGED
|
@@ -6,14 +6,12 @@ import type {
|
|
|
6
6
|
DefinedQueryObserverResult,
|
|
7
7
|
InfiniteQueryObserverOptions,
|
|
8
8
|
InfiniteQueryObserverResult,
|
|
9
|
-
InfiniteQueryObserverSuccessResult,
|
|
10
9
|
MutateFunction,
|
|
11
10
|
MutationObserverOptions,
|
|
12
11
|
MutationObserverResult,
|
|
13
12
|
QueryKey,
|
|
14
13
|
QueryObserverOptions,
|
|
15
14
|
QueryObserverResult,
|
|
16
|
-
QueryObserverSuccessResult,
|
|
17
15
|
WithRequired,
|
|
18
16
|
} from '@tanstack/query-core'
|
|
19
17
|
|
|
@@ -105,7 +103,7 @@ export type UseQueryResult<
|
|
|
105
103
|
export type UseSuspenseQueryResult<
|
|
106
104
|
TData = unknown,
|
|
107
105
|
TError = DefaultError,
|
|
108
|
-
> = Omit<
|
|
106
|
+
> = Omit<DefinedQueryObserverResult<TData, TError>, 'isPlaceholderData'>
|
|
109
107
|
|
|
110
108
|
export type DefinedUseQueryResult<
|
|
111
109
|
TData = unknown,
|
|
@@ -125,7 +123,7 @@ export type DefinedUseInfiniteQueryResult<
|
|
|
125
123
|
export type UseSuspenseInfiniteQueryResult<
|
|
126
124
|
TData = unknown,
|
|
127
125
|
TError = DefaultError,
|
|
128
|
-
> = Omit<
|
|
126
|
+
> = Omit<DefinedInfiniteQueryObserverResult<TData, TError>, 'isPlaceholderData'>
|
|
129
127
|
|
|
130
128
|
export interface UseMutationOptions<
|
|
131
129
|
TData = unknown,
|
package/src/useInfiniteQuery.ts
CHANGED
|
@@ -29,7 +29,6 @@ export function useInfiniteQuery<
|
|
|
29
29
|
TQueryFnData,
|
|
30
30
|
TError,
|
|
31
31
|
TData,
|
|
32
|
-
TQueryFnData,
|
|
33
32
|
TQueryKey,
|
|
34
33
|
TPageParam
|
|
35
34
|
>,
|
|
@@ -47,7 +46,6 @@ export function useInfiniteQuery<
|
|
|
47
46
|
TQueryFnData,
|
|
48
47
|
TError,
|
|
49
48
|
TData,
|
|
50
|
-
TQueryFnData,
|
|
51
49
|
TQueryKey,
|
|
52
50
|
TPageParam
|
|
53
51
|
>,
|
package/src/useQueries.ts
CHANGED
|
@@ -24,10 +24,11 @@ import type {
|
|
|
24
24
|
QueryClient,
|
|
25
25
|
QueryFunction,
|
|
26
26
|
QueryKey,
|
|
27
|
+
ThrowOnError,
|
|
27
28
|
} from '@tanstack/query-core'
|
|
28
29
|
|
|
29
30
|
// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.
|
|
30
|
-
// `placeholderData` function
|
|
31
|
+
// `placeholderData` function always gets undefined passed
|
|
31
32
|
type UseQueryOptionsForUseQueries<
|
|
32
33
|
TQueryFnData = unknown,
|
|
33
34
|
TError = DefaultError,
|
|
@@ -66,10 +67,19 @@ type GetOptions<T> =
|
|
|
66
67
|
T extends {
|
|
67
68
|
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
68
69
|
select: (data: any) => infer TData
|
|
70
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
69
71
|
}
|
|
70
|
-
? UseQueryOptionsForUseQueries<TQueryFnData,
|
|
71
|
-
: T extends {
|
|
72
|
-
|
|
72
|
+
? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData, TQueryKey>
|
|
73
|
+
: T extends {
|
|
74
|
+
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
75
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
76
|
+
}
|
|
77
|
+
? UseQueryOptionsForUseQueries<
|
|
78
|
+
TQueryFnData,
|
|
79
|
+
TError,
|
|
80
|
+
TQueryFnData,
|
|
81
|
+
TQueryKey
|
|
82
|
+
>
|
|
73
83
|
: // Fallback
|
|
74
84
|
UseQueryOptionsForUseQueries
|
|
75
85
|
|
|
@@ -92,10 +102,17 @@ type GetResults<T> =
|
|
|
92
102
|
T extends {
|
|
93
103
|
queryFn?: QueryFunction<unknown, any>
|
|
94
104
|
select: (data: any) => infer TData
|
|
105
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
95
106
|
}
|
|
96
|
-
? UseQueryResult<TData>
|
|
97
|
-
: T extends {
|
|
98
|
-
|
|
107
|
+
? UseQueryResult<TData, unknown extends TError ? DefaultError : TError>
|
|
108
|
+
: T extends {
|
|
109
|
+
queryFn?: QueryFunction<infer TQueryFnData, any>
|
|
110
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
111
|
+
}
|
|
112
|
+
? UseQueryResult<
|
|
113
|
+
TQueryFnData,
|
|
114
|
+
unknown extends TError ? DefaultError : TError
|
|
115
|
+
>
|
|
99
116
|
: // Fallback
|
|
100
117
|
UseQueryResult
|
|
101
118
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { InfiniteQueryObserver } from '@tanstack/query-core'
|
|
3
3
|
import { useBaseQuery } from './useBaseQuery'
|
|
4
|
+
import { defaultThrowOnError } from './suspense'
|
|
4
5
|
import type {
|
|
5
6
|
InfiniteQueryObserverSuccessResult,
|
|
6
7
|
QueryObserver,
|
|
@@ -38,7 +39,7 @@ export function useSuspenseInfiniteQuery<
|
|
|
38
39
|
...options,
|
|
39
40
|
enabled: true,
|
|
40
41
|
suspense: true,
|
|
41
|
-
throwOnError:
|
|
42
|
+
throwOnError: defaultThrowOnError,
|
|
42
43
|
},
|
|
43
44
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
44
45
|
InfiniteQueryObserver as typeof QueryObserver,
|
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
DefaultError,
|
|
7
7
|
QueryClient,
|
|
8
8
|
QueryFunction,
|
|
9
|
+
ThrowOnError,
|
|
9
10
|
} from '@tanstack/query-core'
|
|
10
11
|
|
|
11
12
|
// Avoid TS depth-limit error in case of large array literal
|
|
@@ -34,10 +35,14 @@ type GetSuspenseOptions<T> =
|
|
|
34
35
|
T extends {
|
|
35
36
|
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
36
37
|
select: (data: any) => infer TData
|
|
38
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
37
39
|
}
|
|
38
|
-
? UseSuspenseQueryOptions<TQueryFnData,
|
|
39
|
-
: T extends {
|
|
40
|
-
|
|
40
|
+
? UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
41
|
+
: T extends {
|
|
42
|
+
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
43
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
44
|
+
}
|
|
45
|
+
? UseSuspenseQueryOptions<TQueryFnData, TError, TQueryFnData, TQueryKey>
|
|
41
46
|
: // Fallback
|
|
42
47
|
UseSuspenseQueryOptions
|
|
43
48
|
|
|
@@ -60,10 +65,20 @@ type GetSuspenseResults<T> =
|
|
|
60
65
|
T extends {
|
|
61
66
|
queryFn?: QueryFunction<unknown, any>
|
|
62
67
|
select: (data: any) => infer TData
|
|
68
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
63
69
|
}
|
|
64
|
-
? UseSuspenseQueryResult<
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
? UseSuspenseQueryResult<
|
|
71
|
+
TData,
|
|
72
|
+
unknown extends TError ? DefaultError : TError
|
|
73
|
+
>
|
|
74
|
+
: T extends {
|
|
75
|
+
queryFn?: QueryFunction<infer TQueryFnData, any>
|
|
76
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
77
|
+
}
|
|
78
|
+
? UseSuspenseQueryResult<
|
|
79
|
+
TQueryFnData,
|
|
80
|
+
unknown extends TError ? DefaultError : TError
|
|
81
|
+
>
|
|
67
82
|
: // Fallback
|
|
68
83
|
UseSuspenseQueryResult
|
|
69
84
|
|