@tanstack/react-query 5.0.0-rc.5 → 5.0.0-rc.7

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 (45) hide show
  1. package/build/legacy/infiniteQueryOptions.cjs.map +1 -1
  2. package/build/legacy/infiniteQueryOptions.d.cts +11 -6
  3. package/build/legacy/infiniteQueryOptions.d.ts +11 -6
  4. package/build/legacy/infiniteQueryOptions.js.map +1 -1
  5. package/build/legacy/queryOptions.cjs.map +1 -1
  6. package/build/legacy/queryOptions.d.cts +6 -5
  7. package/build/legacy/queryOptions.d.ts +6 -5
  8. package/build/legacy/queryOptions.js.map +1 -1
  9. package/build/legacy/types.cjs.map +1 -1
  10. package/build/legacy/types.d.cts +3 -3
  11. package/build/legacy/types.d.ts +3 -3
  12. package/build/legacy/useInfiniteQuery.cjs.map +1 -1
  13. package/build/legacy/useInfiniteQuery.d.cts +2 -2
  14. package/build/legacy/useInfiniteQuery.d.ts +2 -2
  15. package/build/legacy/useInfiniteQuery.js.map +1 -1
  16. package/build/legacy/useQueries.cjs.map +1 -1
  17. package/build/legacy/useQueries.js.map +1 -1
  18. package/build/modern/infiniteQueryOptions.cjs.map +1 -1
  19. package/build/modern/infiniteQueryOptions.d.cts +11 -6
  20. package/build/modern/infiniteQueryOptions.d.ts +11 -6
  21. package/build/modern/infiniteQueryOptions.js.map +1 -1
  22. package/build/modern/queryOptions.cjs.map +1 -1
  23. package/build/modern/queryOptions.d.cts +6 -5
  24. package/build/modern/queryOptions.d.ts +6 -5
  25. package/build/modern/queryOptions.js.map +1 -1
  26. package/build/modern/types.cjs.map +1 -1
  27. package/build/modern/types.d.cts +3 -3
  28. package/build/modern/types.d.ts +3 -3
  29. package/build/modern/useInfiniteQuery.cjs.map +1 -1
  30. package/build/modern/useInfiniteQuery.d.cts +2 -2
  31. package/build/modern/useInfiniteQuery.d.ts +2 -2
  32. package/build/modern/useInfiniteQuery.js.map +1 -1
  33. package/build/modern/useQueries.cjs.map +1 -1
  34. package/build/modern/useQueries.js.map +1 -1
  35. package/package.json +2 -2
  36. package/src/__tests__/infiniteQueryOptions.types.test.tsx +163 -0
  37. package/src/__tests__/queryOptions.types.test.tsx +154 -3
  38. package/src/__tests__/suspense.types.test.tsx +146 -0
  39. package/src/__tests__/useQuery.test.tsx +2 -2
  40. package/src/__tests__/useQuery.types.test.tsx +12 -8
  41. package/src/infiniteQueryOptions.ts +21 -22
  42. package/src/queryOptions.ts +11 -19
  43. package/src/types.ts +2 -4
  44. package/src/useInfiniteQuery.ts +0 -2
  45. package/src/useQueries.ts +1 -1
@@ -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
+ })
@@ -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>
@@ -47,14 +47,18 @@ describe('initialData', () => {
47
47
 
48
48
  it('it should be possible to define a different TData than TQueryFnData using select with queryOptions spread into useQuery', () => {
49
49
  doNotExecute(() => {
50
- const options = queryOptions({
51
- queryKey: ['key'],
52
- queryFn: () => Promise.resolve(1),
53
- })
54
- useQuery({
55
- ...options,
56
- select: (data) => data > 1,
57
- })
50
+ const options = <TData = number,>(select?: (data: number) => TData) =>
51
+ queryOptions({
52
+ queryKey: ['key'],
53
+ queryFn: () => Promise.resolve(1),
54
+ select,
55
+ })
56
+ const query = useQuery(options((data) => data > 1))
57
+
58
+ const result: Expect<
59
+ Equal<boolean | undefined, (typeof query)['data']>
60
+ > = true
61
+ return result
58
62
  })
59
63
  })
60
64
 
@@ -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 = unknown,
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
- TQueryData,
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 = unknown,
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
- TQueryData,
35
+ TQueryFnData,
35
36
  TQueryKey,
36
37
  TPageParam
37
38
  > & {
38
39
  initialData:
39
- | InfiniteData<TQueryData, TPageParam>
40
- | (() => InfiniteData<TQueryData, TPageParam>)
40
+ | NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>
41
+ | (() => NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>)
41
42
  }
42
43
 
43
44
  export function infiniteQueryOptions<
44
- TQueryFnData = unknown,
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 = unknown,
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
@@ -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
- TOptions extends UndefinedInitialDataOptions<
36
- TQueryFnData,
37
- TError,
38
- TData,
39
- TQueryKey
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
- TOptions extends DefinedInitialDataOptions<
49
- TQueryFnData,
50
- TError,
51
- TData,
52
- TQueryKey
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<QueryObserverSuccessResult<TData, TError>, 'isPlaceholderData'>
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<InfiniteQueryObserverSuccessResult<TData, TError>, 'isPlaceholderData'>
126
+ > = Omit<DefinedInfiniteQueryObserverResult<TData, TError>, 'isPlaceholderData'>
129
127
 
130
128
  export interface UseMutationOptions<
131
129
  TData = unknown,
@@ -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
@@ -27,7 +27,7 @@ import type {
27
27
  } from '@tanstack/query-core'
28
28
 
29
29
  // This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.
30
- // `placeholderData` function does not have a parameter
30
+ // `placeholderData` function always gets undefined passed
31
31
  type UseQueryOptionsForUseQueries<
32
32
  TQueryFnData = unknown,
33
33
  TError = DefaultError,