@danielfgray/pg-sourcerer 0.2.0 → 0.2.2

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.
Files changed (173) hide show
  1. package/dist/cli.js +25 -19
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +1 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/errors.d.ts +14 -1
  8. package/dist/errors.d.ts.map +1 -1
  9. package/dist/errors.js +2 -0
  10. package/dist/errors.js.map +1 -1
  11. package/dist/generate.d.ts +31 -21
  12. package/dist/generate.d.ts.map +1 -1
  13. package/dist/generate.js +53 -43
  14. package/dist/generate.js.map +1 -1
  15. package/dist/index.d.ts +20 -12
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +27 -13
  18. package/dist/index.js.map +1 -1
  19. package/dist/init.d.ts +0 -1
  20. package/dist/init.d.ts.map +1 -1
  21. package/dist/init.js +90 -35
  22. package/dist/init.js.map +1 -1
  23. package/dist/ir/extensions/queries.d.ts +264 -0
  24. package/dist/ir/extensions/queries.d.ts.map +1 -0
  25. package/dist/ir/extensions/queries.js +153 -0
  26. package/dist/ir/extensions/queries.js.map +1 -0
  27. package/dist/ir/extensions/schema-builder.d.ts +61 -0
  28. package/dist/ir/extensions/schema-builder.d.ts.map +1 -0
  29. package/dist/ir/extensions/schema-builder.js +5 -0
  30. package/dist/ir/extensions/schema-builder.js.map +1 -0
  31. package/dist/lib/conjure.d.ts +101 -0
  32. package/dist/lib/conjure.d.ts.map +1 -1
  33. package/dist/lib/conjure.js +204 -26
  34. package/dist/lib/conjure.js.map +1 -1
  35. package/dist/lib/hex.d.ts +10 -8
  36. package/dist/lib/hex.d.ts.map +1 -1
  37. package/dist/lib/hex.js +18 -15
  38. package/dist/lib/hex.js.map +1 -1
  39. package/dist/plugins/arktype.d.ts +27 -14
  40. package/dist/plugins/arktype.d.ts.map +1 -1
  41. package/dist/plugins/arktype.js +166 -130
  42. package/dist/plugins/arktype.js.map +1 -1
  43. package/dist/plugins/effect.d.ts +53 -0
  44. package/dist/plugins/effect.d.ts.map +1 -0
  45. package/dist/plugins/effect.js +1074 -0
  46. package/dist/plugins/effect.js.map +1 -0
  47. package/dist/plugins/http-elysia.d.ts +32 -0
  48. package/dist/plugins/http-elysia.d.ts.map +1 -0
  49. package/dist/plugins/http-elysia.js +613 -0
  50. package/dist/plugins/http-elysia.js.map +1 -0
  51. package/dist/plugins/http-express.d.ts +36 -0
  52. package/dist/plugins/http-express.d.ts.map +1 -0
  53. package/dist/plugins/http-express.js +388 -0
  54. package/dist/plugins/http-express.js.map +1 -0
  55. package/dist/plugins/http-hono.d.ts +36 -0
  56. package/dist/plugins/http-hono.d.ts.map +1 -0
  57. package/dist/plugins/http-hono.js +453 -0
  58. package/dist/plugins/http-hono.js.map +1 -0
  59. package/dist/plugins/http-orpc.d.ts +55 -0
  60. package/dist/plugins/http-orpc.d.ts.map +1 -0
  61. package/dist/plugins/http-orpc.js +370 -0
  62. package/dist/plugins/http-orpc.js.map +1 -0
  63. package/dist/plugins/http-trpc.d.ts +59 -0
  64. package/dist/plugins/http-trpc.d.ts.map +1 -0
  65. package/dist/plugins/http-trpc.js +392 -0
  66. package/dist/plugins/http-trpc.js.map +1 -0
  67. package/dist/plugins/kysely/queries.d.ts +92 -0
  68. package/dist/plugins/kysely/queries.d.ts.map +1 -0
  69. package/dist/plugins/kysely/queries.js +1169 -0
  70. package/dist/plugins/kysely/queries.js.map +1 -0
  71. package/dist/plugins/kysely/shared.d.ts +59 -0
  72. package/dist/plugins/kysely/shared.d.ts.map +1 -0
  73. package/dist/plugins/kysely/shared.js +247 -0
  74. package/dist/plugins/kysely/shared.js.map +1 -0
  75. package/dist/plugins/kysely/types.d.ts +22 -0
  76. package/dist/plugins/kysely/types.d.ts.map +1 -0
  77. package/dist/plugins/kysely/types.js +428 -0
  78. package/dist/plugins/kysely/types.js.map +1 -0
  79. package/dist/plugins/kysely.d.ts +72 -0
  80. package/dist/plugins/kysely.d.ts.map +1 -0
  81. package/dist/plugins/kysely.js +906 -0
  82. package/dist/plugins/kysely.js.map +1 -0
  83. package/dist/plugins/sql-queries.d.ts +55 -7
  84. package/dist/plugins/sql-queries.d.ts.map +1 -1
  85. package/dist/plugins/sql-queries.js +747 -121
  86. package/dist/plugins/sql-queries.js.map +1 -1
  87. package/dist/plugins/types.d.ts +20 -14
  88. package/dist/plugins/types.d.ts.map +1 -1
  89. package/dist/plugins/types.js +90 -112
  90. package/dist/plugins/types.js.map +1 -1
  91. package/dist/plugins/valibot.d.ts +45 -0
  92. package/dist/plugins/valibot.d.ts.map +1 -0
  93. package/dist/plugins/valibot.js +422 -0
  94. package/dist/plugins/valibot.js.map +1 -0
  95. package/dist/plugins/zod.d.ts +27 -14
  96. package/dist/plugins/zod.d.ts.map +1 -1
  97. package/dist/plugins/zod.js +231 -166
  98. package/dist/plugins/zod.js.map +1 -1
  99. package/dist/services/artifact-store.d.ts +11 -1
  100. package/dist/services/artifact-store.d.ts.map +1 -1
  101. package/dist/services/artifact-store.js +9 -0
  102. package/dist/services/artifact-store.js.map +1 -1
  103. package/dist/services/config-loader.d.ts +4 -0
  104. package/dist/services/config-loader.d.ts.map +1 -1
  105. package/dist/services/config-loader.js +1 -1
  106. package/dist/services/config-loader.js.map +1 -1
  107. package/dist/services/config.d.ts +57 -0
  108. package/dist/services/config.d.ts.map +1 -0
  109. package/dist/services/config.js +66 -0
  110. package/dist/services/config.js.map +1 -0
  111. package/dist/services/core-providers.d.ts +15 -0
  112. package/dist/services/core-providers.d.ts.map +1 -0
  113. package/dist/services/core-providers.js +23 -0
  114. package/dist/services/core-providers.js.map +1 -0
  115. package/dist/services/emissions.d.ts +14 -0
  116. package/dist/services/emissions.d.ts.map +1 -1
  117. package/dist/services/emissions.js +86 -47
  118. package/dist/services/emissions.js.map +1 -1
  119. package/dist/services/execution.d.ts +35 -0
  120. package/dist/services/execution.d.ts.map +1 -0
  121. package/dist/services/execution.js +86 -0
  122. package/dist/services/execution.js.map +1 -0
  123. package/dist/services/file-builder.d.ts +4 -0
  124. package/dist/services/file-builder.d.ts.map +1 -1
  125. package/dist/services/file-builder.js.map +1 -1
  126. package/dist/services/inflection.d.ts +2 -2
  127. package/dist/services/inflection.d.ts.map +1 -1
  128. package/dist/services/inflection.js +4 -4
  129. package/dist/services/inflection.js.map +1 -1
  130. package/dist/services/ir-builder.d.ts.map +1 -1
  131. package/dist/services/ir-builder.js +10 -3
  132. package/dist/services/ir-builder.js.map +1 -1
  133. package/dist/services/pg-types.d.ts +31 -0
  134. package/dist/services/pg-types.d.ts.map +1 -1
  135. package/dist/services/pg-types.js +24 -0
  136. package/dist/services/pg-types.js.map +1 -1
  137. package/dist/services/plugin-runner.d.ts +27 -37
  138. package/dist/services/plugin-runner.d.ts.map +1 -1
  139. package/dist/services/plugin-runner.js +73 -171
  140. package/dist/services/plugin-runner.js.map +1 -1
  141. package/dist/services/plugin.d.ts +350 -215
  142. package/dist/services/plugin.d.ts.map +1 -1
  143. package/dist/services/plugin.js +182 -130
  144. package/dist/services/plugin.js.map +1 -1
  145. package/dist/services/resolution.d.ts +38 -0
  146. package/dist/services/resolution.d.ts.map +1 -0
  147. package/dist/services/resolution.js +242 -0
  148. package/dist/services/resolution.js.map +1 -0
  149. package/dist/services/service-registry.d.ts +74 -0
  150. package/dist/services/service-registry.d.ts.map +1 -0
  151. package/dist/services/service-registry.js +61 -0
  152. package/dist/services/service-registry.js.map +1 -0
  153. package/dist/services/symbols.d.ts +59 -0
  154. package/dist/services/symbols.d.ts.map +1 -1
  155. package/dist/services/symbols.js +16 -0
  156. package/dist/services/symbols.js.map +1 -1
  157. package/dist/testing.d.ts +4 -25
  158. package/dist/testing.d.ts.map +1 -1
  159. package/dist/testing.js +2 -23
  160. package/dist/testing.js.map +1 -1
  161. package/package.json +1 -1
  162. package/dist/plugins/effect-model.d.ts +0 -17
  163. package/dist/plugins/effect-model.d.ts.map +0 -1
  164. package/dist/plugins/effect-model.js +0 -409
  165. package/dist/plugins/effect-model.js.map +0 -1
  166. package/dist/plugins/kysely-queries.d.ts +0 -66
  167. package/dist/plugins/kysely-queries.d.ts.map +0 -1
  168. package/dist/plugins/kysely-queries.js +0 -960
  169. package/dist/plugins/kysely-queries.js.map +0 -1
  170. package/dist/plugins/kysely-types.d.ts +0 -35
  171. package/dist/plugins/kysely-types.d.ts.map +0 -1
  172. package/dist/plugins/kysely-types.js +0 -601
  173. package/dist/plugins/kysely-types.js.map +0 -1
