@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.
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +104 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +133 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +47 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +129 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +41 -0
- package/dist/errors.js.map +1 -0
- package/dist/generate.d.ts +75 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +183 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +4 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +229 -0
- package/dist/init.js.map +1 -0
- package/dist/ir/index.d.ts +7 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +7 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/relation-graph.d.ts +113 -0
- package/dist/ir/relation-graph.d.ts.map +1 -0
- package/dist/ir/relation-graph.js +232 -0
- package/dist/ir/relation-graph.js.map +1 -0
- package/dist/ir/semantic-ir.d.ts +448 -0
- package/dist/ir/semantic-ir.d.ts.map +1 -0
- package/dist/ir/semantic-ir.js +138 -0
- package/dist/ir/semantic-ir.js.map +1 -0
- package/dist/ir/smart-tags.d.ts +24 -0
- package/dist/ir/smart-tags.d.ts.map +1 -0
- package/dist/ir/smart-tags.js +30 -0
- package/dist/ir/smart-tags.js.map +1 -0
- package/dist/lib/conjure.d.ts +431 -0
- package/dist/lib/conjure.d.ts.map +1 -0
- package/dist/lib/conjure.js +697 -0
- package/dist/lib/conjure.js.map +1 -0
- package/dist/lib/field-utils.d.ts +61 -0
- package/dist/lib/field-utils.d.ts.map +1 -0
- package/dist/lib/field-utils.js +132 -0
- package/dist/lib/field-utils.js.map +1 -0
- package/dist/lib/hex.d.ts +117 -0
- package/dist/lib/hex.d.ts.map +1 -0
- package/dist/lib/hex.js +185 -0
- package/dist/lib/hex.js.map +1 -0
- package/dist/plugins/arktype.d.ts +11 -0
- package/dist/plugins/arktype.d.ts.map +1 -0
- package/dist/plugins/arktype.js +207 -0
- package/dist/plugins/arktype.js.map +1 -0
- package/dist/plugins/effect-model.d.ts +10 -0
- package/dist/plugins/effect-model.d.ts.map +1 -0
- package/dist/plugins/effect-model.js +261 -0
- package/dist/plugins/effect-model.js.map +1 -0
- package/dist/plugins/kysely-queries.d.ts +7 -0
- package/dist/plugins/kysely-queries.d.ts.map +1 -0
- package/dist/plugins/kysely-queries.js +380 -0
- package/dist/plugins/kysely-queries.js.map +1 -0
- package/dist/plugins/sql-queries.d.ts +6 -0
- package/dist/plugins/sql-queries.d.ts.map +1 -0
- package/dist/plugins/sql-queries.js +249 -0
- package/dist/plugins/sql-queries.js.map +1 -0
- package/dist/plugins/types.d.ts +18 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +263 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/plugins/zod.d.ts +11 -0
- package/dist/plugins/zod.d.ts.map +1 -0
- package/dist/plugins/zod.js +180 -0
- package/dist/plugins/zod.js.map +1 -0
- package/dist/services/artifact-store.d.ts +55 -0
- package/dist/services/artifact-store.d.ts.map +1 -0
- package/dist/services/artifact-store.js +51 -0
- package/dist/services/artifact-store.js.map +1 -0
- package/dist/services/config-loader.d.ts +45 -0
- package/dist/services/config-loader.d.ts.map +1 -0
- package/dist/services/config-loader.js +113 -0
- package/dist/services/config-loader.js.map +1 -0
- package/dist/services/emissions.d.ts +89 -0
- package/dist/services/emissions.d.ts.map +1 -0
- package/dist/services/emissions.js +194 -0
- package/dist/services/emissions.js.map +1 -0
- package/dist/services/file-builder.d.ts +81 -0
- package/dist/services/file-builder.d.ts.map +1 -0
- package/dist/services/file-builder.js +112 -0
- package/dist/services/file-builder.js.map +1 -0
- package/dist/services/file-writer.d.ts +57 -0
- package/dist/services/file-writer.d.ts.map +1 -0
- package/dist/services/file-writer.js +76 -0
- package/dist/services/file-writer.js.map +1 -0
- package/dist/services/inflection.d.ts +227 -0
- package/dist/services/inflection.d.ts.map +1 -0
- package/dist/services/inflection.js +350 -0
- package/dist/services/inflection.js.map +1 -0
- package/dist/services/introspection.d.ts +46 -0
- package/dist/services/introspection.d.ts.map +1 -0
- package/dist/services/introspection.js +99 -0
- package/dist/services/introspection.js.map +1 -0
- package/dist/services/ir-builder.d.ts +46 -0
- package/dist/services/ir-builder.d.ts.map +1 -0
- package/dist/services/ir-builder.js +923 -0
- package/dist/services/ir-builder.js.map +1 -0
- package/dist/services/ir.d.ts +28 -0
- package/dist/services/ir.d.ts.map +1 -0
- package/dist/services/ir.js +25 -0
- package/dist/services/ir.js.map +1 -0
- package/dist/services/pg-types.d.ts +197 -0
- package/dist/services/pg-types.d.ts.map +1 -0
- package/dist/services/pg-types.js +274 -0
- package/dist/services/pg-types.js.map +1 -0
- package/dist/services/plugin-meta.d.ts +33 -0
- package/dist/services/plugin-meta.d.ts.map +1 -0
- package/dist/services/plugin-meta.js +24 -0
- package/dist/services/plugin-meta.js.map +1 -0
- package/dist/services/plugin-runner.d.ts +52 -0
- package/dist/services/plugin-runner.d.ts.map +1 -0
- package/dist/services/plugin-runner.js +182 -0
- package/dist/services/plugin-runner.js.map +1 -0
- package/dist/services/plugin.d.ts +286 -0
- package/dist/services/plugin.d.ts.map +1 -0
- package/dist/services/plugin.js +132 -0
- package/dist/services/plugin.js.map +1 -0
- package/dist/services/smart-tags-parser.d.ts +37 -0
- package/dist/services/smart-tags-parser.d.ts.map +1 -0
- package/dist/services/smart-tags-parser.js +79 -0
- package/dist/services/smart-tags-parser.js.map +1 -0
- package/dist/services/symbols.d.ts +85 -0
- package/dist/services/symbols.d.ts.map +1 -0
- package/dist/services/symbols.js +128 -0
- package/dist/services/symbols.js.map +1 -0
- package/dist/services/type-hints.d.ts +62 -0
- package/dist/services/type-hints.d.ts.map +1 -0
- package/dist/services/type-hints.js +117 -0
- package/dist/services/type-hints.js.map +1 -0
- package/dist/testing.d.ts +77 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +84 -0
- package/dist/testing.js.map +1 -0
- 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"}
|