@danielfgray/pg-sourcerer 0.1.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 (145) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +104 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.d.ts +133 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +47 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/errors.d.ts +129 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +41 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/generate.d.ts +75 -0
  14. package/dist/generate.d.ts.map +1 -0
  15. package/dist/generate.js +183 -0
  16. package/dist/generate.js.map +1 -0
  17. package/dist/index.d.ts +35 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +62 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/init.d.ts +4 -0
  22. package/dist/init.d.ts.map +1 -0
  23. package/dist/init.js +229 -0
  24. package/dist/init.js.map +1 -0
  25. package/dist/ir/index.d.ts +7 -0
  26. package/dist/ir/index.d.ts.map +1 -0
  27. package/dist/ir/index.js +7 -0
  28. package/dist/ir/index.js.map +1 -0
  29. package/dist/ir/relation-graph.d.ts +113 -0
  30. package/dist/ir/relation-graph.d.ts.map +1 -0
  31. package/dist/ir/relation-graph.js +232 -0
  32. package/dist/ir/relation-graph.js.map +1 -0
  33. package/dist/ir/semantic-ir.d.ts +448 -0
  34. package/dist/ir/semantic-ir.d.ts.map +1 -0
  35. package/dist/ir/semantic-ir.js +138 -0
  36. package/dist/ir/semantic-ir.js.map +1 -0
  37. package/dist/ir/smart-tags.d.ts +24 -0
  38. package/dist/ir/smart-tags.d.ts.map +1 -0
  39. package/dist/ir/smart-tags.js +30 -0
  40. package/dist/ir/smart-tags.js.map +1 -0
  41. package/dist/lib/conjure.d.ts +431 -0
  42. package/dist/lib/conjure.d.ts.map +1 -0
  43. package/dist/lib/conjure.js +697 -0
  44. package/dist/lib/conjure.js.map +1 -0
  45. package/dist/lib/field-utils.d.ts +61 -0
  46. package/dist/lib/field-utils.d.ts.map +1 -0
  47. package/dist/lib/field-utils.js +132 -0
  48. package/dist/lib/field-utils.js.map +1 -0
  49. package/dist/lib/hex.d.ts +117 -0
  50. package/dist/lib/hex.d.ts.map +1 -0
  51. package/dist/lib/hex.js +185 -0
  52. package/dist/lib/hex.js.map +1 -0
  53. package/dist/plugins/arktype.d.ts +11 -0
  54. package/dist/plugins/arktype.d.ts.map +1 -0
  55. package/dist/plugins/arktype.js +207 -0
  56. package/dist/plugins/arktype.js.map +1 -0
  57. package/dist/plugins/effect-model.d.ts +10 -0
  58. package/dist/plugins/effect-model.d.ts.map +1 -0
  59. package/dist/plugins/effect-model.js +261 -0
  60. package/dist/plugins/effect-model.js.map +1 -0
  61. package/dist/plugins/kysely-queries.d.ts +7 -0
  62. package/dist/plugins/kysely-queries.d.ts.map +1 -0
  63. package/dist/plugins/kysely-queries.js +380 -0
  64. package/dist/plugins/kysely-queries.js.map +1 -0
  65. package/dist/plugins/sql-queries.d.ts +6 -0
  66. package/dist/plugins/sql-queries.d.ts.map +1 -0
  67. package/dist/plugins/sql-queries.js +249 -0
  68. package/dist/plugins/sql-queries.js.map +1 -0
  69. package/dist/plugins/types.d.ts +18 -0
  70. package/dist/plugins/types.d.ts.map +1 -0
  71. package/dist/plugins/types.js +263 -0
  72. package/dist/plugins/types.js.map +1 -0
  73. package/dist/plugins/zod.d.ts +11 -0
  74. package/dist/plugins/zod.d.ts.map +1 -0
  75. package/dist/plugins/zod.js +180 -0
  76. package/dist/plugins/zod.js.map +1 -0
  77. package/dist/services/artifact-store.d.ts +55 -0
  78. package/dist/services/artifact-store.d.ts.map +1 -0
  79. package/dist/services/artifact-store.js +51 -0
  80. package/dist/services/artifact-store.js.map +1 -0
  81. package/dist/services/config-loader.d.ts +45 -0
  82. package/dist/services/config-loader.d.ts.map +1 -0
  83. package/dist/services/config-loader.js +113 -0
  84. package/dist/services/config-loader.js.map +1 -0
  85. package/dist/services/emissions.d.ts +89 -0
  86. package/dist/services/emissions.d.ts.map +1 -0
  87. package/dist/services/emissions.js +194 -0
  88. package/dist/services/emissions.js.map +1 -0
  89. package/dist/services/file-builder.d.ts +81 -0
  90. package/dist/services/file-builder.d.ts.map +1 -0
  91. package/dist/services/file-builder.js +112 -0
  92. package/dist/services/file-builder.js.map +1 -0
  93. package/dist/services/file-writer.d.ts +57 -0
  94. package/dist/services/file-writer.d.ts.map +1 -0
  95. package/dist/services/file-writer.js +76 -0
  96. package/dist/services/file-writer.js.map +1 -0
  97. package/dist/services/inflection.d.ts +227 -0
  98. package/dist/services/inflection.d.ts.map +1 -0
  99. package/dist/services/inflection.js +350 -0
  100. package/dist/services/inflection.js.map +1 -0
  101. package/dist/services/introspection.d.ts +46 -0
  102. package/dist/services/introspection.d.ts.map +1 -0
  103. package/dist/services/introspection.js +99 -0
  104. package/dist/services/introspection.js.map +1 -0
  105. package/dist/services/ir-builder.d.ts +46 -0
  106. package/dist/services/ir-builder.d.ts.map +1 -0
  107. package/dist/services/ir-builder.js +923 -0
  108. package/dist/services/ir-builder.js.map +1 -0
  109. package/dist/services/ir.d.ts +28 -0
  110. package/dist/services/ir.d.ts.map +1 -0
  111. package/dist/services/ir.js +25 -0
  112. package/dist/services/ir.js.map +1 -0
  113. package/dist/services/pg-types.d.ts +197 -0
  114. package/dist/services/pg-types.d.ts.map +1 -0
  115. package/dist/services/pg-types.js +274 -0
  116. package/dist/services/pg-types.js.map +1 -0
  117. package/dist/services/plugin-meta.d.ts +33 -0
  118. package/dist/services/plugin-meta.d.ts.map +1 -0
  119. package/dist/services/plugin-meta.js +24 -0
  120. package/dist/services/plugin-meta.js.map +1 -0
  121. package/dist/services/plugin-runner.d.ts +52 -0
  122. package/dist/services/plugin-runner.d.ts.map +1 -0
  123. package/dist/services/plugin-runner.js +182 -0
  124. package/dist/services/plugin-runner.js.map +1 -0
  125. package/dist/services/plugin.d.ts +286 -0
  126. package/dist/services/plugin.d.ts.map +1 -0
  127. package/dist/services/plugin.js +132 -0
  128. package/dist/services/plugin.js.map +1 -0
  129. package/dist/services/smart-tags-parser.d.ts +37 -0
  130. package/dist/services/smart-tags-parser.d.ts.map +1 -0
  131. package/dist/services/smart-tags-parser.js +79 -0
  132. package/dist/services/smart-tags-parser.js.map +1 -0
  133. package/dist/services/symbols.d.ts +85 -0
  134. package/dist/services/symbols.d.ts.map +1 -0
  135. package/dist/services/symbols.js +128 -0
  136. package/dist/services/symbols.js.map +1 -0
  137. package/dist/services/type-hints.d.ts +62 -0
  138. package/dist/services/type-hints.d.ts.map +1 -0
  139. package/dist/services/type-hints.js +117 -0
  140. package/dist/services/type-hints.js.map +1 -0
  141. package/dist/testing.d.ts +77 -0
  142. package/dist/testing.d.ts.map +1 -0
  143. package/dist/testing.js +84 -0
  144. package/dist/testing.js.map +1 -0
  145. package/package.json +74 -0
