diff --git a/packages/clients/tanstack-query/src/react.ts b/packages/clients/tanstack-query/src/react.ts index d9e0ca6d..15bfbb51 100644 --- a/packages/clients/tanstack-query/src/react.ts +++ b/packages/clients/tanstack-query/src/react.ts @@ -344,28 +344,28 @@ export function useModelQueries { - return useInternalQuery(schema, modelName, 'count', undefined, options); + useCount: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'count', args, options); }, - useSuspenseCount: (options?: any) => { - return useInternalSuspenseQuery(schema, modelName, 'count', undefined, options); + useSuspenseCount: (args: any, options?: any) => { + return useInternalSuspenseQuery(schema, modelName, 'count', args, options); }, - useAggregate: (options?: any) => { - return useInternalQuery(schema, modelName, 'aggregate', undefined, options); + useAggregate: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'aggregate', args, options); }, - useSuspenseAggregate: (options?: any) => { - return useInternalSuspenseQuery(schema, modelName, 'aggregate', undefined, options); + useSuspenseAggregate: (args: any, options?: any) => { + return useInternalSuspenseQuery(schema, modelName, 'aggregate', args, options); }, - useGroupBy: (options?: any) => { - return useInternalQuery(schema, modelName, 'groupBy', undefined, options); + useGroupBy: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'groupBy', args, options); }, - useSuspenseGroupBy: (options?: any) => { - return useInternalSuspenseQuery(schema, modelName, 'groupBy', undefined, options); + useSuspenseGroupBy: (args: any, options?: any) => { + return useInternalSuspenseQuery(schema, modelName, 'groupBy', args, options); }, } as ModelQueryHooks; } diff --git a/packages/clients/tanstack-query/src/svelte.ts b/packages/clients/tanstack-query/src/svelte.ts index 29004aee..33cf86bd 100644 --- a/packages/clients/tanstack-query/src/svelte.ts +++ b/packages/clients/tanstack-query/src/svelte.ts @@ -283,16 +283,16 @@ export function useModelQueries { - return useInternalQuery(schema, modelName, 'count', undefined, options); + useCount: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'count', args, options); }, - useAggregate: (options?: any) => { - return useInternalQuery(schema, modelName, 'aggregate', undefined, options); + useAggregate: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'aggregate', args, options); }, - useGroupBy: (options?: any) => { - return useInternalQuery(schema, modelName, 'groupBy', undefined, options); + useGroupBy: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'groupBy', args, options); }, } as ModelQueryHooks; } diff --git a/packages/clients/tanstack-query/src/utils/types.ts b/packages/clients/tanstack-query/src/utils/types.ts index 3c7fdc1d..ac7829e9 100644 --- a/packages/clients/tanstack-query/src/utils/types.ts +++ b/packages/clients/tanstack-query/src/utils/types.ts @@ -21,8 +21,12 @@ export const ORMWriteActions = [ export type ORMWriteActionType = (typeof ORMWriteActions)[number]; +type HooksOperationsIneligibleForDelegateModels = OperationsIneligibleForDelegateModels extends any + ? `use${Capitalize}` + : never; + export type TrimDelegateModelOperations< Schema extends SchemaDef, Model extends GetModels, T extends Record, -> = IsDelegateModel extends true ? Omit : T; +> = IsDelegateModel extends true ? Omit : T; diff --git a/packages/clients/tanstack-query/src/vue.ts b/packages/clients/tanstack-query/src/vue.ts index 77d3ab34..8239ce97 100644 --- a/packages/clients/tanstack-query/src/vue.ts +++ b/packages/clients/tanstack-query/src/vue.ts @@ -272,16 +272,16 @@ export function useModelQueries { - return useInternalQuery(schema, modelName, 'count', undefined, options); + useCount: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'count', args, options); }, - useAggregate: (options?: any) => { - return useInternalQuery(schema, modelName, 'aggregate', undefined, options); + useAggregate: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'aggregate', args, options); }, - useGroupBy: (options?: any) => { - return useInternalQuery(schema, modelName, 'groupBy', undefined, options); + useGroupBy: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'groupBy', args, options); }, } as ModelQueryHooks; } diff --git a/packages/clients/tanstack-query/test/react-typing-test.ts b/packages/clients/tanstack-query/test/react-typing-test.ts index b5814dbd..02d7a2e3 100644 --- a/packages/clients/tanstack-query/test/react-typing-test.ts +++ b/packages/clients/tanstack-query/test/react-typing-test.ts @@ -101,3 +101,9 @@ client.user.useDeleteMany().mutate({ where: { email: 'test@example.com' } }); function check(_value: unknown) { // noop } + +// @ts-expect-error delegate model +client.foo.useCreate(); + +client.foo.useUpdate(); +client.bar.useCreate(); diff --git a/packages/clients/tanstack-query/test/schemas/basic/input.ts b/packages/clients/tanstack-query/test/schemas/basic/input.ts index e7b6da66..755f3b2b 100644 --- a/packages/clients/tanstack-query/test/schemas/basic/input.ts +++ b/packages/clients/tanstack-query/test/schemas/basic/input.ts @@ -68,3 +68,43 @@ export type CategorySelect = $SelectInput<$Schema, "Category">; export type CategoryInclude = $IncludeInput<$Schema, "Category">; export type CategoryOmit = $OmitInput<$Schema, "Category">; export type CategoryGetPayload> = $SimplifiedModelResult<$Schema, "Category", Args>; +export type FooFindManyArgs = $FindManyArgs<$Schema, "Foo">; +export type FooFindUniqueArgs = $FindUniqueArgs<$Schema, "Foo">; +export type FooFindFirstArgs = $FindFirstArgs<$Schema, "Foo">; +export type FooCreateArgs = $CreateArgs<$Schema, "Foo">; +export type FooCreateManyArgs = $CreateManyArgs<$Schema, "Foo">; +export type FooCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Foo">; +export type FooUpdateArgs = $UpdateArgs<$Schema, "Foo">; +export type FooUpdateManyArgs = $UpdateManyArgs<$Schema, "Foo">; +export type FooUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Foo">; +export type FooUpsertArgs = $UpsertArgs<$Schema, "Foo">; +export type FooDeleteArgs = $DeleteArgs<$Schema, "Foo">; +export type FooDeleteManyArgs = $DeleteManyArgs<$Schema, "Foo">; +export type FooCountArgs = $CountArgs<$Schema, "Foo">; +export type FooAggregateArgs = $AggregateArgs<$Schema, "Foo">; +export type FooGroupByArgs = $GroupByArgs<$Schema, "Foo">; +export type FooWhereInput = $WhereInput<$Schema, "Foo">; +export type FooSelect = $SelectInput<$Schema, "Foo">; +export type FooInclude = $IncludeInput<$Schema, "Foo">; +export type FooOmit = $OmitInput<$Schema, "Foo">; +export type FooGetPayload> = $SimplifiedModelResult<$Schema, "Foo", Args>; +export type BarFindManyArgs = $FindManyArgs<$Schema, "Bar">; +export type BarFindUniqueArgs = $FindUniqueArgs<$Schema, "Bar">; +export type BarFindFirstArgs = $FindFirstArgs<$Schema, "Bar">; +export type BarCreateArgs = $CreateArgs<$Schema, "Bar">; +export type BarCreateManyArgs = $CreateManyArgs<$Schema, "Bar">; +export type BarCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Bar">; +export type BarUpdateArgs = $UpdateArgs<$Schema, "Bar">; +export type BarUpdateManyArgs = $UpdateManyArgs<$Schema, "Bar">; +export type BarUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Bar">; +export type BarUpsertArgs = $UpsertArgs<$Schema, "Bar">; +export type BarDeleteArgs = $DeleteArgs<$Schema, "Bar">; +export type BarDeleteManyArgs = $DeleteManyArgs<$Schema, "Bar">; +export type BarCountArgs = $CountArgs<$Schema, "Bar">; +export type BarAggregateArgs = $AggregateArgs<$Schema, "Bar">; +export type BarGroupByArgs = $GroupByArgs<$Schema, "Bar">; +export type BarWhereInput = $WhereInput<$Schema, "Bar">; +export type BarSelect = $SelectInput<$Schema, "Bar">; +export type BarInclude = $IncludeInput<$Schema, "Bar">; +export type BarOmit = $OmitInput<$Schema, "Bar">; +export type BarGetPayload> = $SimplifiedModelResult<$Schema, "Bar", Args>; diff --git a/packages/clients/tanstack-query/test/schemas/basic/models.ts b/packages/clients/tanstack-query/test/schemas/basic/models.ts index da3e5d00..a4bcedbb 100644 --- a/packages/clients/tanstack-query/test/schemas/basic/models.ts +++ b/packages/clients/tanstack-query/test/schemas/basic/models.ts @@ -10,3 +10,5 @@ import { type ModelResult as $ModelResult } from "@zenstackhq/orm"; export type User = $ModelResult<$Schema, "User">; export type Post = $ModelResult<$Schema, "Post">; export type Category = $ModelResult<$Schema, "Category">; +export type Foo = $ModelResult<$Schema, "Foo">; +export type Bar = $ModelResult<$Schema, "Bar">; diff --git a/packages/clients/tanstack-query/test/schemas/basic/schema-lite.ts b/packages/clients/tanstack-query/test/schemas/basic/schema-lite.ts index 347ccbe1..ea44666f 100644 --- a/packages/clients/tanstack-query/test/schemas/basic/schema-lite.ts +++ b/packages/clients/tanstack-query/test/schemas/basic/schema-lite.ts @@ -116,6 +116,54 @@ export const schema = { id: { type: "String" }, name: { type: "String" } } + }, + Foo: { + name: "Foo", + fields: { + id: { + name: "id", + type: "String", + id: true, + default: ExpressionUtils.call("cuid") + }, + type: { + name: "type", + type: "String", + isDiscriminator: true + } + }, + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + }, + isDelegate: true, + subModels: ["Bar"] + }, + Bar: { + name: "Bar", + baseModel: "Foo", + fields: { + id: { + name: "id", + type: "String", + id: true, + default: ExpressionUtils.call("cuid") + }, + type: { + name: "type", + type: "String", + originModel: "Foo", + isDiscriminator: true + }, + title: { + name: "title", + type: "String" + } + }, + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } } }, authType: "User", diff --git a/packages/clients/tanstack-query/test/schemas/basic/schema.zmodel b/packages/clients/tanstack-query/test/schemas/basic/schema.zmodel index 039051df..d274e95c 100644 --- a/packages/clients/tanstack-query/test/schemas/basic/schema.zmodel +++ b/packages/clients/tanstack-query/test/schemas/basic/schema.zmodel @@ -22,4 +22,14 @@ model Category { id String @id @default(cuid()) name String @unique posts Post[] -} \ No newline at end of file +} + +model Foo { + id String @id @default(cuid()) + type String + @@delegate(type) +} + +model Bar extends Foo { + title String +} diff --git a/packages/clients/tanstack-query/test/svelte-typing-test.ts b/packages/clients/tanstack-query/test/svelte-typing-test.ts index b39c1566..62735112 100644 --- a/packages/clients/tanstack-query/test/svelte-typing-test.ts +++ b/packages/clients/tanstack-query/test/svelte-typing-test.ts @@ -98,3 +98,9 @@ get(client.user.useDeleteMany()).mutate({ where: { email: 'test@example.com' } } function check(_value: unknown) { // noop } + +// @ts-expect-error delegate model +client.foo.useCreate(); + +client.foo.useUpdate(); +client.bar.useCreate(); diff --git a/packages/clients/tanstack-query/test/vue-typing-test.ts b/packages/clients/tanstack-query/test/vue-typing-test.ts index 5d99e318..07b980c5 100644 --- a/packages/clients/tanstack-query/test/vue-typing-test.ts +++ b/packages/clients/tanstack-query/test/vue-typing-test.ts @@ -99,3 +99,9 @@ client.user.useDeleteMany().mutate({ where: { email: 'test@example.com' } }); function check(_value: unknown) { // noop } + +// @ts-expect-error delegate model +client.foo.useCreate(); + +client.foo.useUpdate(); +client.bar.useCreate();