@@ -19,6 +19,9 @@ import {
1919 createInvalidator ,
2020 createOptimisticUpdater ,
2121 DEFAULT_QUERY_ENDPOINT ,
22+ type InferExtResult ,
23+ type InferOptions ,
24+ type InferSchema ,
2225 type InvalidationPredicate ,
2326} from '@zenstackhq/client-helpers' ;
2427import { fetcher , makeUrl , marshal } from '@zenstackhq/client-helpers/fetch' ;
@@ -27,6 +30,7 @@ import type {
2730 AggregateArgs ,
2831 AggregateResult ,
2932 BatchResult ,
33+ ClientContract ,
3034 CountArgs ,
3135 CountResult ,
3236 CreateArgs ,
@@ -35,6 +39,7 @@ import type {
3539 DeleteArgs ,
3640 DeleteManyArgs ,
3741 ExistsArgs ,
42+ ExtResultBase ,
3843 FindFirstArgs ,
3944 FindManyArgs ,
4045 FindUniqueArgs ,
@@ -69,6 +74,8 @@ import type {
6974 WithOptimistic ,
7075} from '../common/types.js' ;
7176export type { FetchFn } from '@zenstackhq/client-helpers/fetch' ;
77+ export type { InferExtResult , InferOptions , InferSchema } from '@zenstackhq/client-helpers' ;
78+ export type { SchemaDef } from '@zenstackhq/schema' ;
7279
7380type ProcedureHookFn <
7481 Schema extends SchemaDef ,
@@ -139,15 +146,20 @@ export type ModelMutationModelResult<
139146 TArgs ,
140147 Array extends boolean = false ,
141148 Options extends QueryOptions < Schema > = QueryOptions < Schema > ,
142- > = Omit < ModelMutationResult < SimplifiedResult < Schema , Model , TArgs , Options , false , Array > , TArgs > , 'mutateAsync' > & {
149+ ExtResult extends ExtResultBase < Schema > = { } ,
150+ > = Omit < ModelMutationResult < SimplifiedResult < Schema , Model , TArgs , Options , false , Array , ExtResult > , TArgs > , 'mutateAsync' > & {
143151 mutateAsync < T extends TArgs > (
144152 args : T ,
145- options ?: ModelMutationOptions < SimplifiedResult < Schema , Model , T , Options , false , Array > , T > ,
146- ) : Promise < SimplifiedResult < Schema , Model , T , Options , false , Array > > ;
153+ options ?: ModelMutationOptions < SimplifiedResult < Schema , Model , T , Options , false , Array , ExtResult > , T > ,
154+ ) : Promise < SimplifiedResult < Schema , Model , T , Options , false , Array , ExtResult > > ;
147155} ;
148156
149- export type ClientHooks < Schema extends SchemaDef , Options extends QueryOptions < Schema > = QueryOptions < Schema > > = {
150- [ Model in GetSlicedModels < Schema , Options > as `${Uncapitalize < Model > } `] : ModelQueryHooks < Schema , Model , Options > ;
157+ export type ClientHooks <
158+ Schema extends SchemaDef ,
159+ Options extends QueryOptions < Schema > = QueryOptions < Schema > ,
160+ ExtResult extends ExtResultBase < Schema > = { } ,
161+ > = {
162+ [ Model in GetSlicedModels < Schema , Options > as `${Uncapitalize < Model > } `] : ModelQueryHooks < Schema , Model , Options , ExtResult > ;
151163} & ProcedureHooks < Schema , Options > ;
152164
153165type ProcedureHookGroup < Schema extends SchemaDef , Options extends QueryOptions < Schema > > = {
@@ -200,65 +212,66 @@ export type ModelQueryHooks<
200212 Schema extends SchemaDef ,
201213 Model extends GetModels < Schema > ,
202214 Options extends QueryOptions < Schema > = QueryOptions < Schema > ,
215+ ExtResult extends ExtResultBase < Schema > = { } ,
203216> = TrimSlicedOperations <
204217 Schema ,
205218 Model ,
206219 Options ,
207220 {
208- useFindUnique < T extends FindUniqueArgs < Schema , Model , Options > > (
209- args : Accessor < SelectSubset < T , FindUniqueArgs < Schema , Model , Options > > > ,
210- options ?: Accessor < ModelQueryOptions < SimplifiedPlainResult < Schema , Model , T , Options > | null > > ,
211- ) : ModelQueryResult < SimplifiedPlainResult < Schema , Model , T , Options > | null > ;
221+ useFindUnique < T extends FindUniqueArgs < Schema , Model , Options , { } , ExtResult > > (
222+ args : Accessor < SelectSubset < T , FindUniqueArgs < Schema , Model , Options , { } , ExtResult > > > ,
223+ options ?: Accessor < ModelQueryOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > | null > > ,
224+ ) : ModelQueryResult < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > | null > ;
212225
213- useFindFirst < T extends FindFirstArgs < Schema , Model , Options > > (
214- args ?: Accessor < SelectSubset < T , FindFirstArgs < Schema , Model , Options > > > ,
215- options ?: Accessor < ModelQueryOptions < SimplifiedPlainResult < Schema , Model , T , Options > | null > > ,
216- ) : ModelQueryResult < SimplifiedPlainResult < Schema , Model , T , Options > | null > ;
226+ useFindFirst < T extends FindFirstArgs < Schema , Model , Options , { } , ExtResult > > (
227+ args ?: Accessor < SelectSubset < T , FindFirstArgs < Schema , Model , Options , { } , ExtResult > > > ,
228+ options ?: Accessor < ModelQueryOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > | null > > ,
229+ ) : ModelQueryResult < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > | null > ;
217230
218231 useExists < T extends ExistsArgs < Schema , Model , Options > > (
219232 args ?: Accessor < Subset < T , ExistsArgs < Schema , Model , Options > > > ,
220233 options ?: Accessor < ModelQueryOptions < boolean > > ,
221234 ) : ModelQueryResult < boolean > ;
222235
223- useFindMany < T extends FindManyArgs < Schema , Model , Options > > (
224- args ?: Accessor < SelectSubset < T , FindManyArgs < Schema , Model , Options > > > ,
225- options ?: Accessor < ModelQueryOptions < SimplifiedPlainResult < Schema , Model , T , Options > [ ] > > ,
226- ) : ModelQueryResult < SimplifiedPlainResult < Schema , Model , T , Options > [ ] > ;
236+ useFindMany < T extends FindManyArgs < Schema , Model , Options , { } , ExtResult > > (
237+ args ?: Accessor < SelectSubset < T , FindManyArgs < Schema , Model , Options , { } , ExtResult > > > ,
238+ options ?: Accessor < ModelQueryOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > [ ] > > ,
239+ ) : ModelQueryResult < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > [ ] > ;
227240
228- useInfiniteFindMany < T extends FindManyArgs < Schema , Model , Options > > (
229- args ?: Accessor < SelectSubset < T , FindManyArgs < Schema , Model , Options > > > ,
230- options ?: Accessor < ModelInfiniteQueryOptions < SimplifiedPlainResult < Schema , Model , T , Options > [ ] > > ,
231- ) : ModelInfiniteQueryResult < InfiniteData < SimplifiedPlainResult < Schema , Model , T , Options > [ ] > > ;
241+ useInfiniteFindMany < T extends FindManyArgs < Schema , Model , Options , { } , ExtResult > > (
242+ args ?: Accessor < SelectSubset < T , FindManyArgs < Schema , Model , Options , { } , ExtResult > > > ,
243+ options ?: Accessor < ModelInfiniteQueryOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > [ ] > > ,
244+ ) : ModelInfiniteQueryResult < InfiniteData < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > [ ] > > ;
232245
233- useCreate < T extends CreateArgs < Schema , Model , Options > > (
234- options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options > , T > > ,
235- ) : ModelMutationModelResult < Schema , Model , T , false , Options > ;
246+ useCreate < T extends CreateArgs < Schema , Model , Options , { } , ExtResult > > (
247+ options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > , T > > ,
248+ ) : ModelMutationModelResult < Schema , Model , T , false , Options , ExtResult > ;
236249
237250 useCreateMany < T extends CreateManyArgs < Schema , Model > > (
238251 options ?: Accessor < ModelMutationOptions < BatchResult , T > > ,
239252 ) : ModelMutationResult < BatchResult , T > ;
240253
241- useCreateManyAndReturn < T extends CreateManyAndReturnArgs < Schema , Model , Options > > (
242- options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options > [ ] , T > > ,
243- ) : ModelMutationModelResult < Schema , Model , T , true , Options > ;
254+ useCreateManyAndReturn < T extends CreateManyAndReturnArgs < Schema , Model , Options , { } , ExtResult > > (
255+ options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > [ ] , T > > ,
256+ ) : ModelMutationModelResult < Schema , Model , T , true , Options , ExtResult > ;
244257
245- useUpdate < T extends UpdateArgs < Schema , Model , Options > > (
246- options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options > , T > > ,
247- ) : ModelMutationModelResult < Schema , Model , T , false , Options > ;
258+ useUpdate < T extends UpdateArgs < Schema , Model , Options , { } , ExtResult > > (
259+ options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > , T > > ,
260+ ) : ModelMutationModelResult < Schema , Model , T , false , Options , ExtResult > ;
248261 useUpdateMany < T extends UpdateManyArgs < Schema , Model , Options > > (
249262 options ?: Accessor < ModelMutationOptions < BatchResult , T > > ,
250263 ) : ModelMutationResult < BatchResult , T > ;
251264
252- useUpdateManyAndReturn < T extends UpdateManyAndReturnArgs < Schema , Model , Options > > (
253- options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options > [ ] , T > > ,
254- ) : ModelMutationModelResult < Schema , Model , T , true , Options > ;
265+ useUpdateManyAndReturn < T extends UpdateManyAndReturnArgs < Schema , Model , Options , { } , ExtResult > > (
266+ options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > [ ] , T > > ,
267+ ) : ModelMutationModelResult < Schema , Model , T , true , Options , ExtResult > ;
255268
256- useUpsert < T extends UpsertArgs < Schema , Model , Options > > (
257- options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options > , T > > ,
258- ) : ModelMutationModelResult < Schema , Model , T , false , Options > ;
259- useDelete < T extends DeleteArgs < Schema , Model , Options > > (
260- options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options > , T > > ,
261- ) : ModelMutationModelResult < Schema , Model , T , false , Options > ;
269+ useUpsert < T extends UpsertArgs < Schema , Model , Options , { } , ExtResult > > (
270+ options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > , T > > ,
271+ ) : ModelMutationModelResult < Schema , Model , T , false , Options , ExtResult > ;
272+ useDelete < T extends DeleteArgs < Schema , Model , Options , { } , ExtResult > > (
273+ options ?: Accessor < ModelMutationOptions < SimplifiedPlainResult < Schema , Model , T , Options , ExtResult > , T > > ,
274+ ) : ModelMutationModelResult < Schema , Model , T , false , Options , ExtResult > ;
262275
263276 useDeleteMany < T extends DeleteManyArgs < Schema , Model , Options > > (
264277 options ?: Accessor < ModelMutationOptions < BatchResult , T > > ,
@@ -283,21 +296,36 @@ export type ModelQueryHooks<
283296
284297/**
285298 * Gets data query hooks for all models in the schema.
299+ *
300+ * Accepts either a raw `SchemaDef` or a `ClientContract` type (e.g. `typeof db`) as the generic parameter.
301+ * When a `ClientContract` type is provided, computed fields from plugins are reflected in the result types.
302+ *
303+ * @example
304+ * ```typescript
305+ * // Basic usage with schema
306+ * const client = useClientQueries(schema)
307+ *
308+ * // With server client type for computed field support
309+ * import type { DbType } from '~/server/db'
310+ * const client = useClientQueries<DbType>(schema)
311+ * ```
286312 */
287- export function useClientQueries < Schema extends SchemaDef , Options extends QueryOptions < Schema > = QueryOptions < Schema > > (
288- schema : Schema ,
313+ export function useClientQueries <
314+ SchemaOrClient extends SchemaDef | ClientContract < any , any , any , any , any > ,
315+ > (
316+ schema : InferSchema < SchemaOrClient > ,
289317 options ?: Accessor < QueryContext > ,
290- ) : ClientHooks < Schema , Options > {
318+ ) : ClientHooks < InferSchema < SchemaOrClient > , InferOptions < SchemaOrClient , InferSchema < SchemaOrClient > > , InferExtResult < SchemaOrClient > extends ExtResultBase < InferSchema < SchemaOrClient > > ? InferExtResult < SchemaOrClient > : { } > {
291319 const result = Object . keys ( schema . models ) . reduce (
292320 ( acc , model ) => {
293- ( acc as any ) [ lowerCaseFirst ( model ) ] = useModelQueries < Schema , GetModels < Schema > , Options > (
294- schema ,
295- model as GetModels < Schema > ,
321+ ( acc as any ) [ lowerCaseFirst ( model ) ] = useModelQueries (
322+ schema as any ,
323+ model as any ,
296324 options ,
297325 ) ;
298326 return acc ;
299327 } ,
300- { } as ClientHooks < Schema , Options > ,
328+ { } as any ,
301329 ) ;
302330
303331 const procedures = ( schema as any ) . procedures as Record < string , { mutation ?: boolean } > | undefined ;
@@ -347,7 +375,8 @@ export function useModelQueries<
347375 Schema extends SchemaDef ,
348376 Model extends GetModels < Schema > ,
349377 Options extends QueryOptions < Schema > ,
350- > ( schema : Schema , model : Model , rootOptions ?: Accessor < QueryContext > ) : ModelQueryHooks < Schema , Model , Options > {
378+ ExtResult extends ExtResultBase < Schema > = { } ,
379+ > ( schema : Schema , model : Model , rootOptions ?: Accessor < QueryContext > ) : ModelQueryHooks < Schema , Model , Options , ExtResult > {
351380 const modelDef = Object . values ( schema . models ) . find ( ( m ) => m . name . toLowerCase ( ) === model . toLowerCase ( ) ) ;
352381 if ( ! modelDef ) {
353382 throw new Error ( `Model "${ model } " not found in schema` ) ;
@@ -423,7 +452,7 @@ export function useModelQueries<
423452 useGroupBy : ( args : any , options ?: any ) => {
424453 return useInternalQuery ( schema , modelName , 'groupBy' , args , options ) ;
425454 } ,
426- } as unknown as ModelQueryHooks < Schema , Model , Options > ;
455+ } as unknown as ModelQueryHooks < Schema , Model , Options , ExtResult > ;
427456}
428457
429458export function useInternalQuery < TQueryFnData , TData > (
0 commit comments