@danielfgray/pg-sourcerer 0.1.9 → 0.2.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.
@@ -0,0 +1,601 @@
1
+ /**
2
+ * Kysely Types Plugin - Generate Kysely-compatible type definitions
3
+ *
4
+ * Generates table interfaces with Generated<T>, ColumnType<S, I, U>, and DB interface.
5
+ * Uses RLS permissions to determine Generated<T> wrapping.
6
+ *
7
+ * Output structure:
8
+ * - Helper type definitions (Generated, ArrayType, ColumnType imports)
9
+ * - Enum type aliases
10
+ * - Table interfaces with column types
11
+ * - DB interface mapping table names to interfaces
12
+ */
13
+ import { Option, pipe, Schema as S } from "effect";
14
+ import { definePlugin } from "../services/plugin.js";
15
+ import { findEnumByPgName, PgTypeOid } from "../services/pg-types.js";
16
+ import { getEnumEntities, getTableEntities } from "../ir/semantic-ir.js";
17
+ import { conjure } from "../lib/conjure.js";
18
+ import { isEnumType, getPgTypeName, } from "../lib/field-utils.js";
19
+ import { getExtensionTypeMapping } from "../services/pg-types.js";
20
+ const { ts, exp } = conjure;
21
+ // ============================================================================
22
+ // Configuration
23
+ // ============================================================================
24
+ const KyselyTypesPluginConfig = S.Struct({
25
+ /** Output file path */
26
+ outputFile: S.optionalWith(S.String, { default: () => "db.ts" }),
27
+ /** Use runtime enums instead of string literal unions */
28
+ runtimeEnums: S.optionalWith(S.Boolean, { default: () => false }),
29
+ /** Use type-only imports (recommended) */
30
+ typeOnlyImports: S.optionalWith(S.Boolean, { default: () => true }),
31
+ });
32
+ // ============================================================================
33
+ // Helper Type Definitions (ported from kysely-codegen)
34
+ // ============================================================================
35
+ /**
36
+ * Build Generated<T> type alias as raw TypeScript string.
37
+ *
38
+ * Generated marks columns that have defaults and don't need to be provided on insert.
39
+ *
40
+ * type Generated<T> = T extends ColumnType<infer S, infer I, infer U>
41
+ * ? ColumnType<S, I | undefined, U>
42
+ * : ColumnType<T, T | undefined, T>;
43
+ */
44
+ const GENERATED_TYPE_DEF = `T extends ColumnType<infer S, infer I, infer U>
45
+ ? ColumnType<S, I | undefined, U>
46
+ : ColumnType<T, T | undefined, T>`;
47
+ /**
48
+ * Build ArrayType<T> helper for complex array types.
49
+ *
50
+ * type ArrayType<T> = ArrayTypeImpl<T> extends (infer U)[]
51
+ * ? U[]
52
+ * : ArrayTypeImpl<T>;
53
+ */
54
+ const ARRAY_TYPE_DEF = `ArrayTypeImpl<T> extends (infer U)[]
55
+ ? U[]
56
+ : ArrayTypeImpl<T>`;
57
+ /**
58
+ * Build ArrayTypeImpl<T> helper.
59
+ *
60
+ * type ArrayTypeImpl<T> = T extends ColumnType<infer S, infer I, infer U>
61
+ * ? ColumnType<S[], I[], U[]>
62
+ * : T[];
63
+ */
64
+ const ARRAY_TYPE_IMPL_DEF = `T extends ColumnType<infer S, infer I, infer U>
65
+ ? ColumnType<S[], I[], U[]>
66
+ : T[]`;
67
+ // ============================================================================
68
+ // PostgreSQL Type Mappings (ported from kysely-codegen postgres-adapter)
69
+ // ============================================================================
70
+ /**
71
+ * Simple scalar mappings: PG type name → TS type
72
+ * These don't need ColumnType wrapper.
73
+ */
74
+ const SCALAR_TYPES = {
75
+ // Boolean
76
+ bool: ts.boolean,
77
+ // Integers → number
78
+ int2: ts.number,
79
+ int4: ts.number,
80
+ float4: ts.number,
81
+ float8: ts.number,
82
+ oid: ts.number,
83
+ // Text types → string
84
+ text: ts.string,
85
+ varchar: ts.string,
86
+ bpchar: ts.string, // blank-padded char
87
+ char: ts.string,
88
+ name: ts.string,
89
+ bit: ts.string,
90
+ varbit: ts.string,
91
+ xml: ts.string,
92
+ // UUID → string
93
+ uuid: ts.string,
94
+ // Network types → string
95
+ inet: ts.string,
96
+ cidr: ts.string,
97
+ macaddr: ts.string,
98
+ macaddr8: ts.string,
99
+ // Geometric types → string (typically serialized)
100
+ line: ts.string,
101
+ lseg: ts.string,
102
+ box: ts.string,
103
+ path: ts.string,
104
+ polygon: ts.string,
105
+ // Time without date → string
106
+ time: ts.string,
107
+ timetz: ts.string,
108
+ // Full-text search → string
109
+ tsvector: ts.string,
110
+ tsquery: ts.string,
111
+ txid_snapshot: ts.string,
112
+ // Money → string
113
+ money: ts.string,
114
+ // Binary → Buffer
115
+ bytea: () => ts.ref("Buffer"),
116
+ };
117
+ const COMPLEX_TYPES = {
118
+ // int8/bigint: returns string (to avoid precision loss), accepts string|number|bigint
119
+ int8: {
120
+ select: ts.string,
121
+ insert: () => ts.union(ts.string(), ts.number(), ts.bigint()),
122
+ update: () => ts.union(ts.string(), ts.number(), ts.bigint()),
123
+ },
124
+ // numeric/decimal: returns string, accepts number|string
125
+ numeric: {
126
+ select: ts.string,
127
+ insert: () => ts.union(ts.number(), ts.string()),
128
+ update: () => ts.union(ts.number(), ts.string()),
129
+ },
130
+ // Timestamps: returns Date, accepts Date|string
131
+ date: {
132
+ select: () => ts.ref("Date"),
133
+ insert: () => ts.union(ts.ref("Date"), ts.string()),
134
+ update: () => ts.union(ts.ref("Date"), ts.string()),
135
+ },
136
+ timestamp: {
137
+ select: () => ts.ref("Date"),
138
+ insert: () => ts.union(ts.ref("Date"), ts.string()),
139
+ update: () => ts.union(ts.ref("Date"), ts.string()),
140
+ },
141
+ timestamptz: {
142
+ select: () => ts.ref("Date"),
143
+ insert: () => ts.union(ts.ref("Date"), ts.string()),
144
+ update: () => ts.union(ts.ref("Date"), ts.string()),
145
+ },
146
+ // Interval: For now, defer to string until we decide on postgres-interval
147
+ interval: {
148
+ select: ts.string,
149
+ insert: () => ts.union(ts.string(), ts.number()),
150
+ update: () => ts.union(ts.string(), ts.number()),
151
+ },
152
+ // JSON: returns JsonValue, accepts JsonValue
153
+ json: {
154
+ select: () => ts.ref("JsonValue"),
155
+ insert: () => ts.ref("JsonValue"),
156
+ update: () => ts.ref("JsonValue"),
157
+ },
158
+ jsonb: {
159
+ select: () => ts.ref("JsonValue"),
160
+ insert: () => ts.ref("JsonValue"),
161
+ update: () => ts.ref("JsonValue"),
162
+ },
163
+ // Geometric: Point and Circle have object representations
164
+ point: {
165
+ select: () => ts.objectType([
166
+ { name: "x", type: ts.number() },
167
+ { name: "y", type: ts.number() },
168
+ ]),
169
+ insert: () => ts.objectType([
170
+ { name: "x", type: ts.number() },
171
+ { name: "y", type: ts.number() },
172
+ ]),
173
+ update: () => ts.objectType([
174
+ { name: "x", type: ts.number() },
175
+ { name: "y", type: ts.number() },
176
+ ]),
177
+ },
178
+ circle: {
179
+ select: () => ts.objectType([
180
+ { name: "x", type: ts.number() },
181
+ { name: "y", type: ts.number() },
182
+ { name: "radius", type: ts.number() },
183
+ ]),
184
+ insert: () => ts.objectType([
185
+ { name: "x", type: ts.number() },
186
+ { name: "y", type: ts.number() },
187
+ { name: "radius", type: ts.number() },
188
+ ]),
189
+ update: () => ts.objectType([
190
+ { name: "x", type: ts.number() },
191
+ { name: "y", type: ts.number() },
192
+ { name: "radius", type: ts.number() },
193
+ ]),
194
+ },
195
+ };
196
+ // ============================================================================
197
+ // Type Resolution
198
+ // ============================================================================
199
+ /** Build TypeHintFieldMatch from field and context */
200
+ const buildFieldMatch = (field, ctx) => ({
201
+ schema: ctx.schemaName,
202
+ table: ctx.tableName,
203
+ column: field.columnName,
204
+ pgType: field.isArray && field.elementTypeName
205
+ ? field.elementTypeName
206
+ : field.pgAttribute.getType()?.typname ?? "",
207
+ });
208
+ /**
209
+ * Resolve a field to its Kysely type.
210
+ * Handles: TypeHints, enums, complex types, scalar types, extensions.
211
+ */
212
+ function resolveFieldType(field, ctx) {
213
+ const pgType = field.pgAttribute.getType();
214
+ const typeName = pgType?.typname ?? "";
215
+ // 1. Check TypeHints first (highest priority)
216
+ const fieldMatch = buildFieldMatch(field, ctx);
217
+ const tsTypeHint = ctx.typeHints.getHint(fieldMatch, "tsType");
218
+ if (Option.isSome(tsTypeHint)) {
219
+ const typeName = tsTypeHint.value;
220
+ const importPath = ctx.typeHints.getHint(fieldMatch, "import");
221
+ return {
222
+ selectType: ts.ref(typeName),
223
+ needsColumnType: false,
224
+ externalImport: pipe(importPath, Option.map(path => ({ name: typeName, from: path })), Option.getOrUndefined),
225
+ };
226
+ }
227
+ // 2. Check if it's an enum
228
+ if (isEnumType(field)) {
229
+ const enumName = getPgTypeName(field);
230
+ if (enumName) {
231
+ const enumDef = findEnumByPgName(ctx.enums, enumName);
232
+ if (Option.isSome(enumDef)) {
233
+ return {
234
+ selectType: ts.ref(enumDef.value.name),
235
+ needsColumnType: false,
236
+ };
237
+ }
238
+ }
239
+ }
240
+ // 3. Check complex types (need ColumnType wrapper)
241
+ const complexType = COMPLEX_TYPES[typeName];
242
+ if (complexType) {
243
+ return {
244
+ selectType: complexType.select(),
245
+ insertType: complexType.insert(),
246
+ updateType: complexType.update(),
247
+ needsColumnType: true,
248
+ externalImport: complexType.import,
249
+ };
250
+ }
251
+ // 4. Check simple scalar types
252
+ const scalarBuilder = SCALAR_TYPES[typeName];
253
+ if (scalarBuilder) {
254
+ return {
255
+ selectType: scalarBuilder(),
256
+ needsColumnType: false,
257
+ };
258
+ }
259
+ // 5. Check extension types (citext, etc.)
260
+ if (pgType) {
261
+ const extType = getExtensionTypeMapping(typeName, String(pgType.typnamespace), ctx.extensions);
262
+ if (Option.isSome(extType)) {
263
+ return {
264
+ selectType: tsTypeToAst(extType.value),
265
+ needsColumnType: false,
266
+ };
267
+ }
268
+ }
269
+ // 6. Default to string (PostgreSQL sends unknown types as strings)
270
+ return {
271
+ selectType: ts.string(),
272
+ needsColumnType: false,
273
+ };
274
+ }
275
+ /** Convert a simple TS type string to AST */
276
+ function tsTypeToAst(typeName) {
277
+ switch (typeName) {
278
+ case "string": return ts.string();
279
+ case "number": return ts.number();
280
+ case "boolean": return ts.boolean();
281
+ case "bigint": return ts.bigint();
282
+ case "unknown": return ts.unknown();
283
+ case "null": return ts.null();
284
+ case "Date": return ts.ref("Date");
285
+ case "Buffer": return ts.ref("Buffer");
286
+ default: return ts.ref(typeName);
287
+ }
288
+ }
289
+ /**
290
+ * Build the final field type with array/nullable/Generated wrappers.
291
+ */
292
+ function buildFieldType(field, kyselyType, needsGenerated) {
293
+ let baseType;
294
+ // If complex type, wrap in ColumnType<S, I, U>
295
+ if (kyselyType.needsColumnType && kyselyType.insertType && kyselyType.updateType) {
296
+ baseType = ts.ref("ColumnType", [
297
+ kyselyType.selectType,
298
+ kyselyType.insertType,
299
+ kyselyType.updateType,
300
+ ]);
301
+ }
302
+ else {
303
+ baseType = kyselyType.selectType;
304
+ }
305
+ // Wrap in array if needed
306
+ if (field.isArray) {
307
+ // For simple types, use T[]
308
+ // For complex types, use ArrayType<T>
309
+ if (kyselyType.needsColumnType) {
310
+ baseType = ts.ref("ArrayType", [baseType]);
311
+ }
312
+ else {
313
+ baseType = ts.array(baseType);
314
+ }
315
+ }
316
+ // Wrap in nullable if needed
317
+ if (field.nullable) {
318
+ baseType = ts.union(baseType, ts.null());
319
+ }
320
+ // Wrap in Generated<T> if field has default and is not insertable
321
+ if (needsGenerated) {
322
+ baseType = ts.ref("Generated", [baseType]);
323
+ }
324
+ return baseType;
325
+ }
326
+ /**
327
+ * Determine if a field should be wrapped in Generated<T>.
328
+ *
329
+ * A field is Generated when:
330
+ * - It has a default value, AND
331
+ * - It's not required on insert (either auto-increment or RLS blocks insert)
332
+ */
333
+ function isGeneratedField(field) {
334
+ if (!field.hasDefault)
335
+ return false;
336
+ // If field can't be inserted via RLS, it's generated
337
+ if (!field.permissions.canInsert)
338
+ return true;
339
+ // Check for serial/identity columns (auto-incrementing)
340
+ const pgType = field.pgAttribute.getType();
341
+ if (!pgType)
342
+ return false;
343
+ // Check for identity columns (GENERATED ALWAYS AS IDENTITY)
344
+ if (field.isIdentity)
345
+ return true;
346
+ // Check for generated columns (GENERATED ALWAYS AS ...)
347
+ if (field.isGenerated)
348
+ return true;
349
+ // serial types have specific OIDs that resolve to int4/int8
350
+ // but the attribute itself may have attidentity or atthasdef
351
+ // For now, use a heuristic: if it's an integer with a default, likely generated
352
+ const typeOid = Number(pgType._id);
353
+ const isIntegerType = typeOid === PgTypeOid.Int2
354
+ || typeOid === PgTypeOid.Int4
355
+ || typeOid === PgTypeOid.Int8;
356
+ // If it's an integer primary key with a default, it's likely auto-increment
357
+ // This is a simplification - proper detection would check sequences
358
+ if (isIntegerType && field.hasDefault) {
359
+ // Check if it's a primary key (best effort)
360
+ const constraints = field.pgAttribute.getClass()?.getConstraints() ?? [];
361
+ const isPrimaryKey = constraints.some(c => c.contype === "p" && c.conkey?.includes(field.pgAttribute.attnum));
362
+ if (isPrimaryKey)
363
+ return true;
364
+ }
365
+ return false;
366
+ }
367
+ // ============================================================================
368
+ // Statement Generators
369
+ // ============================================================================
370
+ /**
371
+ * Generate the helper type definitions (Generated, ArrayType, etc.)
372
+ */
373
+ function generateHelperTypes() {
374
+ const b = conjure;
375
+ // We'll emit these as raw type alias strings since they use complex conditionals
376
+ // that are easier to express as strings than AST
377
+ return []; // These will be added via file.header() or raw content
378
+ }
379
+ /**
380
+ * Generate enum type alias: `export type Status = "active" | "inactive"`
381
+ */
382
+ function generateEnumStatement(enumEntity) {
383
+ return exp.typeAlias(enumEntity.name, { capability: "types:kysely", entity: enumEntity.name }, ts.union(...enumEntity.values.map(v => ts.literal(v))));
384
+ }
385
+ /**
386
+ * Generate table interface with all column types.
387
+ */
388
+ function generateTableInterface(entity, ctx) {
389
+ const properties = [];
390
+ // Use the row shape for column definitions
391
+ for (const field of entity.shapes.row.fields) {
392
+ // Skip fields that aren't selectable via RLS
393
+ if (!field.permissions.canSelect)
394
+ continue;
395
+ const kyselyType = resolveFieldType(field, ctx);
396
+ const needsGenerated = isGeneratedField(field);
397
+ const fieldType = buildFieldType(field, kyselyType, needsGenerated);
398
+ properties.push({
399
+ name: field.name,
400
+ type: fieldType,
401
+ });
402
+ }
403
+ return exp.interface(entity.name, { capability: "types:kysely", entity: entity.name }, properties);
404
+ }
405
+ /**
406
+ * Generate DB interface: `export interface DB { 'schema.table': Table }`
407
+ */
408
+ function generateDBInterface(entities, defaultSchemas) {
409
+ const properties = [];
410
+ for (const entity of entities) {
411
+ // Skip entities that aren't selectable
412
+ if (!entity.permissions.canSelect)
413
+ continue;
414
+ // Use schema-qualified key if not in default schema
415
+ const key = defaultSchemas.includes(entity.schemaName)
416
+ ? entity.pgName
417
+ : `${entity.schemaName}.${entity.pgName}`;
418
+ properties.push({
419
+ name: key,
420
+ type: ts.ref(entity.name),
421
+ });
422
+ }
423
+ // Sort by key for stable output
424
+ properties.sort((a, b) => a.name.localeCompare(b.name));
425
+ return exp.interface("DB", { capability: "types:kysely", entity: "DB" }, properties);
426
+ }
427
+ function collectImports(entities, ctx) {
428
+ const kyselyImports = new Set();
429
+ const externalImports = new Map();
430
+ const usedEnums = new Set();
431
+ let needsJsonTypes = false;
432
+ let needsArrayType = false;
433
+ let needsGenerated = false;
434
+ for (const entity of entities) {
435
+ if (!entity.permissions.canSelect)
436
+ continue;
437
+ for (const field of entity.shapes.row.fields) {
438
+ if (!field.permissions.canSelect)
439
+ continue;
440
+ const kyselyType = resolveFieldType(field, {
441
+ ...ctx,
442
+ schemaName: entity.schemaName,
443
+ tableName: entity.pgName,
444
+ });
445
+ // Check for ColumnType usage
446
+ if (kyselyType.needsColumnType) {
447
+ kyselyImports.add("ColumnType");
448
+ }
449
+ // Check for external imports
450
+ if (kyselyType.externalImport) {
451
+ const { name, from } = kyselyType.externalImport;
452
+ if (!externalImports.has(from)) {
453
+ externalImports.set(from, new Set());
454
+ }
455
+ externalImports.get(from).add(name);
456
+ }
457
+ // Check for enum usage
458
+ if (isEnumType(field)) {
459
+ const enumName = getPgTypeName(field);
460
+ if (enumName) {
461
+ const enumDef = findEnumByPgName(ctx.enums, enumName);
462
+ if (Option.isSome(enumDef)) {
463
+ usedEnums.add(enumDef.value.name);
464
+ }
465
+ }
466
+ }
467
+ // Check for JSON types
468
+ const pgType = field.pgAttribute.getType();
469
+ if (pgType?.typname === "json" || pgType?.typname === "jsonb") {
470
+ needsJsonTypes = true;
471
+ }
472
+ // Check for complex array types
473
+ if (field.isArray && kyselyType.needsColumnType) {
474
+ needsArrayType = true;
475
+ }
476
+ // Check for Generated
477
+ if (isGeneratedField(field)) {
478
+ needsGenerated = true;
479
+ }
480
+ }
481
+ }
482
+ return {
483
+ kyselyImports,
484
+ externalImports,
485
+ usedEnums,
486
+ needsJsonTypes,
487
+ needsArrayType,
488
+ needsGenerated,
489
+ };
490
+ }
491
+ // ============================================================================
492
+ // Plugin Definition
493
+ // ============================================================================
494
+ /**
495
+ * Kysely Types Plugin
496
+ *
497
+ * Generates Kysely-compatible type definitions from SemanticIR.
498
+ * Uses RLS permissions to determine Generated<T> wrapping.
499
+ *
500
+ * @example Generated output:
501
+ * ```typescript
502
+ * import type { ColumnType } from 'kysely';
503
+ *
504
+ * export type Generated<T> = ...
505
+ *
506
+ * export type Status = 'active' | 'inactive';
507
+ *
508
+ * export interface Users {
509
+ * id: Generated<string>;
510
+ * name: string;
511
+ * email: string | null;
512
+ * }
513
+ *
514
+ * export interface DB {
515
+ * users: Users;
516
+ * }
517
+ * ```
518
+ */
519
+ export const kyselyTypesPlugin = definePlugin({
520
+ name: "kysely-types",
521
+ provides: ["types:kysely"],
522
+ configSchema: KyselyTypesPluginConfig,
523
+ inflection: {
524
+ outputFile: () => "db.ts",
525
+ symbolName: (entityName) => entityName,
526
+ },
527
+ run: (ctx, config) => {
528
+ const { ir, typeHints } = ctx;
529
+ const enumEntities = getEnumEntities(ir);
530
+ const tableEntities = getTableEntities(ir).filter(e => e.tags.omit !== true);
531
+ const defaultSchemas = ir.schemas;
532
+ // Build field context
533
+ const fieldCtx = {
534
+ schemaName: "", // Will be set per-entity
535
+ tableName: "",
536
+ enums: enumEntities,
537
+ extensions: ir.extensions,
538
+ typeHints,
539
+ defaultSchemas,
540
+ };
541
+ // Collect what imports we need
542
+ const imports = collectImports(tableEntities, fieldCtx);
543
+ // Build statements
544
+ const statements = [];
545
+ // Generate enum types
546
+ for (const enumEntity of enumEntities) {
547
+ if (enumEntity.tags.omit === true)
548
+ continue;
549
+ statements.push(generateEnumStatement(enumEntity));
550
+ }
551
+ // Generate table interfaces
552
+ for (const entity of tableEntities) {
553
+ statements.push(generateTableInterface(entity, {
554
+ ...fieldCtx,
555
+ schemaName: entity.schemaName,
556
+ tableName: entity.pgName,
557
+ }));
558
+ }
559
+ // Generate DB interface
560
+ statements.push(generateDBInterface(tableEntities, defaultSchemas));
561
+ // Build the file
562
+ const file = ctx.file(config.outputFile);
563
+ // Add Kysely imports
564
+ if (imports.kyselyImports.size > 0) {
565
+ file.import({
566
+ kind: "package",
567
+ types: [...imports.kyselyImports],
568
+ from: "kysely",
569
+ });
570
+ }
571
+ // Add external imports
572
+ for (const [from, names] of imports.externalImports) {
573
+ file.import({
574
+ kind: "relative",
575
+ types: [...names],
576
+ from,
577
+ });
578
+ }
579
+ // Build header with helper types
580
+ const helperTypes = [];
581
+ if (imports.needsGenerated) {
582
+ helperTypes.push(`export type Generated<T> = ${GENERATED_TYPE_DEF};`);
583
+ }
584
+ if (imports.needsArrayType) {
585
+ helperTypes.push(`export type ArrayType<T> = ${ARRAY_TYPE_DEF};`);
586
+ helperTypes.push(`export type ArrayTypeImpl<T> = ${ARRAY_TYPE_IMPL_DEF};`);
587
+ }
588
+ if (imports.needsJsonTypes) {
589
+ helperTypes.push(`export type JsonPrimitive = boolean | number | string | null;`);
590
+ helperTypes.push(`export type JsonObject = { [x: string]: JsonValue | undefined };`);
591
+ helperTypes.push(`export type JsonArray = JsonValue[];`);
592
+ helperTypes.push(`export type JsonValue = JsonArray | JsonObject | JsonPrimitive;`);
593
+ }
594
+ if (helperTypes.length > 0) {
595
+ file.header(helperTypes.join("\n\n"));
596
+ }
597
+ // Add the main content
598
+ file.ast(conjure.symbolProgram(...statements)).emit();
599
+ },
600
+ });
601
+ //# sourceMappingURL=kysely-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kysely-types.js","sourceRoot":"","sources":["../../src/plugins/kysely-types.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
1
  export declare const sqlQueriesPlugin: import("../index.js").PluginFactory<{
2
2
  readonly outputDir: string;
3
- readonly header?: string | undefined;
4
3
  readonly sqlStyle: "string" | "tag";
5
4
  }, {
6
5
  readonly outputDir?: string | undefined;
7
- readonly header?: string | undefined;
8
6
  readonly sqlStyle?: "string" | "tag" | undefined;
9
7
  }>;
