@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.
- 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.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.js.map +1 -1
- package/package.json +2 -2
- 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__/useQuery.test.tsx +2 -2
- package/src/__tests__/useQuery.types.test.tsx +12 -8
- 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 +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 =
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
|
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
|
@@ -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
|
|
30
|
+
// `placeholderData` function always gets undefined passed
|
|
31
31
|
type UseQueryOptionsForUseQueries<
|
|
32
32
|
TQueryFnData = unknown,
|
|
33
33
|
TError = DefaultError,
|