zenstack-trpc 0.1.4 → 0.1.5
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/README.md +90 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/router-generator.d.ts +15 -7
- package/dist/router-generator.d.ts.map +1 -1
- package/dist/typed-client.d.ts +240 -0
- package/dist/typed-client.d.ts.map +1 -0
- package/dist/typed-client.js +69 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -133,13 +133,102 @@ const appRouter = createZenStackRouter(schema, t);
|
|
|
133
133
|
|
|
134
134
|
### `TypedRouterCaller<SchemaType>`
|
|
135
135
|
|
|
136
|
-
Type helper for server-side caller with full type inference.
|
|
136
|
+
Type helper for server-side caller with full type inference, including dynamic `include`/`select` result typing.
|
|
137
137
|
|
|
138
138
|
```typescript
|
|
139
139
|
import type { TypedRouterCaller } from "zenstack-trpc";
|
|
140
140
|
import type { SchemaType } from "./zenstack/schema.js";
|
|
141
141
|
|
|
142
142
|
const caller = appRouter.createCaller({ db }) as TypedRouterCaller<SchemaType>;
|
|
143
|
+
|
|
144
|
+
// Return type dynamically includes the posts relation!
|
|
145
|
+
const usersWithPosts = await caller.user.findMany({ include: { posts: true } });
|
|
146
|
+
// Type: (User & { posts: Post[] })[]
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### `withZenStackTypes<SchemaType>()`
|
|
150
|
+
|
|
151
|
+
Utility function that adds full `include`/`select` type inference to any tRPC client. This solves tRPC's limitation where generic type information is lost during type inference.
|
|
152
|
+
|
|
153
|
+
Works with both vanilla tRPC clients and React hooks:
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
import { createTRPCClient, httpBatchLink } from "@trpc/client";
|
|
157
|
+
import { createTRPCReact } from "@trpc/react-query";
|
|
158
|
+
import { withZenStackTypes } from "zenstack-trpc";
|
|
159
|
+
import type { AppRouter } from "./server/trpc.js";
|
|
160
|
+
import type { SchemaType } from "./zenstack/schema.js";
|
|
161
|
+
|
|
162
|
+
// For vanilla tRPC client:
|
|
163
|
+
const client = withZenStackTypes<SchemaType>()(
|
|
164
|
+
createTRPCClient<AppRouter>({
|
|
165
|
+
links: [httpBatchLink({ url: "http://localhost:3000/trpc" })],
|
|
166
|
+
})
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
// Now includes are fully typed!
|
|
170
|
+
const usersWithPosts = await client.user.findMany.query({
|
|
171
|
+
include: { posts: true }
|
|
172
|
+
});
|
|
173
|
+
// Type: (User & { posts: Post[] })[]
|
|
174
|
+
|
|
175
|
+
// For tRPC React hooks:
|
|
176
|
+
const trpc = withZenStackTypes<SchemaType>()(
|
|
177
|
+
createTRPCReact<AppRouter>()
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
// In your component:
|
|
181
|
+
const { data } = trpc.user.findMany.useQuery({
|
|
182
|
+
include: { posts: true }
|
|
183
|
+
});
|
|
184
|
+
// data is typed as (User & { posts: Post[] })[] | undefined
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
You can also use the type helpers directly if you prefer manual casting:
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
import type { TypedTRPCClient, TypedTRPCReact } from "zenstack-trpc";
|
|
191
|
+
|
|
192
|
+
const client = _client as unknown as TypedTRPCClient<SchemaType>;
|
|
193
|
+
const trpc = _trpc as unknown as TypedTRPCReact<SchemaType>;
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Nested Namespaces (Merged Routers)
|
|
197
|
+
|
|
198
|
+
When your ZenStack router is merged under a namespace in your main router, use `WithZenStackTypes` or `withNestedZenStackTypes()`:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// If your router structure is:
|
|
202
|
+
// appRouter = t.router({
|
|
203
|
+
// db: zenStackRouter, // ZenStack models under 'db' namespace
|
|
204
|
+
// auth: authRouter,
|
|
205
|
+
// })
|
|
206
|
+
|
|
207
|
+
import { createTRPCReact } from "@trpc/react-query";
|
|
208
|
+
import type { AppRouter } from "./server/trpc.js";
|
|
209
|
+
import type { SchemaType } from "./zenstack/schema.js";
|
|
210
|
+
import type { WithZenStackTypes } from "zenstack-trpc";
|
|
211
|
+
|
|
212
|
+
const _trpc = createTRPCReact<AppRouter>();
|
|
213
|
+
|
|
214
|
+
// Option 1: Type helper for manual casting
|
|
215
|
+
type TypedTRPC = Omit<typeof _trpc, 'db'> & {
|
|
216
|
+
db: WithZenStackTypes<SchemaType, 'react'>
|
|
217
|
+
};
|
|
218
|
+
export const trpc = _trpc as unknown as TypedTRPC;
|
|
219
|
+
|
|
220
|
+
// Option 2: Use the helper functions
|
|
221
|
+
import { withNestedZenStackReact, withNestedZenStackClient } from "zenstack-trpc";
|
|
222
|
+
|
|
223
|
+
// For React hooks:
|
|
224
|
+
export const trpc = withNestedZenStackReact<SchemaType, typeof _trpc, 'db'>('db')(_trpc);
|
|
225
|
+
|
|
226
|
+
// For vanilla tRPC client:
|
|
227
|
+
// export const client = withNestedZenStackClient<SchemaType, typeof _client, 'db'>('db')(_client);
|
|
228
|
+
|
|
229
|
+
// Now you can use:
|
|
230
|
+
// trpc.db.user.findMany.useQuery({ include: { posts: true } }) // fully typed
|
|
231
|
+
// trpc.auth.login.useMutation() // other routers unaffected
|
|
143
232
|
```
|
|
144
233
|
|
|
145
234
|
### Zod Schema Access
|
package/dist/index.d.ts
CHANGED
|
@@ -27,5 +27,6 @@
|
|
|
27
27
|
* @packageDocumentation
|
|
28
28
|
*/
|
|
29
29
|
export { createZenStackRouter, type ZenStackRouter, type ZenStackRouterRecord, type TRPCModelProcedures, type TypedRouterCaller, type TypedModelProcedures, type TRPCInstance, } from "./router-generator.js";
|
|
30
|
+
export { withZenStackTypes, withNestedZenStackReact, withNestedZenStackClient, type WithZenStackTypes, type TypedTRPCClient, type TypedClientModelProcedures, type TypedTRPCReact, type TypedReactModelHooks, } from "./typed-client.js";
|
|
30
31
|
export { createModelSchemas, createWhereSchema, createCreateDataSchema, createUpdateDataSchema, createUniqueWhereSchema, createSelectSchema, createIncludeSchema, createOrderBySchema, } from "./zod-schemas.js";
|
|
31
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAEL,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EAExB,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAE/B,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -28,5 +28,9 @@
|
|
|
28
28
|
*/
|
|
29
29
|
// Router generator and types
|
|
30
30
|
export { createZenStackRouter, } from "./router-generator.js";
|
|
31
|
+
// Typed client helpers for full include/select inference
|
|
32
|
+
export {
|
|
33
|
+
// Converter utilities
|
|
34
|
+
withZenStackTypes, withNestedZenStackReact, withNestedZenStackClient, } from "./typed-client.js";
|
|
31
35
|
// Zod schema generators (for advanced usage)
|
|
32
36
|
export { createModelSchemas, createWhereSchema, createCreateDataSchema, createUpdateDataSchema, createUniqueWhereSchema, createSelectSchema, createIncludeSchema, createOrderBySchema, } from "./zod-schemas.js";
|
|
@@ -158,7 +158,7 @@ type TypedQueryProcedure<TInput, TOutput> = {
|
|
|
158
158
|
type: 'query';
|
|
159
159
|
meta: unknown;
|
|
160
160
|
experimental_caller: boolean;
|
|
161
|
-
inputs:
|
|
161
|
+
inputs: any[];
|
|
162
162
|
};
|
|
163
163
|
meta: unknown;
|
|
164
164
|
(opts: unknown): Promise<TOutput>;
|
|
@@ -177,7 +177,7 @@ type TypedMutationProcedure<TInput, TOutput> = {
|
|
|
177
177
|
type: 'mutation';
|
|
178
178
|
meta: unknown;
|
|
179
179
|
experimental_caller: boolean;
|
|
180
|
-
inputs:
|
|
180
|
+
inputs: any[];
|
|
181
181
|
};
|
|
182
182
|
meta: unknown;
|
|
183
183
|
(opts: unknown): Promise<TOutput>;
|
|
@@ -186,7 +186,7 @@ type TypedMutationProcedure<TInput, TOutput> = {
|
|
|
186
186
|
* Type for a single model's tRPC procedures (for client inference)
|
|
187
187
|
* This maps each operation to its tRPC procedure type with proper input/output
|
|
188
188
|
*/
|
|
189
|
-
export type TRPCModelProcedures<Schema extends SchemaDef, Model extends GetModels<Schema
|
|
189
|
+
export type TRPCModelProcedures<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
190
190
|
findMany: TypedQueryProcedure<FindManyArgs<Schema, Model> | undefined, SimplifiedPlainResult<Schema, Model, {}>[]>;
|
|
191
191
|
findUnique: TypedQueryProcedure<FindUniqueArgs<Schema, Model>, SimplifiedPlainResult<Schema, Model, {}> | null>;
|
|
192
192
|
findFirst: TypedQueryProcedure<FindFirstArgs<Schema, Model> | undefined, SimplifiedPlainResult<Schema, Model, {}> | null>;
|
|
@@ -210,8 +210,8 @@ export type TRPCModelProcedures<Schema extends SchemaDef, Model extends GetModel
|
|
|
210
210
|
/**
|
|
211
211
|
* Type for the full router record that tRPC uses for inference
|
|
212
212
|
*/
|
|
213
|
-
export type ZenStackRouterRecord<Schema extends SchemaDef
|
|
214
|
-
[K in GetModels<Schema> as Uncapitalize<K>]: TRPCModelProcedures<Schema, K
|
|
213
|
+
export type ZenStackRouterRecord<Schema extends SchemaDef> = {
|
|
214
|
+
[K in GetModels<Schema> as Uncapitalize<K>]: TRPCModelProcedures<Schema, K>;
|
|
215
215
|
};
|
|
216
216
|
/**
|
|
217
217
|
* The typed router type that clients can use for proper inference
|
|
@@ -225,10 +225,18 @@ export type ZenStackRouter<Schema extends SchemaDef, TContext = any> = {
|
|
|
225
225
|
errorShape: any;
|
|
226
226
|
transformer: false;
|
|
227
227
|
};
|
|
228
|
+
transformer: any;
|
|
229
|
+
errorFormatter: any;
|
|
230
|
+
allowOutsideOfServer: boolean;
|
|
231
|
+
isServer: boolean;
|
|
232
|
+
isDev: boolean;
|
|
228
233
|
};
|
|
229
|
-
record: ZenStackRouterRecord<Schema
|
|
234
|
+
record: ZenStackRouterRecord<Schema>;
|
|
235
|
+
router: true;
|
|
236
|
+
procedures: ZenStackRouterRecord<Schema>;
|
|
237
|
+
lazy: {};
|
|
230
238
|
};
|
|
231
239
|
createCaller: (ctx: TContext) => TypedRouterCaller<Schema>;
|
|
232
|
-
}
|
|
240
|
+
} & ZenStackRouterRecord<Schema>;
|
|
233
241
|
export {};
|
|
234
242
|
//# sourceMappingURL=router-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-generator.d.ts","sourceRoot":"","sources":["../src/router-generator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"router-generator.d.ts","sourceRoot":"","sources":["../src/router-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed tRPC client helpers for full include/select type inference.
|
|
3
|
+
*
|
|
4
|
+
* tRPC's standard type inference loses generic type information for procedure
|
|
5
|
+
* input/output types. This module provides type utilities that restore full
|
|
6
|
+
* dynamic typing based on include/select options.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { createTRPCClient } from "@trpc/client";
|
|
11
|
+
* import { createTRPCReact } from "@trpc/react-query";
|
|
12
|
+
* import { withZenStackTypes } from "zenstack-trpc";
|
|
13
|
+
* import type { AppRouter } from "./server/trpc.js";
|
|
14
|
+
* import type { SchemaType } from "./zenstack/schema.js";
|
|
15
|
+
*
|
|
16
|
+
* // Vanilla client
|
|
17
|
+
* const client = withZenStackTypes<SchemaType>()(
|
|
18
|
+
* createTRPCClient<AppRouter>({ links: [...] })
|
|
19
|
+
* );
|
|
20
|
+
*
|
|
21
|
+
* // React hooks
|
|
22
|
+
* const trpc = withZenStackTypes<SchemaType>()(
|
|
23
|
+
* createTRPCReact<AppRouter>()
|
|
24
|
+
* );
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import type { SchemaDef, GetModels } from "@zenstackhq/orm/schema";
|
|
28
|
+
import type { FindManyArgs, FindUniqueArgs, FindFirstArgs, CreateArgs, CreateManyArgs, UpdateArgs, UpdateManyArgs, UpsertArgs, DeleteArgs, DeleteManyArgs, CountArgs, AggregateArgs, GroupByArgs, SimplifiedPlainResult } from "@zenstackhq/orm";
|
|
29
|
+
/** Convert model names to lowercase */
|
|
30
|
+
type Uncapitalize<S extends string> = S extends `${infer F}${infer R}` ? `${Lowercase<F>}${R}` : S;
|
|
31
|
+
/** Infer result type with optional array wrapping */
|
|
32
|
+
type Result<S extends SchemaDef, M extends GetModels<S>, T, D, Arr extends boolean = false> = Arr extends true ? (SimplifiedPlainResult<S, M, T> extends never ? D : SimplifiedPlainResult<S, M, T>[]) : (SimplifiedPlainResult<S, M, T> extends never ? D : SimplifiedPlainResult<S, M, T>);
|
|
33
|
+
/** Default result type for a model */
|
|
34
|
+
type DefaultResult<S extends SchemaDef, M extends GetModels<S>> = SimplifiedPlainResult<S, M, {}>;
|
|
35
|
+
/** Maps operation names to their ZenStack Args types */
|
|
36
|
+
type OperationArgs<S extends SchemaDef, M extends GetModels<S>> = {
|
|
37
|
+
findMany: FindManyArgs<S, M>;
|
|
38
|
+
findUnique: FindUniqueArgs<S, M>;
|
|
39
|
+
findFirst: FindFirstArgs<S, M>;
|
|
40
|
+
create: CreateArgs<S, M>;
|
|
41
|
+
createMany: CreateManyArgs<S, M>;
|
|
42
|
+
update: UpdateArgs<S, M>;
|
|
43
|
+
updateMany: UpdateManyArgs<S, M>;
|
|
44
|
+
upsert: UpsertArgs<S, M>;
|
|
45
|
+
delete: DeleteArgs<S, M>;
|
|
46
|
+
deleteMany: DeleteManyArgs<S, M>;
|
|
47
|
+
count: CountArgs<S, M>;
|
|
48
|
+
aggregate: AggregateArgs<S, M>;
|
|
49
|
+
groupBy: GroupByArgs<S, M>;
|
|
50
|
+
};
|
|
51
|
+
/** Operations that return arrays */
|
|
52
|
+
type ArrayOps = 'findMany' | 'groupBy';
|
|
53
|
+
/** Operations that return { count: number } */
|
|
54
|
+
type CountResultOps = 'createMany' | 'updateMany' | 'deleteMany';
|
|
55
|
+
/** Operations that return number */
|
|
56
|
+
type NumberResultOps = 'count';
|
|
57
|
+
/** Operations that return any */
|
|
58
|
+
type AnyResultOps = 'aggregate';
|
|
59
|
+
/** Operations that return nullable results */
|
|
60
|
+
type NullableOps = 'findUnique' | 'findFirst';
|
|
61
|
+
/** Mutations (vs queries) */
|
|
62
|
+
type MutationOps = 'create' | 'createMany' | 'update' | 'updateMany' | 'upsert' | 'delete' | 'deleteMany';
|
|
63
|
+
/** Query procedure - infers result from input */
|
|
64
|
+
interface DynamicQuery<S extends SchemaDef, M extends GetModels<S>, Args, Default, Arr extends boolean> {
|
|
65
|
+
query<T extends Args>(input: T): Promise<Result<S, M, T, Default, Arr>>;
|
|
66
|
+
query(input?: undefined): Promise<Default>;
|
|
67
|
+
}
|
|
68
|
+
/** Simple query - fixed result type */
|
|
69
|
+
interface SimpleQuery<Args, R> {
|
|
70
|
+
query(input?: Args): Promise<R>;
|
|
71
|
+
}
|
|
72
|
+
/** Mutation procedure - infers result from input */
|
|
73
|
+
interface DynamicMutation<S extends SchemaDef, M extends GetModels<S>, Args, Default> {
|
|
74
|
+
mutate<T extends Args>(input: T): Promise<Result<S, M, T, Default>>;
|
|
75
|
+
}
|
|
76
|
+
/** Simple mutation - fixed result type */
|
|
77
|
+
interface SimpleMutation<Args, R> {
|
|
78
|
+
mutate(input: Args): Promise<R>;
|
|
79
|
+
}
|
|
80
|
+
/** Build client procedure type for an operation */
|
|
81
|
+
type ClientProcedure<S extends SchemaDef, M extends GetModels<S>, Op extends keyof OperationArgs<S, M>> = Op extends MutationOps ? Op extends CountResultOps ? SimpleMutation<OperationArgs<S, M>[Op], {
|
|
82
|
+
count: number;
|
|
83
|
+
}> : DynamicMutation<S, M, OperationArgs<S, M>[Op], DefaultResult<S, M>> : Op extends NumberResultOps ? SimpleQuery<OperationArgs<S, M>[Op], number> : Op extends AnyResultOps ? SimpleQuery<OperationArgs<S, M>[Op], any> : Op extends 'groupBy' ? SimpleQuery<OperationArgs<S, M>[Op], any[]> : DynamicQuery<S, M, OperationArgs<S, M>[Op], Op extends NullableOps ? DefaultResult<S, M> | null : Op extends ArrayOps ? DefaultResult<S, M>[] : DefaultResult<S, M>, Op extends ArrayOps ? true : false>;
|
|
84
|
+
/** All client procedures for a model */
|
|
85
|
+
export type TypedClientModelProcedures<S extends SchemaDef, M extends GetModels<S>> = {
|
|
86
|
+
[Op in keyof OperationArgs<S, M>]: ClientProcedure<S, M, Op>;
|
|
87
|
+
};
|
|
88
|
+
/** Base query result shape */
|
|
89
|
+
type QueryResult<T> = {
|
|
90
|
+
data: T | undefined;
|
|
91
|
+
error: Error | null;
|
|
92
|
+
isLoading: boolean;
|
|
93
|
+
isPending: boolean;
|
|
94
|
+
isError: boolean;
|
|
95
|
+
isSuccess: boolean;
|
|
96
|
+
refetch: () => Promise<unknown>;
|
|
97
|
+
[k: string]: unknown;
|
|
98
|
+
};
|
|
99
|
+
/** Base mutation result shape */
|
|
100
|
+
type MutationResult<T, V> = {
|
|
101
|
+
data: T | undefined;
|
|
102
|
+
error: Error | null;
|
|
103
|
+
isLoading: boolean;
|
|
104
|
+
isPending: boolean;
|
|
105
|
+
isError: boolean;
|
|
106
|
+
isSuccess: boolean;
|
|
107
|
+
mutate: (v: V, o?: {
|
|
108
|
+
onSuccess?: (d: T) => void;
|
|
109
|
+
onError?: (e: Error) => void;
|
|
110
|
+
onSettled?: () => void;
|
|
111
|
+
}) => void;
|
|
112
|
+
mutateAsync: (v: V, o?: {
|
|
113
|
+
onSuccess?: (d: T) => void;
|
|
114
|
+
onError?: (e: Error) => void;
|
|
115
|
+
onSettled?: () => void;
|
|
116
|
+
}) => Promise<T>;
|
|
117
|
+
[k: string]: unknown;
|
|
118
|
+
};
|
|
119
|
+
/** Query hook - infers result from input */
|
|
120
|
+
interface DynamicQueryHook<S extends SchemaDef, M extends GetModels<S>, Args, Default, Arr extends boolean> {
|
|
121
|
+
useQuery<T extends Args>(input: T, opts?: {
|
|
122
|
+
enabled?: boolean;
|
|
123
|
+
[k: string]: unknown;
|
|
124
|
+
}): QueryResult<Result<S, M, T, Default, Arr>>;
|
|
125
|
+
useQuery(input?: undefined, opts?: {
|
|
126
|
+
enabled?: boolean;
|
|
127
|
+
[k: string]: unknown;
|
|
128
|
+
}): QueryResult<Default>;
|
|
129
|
+
}
|
|
130
|
+
/** Simple query hook - fixed result type */
|
|
131
|
+
interface SimpleQueryHook<Args, R> {
|
|
132
|
+
useQuery(input?: Args, opts?: {
|
|
133
|
+
enabled?: boolean;
|
|
134
|
+
[k: string]: unknown;
|
|
135
|
+
}): QueryResult<R>;
|
|
136
|
+
}
|
|
137
|
+
/** Mutation hook - infers result from input */
|
|
138
|
+
interface DynamicMutationHook<S extends SchemaDef, M extends GetModels<S>, Args, Default> {
|
|
139
|
+
useMutation(opts?: {
|
|
140
|
+
onSuccess?: (d: any) => void;
|
|
141
|
+
onError?: (e: Error) => void;
|
|
142
|
+
onSettled?: () => void;
|
|
143
|
+
[k: string]: unknown;
|
|
144
|
+
}): {
|
|
145
|
+
mutate: <T extends Args>(input: T, o?: {
|
|
146
|
+
onSuccess?: (d: Result<S, M, T, Default>) => void;
|
|
147
|
+
onError?: (e: Error) => void;
|
|
148
|
+
onSettled?: () => void;
|
|
149
|
+
}) => void;
|
|
150
|
+
mutateAsync: <T extends Args>(input: T, o?: {
|
|
151
|
+
onSuccess?: (d: Result<S, M, T, Default>) => void;
|
|
152
|
+
onError?: (e: Error) => void;
|
|
153
|
+
onSettled?: () => void;
|
|
154
|
+
}) => Promise<Result<S, M, T, Default>>;
|
|
155
|
+
data: Default | undefined;
|
|
156
|
+
error: Error | null;
|
|
157
|
+
isLoading: boolean;
|
|
158
|
+
isPending: boolean;
|
|
159
|
+
isError: boolean;
|
|
160
|
+
isSuccess: boolean;
|
|
161
|
+
[k: string]: unknown;
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/** Simple mutation hook - fixed result type */
|
|
165
|
+
interface SimpleMutationHook<Args, R> {
|
|
166
|
+
useMutation(opts?: {
|
|
167
|
+
onSuccess?: (d: R) => void;
|
|
168
|
+
onError?: (e: Error) => void;
|
|
169
|
+
onSettled?: () => void;
|
|
170
|
+
[k: string]: unknown;
|
|
171
|
+
}): MutationResult<R, Args>;
|
|
172
|
+
}
|
|
173
|
+
/** Build React hook type for an operation */
|
|
174
|
+
type ReactHook<S extends SchemaDef, M extends GetModels<S>, Op extends keyof OperationArgs<S, M>> = Op extends MutationOps ? Op extends CountResultOps ? SimpleMutationHook<OperationArgs<S, M>[Op], {
|
|
175
|
+
count: number;
|
|
176
|
+
}> : DynamicMutationHook<S, M, OperationArgs<S, M>[Op], DefaultResult<S, M>> : Op extends NumberResultOps ? SimpleQueryHook<OperationArgs<S, M>[Op], number> : Op extends AnyResultOps ? SimpleQueryHook<OperationArgs<S, M>[Op], any> : Op extends 'groupBy' ? SimpleQueryHook<OperationArgs<S, M>[Op], any[]> : DynamicQueryHook<S, M, OperationArgs<S, M>[Op], Op extends NullableOps ? DefaultResult<S, M> | null : Op extends ArrayOps ? DefaultResult<S, M>[] : DefaultResult<S, M>, Op extends ArrayOps ? true : false>;
|
|
177
|
+
/** All React hooks for a model */
|
|
178
|
+
export type TypedReactModelHooks<S extends SchemaDef, M extends GetModels<S>> = {
|
|
179
|
+
[Op in keyof OperationArgs<S, M>]: ReactHook<S, M, Op>;
|
|
180
|
+
};
|
|
181
|
+
/** Typed vanilla tRPC client with full include/select type inference */
|
|
182
|
+
export type TypedTRPCClient<S extends SchemaDef> = {
|
|
183
|
+
[K in GetModels<S> as Uncapitalize<K>]: TypedClientModelProcedures<S, K>;
|
|
184
|
+
};
|
|
185
|
+
/** Typed tRPC React hooks with full include/select type inference */
|
|
186
|
+
export type TypedTRPCReact<S extends SchemaDef> = {
|
|
187
|
+
[K in GetModels<S> as Uncapitalize<K>]: TypedReactModelHooks<S, K>;
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Converts a tRPC client or React hooks instance to a fully typed version
|
|
191
|
+
* with include/select inference. This is a type-only transformation.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* // For vanilla tRPC client:
|
|
196
|
+
* const client = withZenStackTypes<SchemaType>()(createTRPCClient<AppRouter>({ links: [...] }));
|
|
197
|
+
*
|
|
198
|
+
* // For tRPC React hooks:
|
|
199
|
+
* const trpc = withZenStackTypes<SchemaType>()(createTRPCReact<AppRouter>());
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
export declare function withZenStackTypes<S extends SchemaDef>(): <T>(client: T) => T extends {
|
|
203
|
+
useQuery: any;
|
|
204
|
+
} | {
|
|
205
|
+
useMutation: any;
|
|
206
|
+
} ? TypedTRPCReact<S> : T extends {
|
|
207
|
+
query: any;
|
|
208
|
+
} | {
|
|
209
|
+
mutate: any;
|
|
210
|
+
} ? TypedTRPCClient<S> : TypedTRPCClient<S> & TypedTRPCReact<S>;
|
|
211
|
+
/**
|
|
212
|
+
* Type utility to add ZenStack types to a nested namespace within a tRPC client.
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```typescript
|
|
216
|
+
* type TypedTRPC = Omit<typeof _trpc, 'db'> & { db: WithZenStackTypes<SchemaType, 'react'> };
|
|
217
|
+
* export const trpc = _trpc as unknown as TypedTRPC;
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
export type WithZenStackTypes<S extends SchemaDef, Mode extends 'client' | 'react' = 'react'> = Mode extends 'react' ? TypedTRPCReact<S> : TypedTRPCClient<S>;
|
|
221
|
+
/**
|
|
222
|
+
* Helper function to type a nested namespace within your tRPC React hooks.
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```typescript
|
|
226
|
+
* export const trpc = withNestedZenStackReact<SchemaType, typeof _trpc, 'db'>('db')(_trpc);
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
export declare function withNestedZenStackReact<S extends SchemaDef, TClient, TKey extends string>(_namespace: TKey): (client: TClient) => Omit<TClient, TKey> & { [K in TKey]: TypedTRPCReact<S>; };
|
|
230
|
+
/**
|
|
231
|
+
* Helper function to type a nested namespace within your vanilla tRPC client.
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```typescript
|
|
235
|
+
* export const client = withNestedZenStackClient<SchemaType, typeof _client, 'db'>('db')(_client);
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
export declare function withNestedZenStackClient<S extends SchemaDef, TClient, TKey extends string>(_namespace: TKey): (client: TClient) => Omit<TClient, TKey> & { [K in TKey]: TypedTRPCClient<S>; };
|
|
239
|
+
export {};
|
|
240
|
+
//# sourceMappingURL=typed-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-client.d.ts","sourceRoot":"","sources":["../src/typed-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed tRPC client helpers for full include/select type inference.
|
|
3
|
+
*
|
|
4
|
+
* tRPC's standard type inference loses generic type information for procedure
|
|
5
|
+
* input/output types. This module provides type utilities that restore full
|
|
6
|
+
* dynamic typing based on include/select options.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { createTRPCClient } from "@trpc/client";
|
|
11
|
+
* import { createTRPCReact } from "@trpc/react-query";
|
|
12
|
+
* import { withZenStackTypes } from "zenstack-trpc";
|
|
13
|
+
* import type { AppRouter } from "./server/trpc.js";
|
|
14
|
+
* import type { SchemaType } from "./zenstack/schema.js";
|
|
15
|
+
*
|
|
16
|
+
* // Vanilla client
|
|
17
|
+
* const client = withZenStackTypes<SchemaType>()(
|
|
18
|
+
* createTRPCClient<AppRouter>({ links: [...] })
|
|
19
|
+
* );
|
|
20
|
+
*
|
|
21
|
+
* // React hooks
|
|
22
|
+
* const trpc = withZenStackTypes<SchemaType>()(
|
|
23
|
+
* createTRPCReact<AppRouter>()
|
|
24
|
+
* );
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Type Converter Utilities
|
|
29
|
+
// =============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Converts a tRPC client or React hooks instance to a fully typed version
|
|
32
|
+
* with include/select inference. This is a type-only transformation.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // For vanilla tRPC client:
|
|
37
|
+
* const client = withZenStackTypes<SchemaType>()(createTRPCClient<AppRouter>({ links: [...] }));
|
|
38
|
+
*
|
|
39
|
+
* // For tRPC React hooks:
|
|
40
|
+
* const trpc = withZenStackTypes<SchemaType>()(createTRPCReact<AppRouter>());
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export function withZenStackTypes() {
|
|
44
|
+
return (client) => {
|
|
45
|
+
return client;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Helper function to type a nested namespace within your tRPC React hooks.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* export const trpc = withNestedZenStackReact<SchemaType, typeof _trpc, 'db'>('db')(_trpc);
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export function withNestedZenStackReact(_namespace) {
|
|
57
|
+
return (client) => client;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Helper function to type a nested namespace within your vanilla tRPC client.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* export const client = withNestedZenStackClient<SchemaType, typeof _client, 'db'>('db')(_client);
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export function withNestedZenStackClient(_namespace) {
|
|
68
|
+
return (client) => client;
|
|
69
|
+
}
|