@@ -7,6 +7,7 @@ import type { Readable } from 'svelte/store'
7
7
import type { StoreOrVal } from './types'
8
8
import type {
9
9
DefaultError ,
10
+ DefinedQueryObserverResult ,
10
11
OmitKeyof ,
11
12
QueriesObserverOptions ,
12
13
QueriesPlaceholderDataFunction ,
@@ -19,7 +20,7 @@ import type {
19
20
} from '@tanstack/query-core'
20
21
21
22
// This defines the `CreateQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.
22
- // `placeholderData` function does not have a parameter
23
+ // `placeholderData` function always gets undefined passed
23
24
type QueryObserverOptionsForCreateQueries <
24
25
TQueryFnData = unknown ,
25
26
TError = DefaultError ,
@@ -38,7 +39,7 @@ type MAXIMUM_DEPTH = 20
38
39
// Widen the type of the symbol to enable type inference even if skipToken is not immutable.
39
40
type SkipTokenForUseQueries = symbol
40
41
41
- type GetOptions < T > =
42
+ type GetQueryObserverOptionsForCreateQueries < T > =
42
43
// Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }
43
44
T extends {
44
45
queryFnData : infer TQueryFnData
@@ -74,21 +75,38 @@ type GetOptions<T> =
74
75
: // Fallback
75
76
QueryObserverOptionsForCreateQueries
76
77
77
- type GetResults < T > =
78
+ // A defined initialData setting should return a DefinedQueryObserverResult rather than CreateQueryResult
79
+ type GetDefinedOrUndefinedQueryResult < T , TData , TError = unknown > = T extends {
80
+ initialData ?: infer TInitialData
81
+ }
82
+ ? unknown extends TInitialData
83
+ ? QueryObserverResult < TData , TError >
84
+ : TInitialData extends TData
85
+ ? DefinedQueryObserverResult < TData , TError >
86
+ : TInitialData extends ( ) => infer TInitialDataResult
87
+ ? unknown extends TInitialDataResult
88
+ ? QueryObserverResult < TData , TError >
89
+ : TInitialDataResult extends TData
90
+ ? DefinedQueryObserverResult < TData , TError >
91
+ : QueryObserverResult < TData , TError >
92
+ : QueryObserverResult < TData , TError >
93
+ : QueryObserverResult < TData , TError >
94
+
95
+ type GetCreateQueryResult < T > =
78
96
// Part 1: responsible for mapping explicit type parameter to function result, if object
79
97
T extends { queryFnData : any ; error ?: infer TError ; data : infer TData }
80
- ? QueryObserverResult < TData , TError >
98
+ ? GetDefinedOrUndefinedQueryResult < T , TData , TError >
81
99
: T extends { queryFnData : infer TQueryFnData ; error ?: infer TError }
82
- ? QueryObserverResult < TQueryFnData , TError >
100
+ ? GetDefinedOrUndefinedQueryResult < T , TQueryFnData , TError >
83
101
: T extends { data : infer TData ; error ?: infer TError }
84
- ? QueryObserverResult < TData , TError >
102
+ ? GetDefinedOrUndefinedQueryResult < T , TData , TError >
85
103
: // Part 2: responsible for mapping explicit type parameter to function result, if tuple
86
104
T extends [ any , infer TError , infer TData ]
87
- ? QueryObserverResult < TData , TError >
105
+ ? GetDefinedOrUndefinedQueryResult < T , TData , TError >
88
106
: T extends [ infer TQueryFnData , infer TError ]
89
- ? QueryObserverResult < TQueryFnData , TError >
107
+ ? GetDefinedOrUndefinedQueryResult < T , TQueryFnData , TError >
90
108
: T extends [ infer TQueryFnData ]
91
- ? QueryObserverResult < TQueryFnData >
109
+ ? GetDefinedOrUndefinedQueryResult < T , TQueryFnData >
92
110
: // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided
93
111
T extends {
94
112
queryFn ?:
@@ -97,7 +115,8 @@ type GetResults<T> =
97
115
select ?: ( data : any ) => infer TData
98
116
throwOnError ?: ThrowOnError < any , infer TError , any , any >
99
117
}
100
- ? QueryObserverResult <
118
+ ? GetDefinedOrUndefinedQueryResult <
119
+ T ,
101
120
unknown extends TData ? TQueryFnData : TData ,
102
121
unknown extends TError ? DefaultError : TError
103
122
>
@@ -109,18 +128,18 @@ type GetResults<T> =
109
128
*/
110
129
export type QueriesOptions <
111
130
T extends Array < any > ,
112
- TResult extends Array < any > = [ ] ,
131
+ TResults extends Array < any > = [ ] ,
113
132
TDepth extends ReadonlyArray < number > = [ ] ,
114
133
> = TDepth [ 'length' ] extends MAXIMUM_DEPTH
115
134
? Array < QueryObserverOptionsForCreateQueries >
116
135
: T extends [ ]
117
136
? [ ]
118
137
: T extends [ infer Head ]
119
- ? [ ...TResult , GetOptions < Head > ]
120
- : T extends [ infer Head , ...infer Tail ]
138
+ ? [ ...TResults , GetQueryObserverOptionsForCreateQueries < Head > ]
139
+ : T extends [ infer Head , ...infer Tails ]
121
140
? QueriesOptions <
122
- [ ...Tail ] ,
123
- [ ...TResult , GetOptions < Head > ] ,
141
+ [ ...Tails ] ,
142
+ [ ...TResults , GetQueryObserverOptionsForCreateQueries < Head > ] ,
124
143
[ ...TDepth , 1 ]
125
144
>
126
145
: ReadonlyArray < unknown > extends T
@@ -151,18 +170,18 @@ export type QueriesOptions<
151
170
*/
152
171
export type QueriesResults <
153
172
T extends Array < any > ,
154
- TResult extends Array < any > = [ ] ,
173
+ TResults extends Array < any > = [ ] ,
155
174
TDepth extends ReadonlyArray < number > = [ ] ,
156
175
> = TDepth [ 'length' ] extends MAXIMUM_DEPTH
157
176
? Array < QueryObserverResult >
158
177
: T extends [ ]
159
178
? [ ]
160
179
: T extends [ infer Head ]
161
- ? [ ...TResult , GetResults < Head > ]
162
- : T extends [ infer Head , ...infer Tail ]
180
+ ? [ ...TResults , GetCreateQueryResult < Head > ]
181
+ : T extends [ infer Head , ...infer Tails ]
163
182
? QueriesResults <
164
- [ ...Tail ] ,
165
- [ ...TResult , GetResults < Head > ] ,
183
+ [ ...Tails ] ,
184
+ [ ...TResults , GetCreateQueryResult < Head > ] ,
166
185
[ ...TDepth , 1 ]
167
186
>
168
187
: T extends Array <
0 commit comments