@@ -0,0 +1,392 @@
1
+ /**
2
+ * HTTP tRPC Plugin - Generate tRPC routers from query plugins
3
+ *
4
+ * Consumes method symbols from sql-queries or kysely-queries via the symbol registry
5
+ * and generates type-safe tRPC routers with schema validation.
6
+ */
7
+ import { Schema as S } from "effect";
8
+ import { definePlugin } from "../services/plugin.js";
9
+ import { conjure, cast } from "../lib/conjure.js";
10
+ import { inflect } from "../services/inflection.js";
11
+ import { SCHEMA_BUILDER_KIND, } from "../ir/extensions/schema-builder.js";
12
+ const { b } = conjure;
13
+ // ============================================================================
14
+ // Configuration
15
+ // ============================================================================
16
+ const HttpTrpcConfigSchema = S.Struct({
17
+ /** Output directory for generated router files. Default: "trpc" */
18
+ outputDir: S.optionalWith(S.String, { default: () => "trpc" }),
19
+ /**
20
+ * Header content to prepend to each generated file.
21
+ * MUST import `router` and a base procedure (e.g., `publicProcedure`).
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * header: `import { router, publicProcedure } from "../trpc.js";`
26
+ * ```
27
+ */
28
+ header: S.String,
29
+ /**
30
+ * Name of the base procedure to use in generated code.
31
+ * Must match an import from your header.
32
+ * Default: "publicProcedure"
33
+ */
34
+ baseProcedure: S.optionalWith(S.String, { default: () => "publicProcedure" }),
35
+ /** Name of the aggregated router export. Default: "appRouter" */
36
+ aggregatorName: S.optionalWith(S.String, { default: () => "appRouter" }),
37
+ });
38
+ // ============================================================================
39
+ // String Helpers
40
+ // ============================================================================
41
+ /** Convert PascalCase/camelCase to kebab-case */
42
+ const toKebabCase = (str) => str
43
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
44
+ .replace(/_/g, "-")
45
+ .toLowerCase();
46
+ // ============================================================================
47
+ // Procedure Builders
48
+ // ============================================================================
49
+ /**
50
+ * Map query method kind to tRPC procedure type.
51
+ */
52
+ const kindToProcedureType = (kind) => {
53
+ switch (kind) {
54
+ case "read":
55
+ case "list":
56
+ case "lookup":
57
+ return "query";
58
+ case "create":
59
+ case "update":
60
+ case "delete":
61
+ case "function":
62
+ return "mutation";
63
+ }
64
+ };
65
+ /**
66
+ * Build the handler function body for a procedure.
67
+ * tRPC handlers receive { input, ctx } and return data directly.
68
+ */
69
+ const buildProcedureBody = (method) => {
70
+ const queryFnName = method.name;
71
+ const callSig = method.callSignature ?? { style: "named" };
72
+ const statements = [];
73
+ // Build the function call arguments based on callSignature
74
+ const args = [];
75
+ if (callSig.style === "positional") {
76
+ // Positional: fn(a, b, c)
77
+ for (const param of method.params) {
78
+ args.push(b.memberExpression(b.identifier("input"), b.identifier(param.name)));
79
+ }
80
+ }
81
+ else {
82
+ // Named: fn({ a, b, c }) or fn(input) for body
83
+ const bodyParam = method.params.find((p) => p.source === "body");
84
+ if (bodyParam && callSig.bodyStyle === "spread") {
85
+ // Body fields spread directly: fn(input)
86
+ args.push(b.identifier("input"));
87
+ }
88
+ else if (bodyParam && callSig.bodyStyle === "property") {
89
+ // Body wrapped in property: fn({ id, data })
90
+ // Collect non-body params that need to be extracted from input
91
+ const nonBodyParams = method.params.filter((p) => p.source === "pk" || p.source === "fk" || p.source === "lookup" || p.source === "pagination");
92
+ if (nonBodyParams.length > 0) {
93
+ // Generate: const { id, ...data } = input;
94
+ const destructureProps = nonBodyParams.map((p) => b.property.from({ kind: "init", key: b.identifier(p.name), value: b.identifier(p.name), shorthand: true }));
95
+ const restId = b.identifier(bodyParam.name);
96
+ const restElem = b.restElement(restId);
97
+ const pattern = b.objectPattern([...destructureProps, restElem]);
98
+ const destructureDecl = b.variableDeclaration("const", [
99
+ b.variableDeclarator(pattern, b.identifier("input")),
100
+ ]);
101
+ statements.push(destructureDecl);
102
+ // Build: { id, data } using the destructured variables
103
+ let objBuilder = conjure.obj();
104
+ for (const param of nonBodyParams) {
105
+ objBuilder = objBuilder.shorthand(param.name);
106
+ }
107
+ objBuilder = objBuilder.shorthand(bodyParam.name);
108
+ args.push(objBuilder.build());
109
+ }
110
+ else {
111
+ // No non-body params, just wrap input: fn({ data: input })
112
+ args.push(conjure.obj().prop(bodyParam.name, b.identifier("input")).build());
113
+ }
114
+ }
115
+ else if (method.params.length > 0) {
116
+ // Simple named params: fn(input) since input matches the shape
117
+ args.push(b.identifier("input"));
118
+ }
119
+ }
120
+ // Build: return await queryFn(args)
121
+ const queryCall = b.callExpression(b.identifier(queryFnName), args.map(cast.toExpr));
122
+ const awaitExpr = b.awaitExpression(queryCall);
123
+ // For delete, return success object
124
+ if (method.kind === "delete") {
125
+ statements.push(b.expressionStatement(awaitExpr));
126
+ statements.push(b.returnStatement(conjure.obj().prop("success", b.booleanLiteral(true)).build()));
127
+ return statements;
128
+ }
129
+ statements.push(b.returnStatement(awaitExpr));
130
+ return statements;
131
+ };
132
+ /**
133
+ * Determine if a method needs body validation and which schema to use.
134
+ */
135
+ const getBodySchemaImport = (method, entityName) => {
136
+ if (method.kind === "create") {
137
+ return { entity: entityName, shape: "insert", schemaName: `${entityName}Insert` };
138
+ }
139
+ if (method.kind === "update") {
140
+ return { entity: entityName, shape: "update", schemaName: `${entityName}Update` };
141
+ }
142
+ return null;
143
+ };
144
+ /**
145
+ * Build the input schema expression for a procedure.
146
+ */
147
+ const buildInputSchema = (method, entityName, requestSchema) => {
148
+ const bodySchema = getBodySchemaImport(method, entityName);
149
+ const nonBodyParams = method.params.filter((p) => p.source !== "body");
150
+ const callSig = method.callSignature ?? { style: "named" };
151
+ // For update with bodyStyle: "property", we need to merge PK params with body schema
152
+ if (bodySchema && nonBodyParams.length > 0 && callSig.bodyStyle === "property") {
153
+ // Build: z.object({ id: z.coerce.number() }).merge(PostUpdate)
154
+ let objBuilder = conjure.obj();
155
+ for (const p of nonBodyParams) {
156
+ objBuilder = objBuilder.prop(p.name, buildZodParamType(p));
157
+ }
158
+ const zodObject = b.callExpression(b.memberExpression(b.identifier("z"), b.identifier("object")), [cast.toExpr(objBuilder.build())]);
159
+ const mergedSchema = b.callExpression(b.memberExpression(zodObject, b.identifier("merge")), [b.identifier(bodySchema.schemaName)]);
160
+ return {
161
+ inputExpr: mergedSchema,
162
+ bodySchema,
163
+ schemaBuilderImport: { names: ["z"], from: "zod" },
164
+ };
165
+ }
166
+ // Body params only use imported entity schemas
167
+ if (bodySchema) {
168
+ return {
169
+ inputExpr: b.identifier(bodySchema.schemaName),
170
+ bodySchema,
171
+ schemaBuilderImport: null,
172
+ };
173
+ }
174
+ // Non-body params: use schema builder
175
+ if (nonBodyParams.length === 0) {
176
+ return { inputExpr: null, bodySchema: null, schemaBuilderImport: null };
177
+ }
178
+ const schemaResult = requestSchema(nonBodyParams);
179
+ if (schemaResult) {
180
+ return {
181
+ inputExpr: schemaResult.ast,
182
+ bodySchema: null,
183
+ schemaBuilderImport: schemaResult.importSpec,
184
+ };
185
+ }
186
+ // Fallback: build inline z.object (tRPC requires Zod)
187
+ let objBuilder = conjure.obj();
188
+ for (const param of nonBodyParams) {
189
+ const zodType = buildZodParamType(param);
190
+ objBuilder = objBuilder.prop(param.name, zodType);
191
+ }
192
+ return {
193
+ inputExpr: b.callExpression(b.memberExpression(b.identifier("z"), b.identifier("object")), [cast.toExpr(objBuilder.build())]),
194
+ bodySchema: null,
195
+ schemaBuilderImport: { names: ["z"], from: "zod" },
196
+ };
197
+ };
198
+ /**
199
+ * Build Zod type expression for a param (fallback when no schema-builder).
200
+ */
201
+ const buildZodParamType = (param) => {
202
+ const baseType = param.type.toLowerCase();
203
+ let zodCall;
204
+ switch (baseType) {
205
+ case "number":
206
+ zodCall = b.callExpression(b.memberExpression(b.memberExpression(b.identifier("z"), b.identifier("coerce")), b.identifier("number")), []);
207
+ break;
208
+ case "boolean":
209
+ zodCall = b.callExpression(b.memberExpression(b.identifier("z"), b.identifier("boolean")), []);
210
+ break;
211
+ case "date":
212
+ zodCall = b.callExpression(b.memberExpression(b.memberExpression(b.identifier("z"), b.identifier("coerce")), b.identifier("date")), []);
213
+ break;
214
+ case "string":
215
+ default:
216
+ zodCall = b.callExpression(b.memberExpression(b.identifier("z"), b.identifier("string")), []);
217
+ break;
218
+ }
219
+ if (!param.required) {
220
+ zodCall = b.callExpression(b.memberExpression(cast.toExpr(zodCall), b.identifier("optional")), []);
221
+ }
222
+ return zodCall;
223
+ };
224
+ /**
225
+ * Build a single tRPC procedure.
226
+ */
227
+ const buildProcedure = (method, entityName, baseProcedure, requestSchema) => {
228
+ const procedureType = kindToProcedureType(method.kind);
229
+ // Start with base procedure
230
+ let chainExpr = b.identifier(baseProcedure);
231
+ // Build input schema
232
+ const { inputExpr, bodySchema, schemaBuilderImport } = buildInputSchema(method, entityName, requestSchema);
233
+ // Add .input(schema) if there are params
234
+ if (inputExpr) {
235
+ chainExpr = b.callExpression(b.memberExpression(cast.toExpr(chainExpr), b.identifier("input")), [cast.toExpr(inputExpr)]);
236
+ }
237
+ // Build the handler: async ({ input }) => { ... }
238
+ const handlerParams = [];
239
+ if (method.params.length > 0) {
240
+ const inputProp = b.objectProperty(b.identifier("input"), b.identifier("input"));
241
+ inputProp.shorthand = true;
242
+ handlerParams.push(inputProp);
243
+ }
244
+ const handlerBody = buildProcedureBody(method);
245
+ const handler = b.arrowFunctionExpression([b.objectPattern(handlerParams)], b.blockStatement(handlerBody.map(cast.toStmt)));
246
+ handler.async = true;
247
+ // Add .query() or .mutation()
248
+ chainExpr = b.callExpression(b.memberExpression(cast.toExpr(chainExpr), b.identifier(procedureType)), [handler]);
249
+ return { procedureExpr: chainExpr, bodySchema, schemaBuilderImport };
250
+ };
251
+ // ============================================================================
252
+ // Plugin Definition
253
+ // ============================================================================
254
+ /**
255
+ * Create an http-trpc provider that generates tRPC routers.
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * import { httpTrpc } from "pg-sourcerer"
260
+ *
261
+ * export default defineConfig({
262
+ * plugins: [
263
+ * zod(),
264
+ * sqlQueries(),
265
+ * httpTrpc({
266
+ * header: `import { router, publicProcedure } from "../trpc.js";`,
267
+ * }),
268
+ * ],
269
+ * })
270
+ * ```
271
+ */
272
+ export function httpTrpc(config) {
273
+ const parsed = S.decodeUnknownSync(HttpTrpcConfigSchema)(config);
274
+ return definePlugin({
275
+ name: "http-trpc",
276
+ kind: "http-routes",
277
+ singleton: true,
278
+ canProvide: () => true,
279
+ requires: () => [
280
+ { kind: "queries", params: {} },
281
+ { kind: "schemas", params: {} },
282
+ ],
283
+ provide: (_params, _deps, ctx) => {
284
+ const { outputDir, baseProcedure, header, aggregatorName } = parsed;
285
+ // Get all entities with registered query methods
286
+ const entityNames = ctx.symbols.getEntitiesWithMethods();
287
+ if (entityNames.length === 0) {
288
+ return;
289
+ }
290
+ // Track generated routers for aggregator
291
+ const generatedRouters = [];
292
+ // Create schema builder function
293
+ const requestSchema = (params) => {
294
+ if (params.length === 0)
295
+ return undefined;
296
+ try {
297
+ const request = { variant: "params", params };
298
+ return ctx.request(SCHEMA_BUILDER_KIND, request);
299
+ }
300
+ catch {
301
+ return undefined;
302
+ }
303
+ };
304
+ // Generate router for each entity
305
+ for (const entityName of entityNames) {
306
+ const entityMethods = ctx.symbols.getEntityMethods(entityName);
307
+ if (!entityMethods || entityMethods.methods.length === 0)
308
+ continue;
309
+ const filePath = `${outputDir}/${inflect.uncapitalize(entityName)}.ts`;
310
+ const routerName = `${inflect.uncapitalize(entityName)}Router`;
311
+ const file = ctx.file(filePath);
312
+ // Header provides router and baseProcedure imports
313
+ file.header(header);
314
+ // Import query functions
315
+ const queryFunctionNames = entityMethods.methods.map((m) => m.name);
316
+ const queriesImportPath = `../${entityMethods.importPath.replace(/\.ts$/, ".js")}`;
317
+ file.import({
318
+ kind: "relative",
319
+ names: queryFunctionNames,
320
+ from: queriesImportPath,
321
+ });
322
+ // Build router object
323
+ let routerObjBuilder = conjure.obj();
324
+ const bodySchemaImports = [];
325
+ let schemaLibraryImport = null;
326
+ for (const method of entityMethods.methods) {
327
+ const { procedureExpr, bodySchema, schemaBuilderImport } = buildProcedure(method, entityName, baseProcedure, requestSchema);
328
+ if (bodySchema)
329
+ bodySchemaImports.push(bodySchema);
330
+ if (schemaBuilderImport)
331
+ schemaLibraryImport = schemaBuilderImport;
332
+ routerObjBuilder = routerObjBuilder.prop(method.name, procedureExpr);
333
+ }
334
+ // Import schema library if needed
335
+ if (schemaLibraryImport) {
336
+ if (schemaLibraryImport.names) {
337
+ file.import({
338
+ kind: "package",
339
+ names: [...schemaLibraryImport.names],
340
+ from: schemaLibraryImport.from,
341
+ });
342
+ }
343
+ }
344
+ // Import body schemas
345
+ for (const schemaImport of bodySchemaImports) {
346
+ file.import({
347
+ kind: "symbol",
348
+ ref: {
349
+ capability: "schemas",
350
+ entity: schemaImport.entity,
351
+ shape: schemaImport.shape,
352
+ },
353
+ });
354
+ }
355
+ // Build: export const userRouter = router({ ... })
356
+ const routerCall = b.callExpression(b.identifier("router"), [cast.toExpr(routerObjBuilder.build())]);
357
+ const exportStmt = conjure.export.const(routerName, routerCall);
358
+ file.ast(conjure.program(exportStmt)).emit();
359
+ generatedRouters.push({
360
+ fileName: `${inflect.uncapitalize(entityName)}.js`,
361
+ routerName,
362
+ });
363
+ }
364
+ // Generate aggregator index.ts
365
+ if (generatedRouters.length > 0) {
366
+ const indexPath = `${outputDir}/index.ts`;
367
+ const indexFile = ctx.file(indexPath);
368
+ // Header provides router import
369
+ indexFile.header(header);
370
+ for (const route of generatedRouters) {
371
+ indexFile.import({
372
+ kind: "relative",
373
+ names: [route.routerName],
374
+ from: `./${route.fileName}`,
375
+ });
376
+ }
377
+ // Build: export const appRouter = router({ user: userRouter, ... })
378
+ let routerObjBuilder = conjure.obj();
379
+ for (const route of generatedRouters) {
380
+ const key = route.routerName.replace(/Router$/, "");
381
+ routerObjBuilder = routerObjBuilder.prop(key, b.identifier(route.routerName));
382
+ }
383
+ const routerCall = b.callExpression(b.identifier("router"), [cast.toExpr(routerObjBuilder.build())]);
384
+ const exportStmt = conjure.export.const(aggregatorName, routerCall);
385
+ // Also export the type
386
+ const typeExport = b.exportNamedDeclaration(b.tsTypeAliasDeclaration(b.identifier("AppRouter"), b.tsTypeQuery(b.identifier(aggregatorName))));
387
+ indexFile.ast(conjure.program(exportStmt, typeExport)).emit();
388
+ }
389
+ },
390
+ });
391
+ }
392
+ //# sourceMappingURL=http-trpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-trpc.js","sourceRoot":"","sources":["../../src/plugins/http-trpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import type { SimplePluginContext } from "../../services/plugin.js";
2
+ /**
3
+ * Function to generate export names for CRUD/lookup methods.
4
+ * @param entityName - PascalCase entity name (e.g., "User", "Post")
5
+ * @param methodName - PascalCase method name (e.g., "FindById", "Create")
6
+ * @returns The export name (e.g., "UserFindById", "userCreate", "findById")
7
+ */
8
+ export type ExportNameFn = (entityName: string, methodName: string) => string;
9
+ /**
10
+ * User-facing config input with properly typed function options.
11
+ */
12
+ export interface KyselyQueriesConfigInput {
13
+ readonly outputDir?: string;
14
+ readonly dbTypesPath?: string;
15
+ readonly executeQueries?: boolean;
16
+ readonly generateListMany?: boolean;
17
+ readonly generateFunctions?: boolean;
18
+ readonly functionsFile?: string;
19
+ /**
20
+ * Custom export name function for CRUD/lookup methods.
21
+ * @default (_entityName, methodName) => camelCase(methodName)
22
+ * @example
23
+ * // PascalCase prefix: "UserFindById", "UserCreate"
24
+ * exportName: (entity, method) => entity + method
25
+ *
26
+ * // camelCase prefix: "userFindById", "userCreate"
27
+ * exportName: (entity, method) => entity.toLowerCase() + method
28
+ */
29
+ readonly exportName?: ExportNameFn;
30
+ /**
31
+ * Export style for generated query functions.
32
+ * - "flat": Individual exports (e.g., `export const findById = ...`)
33
+ * - "namespace": Single object export (e.g., `export const User = { findById: ... }`)
34
+ * @default "flat"
35
+ */
36
+ readonly exportStyle?: "flat" | "namespace";
37
+ /**
38
+ * Use explicit column lists instead of .selectAll().
39
+ * When true, generates .select(['col1', 'col2']) which excludes omitted fields at runtime.
40
+ * @default true
41
+ */
42
+ readonly explicitColumns?: boolean;
43
+ /**
44
+ * Whether to pass db as first parameter to each function.
45
+ * When true (default), functions take `db: Kysely<DB>` as first arg.
46
+ * When false, functions use a module-level `db` variable - use `header`
47
+ * to provide the import statement.
48
+ * @default true
49
+ */
50
+ readonly dbAsParameter?: boolean;
51
+ /**
52
+ * Header content to prepend to each generated file.
53
+ * Use this to provide imports when dbAsParameter is false.
54
+ * Example: `import { db } from "../db.js"`
55
+ */
56
+ readonly header?: string;
57
+ /**
58
+ * Default limit for listMany queries.
59
+ * @default 50
60
+ */
61
+ readonly defaultLimit?: number;
62
+ }
63
+ /**
64
+ * Configuration for Kysely queries generation (exported for unified plugin).
65
+ * All fields are required; the caller applies defaults.
66
+ */
67
+ export interface KyselyQueriesConfig {
68
+ readonly outputDir: string;
69
+ readonly dbTypesPath: string;
70
+ readonly executeQueries: boolean;
71
+ readonly generateListMany: boolean;
72
+ readonly generateFunctions: boolean;
73
+ readonly functionsFile: string;
74
+ readonly exportName: ExportNameFn;
75
+ readonly exportStyle: "flat" | "namespace";
76
+ readonly explicitColumns: boolean;
77
+ readonly dbAsParameter: boolean;
78
+ readonly header?: string;
79
+ readonly defaultLimit: number;
80
+ }
81
+ /**
82
+ * Generate Kysely query functions from the IR.
83
+ *
84
+ * This is the core generation logic, extracted for use by both:
85
+ * - The standalone kyselyQueriesPlugin
86
+ * - The unified kyselyPlugin
87
+ *
88
+ * @param ctx - Plugin context for file emission and services
89
+ * @param config - Queries configuration (with defaults applied)
90
+ */
91
+ export declare function generateKyselyQueries(ctx: SimplePluginContext, config?: Partial<KyselyQueriesConfig>): void;
92
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/plugins/kysely/queries.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAqHpE;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;AA6E9E;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AASD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AA6lCD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,mBAAmB,EACxB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,IAAI,CAuQN"}