zenstack-trpc 0.1.0 → 0.1.1
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 +42 -162
- package/dist/index.d.ts +8 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -9
- package/dist/router-generator.d.ts +27 -157
- package/dist/router-generator.d.ts.map +1 -1
- package/dist/router-generator.js +8 -16
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,16 +9,12 @@ Auto-generate fully type-safe tRPC routers from [ZenStack V3](https://zenstack.d
|
|
|
9
9
|
- **Dynamic result typing** - `include`/`select` options reflected in return types
|
|
10
10
|
- **Zod validation** - Runtime input validation built-in
|
|
11
11
|
- **All CRUD operations** - findMany, findUnique, create, update, delete, and more
|
|
12
|
-
- **Standard tRPC** - Works with all tRPC adapters
|
|
12
|
+
- **Standard tRPC** - Works with all tRPC adapters and clients
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
17
|
npm install zenstack-trpc @trpc/server @zenstackhq/orm zod
|
|
18
|
-
# or
|
|
19
|
-
pnpm add zenstack-trpc @trpc/server @zenstackhq/orm zod
|
|
20
|
-
# or
|
|
21
|
-
yarn add zenstack-trpc @trpc/server @zenstackhq/orm zod
|
|
22
18
|
```
|
|
23
19
|
|
|
24
20
|
## Quick Start
|
|
@@ -57,92 +53,87 @@ npx zenstack generate
|
|
|
57
53
|
### 3. Create the tRPC router
|
|
58
54
|
|
|
59
55
|
```typescript
|
|
56
|
+
// server/trpc.ts
|
|
57
|
+
import { initTRPC } from "@trpc/server";
|
|
60
58
|
import { ZenStackClient } from "@zenstackhq/orm";
|
|
61
|
-
import { schema
|
|
62
|
-
import {
|
|
63
|
-
createTRPC,
|
|
64
|
-
createZenStackRouter,
|
|
65
|
-
type Context,
|
|
66
|
-
type TypedRouterCaller,
|
|
67
|
-
} from "zenstack-trpc";
|
|
59
|
+
import { schema } from "./zenstack/schema.js";
|
|
60
|
+
import { createZenStackRouter } from "zenstack-trpc";
|
|
68
61
|
|
|
69
62
|
// Create your database client
|
|
70
63
|
const db = new ZenStackClient(schema, {
|
|
71
64
|
dialect: yourDialect, // Kysely dialect (SQLite, PostgreSQL, MySQL, etc.)
|
|
72
65
|
});
|
|
73
66
|
|
|
74
|
-
// Create tRPC instance
|
|
75
|
-
const t =
|
|
76
|
-
|
|
77
|
-
// Generate the router from your schema
|
|
78
|
-
const appRouter = createZenStackRouter(schema, t);
|
|
67
|
+
// Create your tRPC instance
|
|
68
|
+
const t = initTRPC.context<{ db: typeof db }>().create();
|
|
79
69
|
|
|
80
|
-
//
|
|
70
|
+
// Generate the router
|
|
71
|
+
export const appRouter = createZenStackRouter(schema, t);
|
|
81
72
|
export type AppRouter = typeof appRouter;
|
|
82
73
|
```
|
|
83
74
|
|
|
84
|
-
### 4. Use
|
|
75
|
+
### 4. Use with tRPC client
|
|
85
76
|
|
|
86
77
|
```typescript
|
|
87
|
-
//
|
|
88
|
-
|
|
78
|
+
// client.ts
|
|
79
|
+
import { createTRPCClient, httpBatchLink } from "@trpc/client";
|
|
80
|
+
import type { AppRouter } from "./server/trpc.js";
|
|
81
|
+
|
|
82
|
+
const client = createTRPCClient<AppRouter>({
|
|
83
|
+
links: [httpBatchLink({ url: "http://localhost:3000/trpc" })],
|
|
84
|
+
});
|
|
89
85
|
|
|
90
86
|
// All operations are fully typed!
|
|
91
|
-
const users = await
|
|
92
|
-
// ^? { id: string, email: string, name: string | null, ... }[]
|
|
87
|
+
const users = await client.user.findMany.query();
|
|
93
88
|
|
|
94
|
-
// Include relations
|
|
95
|
-
const usersWithPosts = await
|
|
96
|
-
include: { posts: true }
|
|
89
|
+
// Include relations
|
|
90
|
+
const usersWithPosts = await client.user.findMany.query({
|
|
91
|
+
include: { posts: true },
|
|
97
92
|
});
|
|
98
|
-
// ^? { id: string, ..., posts: Post[] }[]
|
|
99
93
|
|
|
100
|
-
//
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
});
|
|
104
|
-
// ^? { id: string, email: string }[]
|
|
105
|
-
|
|
106
|
-
// Create with full validation
|
|
107
|
-
const user = await caller.user.create({
|
|
108
|
-
data: {
|
|
109
|
-
email: "alice@example.com",
|
|
110
|
-
name: "Alice",
|
|
111
|
-
},
|
|
94
|
+
// Create with validation
|
|
95
|
+
const user = await client.user.create.mutate({
|
|
96
|
+
data: { email: "alice@example.com", name: "Alice" },
|
|
112
97
|
});
|
|
113
98
|
|
|
114
|
-
// Update
|
|
115
|
-
await
|
|
99
|
+
// Update
|
|
100
|
+
await client.user.update.mutate({
|
|
116
101
|
where: { id: user.id },
|
|
117
102
|
data: { name: "Alice Smith" },
|
|
118
103
|
});
|
|
119
104
|
```
|
|
120
105
|
|
|
121
|
-
##
|
|
106
|
+
## Generated Router Structure
|
|
122
107
|
|
|
123
|
-
|
|
108
|
+
For each model in your schema, the following procedures are generated:
|
|
124
109
|
|
|
125
|
-
|
|
110
|
+
| Queries | Mutations |
|
|
111
|
+
|---------|-----------|
|
|
112
|
+
| findMany | create |
|
|
113
|
+
| findUnique | createMany |
|
|
114
|
+
| findFirst | update |
|
|
115
|
+
| count | updateMany |
|
|
116
|
+
| aggregate | upsert |
|
|
117
|
+
| groupBy | delete |
|
|
118
|
+
| | deleteMany |
|
|
126
119
|
|
|
127
|
-
|
|
128
|
-
import { createTRPC, type Context } from "zenstack-trpc";
|
|
129
|
-
|
|
130
|
-
const t = createTRPC<Context>();
|
|
131
|
-
```
|
|
120
|
+
## API Reference
|
|
132
121
|
|
|
133
122
|
### `createZenStackRouter(schema, t)`
|
|
134
123
|
|
|
135
124
|
Generates a tRPC router from a ZenStack schema.
|
|
136
125
|
|
|
137
126
|
```typescript
|
|
127
|
+
import { initTRPC } from "@trpc/server";
|
|
138
128
|
import { createZenStackRouter } from "zenstack-trpc";
|
|
139
129
|
|
|
130
|
+
const t = initTRPC.context<{ db: any }>().create();
|
|
140
131
|
const appRouter = createZenStackRouter(schema, t);
|
|
141
132
|
```
|
|
142
133
|
|
|
143
134
|
### `TypedRouterCaller<SchemaType>`
|
|
144
135
|
|
|
145
|
-
Type helper for
|
|
136
|
+
Type helper for server-side caller with full type inference.
|
|
146
137
|
|
|
147
138
|
```typescript
|
|
148
139
|
import type { TypedRouterCaller } from "zenstack-trpc";
|
|
@@ -151,130 +142,19 @@ import type { SchemaType } from "./zenstack/schema.js";
|
|
|
151
142
|
const caller = appRouter.createCaller({ db }) as TypedRouterCaller<SchemaType>;
|
|
152
143
|
```
|
|
153
144
|
|
|
154
|
-
### `TypedModelProcedures<Schema, Model>`
|
|
155
|
-
|
|
156
|
-
Type helper for a single model's procedures.
|
|
157
|
-
|
|
158
|
-
```typescript
|
|
159
|
-
import type { TypedModelProcedures } from "zenstack-trpc";
|
|
160
|
-
|
|
161
|
-
type UserProcedures = TypedModelProcedures<SchemaType, "User">;
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
## Generated Router Structure
|
|
165
|
-
|
|
166
|
-
For each model in your schema, the following procedures are generated:
|
|
167
|
-
|
|
168
|
-
```
|
|
169
|
-
router
|
|
170
|
-
├── user
|
|
171
|
-
│ ├── findMany (query)
|
|
172
|
-
│ ├── findUnique (query)
|
|
173
|
-
│ ├── findFirst (query)
|
|
174
|
-
│ ├── create (mutation)
|
|
175
|
-
│ ├── createMany (mutation)
|
|
176
|
-
│ ├── update (mutation)
|
|
177
|
-
│ ├── updateMany (mutation)
|
|
178
|
-
│ ├── upsert (mutation)
|
|
179
|
-
│ ├── delete (mutation)
|
|
180
|
-
│ ├── deleteMany (mutation)
|
|
181
|
-
│ ├── count (query)
|
|
182
|
-
│ ├── aggregate (query)
|
|
183
|
-
│ └── groupBy (query)
|
|
184
|
-
├── post
|
|
185
|
-
│ └── ... (same operations)
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
## Using with tRPC Adapters
|
|
189
|
-
|
|
190
|
-
### Standalone HTTP Server
|
|
191
|
-
|
|
192
|
-
```typescript
|
|
193
|
-
import { createHTTPServer } from "@trpc/server/adapters/standalone";
|
|
194
|
-
|
|
195
|
-
const server = createHTTPServer({
|
|
196
|
-
router: appRouter,
|
|
197
|
-
createContext: () => ({ db }),
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
server.listen(3000);
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### Next.js App Router
|
|
204
|
-
|
|
205
|
-
```typescript
|
|
206
|
-
// app/api/trpc/[trpc]/route.ts
|
|
207
|
-
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
|
|
208
|
-
|
|
209
|
-
const handler = (req: Request) =>
|
|
210
|
-
fetchRequestHandler({
|
|
211
|
-
endpoint: "/api/trpc",
|
|
212
|
-
req,
|
|
213
|
-
router: appRouter,
|
|
214
|
-
createContext: () => ({ db }),
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
export { handler as GET, handler as POST };
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### Express
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
|
-
import express from "express";
|
|
224
|
-
import { createExpressMiddleware } from "@trpc/server/adapters/express";
|
|
225
|
-
|
|
226
|
-
const app = express();
|
|
227
|
-
|
|
228
|
-
app.use(
|
|
229
|
-
"/trpc",
|
|
230
|
-
createExpressMiddleware({
|
|
231
|
-
router: appRouter,
|
|
232
|
-
createContext: () => ({ db }),
|
|
233
|
-
})
|
|
234
|
-
);
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Advanced Usage
|
|
238
|
-
|
|
239
|
-
### Custom Context
|
|
240
|
-
|
|
241
|
-
Extend the context with authentication or other data:
|
|
242
|
-
|
|
243
|
-
```typescript
|
|
244
|
-
interface MyContext extends Context {
|
|
245
|
-
db: any;
|
|
246
|
-
userId?: string;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
const t = createTRPC<MyContext>();
|
|
250
|
-
const appRouter = createZenStackRouter(schema, t);
|
|
251
|
-
|
|
252
|
-
// In your adapter
|
|
253
|
-
createContext: (opts) => ({
|
|
254
|
-
db: getEnhancedDb(opts.req), // ZenStack enhanced client with access control
|
|
255
|
-
userId: getUserFromRequest(opts.req),
|
|
256
|
-
});
|
|
257
|
-
```
|
|
258
|
-
|
|
259
145
|
### Zod Schema Access
|
|
260
146
|
|
|
261
147
|
Access the generated Zod schemas for custom validation:
|
|
262
148
|
|
|
263
149
|
```typescript
|
|
264
|
-
import {
|
|
265
|
-
createModelSchemas,
|
|
266
|
-
createWhereSchema,
|
|
267
|
-
createCreateDataSchema,
|
|
268
|
-
} from "zenstack-trpc";
|
|
150
|
+
import { createModelSchemas, createWhereSchema } from "zenstack-trpc";
|
|
269
151
|
|
|
270
152
|
const userSchemas = createModelSchemas(schema, "User");
|
|
271
|
-
const whereSchema = createWhereSchema(schema, "User");
|
|
272
153
|
```
|
|
273
154
|
|
|
274
155
|
## Requirements
|
|
275
156
|
|
|
276
157
|
- Node.js >= 18
|
|
277
|
-
- TypeScript >= 5.0
|
|
278
158
|
- ZenStack V3 (`@zenstackhq/orm` >= 3.0.0)
|
|
279
159
|
- tRPC >= 11.0.0
|
|
280
160
|
- Zod >= 3.0.0
|
package/dist/index.d.ts
CHANGED
|
@@ -5,20 +5,19 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
7
|
* ```typescript
|
|
8
|
+
* import { initTRPC } from "@trpc/server";
|
|
8
9
|
* import { ZenStackClient } from "@zenstackhq/orm";
|
|
9
10
|
* import { schema, SchemaType } from "./zenstack/schema.js";
|
|
10
|
-
* import {
|
|
11
|
-
* createTRPC,
|
|
12
|
-
* createZenStackRouter,
|
|
13
|
-
* type Context,
|
|
14
|
-
* type TypedRouterCaller,
|
|
15
|
-
* } from "zenstack-trpc";
|
|
11
|
+
* import { createZenStackRouter, type TypedRouterCaller } from "zenstack-trpc";
|
|
16
12
|
*
|
|
17
|
-
*
|
|
18
|
-
* const t =
|
|
13
|
+
* // Create your tRPC instance with your context
|
|
14
|
+
* const t = initTRPC.context<{ db: any }>().create();
|
|
15
|
+
*
|
|
16
|
+
* // Generate the router
|
|
19
17
|
* const appRouter = createZenStackRouter(schema, t);
|
|
20
18
|
*
|
|
21
19
|
* // Create a typed caller with full type inference
|
|
20
|
+
* const db = new ZenStackClient(schema, { dialect: yourDialect });
|
|
22
21
|
* const caller = appRouter.createCaller({ db }) as TypedRouterCaller<SchemaType>;
|
|
23
22
|
*
|
|
24
23
|
* // All operations are fully typed!
|
|
@@ -27,6 +26,6 @@
|
|
|
27
26
|
*
|
|
28
27
|
* @packageDocumentation
|
|
29
28
|
*/
|
|
30
|
-
export {
|
|
29
|
+
export { createZenStackRouter, type ZenStackRouter, type TypedRouterCaller, type TypedModelProcedures, type TRPCInstance, } from "./router-generator.js";
|
|
31
30
|
export { createModelSchemas, createWhereSchema, createCreateDataSchema, createUpdateDataSchema, createUniqueWhereSchema, createSelectSchema, createIncludeSchema, createOrderBySchema, } from "./zod-schemas.js";
|
|
32
31
|
//# 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
|
|
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,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"}
|
package/dist/index.js
CHANGED
|
@@ -5,20 +5,19 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
7
|
* ```typescript
|
|
8
|
+
* import { initTRPC } from "@trpc/server";
|
|
8
9
|
* import { ZenStackClient } from "@zenstackhq/orm";
|
|
9
10
|
* import { schema, SchemaType } from "./zenstack/schema.js";
|
|
10
|
-
* import {
|
|
11
|
-
* createTRPC,
|
|
12
|
-
* createZenStackRouter,
|
|
13
|
-
* type Context,
|
|
14
|
-
* type TypedRouterCaller,
|
|
15
|
-
* } from "zenstack-trpc";
|
|
11
|
+
* import { createZenStackRouter, type TypedRouterCaller } from "zenstack-trpc";
|
|
16
12
|
*
|
|
17
|
-
*
|
|
18
|
-
* const t =
|
|
13
|
+
* // Create your tRPC instance with your context
|
|
14
|
+
* const t = initTRPC.context<{ db: any }>().create();
|
|
15
|
+
*
|
|
16
|
+
* // Generate the router
|
|
19
17
|
* const appRouter = createZenStackRouter(schema, t);
|
|
20
18
|
*
|
|
21
19
|
* // Create a typed caller with full type inference
|
|
20
|
+
* const db = new ZenStackClient(schema, { dialect: yourDialect });
|
|
22
21
|
* const caller = appRouter.createCaller({ db }) as TypedRouterCaller<SchemaType>;
|
|
23
22
|
*
|
|
24
23
|
* // All operations are fully typed!
|
|
@@ -28,6 +27,6 @@
|
|
|
28
27
|
* @packageDocumentation
|
|
29
28
|
*/
|
|
30
29
|
// Router generator and types
|
|
31
|
-
export {
|
|
30
|
+
export { createZenStackRouter, } from "./router-generator.js";
|
|
32
31
|
// Zod schema generators (for advanced usage)
|
|
33
32
|
export { createModelSchemas, createWhereSchema, createCreateDataSchema, createUpdateDataSchema, createUniqueWhereSchema, createSelectSchema, createIncludeSchema, createOrderBySchema, } from "./zod-schemas.js";
|
|
@@ -1,27 +1,6 @@
|
|
|
1
1
|
import type { SchemaDef, GetModels } from "@zenstackhq/orm/schema";
|
|
2
2
|
import type { FindManyArgs, FindUniqueArgs, FindFirstArgs, CreateArgs, CreateManyArgs, UpdateArgs, UpdateManyArgs, UpsertArgs, DeleteArgs, DeleteManyArgs, CountArgs, AggregateArgs, GroupByArgs, SimplifiedPlainResult } from "@zenstackhq/orm";
|
|
3
|
-
|
|
4
|
-
* Context type for the tRPC router
|
|
5
|
-
* The db property accepts any ZenStack client instance
|
|
6
|
-
*/
|
|
7
|
-
export interface Context {
|
|
8
|
-
db: any;
|
|
9
|
-
}
|
|
10
|
-
declare const _initTRPCResult: import("@trpc/server").TRPCRootObject<Context, object, import("@trpc/server").TRPCRuntimeConfigOptions<Context, object>, {
|
|
11
|
-
ctx: Context;
|
|
12
|
-
meta: object;
|
|
13
|
-
errorShape: import("@trpc/server").TRPCDefaultErrorShape;
|
|
14
|
-
transformer: false;
|
|
15
|
-
}>;
|
|
16
|
-
/**
|
|
17
|
-
* Type representing the result of initTRPC.context().create()
|
|
18
|
-
*/
|
|
19
|
-
export type TRPCInstance = typeof _initTRPCResult;
|
|
20
|
-
/**
|
|
21
|
-
* Creates a tRPC instance with the given context
|
|
22
|
-
* @returns A tRPC instance configured with your context type
|
|
23
|
-
*/
|
|
24
|
-
export declare function createTRPC<TContext extends Context>(): TRPCInstance;
|
|
3
|
+
import { z } from "zod";
|
|
25
4
|
/**
|
|
26
5
|
* Type helper to convert model names to lowercase
|
|
27
6
|
*/
|
|
@@ -118,6 +97,24 @@ export interface TypedModelProcedures<Schema extends SchemaDef, Model extends Ge
|
|
|
118
97
|
export type TypedRouterCaller<Schema extends SchemaDef> = {
|
|
119
98
|
[K in GetModels<Schema> as Uncapitalize<K>]: TypedModelProcedures<Schema, K>;
|
|
120
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* Minimal tRPC instance interface required by createZenStackRouter
|
|
102
|
+
*/
|
|
103
|
+
export interface TRPCInstance {
|
|
104
|
+
procedure: {
|
|
105
|
+
input: (schema: z.ZodType) => {
|
|
106
|
+
query: (handler: (opts: {
|
|
107
|
+
ctx: any;
|
|
108
|
+
input: any;
|
|
109
|
+
}) => Promise<any>) => any;
|
|
110
|
+
mutation: (handler: (opts: {
|
|
111
|
+
ctx: any;
|
|
112
|
+
input: any;
|
|
113
|
+
}) => Promise<any>) => any;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
router: (procedures: Record<string, any>) => any;
|
|
117
|
+
}
|
|
121
118
|
/**
|
|
122
119
|
* Creates a tRPC router from a ZenStack schema.
|
|
123
120
|
*
|
|
@@ -128,10 +125,14 @@ export type TypedRouterCaller<Schema extends SchemaDef> = {
|
|
|
128
125
|
*
|
|
129
126
|
* @example
|
|
130
127
|
* ```ts
|
|
131
|
-
* import { createZenStackRouter,
|
|
132
|
-
* import {
|
|
128
|
+
* import { createZenStackRouter, TypedRouterCaller } from 'zenstack-trpc';
|
|
129
|
+
* import { initTRPC } from '@trpc/server';
|
|
130
|
+
* import { schema, SchemaType } from './zenstack/schema';
|
|
133
131
|
*
|
|
134
|
-
*
|
|
132
|
+
* // Create your own tRPC instance with your context
|
|
133
|
+
* const t = initTRPC.context<{ db: any }>().create();
|
|
134
|
+
*
|
|
135
|
+
* // Generate the router
|
|
135
136
|
* const appRouter = createZenStackRouter(schema, t);
|
|
136
137
|
*
|
|
137
138
|
* // Create a typed caller with FULL type inference
|
|
@@ -141,141 +142,10 @@ export type TypedRouterCaller<Schema extends SchemaDef> = {
|
|
|
141
142
|
* const users = await caller.user.findMany();
|
|
142
143
|
* // ^? { id: string, email: string, name: string | null, ... }[]
|
|
143
144
|
*
|
|
144
|
-
* const usersWithPosts = await caller.user.findMany({ include: { posts: true } });
|
|
145
|
-
* // ^? { id: string, email: string, ..., posts: Post[] }[]
|
|
146
|
-
*
|
|
147
145
|
* export type AppRouter = typeof appRouter;
|
|
148
146
|
* ```
|
|
149
147
|
*/
|
|
150
|
-
export declare function createZenStackRouter<Schema extends SchemaDef>(schema: Schema, t: TRPCInstance):
|
|
151
|
-
ctx: Context;
|
|
152
|
-
meta: object;
|
|
153
|
-
errorShape: import("@trpc/server").TRPCDefaultErrorShape;
|
|
154
|
-
transformer: false;
|
|
155
|
-
}, import("@trpc/server").TRPCDecorateCreateRouterOptions<Record<string, import("@trpc/server").TRPCBuiltRouter<{
|
|
156
|
-
ctx: Context;
|
|
157
|
-
meta: object;
|
|
158
|
-
errorShape: import("@trpc/server").TRPCDefaultErrorShape;
|
|
159
|
-
transformer: false;
|
|
160
|
-
}, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
|
|
161
|
-
findMany: import("@trpc/server").TRPCQueryProcedure<{
|
|
162
|
-
input: unknown;
|
|
163
|
-
output: any;
|
|
164
|
-
meta: object;
|
|
165
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
166
|
-
input: unknown;
|
|
167
|
-
output: any;
|
|
168
|
-
meta: object;
|
|
169
|
-
}>;
|
|
170
|
-
findUnique: import("@trpc/server").TRPCQueryProcedure<{
|
|
171
|
-
input: unknown;
|
|
172
|
-
output: any;
|
|
173
|
-
meta: object;
|
|
174
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
175
|
-
input: unknown;
|
|
176
|
-
output: any;
|
|
177
|
-
meta: object;
|
|
178
|
-
}>;
|
|
179
|
-
findFirst: import("@trpc/server").TRPCQueryProcedure<{
|
|
180
|
-
input: unknown;
|
|
181
|
-
output: any;
|
|
182
|
-
meta: object;
|
|
183
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
184
|
-
input: unknown;
|
|
185
|
-
output: any;
|
|
186
|
-
meta: object;
|
|
187
|
-
}>;
|
|
188
|
-
count: import("@trpc/server").TRPCQueryProcedure<{
|
|
189
|
-
input: unknown;
|
|
190
|
-
output: any;
|
|
191
|
-
meta: object;
|
|
192
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
193
|
-
input: unknown;
|
|
194
|
-
output: any;
|
|
195
|
-
meta: object;
|
|
196
|
-
}>;
|
|
197
|
-
aggregate: import("@trpc/server").TRPCQueryProcedure<{
|
|
198
|
-
input: unknown;
|
|
199
|
-
output: any;
|
|
200
|
-
meta: object;
|
|
201
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
202
|
-
input: unknown;
|
|
203
|
-
output: any;
|
|
204
|
-
meta: object;
|
|
205
|
-
}>;
|
|
206
|
-
groupBy: import("@trpc/server").TRPCQueryProcedure<{
|
|
207
|
-
input: unknown;
|
|
208
|
-
output: any;
|
|
209
|
-
meta: object;
|
|
210
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
211
|
-
input: unknown;
|
|
212
|
-
output: any;
|
|
213
|
-
meta: object;
|
|
214
|
-
}>;
|
|
215
|
-
create: import("@trpc/server").TRPCQueryProcedure<{
|
|
216
|
-
input: unknown;
|
|
217
|
-
output: any;
|
|
218
|
-
meta: object;
|
|
219
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
220
|
-
input: unknown;
|
|
221
|
-
output: any;
|
|
222
|
-
meta: object;
|
|
223
|
-
}>;
|
|
224
|
-
createMany: import("@trpc/server").TRPCQueryProcedure<{
|
|
225
|
-
input: unknown;
|
|
226
|
-
output: any;
|
|
227
|
-
meta: object;
|
|
228
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
229
|
-
input: unknown;
|
|
230
|
-
output: any;
|
|
231
|
-
meta: object;
|
|
232
|
-
}>;
|
|
233
|
-
update: import("@trpc/server").TRPCQueryProcedure<{
|
|
234
|
-
input: unknown;
|
|
235
|
-
output: any;
|
|
236
|
-
meta: object;
|
|
237
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
238
|
-
input: unknown;
|
|
239
|
-
output: any;
|
|
240
|
-
meta: object;
|
|
241
|
-
}>;
|
|
242
|
-
updateMany: import("@trpc/server").TRPCQueryProcedure<{
|
|
243
|
-
input: unknown;
|
|
244
|
-
output: any;
|
|
245
|
-
meta: object;
|
|
246
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
247
|
-
input: unknown;
|
|
248
|
-
output: any;
|
|
249
|
-
meta: object;
|
|
250
|
-
}>;
|
|
251
|
-
upsert: import("@trpc/server").TRPCQueryProcedure<{
|
|
252
|
-
input: unknown;
|
|
253
|
-
output: any;
|
|
254
|
-
meta: object;
|
|
255
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
256
|
-
input: unknown;
|
|
257
|
-
output: any;
|
|
258
|
-
meta: object;
|
|
259
|
-
}>;
|
|
260
|
-
delete: import("@trpc/server").TRPCQueryProcedure<{
|
|
261
|
-
input: unknown;
|
|
262
|
-
output: any;
|
|
263
|
-
meta: object;
|
|
264
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
265
|
-
input: unknown;
|
|
266
|
-
output: any;
|
|
267
|
-
meta: object;
|
|
268
|
-
}>;
|
|
269
|
-
deleteMany: import("@trpc/server").TRPCQueryProcedure<{
|
|
270
|
-
input: unknown;
|
|
271
|
-
output: any;
|
|
272
|
-
meta: object;
|
|
273
|
-
}> | import("@trpc/server").TRPCMutationProcedure<{
|
|
274
|
-
input: unknown;
|
|
275
|
-
output: any;
|
|
276
|
-
meta: object;
|
|
277
|
-
}>;
|
|
278
|
-
}>>>>>;
|
|
148
|
+
export declare function createZenStackRouter<Schema extends SchemaDef>(schema: Schema, t: TRPCInstance): any;
|
|
279
149
|
/**
|
|
280
150
|
* Type helper to extract the router type for a given schema
|
|
281
151
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-generator.d.ts","sourceRoot":"","sources":["../src/router-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,EACX,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"router-generator.d.ts","sourceRoot":"","sources":["../src/router-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/router-generator.js
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TRPCError } from "@trpc/server";
|
|
2
2
|
import { createModelSchemas } from "./zod-schemas.js";
|
|
3
|
-
// Internal type for initTRPC result
|
|
4
|
-
const _initTRPCResult = initTRPC.context().create();
|
|
5
|
-
/**
|
|
6
|
-
* Creates a tRPC instance with the given context
|
|
7
|
-
* @returns A tRPC instance configured with your context type
|
|
8
|
-
*/
|
|
9
|
-
export function createTRPC() {
|
|
10
|
-
return initTRPC.context().create();
|
|
11
|
-
}
|
|
12
3
|
/**
|
|
13
4
|
* Creates procedures for a single model
|
|
14
5
|
*/
|
|
@@ -62,10 +53,14 @@ function createModelProcedures(schema, modelName, t) {
|
|
|
62
53
|
*
|
|
63
54
|
* @example
|
|
64
55
|
* ```ts
|
|
65
|
-
* import { createZenStackRouter,
|
|
66
|
-
* import {
|
|
56
|
+
* import { createZenStackRouter, TypedRouterCaller } from 'zenstack-trpc';
|
|
57
|
+
* import { initTRPC } from '@trpc/server';
|
|
58
|
+
* import { schema, SchemaType } from './zenstack/schema';
|
|
67
59
|
*
|
|
68
|
-
*
|
|
60
|
+
* // Create your own tRPC instance with your context
|
|
61
|
+
* const t = initTRPC.context<{ db: any }>().create();
|
|
62
|
+
*
|
|
63
|
+
* // Generate the router
|
|
69
64
|
* const appRouter = createZenStackRouter(schema, t);
|
|
70
65
|
*
|
|
71
66
|
* // Create a typed caller with FULL type inference
|
|
@@ -75,9 +70,6 @@ function createModelProcedures(schema, modelName, t) {
|
|
|
75
70
|
* const users = await caller.user.findMany();
|
|
76
71
|
* // ^? { id: string, email: string, name: string | null, ... }[]
|
|
77
72
|
*
|
|
78
|
-
* const usersWithPosts = await caller.user.findMany({ include: { posts: true } });
|
|
79
|
-
* // ^? { id: string, email: string, ..., posts: Post[] }[]
|
|
80
|
-
*
|
|
81
73
|
* export type AppRouter = typeof appRouter;
|
|
82
74
|
* ```
|
|
83
75
|
*/
|