@@ -0,0 +1,249 @@
1
+ /**
2
+ * SQL Queries Plugin - Generate raw SQL query functions using template strings
3
+ */
4
+ import { Schema as S } from "effect";
5
+ import { definePlugin } from "../services/plugin.js";
6
+ import { getTableEntities, getEnumEntities } from "../ir/semantic-ir.js";
7
+ import { conjure } from "../lib/conjure.js";
8
+ import { hex } from "../lib/hex.js";
9
+ import { resolveFieldType, tsTypeToAst } from "../lib/field-utils.js";
10
+ const { ts, b, param } = conjure;
11
+ // ============================================================================
12
+ // Configuration
13
+ // ============================================================================
14
+ const SqlQueriesPluginConfig = S.Struct({
15
+ outputDir: S.String,
16
+ header: S.optional(S.String),
17
+ /** SQL query style. Defaults to "tag" (tagged template literals) */
18
+ sqlStyle: S.optional(S.Union(S.Literal("tag"), S.Literal("string"))),
19
+ });
20
+ /** Find a field in the row shape by column name */
21
+ const findRowField = (entity, columnName) => entity.shapes.row.fields.find(f => f.columnName === columnName);
22
+ /** Get the TypeScript type AST for a field */
23
+ const getFieldTypeAst = (field, ctx) => {
24
+ if (!field)
25
+ return ts.string();
26
+ const resolved = resolveFieldType(field, ctx.enums, ctx.ir.extensions);
27
+ return resolved.enumDef ? ts.ref(resolved.enumDef.name) : tsTypeToAst(resolved.tsType);
28
+ };
29
+ // ============================================================================
30
+ // CRUD Function Generators
31
+ // ============================================================================
32
+ /** Generate findById function if entity has a primary key and canSelect permission */
33
+ const generateFindById = (ctx) => {
34
+ const { entity, sqlStyle } = ctx;
35
+ if (!entity.primaryKey || !entity.permissions.canSelect)
36
+ return undefined;
37
+ const pkColName = entity.primaryKey.columns[0];
38
+ const pkField = findRowField(entity, pkColName);
39
+ if (!pkField)
40
+ return undefined;
41
+ const rowType = entity.shapes.row.name;
42
+ const fieldName = pkField.name; // JS property name (e.g., "id")
43
+ const parts = {
44
+ templateParts: [`select * from ${entity.schemaName}.${entity.pgName} where ${pkColName} = `, ""],
45
+ params: [b.identifier(fieldName)],
46
+ };
47
+ // Build query and extract first row
48
+ const queryExpr = hex.query(sqlStyle, parts, ts.array(ts.ref(rowType)));
49
+ const varDecl = hex.firstRowDecl(sqlStyle, "result", queryExpr);
50
+ return hex.exportFn(hex.asyncFn(`find${entity.name}ById`, [param.pick([fieldName], rowType)], [
51
+ varDecl,
52
+ b.returnStatement(b.identifier("result")),
53
+ ]));
54
+ };
55
+ /** Generate findMany function with pagination if entity has canSelect permission */
56
+ const generateFindMany = (ctx) => {
57
+ const { entity, sqlStyle } = ctx;
58
+ if (!entity.permissions.canSelect)
59
+ return undefined;
60
+ const rowType = entity.shapes.row.name;
61
+ const parts = {
62
+ templateParts: [`select * from ${entity.schemaName}.${entity.pgName} limit `, ` offset `, ""],
63
+ params: [b.identifier("limit"), b.identifier("offset")],
64
+ };
65
+ return hex.exportFn(hex.asyncFn(`findMany${entity.name}s`, [
66
+ param.destructured([
67
+ { name: "limit", type: ts.number(), optional: true, defaultValue: b.numericLiteral(50) },
68
+ { name: "offset", type: ts.number(), optional: true, defaultValue: b.numericLiteral(0) },
69
+ ]),
70
+ ], hex.returnQuery(sqlStyle, parts, ts.array(ts.ref(rowType)))));
71
+ };
72
+ /** Generate delete function if entity has a primary key and canDelete permission */
73
+ const generateDelete = (ctx) => {
74
+ const { entity, sqlStyle } = ctx;
75
+ if (!entity.primaryKey || !entity.permissions.canDelete)
76
+ return undefined;
77
+ const pkColName = entity.primaryKey.columns[0];
78
+ const pkField = findRowField(entity, pkColName);
79
+ if (!pkField)
80
+ return undefined;
81
+ const rowType = entity.shapes.row.name;
82
+ const fieldName = pkField.name;
83
+ const parts = {
84
+ templateParts: [`delete from ${entity.schemaName}.${entity.pgName} where ${pkColName} = `, ""],
85
+ params: [b.identifier(fieldName)],
86
+ };
87
+ // Delete returns void, no type parameter needed
88
+ const queryExpr = hex.query(sqlStyle, parts);
89
+ return hex.exportFn(hex.asyncFn(`delete${entity.name}`, [param.pick([fieldName], rowType)], [
90
+ b.expressionStatement(queryExpr),
91
+ ]));
92
+ };
93
+ /** Generate insert function if entity has canInsert permission */
94
+ const generateInsert = (ctx) => {
95
+ const { entity, sqlStyle } = ctx;
96
+ if (!entity.permissions.canInsert)
97
+ return undefined;
98
+ // Use insert shape if available, otherwise fall back to row
99
+ const insertShape = entity.shapes.insert ?? entity.shapes.row;
100
+ const rowType = entity.shapes.row.name;
101
+ const insertType = insertShape.name;
102
+ // Build column list and values from insertable fields
103
+ const insertableFields = insertShape.fields.filter(f => f.permissions.canInsert);
104
+ if (insertableFields.length === 0)
105
+ return undefined;
106
+ const columnNames = insertableFields.map(f => f.columnName);
107
+ const fieldNames = insertableFields.map(f => f.name);
108
+ // Build: insert into schema.table (col1, col2) values ($data.field1, $data.field2) returning *
109
+ const columnList = columnNames.join(", ");
110
+ const valuePlaceholders = fieldNames.map((_, i) => (i === 0 ? "" : ", "));
111
+ // Template parts: "insert into ... values (" + "" + ", " + ", " + ... + ") returning *"
112
+ const parts = {
113
+ templateParts: [
114
+ `insert into ${entity.schemaName}.${entity.pgName} (${columnList}) values (`,
115
+ ...valuePlaceholders.slice(1),
116
+ `) returning *`,
117
+ ],
118
+ params: fieldNames.map(f => b.memberExpression(b.identifier("data"), b.identifier(f), false)),
119
+ };
120
+ const queryExpr = hex.query(sqlStyle, parts, ts.array(ts.ref(rowType)));
121
+ const varDecl = hex.firstRowDecl(sqlStyle, "result", queryExpr);
122
+ // Simple typed parameter: data: InsertType
123
+ const dataParam = param.typed("data", ts.ref(insertType));
124
+ return hex.exportFn(hex.asyncFn(`insert${entity.name}`, [dataParam], [varDecl, b.returnStatement(b.identifier("result"))]));
125
+ };
126
+ /** Generate all CRUD functions for an entity */
127
+ const generateCrudFunctions = (ctx) => [
128
+ generateFindById(ctx),
129
+ generateFindMany(ctx),
130
+ generateInsert(ctx),
131
+ generateDelete(ctx),
132
+ ].filter((s) => s != null);
133
+ // ============================================================================
134
+ // Index-based Lookup Functions
135
+ // ============================================================================
136
+ /** Check if an index should generate a lookup function */
137
+ const shouldGenerateLookup = (index) => !index.isPartial &&
138
+ !index.hasExpressions &&
139
+ index.columns.length === 1 &&
140
+ index.method !== "gin" &&
141
+ index.method !== "gist";
142
+ /** Generate a function name for an index-based lookup */
143
+ const generateLookupName = (entity, index) => {
144
+ const entitySingular = entity.name.replace(/s$/, "");
145
+ const byPart = index.columns
146
+ .map(col => `By${col.charAt(0).toUpperCase() + col.slice(1)}`)
147
+ .join("");
148
+ return `get${entitySingular}${byPart}`;
149
+ };
150
+ /** Generate a lookup function for a single-column index */
151
+ const generateLookupFunction = (index, ctx) => {
152
+ const { entity, sqlStyle } = ctx;
153
+ const rowType = entity.shapes.row.name;
154
+ const columnName = index.columnNames[0];
155
+ const field = findRowField(entity, columnName);
156
+ const fieldName = field?.name ?? index.columns[0];
157
+ const isUnique = index.isUnique || index.isPrimary;
158
+ const parts = {
159
+ templateParts: [`select * from ${entity.schemaName}.${entity.pgName} where ${columnName} = `, ""],
160
+ params: [b.identifier(fieldName)],
161
+ };
162
+ const fnName = generateLookupName(entity, index);
163
+ if (isUnique) {
164
+ // Extract first row for unique lookups
165
+ const queryExpr = hex.query(sqlStyle, parts, ts.array(ts.ref(rowType)));
166
+ const varDecl = hex.firstRowDecl(sqlStyle, "result", queryExpr);
167
+ return hex.exportFn(hex.asyncFn(fnName, [param.pick([fieldName], rowType)], [
168
+ varDecl,
169
+ b.returnStatement(b.identifier("result")),
170
+ ]));
171
+ }
172
+ // Non-unique: return all matching rows
173
+ return hex.exportFn(hex.asyncFn(fnName, [param.pick([fieldName], rowType)], hex.returnQuery(sqlStyle, parts, ts.array(ts.ref(rowType)))));
174
+ };
175
+ /** Generate lookup functions for all eligible indexes, deduplicating by name */
176
+ const generateLookupFunctions = (ctx) => {
177
+ const seen = new Set();
178
+ return ctx.entity.indexes
179
+ .filter(index => shouldGenerateLookup(index) && !index.isPrimary)
180
+ .filter(index => {
181
+ const name = generateLookupName(ctx.entity, index);
182
+ if (seen.has(name))
183
+ return false;
184
+ seen.add(name);
185
+ return true;
186
+ })
187
+ .map(index => generateLookupFunction(index, ctx));
188
+ };
189
+ // ============================================================================
190
+ // Plugin Definition
191
+ // ============================================================================
192
+ export const sqlQueriesPlugin = definePlugin({
193
+ name: "sql-queries",
194
+ provides: ["queries", "queries:sql"],
195
+ requires: ["types"],
196
+ configSchema: SqlQueriesPluginConfig,
197
+ inflection: {
198
+ outputFile: ctx => `${ctx.entityName}.ts`,
199
+ symbolName: (entityName, artifactKind) => `${entityName}${artifactKind}`,
200
+ },
201
+ run: (ctx, config) => {
202
+ const enums = getEnumEntities(ctx.ir);
203
+ const sqlStyle = config.sqlStyle ?? "tag";
204
+ getTableEntities(ctx.ir)
205
+ .filter(entity => entity.tags.omit !== true)
206
+ .forEach(entity => {
207
+ const genCtx = { entity, enums, ir: ctx.ir, sqlStyle };
208
+ const statements = [...generateCrudFunctions(genCtx), ...generateLookupFunctions(genCtx)];
209
+ if (statements.length === 0)
210
+ return;
211
+ const entityName = ctx.inflection.entityName(entity.pgClass, entity.tags);
212
+ const fileNameCtx = {
213
+ entityName,
214
+ pgName: entity.pgName,
215
+ schema: entity.schemaName,
216
+ inflection: ctx.inflection,
217
+ entity,
218
+ };
219
+ const filePath = `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
220
+ const file = ctx
221
+ .file(filePath)
222
+ .header(config.header ? `${config.header}\n` : "// This file is auto-generated. Do not edit.\n");
223
+ // Import the appropriate SQL client based on style
224
+ if (sqlStyle === "tag") {
225
+ file.import({ kind: "relative", names: ["sql"], from: "../db" });
226
+ }
227
+ else {
228
+ file.import({ kind: "relative", names: ["pool"], from: "../db" });
229
+ }
230
+ file.import({
231
+ kind: "symbol",
232
+ ref: { capability: "types", entity: entity.name, shape: "row" },
233
+ });
234
+ // Import insert type if insert function is generated
235
+ if (entity.permissions.canInsert) {
236
+ const insertShape = entity.shapes.insert ?? entity.shapes.row;
237
+ // Only import if it's a different type than row
238
+ if (insertShape !== entity.shapes.row) {
239
+ file.import({
240
+ kind: "symbol",
241
+ ref: { capability: "types", entity: entity.name, shape: "insert" },
242
+ });
243
+ }
244
+ }
245
+ file.ast(conjure.program(...statements)).emit();
246
+ });
247
+ },
248
+ });
249
+ //# sourceMappingURL=sql-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-queries.js","sourceRoot":"","sources":["../../src/plugins/sql-queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Types Plugin
3
+ *
4
+ * Generates TypeScript interfaces for each entity's shapes (Row, Insert, Update, Patch)
5
+ * and type aliases for PostgreSQL enums.
6
+ *
7
+ * Supports type overrides via TypeHints configuration:
8
+ * ```typescript
9
+ * typeHints: [
10
+ * { match: { pgType: 'jsonb' }, hints: { tsType: 'JsonValue', import: './types.js' } },
11
+ * { match: { table: 'users', column: 'id' }, hints: { tsType: 'UserId' } },
12
+ * ]
13
+ * ```
14
+ */
15
+ export declare const typesPlugin: import("../index.js").PluginFactory<{
16
+ readonly outputDir: string;
17
+ }>;
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAgSA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW;;EA2GtB,CAAA"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Types Plugin - Generate TypeScript interfaces for entities
3
+ *
4
+ * Generates Row, Insert, Update, and Patch interfaces for each entity.
5
+ * Supports user-configured type overrides via TypeHints.
6
+ */
7
+ import { Array as Arr, Option, pipe, Schema as S } from "effect";
8
+ import { definePlugin } from "../services/plugin.js";
9
+ import { findEnumByPgName } from "../services/pg-types.js";
10
+ import { getEnumEntities, getTableEntities, getCompositeEntities } from "../ir/semantic-ir.js";
11
+ import { conjure } from "../lib/conjure.js";
12
+ import { isEnumType, getPgTypeName, resolveFieldType as resolveFieldBaseType, tsTypeToAst, } from "../lib/field-utils.js";
13
+ const { ts, exp } = conjure;
14
+ // ============================================================================
15
+ // Configuration
16
+ // ============================================================================
17
+ const TypesPluginConfig = S.Struct({
18
+ outputDir: S.String,
19
+ });
20
+ // ============================================================================
21
+ // Helpers
22
+ // ============================================================================
23
+ /** Build TypeHintFieldMatch from field and context */
24
+ const buildFieldMatch = (field, ctx) => ({
25
+ schema: ctx.schemaName,
26
+ table: ctx.tableName,
27
+ column: field.columnName,
28
+ pgType: field.isArray && field.elementTypeName
29
+ ? field.elementTypeName
30
+ : field.pgAttribute.getType()?.typname ?? "",
31
+ });
32
+ /** Wrap type with null union if nullable */
33
+ const wrapNullable = (typeNode, nullable) => nullable ? ts.union(typeNode, ts.null()) : typeNode;
34
+ /** Wrap type in array if needed */
35
+ const wrapArray = (typeNode, isArray) => isArray ? ts.array(typeNode) : typeNode;
36
+ /** Group custom imports by path */
37
+ const groupImportsByPath = (imports) => imports.reduce((map, info) => {
38
+ const existing = map.get(info.importPath) ?? new Set();
39
+ existing.add(info.typeName);
40
+ map.set(info.importPath, existing);
41
+ return map;
42
+ }, new Map());
43
+ /** Collect enum names used by fields */
44
+ const collectUsedEnums = (fields, enums) => {
45
+ const enumNames = fields
46
+ .filter(isEnumType)
47
+ .flatMap(field => {
48
+ const pgTypeName = getPgTypeName(field);
49
+ if (!pgTypeName)
50
+ return [];
51
+ return pipe(findEnumByPgName(enums, pgTypeName), Option.map(e => e.name), Option.toArray);
52
+ });
53
+ return new Set(enumNames);
54
+ };
55
+ /** Build enum import refs from used enum names */
56
+ const buildEnumImports = (usedEnums) => Arr.fromIterable(usedEnums).map(enumName => ({
57
+ kind: "symbol",
58
+ ref: { capability: "types", entity: enumName },
59
+ }));
60
+ // ============================================================================
61
+ // Field Resolution
62
+ // ============================================================================
63
+ /**
64
+ * Resolve a field to its TypeScript AST type node
65
+ *
66
+ * Resolution order:
67
+ * 1. TypeHints override (highest priority)
68
+ * 2. Shared field type resolution (enum, OID, domain, extension)
69
+ */
70
+ const resolveFieldType = (field, ctx) => {
71
+ const fieldMatch = buildFieldMatch(field, ctx);
72
+ const tsTypeHint = ctx.typeHints.getHint(fieldMatch, "tsType");
73
+ // 1. Check TypeHints first (highest priority)
74
+ return pipe(tsTypeHint, Option.match({
75
+ onSome: typeName => {
76
+ const importPath = ctx.typeHints.getHint(fieldMatch, "import");
77
+ const baseType = ts.ref(typeName);
78
+ return {
79
+ type: wrapArray(baseType, field.isArray),
80
+ customImport: pipe(importPath, Option.map(path => ({ typeName, importPath: path })), Option.getOrUndefined),
81
+ };
82
+ },
83
+ onNone: () => {
84
+ // 2. Use shared field type resolution
85
+ const resolved = resolveFieldBaseType(field, ctx.enums, ctx.extensions);
86
+ const baseType = resolved.enumDef
87
+ ? ts.ref(resolved.enumDef.name)
88
+ : tsTypeToAst(resolved.tsType);
89
+ return { type: wrapArray(baseType, field.isArray) };
90
+ },
91
+ }));
92
+ };
93
+ // ============================================================================
94
+ // Statement Generators
95
+ // ============================================================================
96
+ /** Generate interface statement for a shape */
97
+ const generateShapeStatement = (shape, entityName, shapeKind, ctx) => {
98
+ const resolvedFields = shape.fields.map(field => ({
99
+ field,
100
+ resolved: resolveFieldType(field, ctx),
101
+ }));
102
+ const properties = resolvedFields.map(({ field, resolved }) => ({
103
+ name: field.name,
104
+ type: wrapNullable(resolved.type, field.nullable),
105
+ optional: field.optional || undefined,
106
+ }));
107
+ const customImports = Arr.filterMap(resolvedFields, ({ resolved }) => Option.fromNullable(resolved.customImport));
108
+ const statement = exp.interface(shape.name, { capability: "types", entity: entityName, shape: shapeKind }, properties);
109
+ return { statements: [statement], customImports };
110
+ };
111
+ /** Generate enum type alias */
112
+ const generateEnumStatement = (enumEntity) => exp.typeAlias(enumEntity.name, { capability: "types", entity: enumEntity.name }, ts.union(...enumEntity.values.map(ts.literal)));
113
+ /** Generate all shape statements for a table entity */
114
+ const generateTableStatements = (entity, ctx) => {
115
+ const { row, insert, update } = entity.shapes;
116
+ const shapeEntries = [
117
+ [row, "row"],
118
+ ...(insert ? [[insert, "insert"]] : []),
119
+ ...(update ? [[update, "update"]] : []),
120
+ ];
121
+ const results = shapeEntries.map(([shape, kind]) => generateShapeStatement(shape, entity.name, kind, ctx));
122
+ return {
123
+ statements: results.flatMap(r => r.statements),
124
+ customImports: results.flatMap(r => r.customImports),
125
+ };
126
+ };
127
+ /** Generate interface statement for a composite type */
128
+ const generateCompositeStatement = (composite, ctx) => {
129
+ const resolvedFields = composite.fields.map(field => ({
130
+ field,
131
+ resolved: resolveFieldType(field, ctx),
132
+ }));
133
+ const properties = resolvedFields.map(({ field, resolved }) => ({
134
+ name: field.name,
135
+ type: wrapNullable(resolved.type, field.nullable),
136
+ optional: field.optional || undefined,
137
+ }));
138
+ const customImports = Arr.filterMap(resolvedFields, ({ resolved }) => Option.fromNullable(resolved.customImport));
139
+ const statement = exp.interface(composite.name, { capability: "types", entity: composite.name }, properties);
140
+ return { statements: [statement], customImports };
141
+ };
142
+ // ============================================================================
143
+ // File Emission
144
+ // ============================================================================
145
+ /** Add custom imports to file builder grouped by path */
146
+ const addCustomImports = (fileBuilder, imports) => {
147
+ const grouped = groupImportsByPath(imports);
148
+ for (const [importPath, typeNames] of grouped) {
149
+ fileBuilder.import({
150
+ kind: "relative",
151
+ types: [...typeNames],
152
+ from: importPath,
153
+ });
154
+ }
155
+ };
156
+ // ============================================================================
157
+ // Plugin Definition
158
+ // ============================================================================
159
+ /**
160
+ * Types Plugin
161
+ *
162
+ * Generates TypeScript interfaces for each entity's shapes (Row, Insert, Update, Patch)
163
+ * and type aliases for PostgreSQL enums.
164
+ *
165
+ * Supports type overrides via TypeHints configuration:
166
+ * ```typescript
167
+ * typeHints: [
168
+ * { match: { pgType: 'jsonb' }, hints: { tsType: 'JsonValue', import: './types.js' } },
169
+ * { match: { table: 'users', column: 'id' }, hints: { tsType: 'UserId' } },
170
+ * ]
171
+ * ```
172
+ */
173
+ export const typesPlugin = definePlugin({
174
+ name: "types",
175
+ provides: ["types"],
176
+ configSchema: TypesPluginConfig,
177
+ inflection: {
178
+ outputFile: ctx => `${ctx.entityName}.ts`,
179
+ symbolName: (entityName, artifactKind) => `${entityName}${artifactKind}`,
180
+ },
181
+ run: (ctx, config) => {
182
+ const { ir, typeHints } = ctx;
183
+ const enumEntities = getEnumEntities(ir);
184
+ // Helper to build file path
185
+ const buildFilePath = (fileNameCtx) => `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
186
+ // Generate enum type files
187
+ enumEntities
188
+ .filter(e => e.tags.omit !== true)
189
+ .forEach(enumEntity => {
190
+ const fileNameCtx = {
191
+ entityName: enumEntity.name,
192
+ pgName: enumEntity.pgName,
193
+ schema: enumEntity.schemaName,
194
+ inflection: ctx.inflection,
195
+ entity: enumEntity,
196
+ };
197
+ ctx
198
+ .file(buildFilePath(fileNameCtx))
199
+ .ast(conjure.symbolProgram(generateEnumStatement(enumEntity)))
200
+ .emit();
201
+ });
202
+ // Generate table/view entity type files
203
+ getTableEntities(ir)
204
+ .filter(e => e.tags.omit !== true)
205
+ .forEach(entity => {
206
+ const fieldCtx = {
207
+ schemaName: entity.schemaName,
208
+ tableName: entity.pgName,
209
+ enums: enumEntities,
210
+ extensions: ir.extensions,
211
+ typeHints,
212
+ };
213
+ const result = generateTableStatements(entity, fieldCtx);
214
+ // Collect all fields from all shapes for enum detection
215
+ const allFields = [
216
+ ...entity.shapes.row.fields,
217
+ ...(entity.shapes.insert?.fields ?? []),
218
+ ...(entity.shapes.update?.fields ?? []),
219
+ ];
220
+ const usedEnums = collectUsedEnums(allFields, enumEntities);
221
+ const entityName = ctx.inflection.entityName(entity.pgClass, entity.tags);
222
+ const fileNameCtx = {
223
+ entityName,
224
+ pgName: entity.pgName,
225
+ schema: entity.schemaName,
226
+ inflection: ctx.inflection,
227
+ entity,
228
+ };
229
+ const fileBuilder = ctx
230
+ .file(buildFilePath(fileNameCtx));
231
+ buildEnumImports(usedEnums).forEach(ref => fileBuilder.import(ref));
232
+ addCustomImports(fileBuilder, result.customImports);
233
+ fileBuilder.ast(conjure.symbolProgram(...result.statements)).emit();
234
+ });
235
+ // Generate composite type files
236
+ getCompositeEntities(ir)
237
+ .filter(e => e.tags.omit !== true)
238
+ .forEach(composite => {
239
+ const fieldCtx = {
240
+ schemaName: composite.schemaName,
241
+ tableName: composite.pgName,
242
+ enums: enumEntities,
243
+ extensions: ir.extensions,
244
+ typeHints,
245
+ };
246
+ const result = generateCompositeStatement(composite, fieldCtx);
247
+ const usedEnums = collectUsedEnums(composite.fields, enumEntities);
248
+ const fileNameCtx = {
249
+ entityName: composite.name,
250
+ pgName: composite.pgName,
251
+ schema: composite.schemaName,
252
+ inflection: ctx.inflection,
253
+ entity: composite,
254
+ };
255
+ const fileBuilder = ctx
256
+ .file(buildFilePath(fileNameCtx));
257
+ buildEnumImports(usedEnums).forEach(ref => fileBuilder.import(ref));
258
+ addCustomImports(fileBuilder, result.customImports);
259
+ fileBuilder.ast(conjure.symbolProgram(...result.statements)).emit();
260
+ });
261
+ },
262
+ });
263
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Zod Plugin
3
+ *
4
+ * Generates Zod schemas for each entity's shapes (base, Insert, Update)
5
+ * with inferred TypeScript types.
6
+ */
7
+ export declare const zodPlugin: import("../index.js").PluginFactory<{
8
+ readonly outputDir: string;
9
+ readonly exportTypes: boolean;
10
+ }>;
11
+ //# sourceMappingURL=zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/plugins/zod.ts"],"names":[],"mappings":"AAsNA;;;;;GAKG;AACH,eAAO,MAAM,SAAS;;;EAoCpB,CAAC"}