@danielfgray/pg-sourcerer 0.2.1 → 0.3.0

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 (164) hide show
  1. package/dist/cli.js +3 -4
  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 +5 -9
  12. package/dist/generate.d.ts.map +1 -1
  13. package/dist/generate.js +27 -29
  14. package/dist/generate.js.map +1 -1
  15. package/dist/index.d.ts +19 -12
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +25 -13
  18. package/dist/index.js.map +1 -1
  19. package/dist/init.d.ts.map +1 -1
  20. package/dist/init.js +39 -9
  21. package/dist/init.js.map +1 -1
  22. package/dist/ir/extensions/queries.d.ts +264 -0
  23. package/dist/ir/extensions/queries.d.ts.map +1 -0
  24. package/dist/ir/extensions/queries.js +153 -0
  25. package/dist/ir/extensions/queries.js.map +1 -0
  26. package/dist/ir/extensions/schema-builder.d.ts +61 -0
  27. package/dist/ir/extensions/schema-builder.d.ts.map +1 -0
  28. package/dist/ir/extensions/schema-builder.js +5 -0
  29. package/dist/ir/extensions/schema-builder.js.map +1 -0
  30. package/dist/lib/conjure.d.ts +66 -0
  31. package/dist/lib/conjure.d.ts.map +1 -1
  32. package/dist/lib/conjure.js +127 -29
  33. package/dist/lib/conjure.js.map +1 -1
  34. package/dist/lib/hex.d.ts +10 -3
  35. package/dist/lib/hex.d.ts.map +1 -1
  36. package/dist/lib/hex.js +18 -8
  37. package/dist/lib/hex.js.map +1 -1
  38. package/dist/plugins/arktype.d.ts +27 -14
  39. package/dist/plugins/arktype.d.ts.map +1 -1
  40. package/dist/plugins/arktype.js +166 -130
  41. package/dist/plugins/arktype.js.map +1 -1
  42. package/dist/plugins/effect.d.ts +53 -0
  43. package/dist/plugins/effect.d.ts.map +1 -0
  44. package/dist/plugins/effect.js +1074 -0
  45. package/dist/plugins/effect.js.map +1 -0
  46. package/dist/plugins/http-elysia.d.ts +32 -0
  47. package/dist/plugins/http-elysia.d.ts.map +1 -0
  48. package/dist/plugins/http-elysia.js +613 -0
  49. package/dist/plugins/http-elysia.js.map +1 -0
  50. package/dist/plugins/http-express.d.ts +36 -0
  51. package/dist/plugins/http-express.d.ts.map +1 -0
  52. package/dist/plugins/http-express.js +388 -0
  53. package/dist/plugins/http-express.js.map +1 -0
  54. package/dist/plugins/http-hono.d.ts +36 -0
  55. package/dist/plugins/http-hono.d.ts.map +1 -0
  56. package/dist/plugins/http-hono.js +453 -0
  57. package/dist/plugins/http-hono.js.map +1 -0
  58. package/dist/plugins/http-orpc.d.ts +55 -0
  59. package/dist/plugins/http-orpc.d.ts.map +1 -0
  60. package/dist/plugins/http-orpc.js +370 -0
  61. package/dist/plugins/http-orpc.js.map +1 -0
  62. package/dist/plugins/http-trpc.d.ts +59 -0
  63. package/dist/plugins/http-trpc.d.ts.map +1 -0
  64. package/dist/plugins/http-trpc.js +392 -0
  65. package/dist/plugins/http-trpc.js.map +1 -0
  66. package/dist/plugins/kysely/queries.d.ts +92 -0
  67. package/dist/plugins/kysely/queries.d.ts.map +1 -0
  68. package/dist/plugins/kysely/queries.js +1169 -0
  69. package/dist/plugins/kysely/queries.js.map +1 -0
  70. package/dist/plugins/kysely/shared.d.ts +59 -0
  71. package/dist/plugins/kysely/shared.d.ts.map +1 -0
  72. package/dist/plugins/kysely/shared.js +247 -0
  73. package/dist/plugins/kysely/shared.js.map +1 -0
  74. package/dist/plugins/kysely/types.d.ts +22 -0
  75. package/dist/plugins/kysely/types.d.ts.map +1 -0
  76. package/dist/plugins/kysely/types.js +428 -0
  77. package/dist/plugins/kysely/types.js.map +1 -0
  78. package/dist/plugins/kysely.d.ts +72 -0
  79. package/dist/plugins/kysely.d.ts.map +1 -0
  80. package/dist/plugins/kysely.js +906 -0
  81. package/dist/plugins/kysely.js.map +1 -0
  82. package/dist/plugins/sql-queries.d.ts +55 -11
  83. package/dist/plugins/sql-queries.d.ts.map +1 -1
  84. package/dist/plugins/sql-queries.js +467 -218
  85. package/dist/plugins/sql-queries.js.map +1 -1
  86. package/dist/plugins/types.d.ts +20 -14
  87. package/dist/plugins/types.d.ts.map +1 -1
  88. package/dist/plugins/types.js +90 -112
  89. package/dist/plugins/types.js.map +1 -1
  90. package/dist/plugins/valibot.d.ts +45 -0
  91. package/dist/plugins/valibot.d.ts.map +1 -0
  92. package/dist/plugins/valibot.js +422 -0
  93. package/dist/plugins/valibot.js.map +1 -0
  94. package/dist/plugins/zod.d.ts +27 -14
  95. package/dist/plugins/zod.d.ts.map +1 -1
  96. package/dist/plugins/zod.js +231 -166
  97. package/dist/plugins/zod.js.map +1 -1
  98. package/dist/services/artifact-store.d.ts +11 -1
  99. package/dist/services/artifact-store.d.ts.map +1 -1
  100. package/dist/services/artifact-store.js +9 -0
  101. package/dist/services/artifact-store.js.map +1 -1
  102. package/dist/services/core-providers.d.ts +15 -0
  103. package/dist/services/core-providers.d.ts.map +1 -0
  104. package/dist/services/core-providers.js +23 -0
  105. package/dist/services/core-providers.js.map +1 -0
  106. package/dist/services/emissions.d.ts +14 -0
  107. package/dist/services/emissions.d.ts.map +1 -1
  108. package/dist/services/emissions.js +86 -47
  109. package/dist/services/emissions.js.map +1 -1
  110. package/dist/services/execution.d.ts +35 -0
  111. package/dist/services/execution.d.ts.map +1 -0
  112. package/dist/services/execution.js +86 -0
  113. package/dist/services/execution.js.map +1 -0
  114. package/dist/services/file-builder.d.ts +4 -0
  115. package/dist/services/file-builder.d.ts.map +1 -1
  116. package/dist/services/file-builder.js.map +1 -1
  117. package/dist/services/inflection.d.ts +2 -2
  118. package/dist/services/inflection.d.ts.map +1 -1
  119. package/dist/services/inflection.js +4 -4
  120. package/dist/services/inflection.js.map +1 -1
  121. package/dist/services/ir-builder.d.ts.map +1 -1
  122. package/dist/services/ir-builder.js +10 -3
  123. package/dist/services/ir-builder.js.map +1 -1
  124. package/dist/services/pg-types.d.ts +31 -0
  125. package/dist/services/pg-types.d.ts.map +1 -1
  126. package/dist/services/pg-types.js +24 -0
  127. package/dist/services/pg-types.js.map +1 -1
  128. package/dist/services/plugin-runner.d.ts +27 -37
  129. package/dist/services/plugin-runner.d.ts.map +1 -1
  130. package/dist/services/plugin-runner.js +73 -171
  131. package/dist/services/plugin-runner.js.map +1 -1
  132. package/dist/services/plugin.d.ts +349 -217
  133. package/dist/services/plugin.d.ts.map +1 -1
  134. package/dist/services/plugin.js +182 -130
  135. package/dist/services/plugin.js.map +1 -1
  136. package/dist/services/resolution.d.ts +38 -0
  137. package/dist/services/resolution.d.ts.map +1 -0
  138. package/dist/services/resolution.js +242 -0
  139. package/dist/services/resolution.js.map +1 -0
  140. package/dist/services/service-registry.d.ts +74 -0
  141. package/dist/services/service-registry.d.ts.map +1 -0
  142. package/dist/services/service-registry.js +61 -0
  143. package/dist/services/service-registry.js.map +1 -0
  144. package/dist/services/symbols.d.ts +59 -0
  145. package/dist/services/symbols.d.ts.map +1 -1
  146. package/dist/services/symbols.js +16 -0
  147. package/dist/services/symbols.js.map +1 -1
  148. package/dist/testing.d.ts +4 -25
  149. package/dist/testing.d.ts.map +1 -1
  150. package/dist/testing.js +2 -23
  151. package/dist/testing.js.map +1 -1
  152. package/package.json +1 -1
  153. package/dist/plugins/effect-model.d.ts +0 -17
  154. package/dist/plugins/effect-model.d.ts.map +0 -1
  155. package/dist/plugins/effect-model.js +0 -409
  156. package/dist/plugins/effect-model.js.map +0 -1
  157. package/dist/plugins/kysely-queries.d.ts +0 -66
  158. package/dist/plugins/kysely-queries.d.ts.map +0 -1
  159. package/dist/plugins/kysely-queries.js +0 -951
  160. package/dist/plugins/kysely-queries.js.map +0 -1
  161. package/dist/plugins/kysely-types.d.ts +0 -35
  162. package/dist/plugins/kysely-types.d.ts.map +0 -1
  163. package/dist/plugins/kysely-types.js +0 -601
  164. package/dist/plugins/kysely-types.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ /**
2
+ * HTTP Express Plugin - Generate Express route handlers from query plugins
3
+ *
4
+ * Consumes method symbols from sql-queries or kysely-queries via the symbol registry
5
+ * and generates type-safe Express HTTP route handlers.
6
+ *
7
+ * Supports validation via schema plugins (zod, valibot, arktype):
8
+ * - Body validation: imports entity schemas (UserInsert, UserUpdate) and uses .parse(req.body)
9
+ * - Path/query param validation: uses schema builder for type coercion
10
+ */
11
+ import { Schema as S } from "effect";
12
+ import { definePlugin } from "../services/plugin.js";
13
+ declare const HttpExpressConfigSchema: S.Struct<{
14
+ /** Output directory for generated route files. Default: "routes" */
15
+ outputDir: S.optionalWith<typeof S.String, {
16
+ default: () => string;
17
+ }>;
18
+ /** Base path for all routes. Default: "/api" */
19
+ basePath: S.optionalWith<typeof S.String, {
20
+ default: () => string;
21
+ }>;
22
+ /** Header content to prepend to each generated file */
23
+ header: S.optional<typeof S.String>;
24
+ /**
25
+ * Name of the aggregated router export.
26
+ * Default: "api"
27
+ */
28
+ aggregatorName: S.optionalWith<typeof S.String, {
29
+ default: () => string;
30
+ }>;
31
+ }>;
32
+ /** Input config type (with optional fields) */
33
+ export type HttpExpressConfig = S.Schema.Encoded<typeof HttpExpressConfigSchema>;
34
+ export declare function httpExpress(config?: HttpExpressConfig): ReturnType<typeof definePlugin>;
35
+ export {};
36
+ //# sourceMappingURL=http-express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-express.d.ts","sourceRoot":"","sources":["../../src/plugins/http-express.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAyCzE,QAAA,MAAM,uBAAuB;IAC3B,oEAAoE;;;;IAGpE,gDAAgD;;;;IAGhD,uDAAuD;;IAGvD;;;OAGG;;;;EAEH,CAAC;AAEH,+CAA+C;AAC/C,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAuXjF,wBAAgB,WAAW,CAAC,MAAM,GAAE,iBAAsB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CA6I3F"}
@@ -0,0 +1,388 @@
1
+ /**
2
+ * HTTP Express Plugin - Generate Express route handlers from query plugins
3
+ *
4
+ * Consumes method symbols from sql-queries or kysely-queries via the symbol registry
5
+ * and generates type-safe Express HTTP route handlers.
6
+ *
7
+ * Supports validation via schema plugins (zod, valibot, arktype):
8
+ * - Body validation: imports entity schemas (UserInsert, UserUpdate) and uses .parse(req.body)
9
+ * - Path/query param validation: uses schema builder for type coercion
10
+ */
11
+ import { Schema as S } from "effect";
12
+ import { definePlugin } from "../services/plugin.js";
13
+ import { conjure, cast } from "../lib/conjure.js";
14
+ import { inflect } from "../services/inflection.js";
15
+ const { b, stmt } = conjure;
16
+ const getBodySchemaImport = (method, entityName) => {
17
+ if (method.kind === "create") {
18
+ return { entity: entityName, shape: "insert", schemaName: `${entityName}Insert` };
19
+ }
20
+ if (method.kind === "update") {
21
+ return { entity: entityName, shape: "update", schemaName: `${entityName}Update` };
22
+ }
23
+ return null;
24
+ };
25
+ // ============================================================================
26
+ // Configuration
27
+ // ============================================================================
28
+ const HttpExpressConfigSchema = S.Struct({
29
+ /** Output directory for generated route files. Default: "routes" */
30
+ outputDir: S.optionalWith(S.String, { default: () => "routes" }),
31
+ /** Base path for all routes. Default: "/api" */
32
+ basePath: S.optionalWith(S.String, { default: () => "/api" }),
33
+ /** Header content to prepend to each generated file */
34
+ header: S.optional(S.String),
35
+ /**
36
+ * Name of the aggregated router export.
37
+ * Default: "api"
38
+ */
39
+ aggregatorName: S.optionalWith(S.String, { default: () => "api" }),
40
+ });
41
+ // ============================================================================
42
+ // String Helpers
43
+ // ============================================================================
44
+ /** Convert PascalCase/camelCase to kebab-case */
45
+ const toKebabCase = (str) => str
46
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
47
+ .replace(/_/g, "-")
48
+ .toLowerCase();
49
+ /** Convert entity name to URL path segment (kebab-case plural) */
50
+ const entityToPathSegment = (entityName) => inflect.pluralize(toKebabCase(entityName));
51
+ // ============================================================================
52
+ // Route Generation Helpers
53
+ // ============================================================================
54
+ /** Map query method kind to HTTP method */
55
+ const kindToHttpMethod = (kind) => {
56
+ switch (kind) {
57
+ case "read":
58
+ case "list":
59
+ case "lookup":
60
+ return "get";
61
+ case "create":
62
+ return "post";
63
+ case "update":
64
+ return "put";
65
+ case "delete":
66
+ return "delete";
67
+ case "function":
68
+ return "post";
69
+ }
70
+ };
71
+ /** Get the route path for a method */
72
+ const getRoutePath = (method) => {
73
+ switch (method.kind) {
74
+ case "read":
75
+ case "update":
76
+ case "delete": {
77
+ const pkParam = method.params.find(p => p.source === "pk");
78
+ const paramName = pkParam?.name ?? "id";
79
+ return `/:${paramName}`;
80
+ }
81
+ case "list":
82
+ case "create":
83
+ return "/";
84
+ case "lookup": {
85
+ const field = method.lookupField ?? "field";
86
+ const fieldKebab = toKebabCase(field);
87
+ const lookupParam = method.params.find(p => p.source === "lookup" || p.source === "fk");
88
+ const paramName = lookupParam?.name ?? field;
89
+ return `/by-${fieldKebab}/:${paramName}`;
90
+ }
91
+ case "function": {
92
+ return `/${toKebabCase(method.name)}`;
93
+ }
94
+ }
95
+ };
96
+ /**
97
+ * Build the handler function body for a query method.
98
+ * In Express, we use req.params, req.query, req.body, res.json()
99
+ *
100
+ * When validation is enabled, uses schema.parse() for body and converts path params.
101
+ */
102
+ const buildHandlerBody = (method, entityName, options) => {
103
+ const statements = [];
104
+ const callSig = method.callSignature ?? { style: "named" };
105
+ const { hasSchemaProvider, bodySchema, pathParams } = options;
106
+ // Extract path params with validation if schema provider available
107
+ if (pathParams.length > 0 && hasSchemaProvider) {
108
+ const firstParam = pathParams[0];
109
+ // Use schema builder to validate and coerce path params
110
+ // const _params = UserIdParams["~standard"].validate({ id: req.params.id });
111
+ // if (_params.issues) return res.status(400).json({ error: _params.issues });
112
+ // const { id } = _params.value;
113
+ const paramsObject = b.objectExpression([
114
+ b.property("init", b.stringLiteral(firstParam.name), b.memberExpression(b.memberExpression(b.identifier("req"), b.identifier("params")), b.identifier(firstParam.name))),
115
+ ]);
116
+ const paramsSchemaName = `${entityName}${firstParam.name.charAt(0).toUpperCase() + firstParam.name.slice(1)}Params`;
117
+ const standardMember = b.memberExpression(b.identifier(paramsSchemaName), b.stringLiteral("~standard"), true);
118
+ const validateCall = b.memberExpression(cast.toExpr(standardMember), b.identifier("validate"));
119
+ const validationExpr = b.callExpression(validateCall, [paramsObject]);
120
+ const validationVar = b.variableDeclarator(b.identifier("_params"), b.awaitExpression(validationExpr));
121
+ statements.push(b.variableDeclaration("const", [validationVar]));
122
+ // if (_params.issues) return res.status(400).json({ error: _params.issues });
123
+ const errorResponse = b.callExpression(b.memberExpression(b.callExpression(b.memberExpression(b.identifier("res"), b.identifier("status")), [b.numericLiteral(400)]), b.identifier("json")), [b.objectExpression([b.property("init", b.stringLiteral("error"), b.memberExpression(b.identifier("_params"), b.identifier("issues")))])]);
124
+ const ifStatement = b.ifStatement(b.memberExpression(b.identifier("_params"), b.identifier("issues")), b.blockStatement([b.returnStatement(errorResponse)]));
125
+ statements.push(ifStatement);
126
+ // Destructure validated params: const { id } = _params.value;
127
+ const pattern = b.objectPattern(pathParams.map(p => {
128
+ const prop = b.property("init", b.identifier(p.name), b.identifier(p.name));
129
+ prop.shorthand = true;
130
+ return prop;
131
+ }));
132
+ statements.push(b.variableDeclaration("const", [
133
+ b.variableDeclarator(pattern, b.memberExpression(b.identifier("_params"), b.identifier("value"))),
134
+ ]));
135
+ }
136
+ else if (pathParams.length > 0) {
137
+ // No schema provider - just extract without validation
138
+ const pattern = b.objectPattern(pathParams.map(p => {
139
+ const prop = b.property("init", b.identifier(p.name), b.identifier(p.name));
140
+ prop.shorthand = true;
141
+ return prop;
142
+ }));
143
+ statements.push(b.variableDeclaration("const", [
144
+ b.variableDeclarator(pattern, b.memberExpression(b.identifier("req"), b.identifier("params"))),
145
+ ]));
146
+ }
147
+ // Extract query params: const { limit, offset } = req.query
148
+ const queryParams = method.params.filter(p => p.source === "pagination");
149
+ if (queryParams.length > 0) {
150
+ const pattern = b.objectPattern(queryParams.map(p => {
151
+ const prop = b.property("init", b.identifier(p.name), b.identifier(p.name));
152
+ prop.shorthand = true;
153
+ return prop;
154
+ }));
155
+ statements.push(b.variableDeclaration("const", [
156
+ b.variableDeclarator(pattern, b.memberExpression(b.identifier("req"), b.identifier("query"))),
157
+ ]));
158
+ }
159
+ // Extract body with optional validation
160
+ const needsBody = method.params.some(p => p.source === "body") ||
161
+ method.kind === "create" ||
162
+ method.kind === "update" ||
163
+ (method.kind === "function" && method.params.some(p => !p.source));
164
+ if (needsBody) {
165
+ if (bodySchema && hasSchemaProvider) {
166
+ // Validation handled below using Standard Schema interface
167
+ }
168
+ else {
169
+ // const body = req.body
170
+ statements.push(stmt.const("body", b.memberExpression(b.identifier("req"), b.identifier("body"))));
171
+ }
172
+ }
173
+ // Validate body using Standard Schema interface (works with zod, valibot, arktype)
174
+ if (bodySchema && hasSchemaProvider) {
175
+ // const validation = UserInsert["~standard"].validate(req.body);
176
+ // if (validation.issues) throw new Error("Validation failed");
177
+ // const body = validation.value;
178
+ const standardMember = b.memberExpression(b.identifier(bodySchema.schemaName), b.stringLiteral("~standard"), true);
179
+ const validateCall = b.memberExpression(cast.toExpr(standardMember), b.identifier("validate"));
180
+ const validationExpr = b.callExpression(validateCall, [
181
+ b.memberExpression(b.identifier("req"), b.identifier("body")),
182
+ ]);
183
+ const validationVar = b.variableDeclarator(b.identifier("validation"), b.awaitExpression(validationExpr));
184
+ statements.push(b.variableDeclaration("const", [validationVar]));
185
+ // if (validation.issues) return res.status(400).json({ error: validation.issues });
186
+ const errorResponse = b.callExpression(b.memberExpression(b.callExpression(b.memberExpression(b.identifier("res"), b.identifier("status")), [b.numericLiteral(400)]), b.identifier("json")), [b.objectExpression([b.property("init", b.stringLiteral("error"), b.memberExpression(b.identifier("validation"), b.identifier("issues")))])]);
187
+ const ifStatement = b.ifStatement(b.memberExpression(b.identifier("validation"), b.identifier("issues")), b.blockStatement([b.returnStatement(errorResponse)]));
188
+ statements.push(ifStatement);
189
+ // const body = validation.value;
190
+ statements.push(stmt.const("body", b.memberExpression(b.identifier("validation"), b.identifier("value"))));
191
+ }
192
+ // Build the function call arguments
193
+ const args = [];
194
+ if (callSig.style === "positional") {
195
+ for (const param of method.params) {
196
+ if (param.source === "pk" ||
197
+ param.source === "fk" ||
198
+ param.source === "lookup" ||
199
+ param.source === "pagination") {
200
+ args.push(b.identifier(param.name));
201
+ }
202
+ else if (param.source === "body") {
203
+ args.push(b.identifier("body"));
204
+ }
205
+ else {
206
+ args.push(b.memberExpression(b.identifier("body"), b.identifier(param.name)));
207
+ }
208
+ }
209
+ }
210
+ else {
211
+ const bodyParam = method.params.find(p => p.source === "body");
212
+ if (bodyParam && callSig.bodyStyle === "spread") {
213
+ args.push(b.identifier("body"));
214
+ }
215
+ else if (bodyParam && callSig.bodyStyle === "property") {
216
+ let objBuilder = conjure.obj();
217
+ for (const param of method.params) {
218
+ if (param.source === "pk" ||
219
+ param.source === "fk" ||
220
+ param.source === "lookup" ||
221
+ param.source === "pagination") {
222
+ objBuilder = objBuilder.shorthand(param.name);
223
+ }
224
+ }
225
+ objBuilder = objBuilder.prop(bodyParam.name, b.identifier("body"));
226
+ args.push(objBuilder.build());
227
+ }
228
+ else {
229
+ let objBuilder = conjure.obj();
230
+ for (const param of method.params) {
231
+ if (param.source === "pk" ||
232
+ param.source === "fk" ||
233
+ param.source === "lookup" ||
234
+ param.source === "pagination") {
235
+ objBuilder = objBuilder.shorthand(param.name);
236
+ }
237
+ }
238
+ if (method.params.length > 0) {
239
+ args.push(objBuilder.build());
240
+ }
241
+ }
242
+ }
243
+ // Build: const result = await Queries.queryFn(args)
244
+ const queryCall = b.callExpression(b.memberExpression(b.identifier("Queries"), b.identifier(method.name)), args.map(cast.toExpr));
245
+ statements.push(stmt.const("result", b.awaitExpression(queryCall)));
246
+ // Handle 404 for read/lookup that returns null
247
+ if (method.kind === "read" || (method.kind === "lookup" && method.isUniqueLookup)) {
248
+ // if (!result) return res.status(404).json({ error: 'Not found' })
249
+ const notFoundResponse = b.callExpression(b.memberExpression(b.callExpression(b.memberExpression(b.identifier("res"), b.identifier("status")), [
250
+ b.numericLiteral(404),
251
+ ]), b.identifier("json")), [conjure.obj().prop("error", b.stringLiteral("Not found")).build()]);
252
+ statements.push(b.ifStatement(b.unaryExpression("!", b.identifier("result")), b.returnStatement(notFoundResponse)));
253
+ }
254
+ // return res.json(result) or res.status(201).json(result) for create
255
+ let responseExpr;
256
+ if (method.kind === "create") {
257
+ // res.status(201).json(result)
258
+ responseExpr = b.callExpression(b.memberExpression(b.callExpression(b.memberExpression(b.identifier("res"), b.identifier("status")), [
259
+ b.numericLiteral(201),
260
+ ]), b.identifier("json")), [b.identifier("result")]);
261
+ }
262
+ else {
263
+ // res.json(result)
264
+ responseExpr = b.callExpression(b.memberExpression(b.identifier("res"), b.identifier("json")), [
265
+ b.identifier("result"),
266
+ ]);
267
+ }
268
+ statements.push(b.returnStatement(cast.toExpr(responseExpr)));
269
+ return statements;
270
+ };
271
+ /**
272
+ * Build a single route method call: router.get('/path', handler)
273
+ */
274
+ const buildRouteCall = (method, entityName, options) => {
275
+ const httpMethod = kindToHttpMethod(method.kind);
276
+ const path = getRoutePath(method);
277
+ // Build handler: async (req, res) => { ... }
278
+ const handlerBody = buildHandlerBody(method, entityName, options);
279
+ const handler = b.arrowFunctionExpression([b.identifier("req"), b.identifier("res")], b.blockStatement(handlerBody.map(cast.toStmt)));
280
+ handler.async = true;
281
+ return { httpMethod, path, handler };
282
+ };
283
+ // ============================================================================
284
+ // Plugin Definition
285
+ // ============================================================================
286
+ export function httpExpress(config = {}) {
287
+ const parsed = S.decodeUnknownSync(HttpExpressConfigSchema)(config);
288
+ return definePlugin({
289
+ name: "http-express",
290
+ kind: "http-routes",
291
+ singleton: true,
292
+ canProvide: () => true,
293
+ requires: () => [{ kind: "queries", params: {} }],
294
+ optionalRequires: () => [{ kind: "schemas", params: {} }],
295
+ provide: (_params, _deps, ctx) => {
296
+ const { outputDir, basePath, header, aggregatorName } = parsed;
297
+ const entityNames = ctx.symbols.getEntitiesWithMethods();
298
+ if (entityNames.length === 0) {
299
+ return;
300
+ }
301
+ const generatedRoutes = [];
302
+ for (const entityName of entityNames) {
303
+ const entityMethods = ctx.symbols.getEntityMethods(entityName);
304
+ if (!entityMethods || entityMethods.methods.length === 0)
305
+ continue;
306
+ const pathSegment = entityToPathSegment(entityName);
307
+ const filePath = `${outputDir}/${inflect.uncapitalize(entityName)}.ts`;
308
+ const routesVarName = `${inflect.uncapitalize(entityName)}Routes`;
309
+ const file = ctx.file(filePath);
310
+ if (header) {
311
+ file.header(header);
312
+ }
313
+ // Import Router from express
314
+ file.import({ kind: "package", names: ["Router"], from: "express" });
315
+ // Import queries as namespace
316
+ const queriesImportPath = `../${entityMethods.importPath.replace(/\.ts$/, ".js")}`;
317
+ file.import({
318
+ kind: "relative",
319
+ namespace: "Queries",
320
+ from: queriesImportPath,
321
+ });
322
+ // Check if a schema provider is available for body validation
323
+ const hasSchemaProvider = ctx.symbols.resolve({
324
+ capability: "schemas",
325
+ entity: entityName,
326
+ shape: "insert",
327
+ }) !== undefined;
328
+ // Collect body schemas needed for imports
329
+ const bodySchemasNeeded = [];
330
+ // Build the Express router chain
331
+ // Router().get('/path', handler).post('/path', handler)...
332
+ let chainExpr = b.callExpression(b.identifier("Router"), []);
333
+ for (const method of entityMethods.methods) {
334
+ const pathParams = method.params.filter(p => p.source === "pk" || p.source === "fk" || p.source === "lookup");
335
+ const bodySchema = getBodySchemaImport(method, entityName);
336
+ if (bodySchema && hasSchemaProvider) {
337
+ bodySchemasNeeded.push(bodySchema);
338
+ }
339
+ const { httpMethod, path, handler } = buildRouteCall(method, entityName, {
340
+ hasSchemaProvider,
341
+ bodySchema,
342
+ pathParams,
343
+ });
344
+ chainExpr = b.callExpression(b.memberExpression(cast.toExpr(chainExpr), b.identifier(httpMethod)), [b.stringLiteral(path), handler]);
345
+ }
346
+ // Import schemas needed for body validation
347
+ for (const schema of bodySchemasNeeded) {
348
+ file.import({
349
+ kind: "symbol",
350
+ ref: { capability: "schemas", entity: schema.entity, shape: schema.shape },
351
+ });
352
+ }
353
+ const exportStmt = conjure.export.const(routesVarName, chainExpr);
354
+ file.ast(conjure.program(exportStmt)).emit();
355
+ generatedRoutes.push({
356
+ fileName: `${inflect.uncapitalize(entityName)}.js`,
357
+ exportName: routesVarName,
358
+ pathSegment,
359
+ });
360
+ }
361
+ // Generate aggregator index.ts
362
+ if (generatedRoutes.length > 0) {
363
+ const indexPath = `${outputDir}/index.ts`;
364
+ const indexFile = ctx.file(indexPath);
365
+ if (header) {
366
+ indexFile.header(header);
367
+ }
368
+ indexFile.import({ kind: "package", names: ["Router"], from: "express" });
369
+ for (const route of generatedRoutes) {
370
+ indexFile.import({
371
+ kind: "relative",
372
+ names: [route.exportName],
373
+ from: `./${route.fileName}`,
374
+ });
375
+ }
376
+ // Build: Router().use('/users', userRoutes).use('/posts', postRoutes)...
377
+ let chainExpr = b.callExpression(b.identifier("Router"), []);
378
+ // Add routes with their path prefixes
379
+ for (const route of generatedRoutes) {
380
+ chainExpr = b.callExpression(b.memberExpression(cast.toExpr(chainExpr), b.identifier("use")), [b.stringLiteral(`${basePath}/${route.pathSegment}`), b.identifier(route.exportName)]);
381
+ }
382
+ const exportStmt = conjure.export.const(aggregatorName, chainExpr);
383
+ indexFile.ast(conjure.program(exportStmt)).emit();
384
+ }
385
+ },
386
+ });
387
+ }
388
+ //# sourceMappingURL=http-express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-express.js","sourceRoot":"","sources":["../../src/plugins/http-express.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * HTTP Hono Plugin - Generate Hono route handlers from query plugins
3
+ *
4
+ * Consumes method symbols from sql-queries or kysely-queries via the symbol registry
5
+ * and generates type-safe Hono HTTP route handlers.
6
+ *
7
+ * Schema validation is provided via @hono/standard-validator when a schema plugin
8
+ * (zod, valibot, arktype) is configured. Without a schema plugin, routes are
9
+ * generated without validation middleware.
10
+ */
11
+ import { Schema as S } from "effect";
12
+ import { definePlugin } from "../services/plugin.js";
13
+ declare const HttpHonoConfigSchema: S.Struct<{
14
+ /** Output directory for generated route files. Default: "routes" */
15
+ outputDir: S.optionalWith<typeof S.String, {
16
+ default: () => string;
17
+ }>;
18
+ /** Base path for all routes. Default: "/api" */
19
+ basePath: S.optionalWith<typeof S.String, {
20
+ default: () => string;
21
+ }>;
22
+ /** Header content to prepend to each generated file */
23
+ header: S.optional<typeof S.String>;
24
+ /**
25
+ * Name of the aggregated router export.
26
+ * Default: "api"
27
+ */
28
+ aggregatorName: S.optionalWith<typeof S.String, {
29
+ default: () => string;
30
+ }>;
31
+ }>;
32
+ /** Input config type (with optional fields) */
33
+ export type HttpHonoConfig = S.Schema.Encoded<typeof HttpHonoConfigSchema>;
34
+ export declare function httpHono(config?: HttpHonoConfig): ReturnType<typeof definePlugin>;
35
+ export {};
36
+ //# sourceMappingURL=http-hono.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-hono.d.ts","sourceRoot":"","sources":["../../src/plugins/http-hono.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAoBzE,QAAA,MAAM,oBAAoB;IACxB,oEAAoE;;;;IAGpE,gDAAgD;;;;IAGhD,uDAAuD;;IAGvD;;;OAGG;;;;EAEH,CAAC;AAEH,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAwa3E,wBAAgB,QAAQ,CAAC,MAAM,GAAE,cAAmB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAwLrF"}