@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.
Files changed (40) hide show
  1. package/build/legacy/index.cjs +5 -0
  2. package/build/legacy/index.cjs.map +1 -1
  3. package/build/legacy/index.d.cts +1 -0
  4. package/build/legacy/index.d.ts +1 -0
  5. package/build/legacy/index.js +3 -0
  6. package/build/legacy/index.js.map +1 -1
  7. package/build/legacy/prefetch.cjs +45 -0
  8. package/build/legacy/prefetch.cjs.map +1 -0
  9. package/build/legacy/prefetch.d.cts +6 -0
  10. package/build/legacy/prefetch.d.ts +6 -0
  11. package/build/legacy/prefetch.js +19 -0
  12. package/build/legacy/prefetch.js.map +1 -0
  13. package/build/legacy/useSuspenseQueries.cjs.map +1 -1
  14. package/build/legacy/useSuspenseQueries.d.cts +6 -5
  15. package/build/legacy/useSuspenseQueries.d.ts +6 -5
  16. package/build/legacy/useSuspenseQueries.js.map +1 -1
  17. package/build/modern/index.cjs +5 -0
  18. package/build/modern/index.cjs.map +1 -1
  19. package/build/modern/index.d.cts +1 -0
  20. package/build/modern/index.d.ts +1 -0
  21. package/build/modern/index.js +3 -0
  22. package/build/modern/index.js.map +1 -1
  23. package/build/modern/prefetch.cjs +45 -0
  24. package/build/modern/prefetch.cjs.map +1 -0
  25. package/build/modern/prefetch.d.cts +6 -0
  26. package/build/modern/prefetch.d.ts +6 -0
  27. package/build/modern/prefetch.js +19 -0
  28. package/build/modern/prefetch.js.map +1 -0
  29. package/build/modern/useSuspenseQueries.cjs.map +1 -1
  30. package/build/modern/useSuspenseQueries.d.cts +6 -5
  31. package/build/modern/useSuspenseQueries.d.ts +6 -5
  32. package/build/modern/useSuspenseQueries.js.map +1 -1
  33. package/build/query-codemods/tsconfig.json +4 -1
  34. package/package.json +2 -2
  35. package/src/__tests__/prefetch.test-d.tsx +80 -0
  36. package/src/__tests__/prefetch.test.tsx +434 -0
  37. package/src/__tests__/useSuspenseQueries.test-d.tsx +20 -2
  38. package/src/index.ts +1 -0
  39. package/src/prefetch.ts +42 -0
  40. 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,
@@ -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
- | SkipToken
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
- | SkipToken
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?: QueryFunction<infer TQueryFnData, any> | SkipToken
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
- | SkipToken
96
+ | SkipTokenForUseQueries
93
97
  throwOnError?: ThrowOnError<any, infer TError, any, any>
94
98
  }
95
99
  ? UseSuspenseQueryResult<