@tanstack/react-query 5.45.0 → 5.47.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/legacy/index.cjs +5 -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 +3 -0
- package/build/legacy/index.js.map +1 -1
- package/build/legacy/prefetch.cjs +45 -0
- package/build/legacy/prefetch.cjs.map +1 -0
- package/build/legacy/prefetch.d.cts +6 -0
- package/build/legacy/prefetch.d.ts +6 -0
- package/build/legacy/prefetch.js +19 -0
- package/build/legacy/prefetch.js.map +1 -0
- package/build/legacy/useSuspenseQueries.cjs.map +1 -1
- package/build/legacy/useSuspenseQueries.d.cts +6 -5
- package/build/legacy/useSuspenseQueries.d.ts +6 -5
- package/build/legacy/useSuspenseQueries.js.map +1 -1
- package/build/modern/index.cjs +5 -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 +3 -0
- package/build/modern/index.js.map +1 -1
- package/build/modern/prefetch.cjs +45 -0
- package/build/modern/prefetch.cjs.map +1 -0
- package/build/modern/prefetch.d.cts +6 -0
- package/build/modern/prefetch.d.ts +6 -0
- package/build/modern/prefetch.js +19 -0
- package/build/modern/prefetch.js.map +1 -0
- package/build/modern/useSuspenseQueries.cjs.map +1 -1
- package/build/modern/useSuspenseQueries.d.cts +6 -5
- package/build/modern/useSuspenseQueries.d.ts +6 -5
- package/build/modern/useSuspenseQueries.js.map +1 -1
- package/build/query-codemods/tsconfig.json +4 -1
- package/package.json +2 -2
- package/src/__tests__/prefetch.test-d.tsx +80 -0
- package/src/__tests__/prefetch.test.tsx +434 -0
- package/src/__tests__/useSuspenseQueries.test-d.tsx +20 -2
- package/src/index.ts +1 -0
- package/src/prefetch.ts +42 -0
- package/src/useSuspenseQueries.ts +9 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { describe, expectTypeOf, it } from 'vitest'
|
|
2
|
-
import { useSuspenseQueries } from '..'
|
|
2
|
+
import { skipToken, useSuspenseQueries } from '..'
|
|
3
3
|
import { queryOptions } from '../queryOptions'
|
|
4
4
|
import type { OmitKeyof } from '..'
|
|
5
|
-
import type { UseQueryOptions } from '../types'
|
|
5
|
+
import type { UseQueryOptions, UseSuspenseQueryResult } from '../types'
|
|
6
6
|
|
|
7
7
|
describe('UseSuspenseQueries config object overload', () => {
|
|
8
8
|
it('TData should always be defined', () => {
|
|
@@ -113,4 +113,22 @@ describe('UseSuspenseQueries config object overload', () => {
|
|
|
113
113
|
expectTypeOf(data).toEqualTypeOf<Data>()
|
|
114
114
|
})
|
|
115
115
|
})
|
|
116
|
+
|
|
117
|
+
it('TData should have correct type when conditional skipToken is passed', () => {
|
|
118
|
+
const queryResults = useSuspenseQueries({
|
|
119
|
+
queries: [
|
|
120
|
+
{
|
|
121
|
+
queryKey: ['withSkipToken'],
|
|
122
|
+
queryFn: Math.random() > 0.5 ? skipToken : () => Promise.resolve(5),
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
const firstResult = queryResults[0]
|
|
128
|
+
|
|
129
|
+
expectTypeOf(firstResult).toEqualTypeOf<
|
|
130
|
+
UseSuspenseQueryResult<number, Error>
|
|
131
|
+
>()
|
|
132
|
+
expectTypeOf(firstResult.data).toEqualTypeOf<number>()
|
|
133
|
+
})
|
|
116
134
|
})
|
package/src/index.ts
CHANGED
|
@@ -15,6 +15,7 @@ export type {
|
|
|
15
15
|
SuspenseQueriesResults,
|
|
16
16
|
SuspenseQueriesOptions,
|
|
17
17
|
} from './useSuspenseQueries'
|
|
18
|
+
export { usePrefetchQuery, usePrefetchInfiniteQuery } from './prefetch'
|
|
18
19
|
export { queryOptions } from './queryOptions'
|
|
19
20
|
export type {
|
|
20
21
|
DefinedInitialDataOptions,
|
package/src/prefetch.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { useQueryClient } from './QueryClientProvider'
|
|
2
|
+
import type {
|
|
3
|
+
DefaultError,
|
|
4
|
+
FetchInfiniteQueryOptions,
|
|
5
|
+
FetchQueryOptions,
|
|
6
|
+
QueryKey,
|
|
7
|
+
} from '@tanstack/query-core'
|
|
8
|
+
|
|
9
|
+
export function usePrefetchQuery<
|
|
10
|
+
TQueryFnData = unknown,
|
|
11
|
+
TError = DefaultError,
|
|
12
|
+
TData = TQueryFnData,
|
|
13
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
14
|
+
>(options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>) {
|
|
15
|
+
const queryClient = useQueryClient()
|
|
16
|
+
|
|
17
|
+
if (!queryClient.getQueryState(options.queryKey)) {
|
|
18
|
+
queryClient.prefetchQuery(options)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function usePrefetchInfiniteQuery<
|
|
23
|
+
TQueryFnData = unknown,
|
|
24
|
+
TError = DefaultError,
|
|
25
|
+
TData = TQueryFnData,
|
|
26
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
27
|
+
TPageParam = unknown,
|
|
28
|
+
>(
|
|
29
|
+
options: FetchInfiniteQueryOptions<
|
|
30
|
+
TQueryFnData,
|
|
31
|
+
TError,
|
|
32
|
+
TData,
|
|
33
|
+
TQueryKey,
|
|
34
|
+
TPageParam
|
|
35
|
+
>,
|
|
36
|
+
) {
|
|
37
|
+
const queryClient = useQueryClient()
|
|
38
|
+
|
|
39
|
+
if (!queryClient.getQueryState(options.queryKey)) {
|
|
40
|
+
queryClient.prefetchInfiniteQuery(options)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -6,13 +6,15 @@ import type {
|
|
|
6
6
|
DefaultError,
|
|
7
7
|
QueryClient,
|
|
8
8
|
QueryFunction,
|
|
9
|
-
SkipToken,
|
|
10
9
|
ThrowOnError,
|
|
11
10
|
} from '@tanstack/query-core'
|
|
12
11
|
|
|
13
12
|
// Avoid TS depth-limit error in case of large array literal
|
|
14
13
|
type MAXIMUM_DEPTH = 20
|
|
15
14
|
|
|
15
|
+
// Widen the type of the symbol to enable type inference even if skipToken is not immutable.
|
|
16
|
+
type SkipTokenForUseQueries = symbol
|
|
17
|
+
|
|
16
18
|
type GetUseSuspenseQueryOptions<T> =
|
|
17
19
|
// Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }
|
|
18
20
|
T extends {
|
|
@@ -36,7 +38,7 @@ type GetUseSuspenseQueryOptions<T> =
|
|
|
36
38
|
T extends {
|
|
37
39
|
queryFn?:
|
|
38
40
|
| QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
39
|
-
|
|
|
41
|
+
| SkipTokenForUseQueries
|
|
40
42
|
select?: (data: any) => infer TData
|
|
41
43
|
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
42
44
|
}
|
|
@@ -49,7 +51,7 @@ type GetUseSuspenseQueryOptions<T> =
|
|
|
49
51
|
: T extends {
|
|
50
52
|
queryFn?:
|
|
51
53
|
| QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
52
|
-
|
|
|
54
|
+
| SkipTokenForUseQueries
|
|
53
55
|
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
54
56
|
}
|
|
55
57
|
? UseSuspenseQueryOptions<
|
|
@@ -78,7 +80,9 @@ type GetUseSuspenseQueryResult<T> =
|
|
|
78
80
|
? UseSuspenseQueryResult<TQueryFnData>
|
|
79
81
|
: // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided
|
|
80
82
|
T extends {
|
|
81
|
-
queryFn?:
|
|
83
|
+
queryFn?:
|
|
84
|
+
| QueryFunction<infer TQueryFnData, any>
|
|
85
|
+
| SkipTokenForUseQueries
|
|
82
86
|
select?: (data: any) => infer TData
|
|
83
87
|
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
84
88
|
}
|
|
@@ -89,7 +93,7 @@ type GetUseSuspenseQueryResult<T> =
|
|
|
89
93
|
: T extends {
|
|
90
94
|
queryFn?:
|
|
91
95
|
| QueryFunction<infer TQueryFnData, any>
|
|
92
|
-
|
|
|
96
|
+
| SkipTokenForUseQueries
|
|
93
97
|
throwOnError?: ThrowOnError<any, infer TError, any, any>
|
|
94
98
|
}
|
|
95
99
|
? UseSuspenseQueryResult<
|