10
8
  //# sourceMappingURL=sql-queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql-queries.d.ts","sourceRoot":"","sources":["../../src/plugins/sql-queries.ts"],"names":[],"mappings":"AA2VA,eAAO,MAAM,gBAAgB;;;;;;;;EAiE3B,CAAC"}
1
+ {"version":3,"file":"sql-queries.d.ts","sourceRoot":"","sources":["../../src/plugins/sql-queries.ts"],"names":[],"mappings":"AA0VA,eAAO,MAAM,gBAAgB;;;;;;EA6D3B,CAAC"}
@@ -14,7 +14,6 @@ const { ts, b, param } = conjure;
14
14
  // ============================================================================
15
15
  const SqlQueriesPluginConfig = S.Struct({
16
16
  outputDir: S.optionalWith(S.String, { default: () => "sql-queries" }),
17
- header: S.optional(S.String),
18
17
  /** SQL query style. Defaults to "tag" (tagged template literals) */
19
18
  sqlStyle: S.optionalWith(S.Union(S.Literal("tag"), S.Literal("string")), { default: () => "tag" }),
20
19
  });
@@ -282,9 +281,7 @@ export const sqlQueriesPlugin = definePlugin({
282
281
  entity,
283
282
  };
284
283
  const filePath = `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
285
- const file = ctx
286
- .file(filePath)
287
- .header(config.header ? `${config.header}\n` : "// This file is auto-generated. Do not edit.\n");
284
+ const file = ctx.file(filePath);
288
285
  // Import the appropriate SQL client based on style
289
286
  if (sqlStyle === "tag") {
290
287
  file.import({ kind: "relative", names: ["sql"], from: "../db" });