@@ -36,6 +36,7 @@ import type {
3636 GroupByArgs ,
3737 GroupByResult ,
3838 ModelResult ,
39+ SelectIncludeOmit ,
3940 SelectSubset ,
4041 Subset ,
4142 UpdateArgs ,
@@ -56,6 +57,7 @@ import {
5657 type ExtraMutationOptions ,
5758 type ExtraQueryOptions ,
5859} from './utils/common' ;
60+ import type { TrimDelegateModelOperations } from './utils/types' ;
5961
6062export type { FetchFn } from './utils/common' ;
6163
@@ -119,126 +121,144 @@ export type ModelMutationOptions<T, TArgs> = Omit<UseMutationOptions<T, DefaultE
119121
120122export type ModelMutationResult < T , TArgs > = UseMutationResult < T , DefaultError , TArgs > ;
121123
122- export type SchemaHooks < Schema extends SchemaDef > = {
123- [ Model in GetModels < Schema > as `${Uncapitalize < Model > } `] : ModelQueryHooks < Schema , Model > ;
124- } ;
125-
126- export type ModelQueryHooks < Schema extends SchemaDef , Model extends GetModels < Schema > > = {
127- useFindUnique < T extends FindUniqueArgs < Schema , Model > > (
128- args : SelectSubset < T , FindUniqueArgs < Schema , Model > > ,
129- options ?: ModelQueryOptions < ModelResult < Schema , Model , T > | null > ,
130- ) : ModelQueryResult < ModelResult < Schema , Model , T > | null > ;
131-
132- useSuspenseFindUnique < T extends FindUniqueArgs < Schema , Model > > (
133- args : SelectSubset < T , FindUniqueArgs < Schema , Model > > ,
134- options ?: ModelSuspenseQueryOptions < ModelResult < Schema , Model , T > | null > ,
135- ) : ModelSuspenseQueryResult < ModelResult < Schema , Model , T > | null > ;
136-
137- useFindFirst < T extends FindArgs < Schema , Model , false > > (
138- args ?: SelectSubset < T , FindArgs < Schema , Model , false > > ,
139- options ?: ModelQueryOptions < ModelResult < Schema , Model , T > | null > ,
140- ) : ModelQueryResult < ModelResult < Schema , Model , T > | null > ;
141-
142- useSuspenseFindFirst < T extends FindArgs < Schema , Model , false > > (
143- args ?: SelectSubset < T , FindArgs < Schema , Model , false > > ,
144- options ?: ModelSuspenseQueryOptions < ModelResult < Schema , Model , T > | null > ,
145- ) : ModelSuspenseQueryResult < ModelResult < Schema , Model , T > | null > ;
146-
147- useFindMany < T extends FindArgs < Schema , Model , true > > (
148- args ?: SelectSubset < T , FindArgs < Schema , Model , true > > ,
149- options ?: ModelQueryOptions < ModelResult < Schema , Model , T > [ ] > ,
150- ) : ModelQueryResult < ModelResult < Schema , Model , T > [ ] > ;
151-
152- useSuspenseFindMany < T extends FindArgs < Schema , Model , true > > (
153- args ?: SelectSubset < T , FindArgs < Schema , Model , true > > ,
154- options ?: ModelSuspenseQueryOptions < ModelResult < Schema , Model , T > [ ] > ,
155- ) : ModelSuspenseQueryResult < ModelResult < Schema , Model , T > [ ] > ;
156-
157- useInfiniteFindMany < T extends FindArgs < Schema , Model , true > > (
158- args ?: SelectSubset < T , FindArgs < Schema , Model , true > > ,
159- options ?: ModelInfiniteQueryOptions < ModelResult < Schema , Model , T > [ ] > ,
160- ) : ModelInfiniteQueryResult < InfiniteData < ModelResult < Schema , Model , T > [ ] > > ;
161-
162- useSuspenseInfiniteFindMany < T extends FindArgs < Schema , Model , true > > (
163- args ?: SelectSubset < T , FindArgs < Schema , Model , true > > ,
164- options ?: ModelSuspenseInfiniteQueryOptions < ModelResult < Schema , Model , T > [ ] > ,
165- ) : ModelSuspenseInfiniteQueryResult < InfiniteData < ModelResult < Schema , Model , T > [ ] > > ;
166-
167- useCreate < T extends CreateArgs < Schema , Model > > (
168- options ?: ModelMutationOptions < ModelResult < Schema , Model , T > , T > ,
169- ) : ModelMutationResult < ModelResult < Schema , Model , T > , T > ;
170-
171- useCreateMany < T extends CreateManyArgs < Schema , Model > > (
172- options ?: ModelMutationOptions < BatchResult , T > ,
173- ) : ModelMutationResult < BatchResult , T > ;
174-
175- useCreateManyAndReturn < T extends CreateManyAndReturnArgs < Schema , Model > > (
176- options ?: ModelMutationOptions < ModelResult < Schema , Model , T > [ ] , T > ,
177- ) : ModelMutationResult < ModelResult < Schema , Model , T > [ ] , T > ;
178-
179- useUpdate < T extends UpdateArgs < Schema , Model > > (
180- options ?: ModelMutationOptions < ModelResult < Schema , Model , T > , T > ,
181- ) : ModelMutationResult < ModelResult < Schema , Model , T > , T > ;
182-
183- useUpdateMany < T extends UpdateManyArgs < Schema , Model > > (
184- options ?: ModelMutationOptions < BatchResult , T > ,
185- ) : ModelMutationResult < BatchResult , T > ;
186-
187- useUpdateManyAndReturn < T extends UpdateManyAndReturnArgs < Schema , Model > > (
188- options ?: ModelMutationOptions < ModelResult < Schema , Model , T > [ ] , T > ,
189- ) : ModelMutationResult < ModelResult < Schema , Model , T > [ ] , T > ;
190-
191- useUpsert < T extends UpsertArgs < Schema , Model > > (
124+ export type ModelMutationModelResult <
125+ Schema extends SchemaDef ,
126+ Model extends GetModels < Schema > ,
127+ TArgs extends SelectIncludeOmit < Schema , Model , boolean > ,
128+ Array extends boolean = false ,
129+ > = Omit < ModelMutationResult < ModelResult < Schema , Model , TArgs > , TArgs > , 'mutateAsync' > & {
130+ mutateAsync < T extends TArgs > (
131+ args : T ,
192132 options ?: ModelMutationOptions < ModelResult < Schema , Model , T > , T > ,
193- ) : ModelMutationResult < ModelResult < Schema , Model , T > , T > ;
133+ ) : Promise < Array extends true ? ModelResult < Schema , Model , T > [ ] : ModelResult < Schema , Model , T > > ;
134+ } ;
194135
195- useDelete < T extends DeleteArgs < Schema , Model > > (
196- options ?: ModelMutationOptions < ModelResult < Schema , Model , T > , T > ,
197- ) : ModelMutationResult < ModelResult < Schema , Model , T > , T > ;
198-
199- useDeleteMany < T extends DeleteManyArgs < Schema , Model > > (
200- options ?: ModelMutationOptions < BatchResult , T > ,
201- ) : ModelMutationResult < BatchResult , T > ;
202-
203- useCount < T extends CountArgs < Schema , Model > > (
204- args ?: Subset < T , CountArgs < Schema , Model > > ,
205- options ?: ModelQueryOptions < CountResult < Schema , Model , T > > ,
206- ) : ModelQueryResult < CountResult < Schema , Model , T > > ;
207-
208- useSuspenseCount < T extends CountArgs < Schema , Model > > (
209- args ?: Subset < T , CountArgs < Schema , Model > > ,
210- options ?: ModelSuspenseQueryOptions < CountResult < Schema , Model , T > > ,
211- ) : ModelSuspenseQueryResult < CountResult < Schema , Model , T > > ;
212-
213- useAggregate < T extends AggregateArgs < Schema , Model > > (
214- args : Subset < T , AggregateArgs < Schema , Model > > ,
215- options ?: ModelQueryOptions < AggregateResult < Schema , Model , T > > ,
216- ) : ModelQueryResult < AggregateResult < Schema , Model , T > > ;
217-
218- useSuspenseAggregate < T extends AggregateArgs < Schema , Model > > (
219- args : Subset < T , AggregateArgs < Schema , Model > > ,
220- options ?: ModelSuspenseQueryOptions < AggregateResult < Schema , Model , T > > ,
221- ) : ModelSuspenseQueryResult < AggregateResult < Schema , Model , T > > ;
222-
223- useGroupBy < T extends GroupByArgs < Schema , Model > > (
224- args : Subset < T , GroupByArgs < Schema , Model > > ,
225- options ?: ModelQueryOptions < GroupByResult < Schema , Model , T > > ,
226- ) : ModelQueryResult < GroupByResult < Schema , Model , T > > ;
227-
228- useSuspenseGroupBy < T extends GroupByArgs < Schema , Model > > (
229- args : Subset < T , GroupByArgs < Schema , Model > > ,
230- options ?: ModelSuspenseQueryOptions < GroupByResult < Schema , Model , T > > ,
231- ) : ModelSuspenseQueryResult < GroupByResult < Schema , Model , T > > ;
136+ export type ClientHooks < Schema extends SchemaDef > = {
137+ [ Model in GetModels < Schema > as `${Uncapitalize < Model > } `] : ModelQueryHooks < Schema , Model > ;
232138} ;
233139
140+ // Note that we can potentially use TypeScript's mapped type to directly map from ORM contract, but that seems
141+ // to significantly slow down tsc performance ...
142+ export type ModelQueryHooks < Schema extends SchemaDef , Model extends GetModels < Schema > > = TrimDelegateModelOperations <
143+ Schema ,
144+ Model ,
145+ {
146+ useFindUnique < T extends FindUniqueArgs < Schema , Model > > (
147+ args : SelectSubset < T , FindUniqueArgs < Schema , Model > > ,
148+ options ?: ModelQueryOptions < ModelResult < Schema , Model , T > | null > ,
149+ ) : ModelQueryResult < ModelResult < Schema , Model , T > | null > ;
150+
151+ useSuspenseFindUnique < T extends FindUniqueArgs < Schema , Model > > (
152+ args : SelectSubset < T , FindUniqueArgs < Schema , Model > > ,
153+ options ?: ModelSuspenseQueryOptions < ModelResult < Schema , Model , T > | null > ,
154+ ) : ModelSuspenseQueryResult < ModelResult < Schema , Model , T > | null > ;
155+
156+ useFindFirst < T extends FindArgs < Schema , Model , false > > (
157+ args ?: SelectSubset < T , FindArgs < Schema , Model , false > > ,
158+ options ?: ModelQueryOptions < ModelResult < Schema , Model , T > | null > ,
159+ ) : ModelQueryResult < ModelResult < Schema , Model , T > | null > ;
160+
161+ useSuspenseFindFirst < T extends FindArgs < Schema , Model , false > > (
162+ args ?: SelectSubset < T , FindArgs < Schema , Model , false > > ,
163+ options ?: ModelSuspenseQueryOptions < ModelResult < Schema , Model , T > | null > ,
164+ ) : ModelSuspenseQueryResult < ModelResult < Schema , Model , T > | null > ;
165+
166+ useFindMany < T extends FindArgs < Schema , Model , true > > (
167+ args ?: SelectSubset < T , FindArgs < Schema , Model , true > > ,
168+ options ?: ModelQueryOptions < ModelResult < Schema , Model , T > [ ] > ,
169+ ) : ModelQueryResult < ModelResult < Schema , Model , T > [ ] > ;
170+
171+ useSuspenseFindMany < T extends FindArgs < Schema , Model , true > > (
172+ args ?: SelectSubset < T , FindArgs < Schema , Model , true > > ,
173+ options ?: ModelSuspenseQueryOptions < ModelResult < Schema , Model , T > [ ] > ,
174+ ) : ModelSuspenseQueryResult < ModelResult < Schema , Model , T > [ ] > ;
175+
176+ useInfiniteFindMany < T extends FindArgs < Schema , Model , true > > (
177+ args ?: SelectSubset < T , FindArgs < Schema , Model , true > > ,
178+ options ?: ModelInfiniteQueryOptions < ModelResult < Schema , Model , T > [ ] > ,
179+ ) : ModelInfiniteQueryResult < InfiniteData < ModelResult < Schema , Model , T > [ ] > > ;
180+
181+ useSuspenseInfiniteFindMany < T extends FindArgs < Schema , Model , true > > (
182+ args ?: SelectSubset < T , FindArgs < Schema , Model , true > > ,
183+ options ?: ModelSuspenseInfiniteQueryOptions < ModelResult < Schema , Model , T > [ ] > ,
184+ ) : ModelSuspenseInfiniteQueryResult < InfiniteData < ModelResult < Schema , Model , T > [ ] > > ;
185+
186+ useCreate < T extends CreateArgs < Schema , Model > > (
187+ options ?: ModelMutationOptions < ModelResult < Schema , Model , T > , T > ,
188+ ) : ModelMutationModelResult < Schema , Model , T > ;
189+
190+ useCreateMany < T extends CreateManyArgs < Schema , Model > > (
191+ options ?: ModelMutationOptions < BatchResult , T > ,
192+ ) : ModelMutationResult < BatchResult , T > ;
193+
194+ useCreateManyAndReturn < T extends CreateManyAndReturnArgs < Schema , Model > > (
195+ options ?: ModelMutationOptions < ModelResult < Schema , Model , T > [ ] , T > ,
196+ ) : ModelMutationModelResult < Schema , Model , T , true > ;
197+
198+ useUpdate < T extends UpdateArgs < Schema , Model > > (
199+ options ?: ModelMutationOptions < ModelResult < Schema , Model , T > , T > ,
200+ ) : ModelMutationModelResult < Schema , Model , T > ;
201+
202+ useUpdateMany < T extends UpdateManyArgs < Schema , Model > > (
203+ options ?: ModelMutationOptions < BatchResult , T > ,
204+ ) : ModelMutationResult < BatchResult , T > ;
205+
206+ useUpdateManyAndReturn < T extends UpdateManyAndReturnArgs < Schema , Model > > (
207+ options ?: ModelMutationOptions < ModelResult < Schema , Model , T > [ ] , T > ,
208+ ) : ModelMutationModelResult < Schema , Model , T , true > ;
209+
210+ useUpsert < T extends UpsertArgs < Schema , Model > > (
211+ options ?: ModelMutationOptions < ModelResult < Schema , Model , T > , T > ,
212+ ) : ModelMutationModelResult < Schema , Model , T > ;
213+
214+ useDelete < T extends DeleteArgs < Schema , Model > > (
215+ options ?: ModelMutationOptions < ModelResult < Schema , Model , T > , T > ,
216+ ) : ModelMutationModelResult < Schema , Model , T > ;
217+
218+ useDeleteMany < T extends DeleteManyArgs < Schema , Model > > (
219+ options ?: ModelMutationOptions < BatchResult , T > ,
220+ ) : ModelMutationResult < BatchResult , T > ;
221+
222+ useCount < T extends CountArgs < Schema , Model > > (
223+ args ?: Subset < T , CountArgs < Schema , Model > > ,
224+ options ?: ModelQueryOptions < CountResult < Schema , Model , T > > ,
225+ ) : ModelQueryResult < CountResult < Schema , Model , T > > ;
226+
227+ useSuspenseCount < T extends CountArgs < Schema , Model > > (
228+ args ?: Subset < T , CountArgs < Schema , Model > > ,
229+ options ?: ModelSuspenseQueryOptions < CountResult < Schema , Model , T > > ,
230+ ) : ModelSuspenseQueryResult < CountResult < Schema , Model , T > > ;
231+
232+ useAggregate < T extends AggregateArgs < Schema , Model > > (
233+ args : Subset < T , AggregateArgs < Schema , Model > > ,
234+ options ?: ModelQueryOptions < AggregateResult < Schema , Model , T > > ,
235+ ) : ModelQueryResult < AggregateResult < Schema , Model , T > > ;
236+
237+ useSuspenseAggregate < T extends AggregateArgs < Schema , Model > > (
238+ args : Subset < T , AggregateArgs < Schema , Model > > ,
239+ options ?: ModelSuspenseQueryOptions < AggregateResult < Schema , Model , T > > ,
240+ ) : ModelSuspenseQueryResult < AggregateResult < Schema , Model , T > > ;
241+
242+ useGroupBy < T extends GroupByArgs < Schema , Model > > (
243+ args : Subset < T , GroupByArgs < Schema , Model > > ,
244+ options ?: ModelQueryOptions < GroupByResult < Schema , Model , T > > ,
245+ ) : ModelQueryResult < GroupByResult < Schema , Model , T > > ;
246+
247+ useSuspenseGroupBy < T extends GroupByArgs < Schema , Model > > (
248+ args : Subset < T , GroupByArgs < Schema , Model > > ,
249+ options ?: ModelSuspenseQueryOptions < GroupByResult < Schema , Model , T > > ,
250+ ) : ModelSuspenseQueryResult < GroupByResult < Schema , Model , T > > ;
251+ }
252+ > ;
253+
234254/**
235255 * Gets data query hooks for all models in the schema.
236256 */
237- export function useClientQueries < Schema extends SchemaDef > ( schema : Schema ) : SchemaHooks < Schema > {
257+ export function useClientQueries < Schema extends SchemaDef > ( schema : Schema ) : ClientHooks < Schema > {
238258 return Object . keys ( schema . models ) . reduce ( ( acc , model ) => {
239259 ( acc as any ) [ lowerCaseFirst ( model ) ] = useModelQueries ( schema , model as GetModels < Schema > ) ;
240260 return acc ;
241- } , { } as SchemaHooks < Schema > ) ;
261+ } , { } as ClientHooks < Schema > ) ;
242262}
243263
244264/**
@@ -401,11 +421,14 @@ export function useInternalInfiniteQuery<TQueryFnData, TData>(
401421 model : string ,
402422 operation : string ,
403423 args : unknown ,
404- options : Omit <
405- UseInfiniteQueryOptions < TQueryFnData , DefaultError , InfiniteData < TData > > ,
406- 'queryKey' | 'initialPageParam'
407- > ,
424+ options :
425+ | Omit <
426+ UseInfiniteQueryOptions < TQueryFnData , DefaultError , InfiniteData < TData > > ,
427+ 'queryKey' | 'initialPageParam'
428+ >
429+ | undefined ,
408430) {
431+ options = options ?? { getNextPageParam : ( ) => undefined } ;
409432 const { endpoint, fetch } = useHooksContext ( ) ;
410433 const queryKey = getQueryKey ( model , operation , args , { infinite : true , optimisticUpdate : false } ) ;
411434 return {
0 commit comments