@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,422 @@
1
+ /**
2
+ * Valibot Plugin - Generate Valibot schemas for entities
3
+ *
4
+ * Generates Valibot schemas for Row, Insert, Update, and Patch shapes,
5
+ * with inferred TypeScript types.
6
+ */
7
+ import { Array as Arr, Option, pipe, Schema as S } from "effect";
8
+ import { definePlugin } from "../services/plugin.js";
9
+ import { findEnumByPgName, TsType } from "../services/pg-types.js";
10
+ import { getTableEntities, getEnumEntities, getCompositeEntities } from "../ir/semantic-ir.js";
11
+ import { conjure } from "../lib/conjure.js";
12
+ import { isUuidType, isDateType, isEnumType, getPgTypeName, resolveFieldType, } from "../lib/field-utils.js";
13
+ import { SCHEMA_BUILDER_KIND, } from "../ir/extensions/schema-builder.js";
14
+ const { ts, exp, obj, b } = conjure;
15
+ // ============================================================================
16
+ // Configuration
17
+ // ============================================================================
18
+ const ValibotConfigSchema = S.Struct({
19
+ /** Output directory relative to main outputDir */
20
+ outputDir: S.optionalWith(S.String, { default: () => "valibot" }),
21
+ /** Export inferred types alongside schemas */
22
+ exportTypes: S.optionalWith(S.Boolean, { default: () => true }),
23
+ /** How to represent enum values: 'strings' uses v.picklist([...]), 'enum' uses v.enum(TsEnum) */
24
+ enumStyle: S.optionalWith(S.Union(S.Literal("strings"), S.Literal("enum")), {
25
+ default: () => "strings",
26
+ }),
27
+ /** Where to define enum types: 'inline' embeds at usage, 'separate' generates enum files */
28
+ typeReferences: S.optionalWith(S.Union(S.Literal("inline"), S.Literal("separate")), {
29
+ default: () => "separate",
30
+ }),
31
+ });
32
+ // ============================================================================
33
+ // Valibot Schema Builders (pure functions)
34
+ // ============================================================================
35
+ // ============================================================================
36
+ // Valibot Schema Builders (pure functions)
37
+ // ============================================================================
38
+ /**
39
+ * Build v.<method>() call
40
+ */
41
+ const buildValibotCall = (method, args = []) => conjure
42
+ .id("v")
43
+ .method(method, [...args])
44
+ .build();
45
+ /**
46
+ * Build v.picklist([...values])
47
+ */
48
+ const buildValibotPicklist = (values) => buildValibotCall("picklist", [conjure.arr(...values.map(v => conjure.str(v))).build()]);
49
+ /**
50
+ * Build v.array(<inner>)
51
+ */
52
+ const buildValibotArray = (inner) => buildValibotCall("array", [inner]);
53
+ /**
54
+ * Wrap expression with v.nullable(...)
55
+ */
56
+ const wrapNullable = (expr) => buildValibotCall("nullable", [expr]);
57
+ /**
58
+ * Wrap expression with v.optional(...)
59
+ */
60
+ const wrapOptional = (expr) => buildValibotCall("optional", [expr]);
61
+ /**
62
+ * Map TypeScript type to Valibot method name
63
+ */
64
+ const tsTypeToValibotMethod = (tsType) => {
65
+ switch (tsType) {
66
+ case TsType.String:
67
+ return "string";
68
+ case TsType.Number:
69
+ return "number";
70
+ case TsType.Boolean:
71
+ return "boolean";
72
+ case TsType.BigInt:
73
+ return "bigint";
74
+ case TsType.Date:
75
+ return "date";
76
+ case TsType.Buffer:
77
+ case TsType.Unknown:
78
+ default:
79
+ return "unknown";
80
+ }
81
+ };
82
+ /**
83
+ * Apply nullable/optional/array modifiers to a base schema
84
+ * Order matters: array wraps first, then nullable, then optional
85
+ */
86
+ const applyFieldModifiers = (schema, field) => {
87
+ let result = schema;
88
+ // Array wrapping first
89
+ if (field.isArray) {
90
+ result = buildValibotArray(result);
91
+ }
92
+ // Nullable wrapping
93
+ if (field.nullable) {
94
+ result = wrapNullable(result);
95
+ }
96
+ // Optional wrapping
97
+ if (field.optional) {
98
+ result = wrapOptional(result);
99
+ }
100
+ return result;
101
+ };
102
+ /**
103
+ * Resolve a field to its Valibot schema expression
104
+ */
105
+ const resolveFieldValibotSchema = (field, ctx) => {
106
+ const resolved = resolveFieldType(field, ctx.enums, ctx.extensions);
107
+ // Enum handling
108
+ if (resolved.enumDef) {
109
+ let enumSchema;
110
+ if (ctx.typeReferences === "separate") {
111
+ // Reference by name - the enum schema is imported
112
+ enumSchema = conjure.id(resolved.enumDef.name).build();
113
+ }
114
+ else if (ctx.enumStyle === "enum") {
115
+ // Inline native enum: v.enum(EnumName)
116
+ // Note: This requires the TS enum to be generated separately
117
+ enumSchema = buildValibotCall("enum", [conjure.id(resolved.enumDef.name).build()]);
118
+ }
119
+ else {
120
+ // Inline strings: v.picklist(['a', 'b', 'c'])
121
+ enumSchema = buildValibotPicklist(resolved.enumDef.values);
122
+ }
123
+ return applyFieldModifiers(enumSchema, field);
124
+ }
125
+ // UUID → v.pipe(v.string(), v.uuid())
126
+ if (isUuidType(field)) {
127
+ const uuidSchema = buildValibotCall("pipe", [
128
+ buildValibotCall("string"),
129
+ buildValibotCall("uuid"),
130
+ ]);
131
+ return applyFieldModifiers(uuidSchema, field);
132
+ }
133
+ // Date/timestamp → v.date()
134
+ if (isDateType(field)) {
135
+ return applyFieldModifiers(buildValibotCall("date"), field);
136
+ }
137
+ // Standard type mapping
138
+ return applyFieldModifiers(buildValibotCall(tsTypeToValibotMethod(resolved.tsType)), field);
139
+ };
140
+ // ============================================================================
141
+ // Shape → Statement Generation
142
+ // ============================================================================
143
+ /**
144
+ * Build v.object({...}) expression from shape fields
145
+ */
146
+ const buildShapeValibotObject = (shape, ctx) => {
147
+ const objBuilder = shape.fields.reduce((builder, field) => builder.prop(field.name, resolveFieldValibotSchema(field, ctx)), obj());
148
+ return buildValibotCall("object", [objBuilder.build()]);
149
+ };
150
+ /**
151
+ * Generate schema const + optional inferred type for a shape
152
+ */
153
+ const generateShapeStatements = (shape, entityName, shapeKind, ctx, exportTypes) => {
154
+ const schemaSymbolCtx = { capability: "schemas", entity: entityName, shape: shapeKind };
155
+ const schemaExpr = buildShapeValibotObject(shape, ctx);
156
+ const schemaStatement = exp.const(shape.name, schemaSymbolCtx, schemaExpr);
157
+ if (!exportTypes) {
158
+ return [schemaStatement];
159
+ }
160
+ // Generate: export type ShapeName = v.InferOutput<typeof ShapeName>
161
+ // Register under "types" capability so other plugins can import
162
+ const typeSymbolCtx = { capability: "types", entity: entityName, shape: shapeKind };
163
+ const inferType = ts.qualifiedRef("v", "InferOutput", [ts.typeof(shape.name)]);
164
+ const typeStatement = exp.type(shape.name, typeSymbolCtx, inferType);
165
+ return [schemaStatement, typeStatement];
166
+ };
167
+ /**
168
+ * Collect all defined shapes from an entity as [kind, shape] pairs
169
+ */
170
+ const collectShapes = (entity) => [
171
+ ["row", entity.shapes.row],
172
+ ["insert", entity.shapes.insert],
173
+ ["update", entity.shapes.update],
174
+ ].filter((entry) => entry[1] != null);
175
+ /**
176
+ * Generate all statements for an entity's shapes
177
+ */
178
+ const generateEntityStatements = (entity, ctx, exportTypes) => collectShapes(entity).flatMap(([kind, shape]) => generateShapeStatements(shape, entity.name, kind, ctx, exportTypes));
179
+ // ============================================================================
180
+ // Composite Type Generation
181
+ // ============================================================================
182
+ /**
183
+ * Build v.object({...}) expression from composite fields
184
+ */
185
+ const buildCompositeValibotObject = (composite, ctx) => {
186
+ const objBuilder = composite.fields.reduce((builder, field) => builder.prop(field.name, resolveFieldValibotSchema(field, ctx)), obj());
187
+ return buildValibotCall("object", [objBuilder.build()]);
188
+ };
189
+ /**
190
+ * Generate schema const + optional inferred type for a composite type
191
+ */
192
+ const generateCompositeStatements = (composite, ctx, exportTypes) => {
193
+ const schemaSymbolCtx = { capability: "schemas", entity: composite.name };
194
+ const schemaExpr = buildCompositeValibotObject(composite, ctx);
195
+ const schemaStatement = exp.const(composite.name, schemaSymbolCtx, schemaExpr);
196
+ if (!exportTypes) {
197
+ return [schemaStatement];
198
+ }
199
+ // Generate: export type CompositeName = v.InferOutput<typeof CompositeName>
200
+ // Register under "types" capability so other plugins can import
201
+ const typeSymbolCtx = { capability: "types", entity: composite.name };
202
+ const inferType = ts.qualifiedRef("v", "InferOutput", [ts.typeof(composite.name)]);
203
+ const typeStatement = exp.type(composite.name, typeSymbolCtx, inferType);
204
+ return [schemaStatement, typeStatement];
205
+ };
206
+ // ============================================================================
207
+ // Enum Generation
208
+ // ============================================================================
209
+ /**
210
+ * Generate enum schema statement: export const EnumName = v.picklist(['a', 'b', ...])
211
+ * or for native enums: export enum EnumName { A = 'a', ... } + schema
212
+ */
213
+ const generateEnumStatement = (enumEntity, enumStyle, exportTypes) => {
214
+ const schemaSymbolCtx = { capability: "schemas", entity: enumEntity.name };
215
+ if (enumStyle === "enum") {
216
+ // Generate: export enum EnumName { A = 'a', B = 'b', ... }
217
+ // Then: export const EnumNameSchema = v.enum(EnumName)
218
+ const enumStatement = exp.tsEnum(enumEntity.name, { capability: "types", entity: enumEntity.name }, enumEntity.values);
219
+ const schemaName = `${enumEntity.name}Schema`;
220
+ const schemaExpr = buildValibotCall("enum", [conjure.id(enumEntity.name).build()]);
221
+ const schemaStatement = exp.const(schemaName, schemaSymbolCtx, schemaExpr);
222
+ return [enumStatement, schemaStatement];
223
+ }
224
+ // strings style: export const EnumName = v.picklist(['a', 'b', ...])
225
+ const schemaExpr = buildValibotPicklist(enumEntity.values);
226
+ const schemaStatement = exp.const(enumEntity.name, schemaSymbolCtx, schemaExpr);
227
+ if (!exportTypes) {
228
+ return [schemaStatement];
229
+ }
230
+ // Generate: export type EnumName = v.InferOutput<typeof EnumName>
231
+ // Register under "types" capability so other plugins can import
232
+ const typeSymbolCtx = { capability: "types", entity: enumEntity.name };
233
+ const inferType = ts.qualifiedRef("v", "InferOutput", [ts.typeof(enumEntity.name)]);
234
+ const typeStatement = exp.type(enumEntity.name, typeSymbolCtx, inferType);
235
+ return [schemaStatement, typeStatement];
236
+ };
237
+ /** Collect enum names used by fields */
238
+ const collectUsedEnums = (fields, enums) => {
239
+ const enumNames = fields.filter(isEnumType).flatMap(field => {
240
+ const pgTypeName = getPgTypeName(field);
241
+ if (!pgTypeName)
242
+ return [];
243
+ return pipe(findEnumByPgName(enums, pgTypeName), Option.map(e => e.name), Option.toArray);
244
+ });
245
+ return new Set(enumNames);
246
+ };
247
+ /** Build import refs for used enums */
248
+ const buildEnumImports = (usedEnums) => Arr.fromIterable(usedEnums).map(enumName => ({
249
+ kind: "symbol",
250
+ ref: { capability: "schemas", entity: enumName },
251
+ }));
252
+ // ============================================================================
253
+ // Param Schema Builder (for HTTP plugins)
254
+ // ============================================================================
255
+ /**
256
+ * Build Valibot schema expression for a single param.
257
+ * Uses v.pipe(v.string(), v.transform(...)) for type coercion since URL params are strings.
258
+ */
259
+ const buildParamFieldSchema = (param) => {
260
+ const tsType = param.type.toLowerCase();
261
+ let fieldSchema;
262
+ switch (tsType) {
263
+ case "number":
264
+ // v.pipe(v.string(), v.transform(Number))
265
+ fieldSchema = buildValibotCall("pipe", [
266
+ buildValibotCall("string"),
267
+ buildValibotCall("transform", [conjure.id("Number").build()]),
268
+ ]);
269
+ break;
270
+ case "boolean":
271
+ // v.pipe(v.string(), v.transform(v => v === 'true'))
272
+ fieldSchema = buildValibotCall("pipe", [
273
+ buildValibotCall("string"),
274
+ buildValibotCall("transform", [
275
+ b.arrowFunctionExpression([b.identifier("v")], b.binaryExpression("===", b.identifier("v"), b.stringLiteral("true"))),
276
+ ]),
277
+ ]);
278
+ break;
279
+ case "bigint":
280
+ // v.pipe(v.string(), v.transform(BigInt))
281
+ fieldSchema = buildValibotCall("pipe", [
282
+ buildValibotCall("string"),
283
+ buildValibotCall("transform", [conjure.id("BigInt").build()]),
284
+ ]);
285
+ break;
286
+ case "date":
287
+ // v.pipe(v.string(), v.transform(s => new Date(s)))
288
+ fieldSchema = buildValibotCall("pipe", [
289
+ buildValibotCall("string"),
290
+ buildValibotCall("transform", [
291
+ b.arrowFunctionExpression([b.identifier("s")], b.newExpression(b.identifier("Date"), [b.identifier("s")])),
292
+ ]),
293
+ ]);
294
+ break;
295
+ case "string":
296
+ default:
297
+ // v.string()
298
+ fieldSchema = buildValibotCall("string");
299
+ break;
300
+ }
301
+ // Add v.optional(...) for non-required params
302
+ if (!param.required) {
303
+ fieldSchema = wrapOptional(fieldSchema);
304
+ }
305
+ return fieldSchema;
306
+ };
307
+ /**
308
+ * Build v.object({ ... }) expression from QueryMethodParam[].
309
+ */
310
+ const buildParamValibotObject = (params) => {
311
+ const objBuilder = params.reduce((builder, param) => builder.prop(param.name, buildParamFieldSchema(param)), obj());
312
+ return buildValibotCall("object", [objBuilder.build()]);
313
+ };
314
+ /**
315
+ * Create a SchemaBuilder implementation for Valibot.
316
+ */
317
+ const createValibotSchemaBuilder = () => ({
318
+ build: (request) => {
319
+ if (request.params.length === 0) {
320
+ return undefined;
321
+ }
322
+ const ast = buildParamValibotObject(request.params);
323
+ return {
324
+ ast,
325
+ importSpec: {
326
+ namespace: "v",
327
+ from: "valibot",
328
+ },
329
+ };
330
+ },
331
+ });
332
+ // ============================================================================
333
+ // Provider Definition
334
+ // ============================================================================
335
+ /**
336
+ * Create a valibot provider that generates Valibot schemas.
337
+ *
338
+ * @example
339
+ * ```typescript
340
+ * import { valibot } from "pg-sourcerer"
341
+ *
342
+ * export default defineConfig({
343
+ * plugins: [
344
+ * valibot(),
345
+ * valibot({ outputDir: "schemas", exportTypes: false }),
346
+ * ],
347
+ * })
348
+ * ```
349
+ */
350
+ export function valibot(config = {}) {
351
+ const parsed = S.decodeUnknownSync(ValibotConfigSchema)(config);
352
+ return definePlugin({
353
+ name: "valibot",
354
+ kind: "schemas",
355
+ singleton: true,
356
+ canProvide: () => true,
357
+ provide: (_params, _deps, ctx) => {
358
+ const { ir, inflection } = ctx;
359
+ const enumEntities = getEnumEntities(ir);
360
+ // Register schema-builder service for on-demand param/query schema generation
361
+ ctx.registerHandler(SCHEMA_BUILDER_KIND, createValibotSchemaBuilder().build);
362
+ const fieldCtx = {
363
+ enums: enumEntities,
364
+ extensions: ir.extensions,
365
+ enumStyle: parsed.enumStyle,
366
+ typeReferences: parsed.typeReferences,
367
+ };
368
+ // Helper to build file path
369
+ const buildFilePath = (entityName) => `${parsed.outputDir}/${entityName}.ts`;
370
+ // Generate separate enum files if configured
371
+ if (parsed.typeReferences === "separate") {
372
+ enumEntities
373
+ .filter(e => e.tags.omit !== true)
374
+ .forEach(enumEntity => {
375
+ const statements = generateEnumStatement(enumEntity, parsed.enumStyle, parsed.exportTypes);
376
+ ctx
377
+ .file(buildFilePath(enumEntity.name))
378
+ .import({ kind: "package", namespace: "v", from: "valibot" })
379
+ .ast(conjure.symbolProgram(...statements))
380
+ .emit();
381
+ });
382
+ }
383
+ getTableEntities(ir)
384
+ .filter(entity => entity.tags.omit !== true)
385
+ .forEach(entity => {
386
+ const statements = generateEntityStatements(entity, fieldCtx, parsed.exportTypes);
387
+ const entityName = inflection.entityName(entity.pgClass, entity.tags);
388
+ // Collect all fields for enum detection
389
+ const allFields = [
390
+ ...entity.shapes.row.fields,
391
+ ...(entity.shapes.insert?.fields ?? []),
392
+ ...(entity.shapes.update?.fields ?? []),
393
+ ];
394
+ const usedEnums = parsed.typeReferences === "separate"
395
+ ? collectUsedEnums(allFields, Arr.fromIterable(fieldCtx.enums))
396
+ : new Set();
397
+ const fileBuilder = ctx
398
+ .file(buildFilePath(entityName))
399
+ .import({ kind: "package", namespace: "v", from: "valibot" });
400
+ // Add enum imports when using separate files
401
+ buildEnumImports(usedEnums).forEach(ref => fileBuilder.import(ref));
402
+ fileBuilder.ast(conjure.symbolProgram(...statements)).emit();
403
+ });
404
+ // Generate composite type schemas
405
+ getCompositeEntities(ir)
406
+ .filter(composite => composite.tags.omit !== true)
407
+ .forEach(composite => {
408
+ const statements = generateCompositeStatements(composite, fieldCtx, parsed.exportTypes);
409
+ // Collect enum usage for imports
410
+ const usedEnums = parsed.typeReferences === "separate"
411
+ ? collectUsedEnums(composite.fields, Arr.fromIterable(fieldCtx.enums))
412
+ : new Set();
413
+ const fileBuilder = ctx
414
+ .file(buildFilePath(composite.name))
415
+ .import({ kind: "package", namespace: "v", from: "valibot" });
416
+ buildEnumImports(usedEnums).forEach(ref => fileBuilder.import(ref));
417
+ fileBuilder.ast(conjure.symbolProgram(...statements)).emit();
418
+ });
419
+ },
420
+ });
421
+ }
422
+ //# sourceMappingURL=valibot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valibot.js","sourceRoot":"","sources":["../../src/plugins/valibot.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,31 @@
1
+ import { definePlugin } from "../services/plugin.js";
1
2
  /**
2
- * Zod Plugin
3
+ * Configuration for the zod provider
4
+ */
5
+ export interface ZodConfig {
6
+ /** Output directory relative to main outputDir */
7
+ readonly outputDir?: string;
8
+ /** Export inferred types alongside schemas */
9
+ readonly exportTypes?: boolean;
10
+ /** How to represent enum values: 'strings' uses z.enum([...]), 'enum' uses z.nativeEnum(TsEnum) */
11
+ readonly enumStyle?: "strings" | "enum";
12
+ /** Where to define enum types: 'inline' embeds at usage, 'separate' generates enum files */
13
+ readonly typeReferences?: "inline" | "separate";
14
+ }
15
+ /**
16
+ * Create a zod provider that generates Zod schemas.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { zod } from "pg-sourcerer"
3
21
  *
4
- * Generates Zod schemas for each entity's shapes (base, Insert, Update)
5
- * with inferred TypeScript types.
22
+ * export default defineConfig({
23
+ * plugins: [
24
+ * zod(),
25
+ * zod({ outputDir: "schemas", exportTypes: false }),
26
+ * ],
27
+ * })
28
+ * ```
6
29
  */
7
- export declare const zodPlugin: import("../index.js").PluginFactory<{
8
- readonly outputDir: string;
9
- readonly exportTypes: boolean;
10
- readonly enumStyle: "enum" | "strings";
11
- readonly typeReferences: "inline" | "separate";
12
- }, {
13
- readonly outputDir?: string | undefined;
14
- readonly exportTypes?: boolean | undefined;
15
- readonly enumStyle?: "enum" | "strings" | undefined;
16
- readonly typeReferences?: "inline" | "separate" | undefined;
17
- }>;
30
+ export declare function zod(config?: ZodConfig): ReturnType<typeof definePlugin>;
18
31
  //# sourceMappingURL=zod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/plugins/zod.ts"],"names":[],"mappings":"AAqWA;;;;;GAKG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;EA8GpB,CAAC"}
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/plugins/zod.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAmCzE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,mGAAmG;IACnG,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IACvC,4FAA4F;IAC5F,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;CAChD;AA2ZD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,MAAM,GAAE,SAAc,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CA+F3E"}