@chkit/plugin-codegen 0.1.0-beta.9 → 0.1.1

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 (38) hide show
  1. package/README.md +7 -1
  2. package/dist/generators/ingest-artifacts.d.ts +3 -0
  3. package/dist/generators/ingest-artifacts.d.ts.map +1 -0
  4. package/dist/generators/ingest-artifacts.js +98 -0
  5. package/dist/generators/ingest-artifacts.js.map +1 -0
  6. package/dist/generators/migration-artifacts.d.ts +3 -0
  7. package/dist/generators/migration-artifacts.d.ts.map +1 -0
  8. package/dist/generators/migration-artifacts.js +102 -0
  9. package/dist/generators/migration-artifacts.js.map +1 -0
  10. package/dist/generators/shared.d.ts +2 -0
  11. package/dist/generators/shared.d.ts.map +1 -0
  12. package/dist/generators/shared.js +8 -0
  13. package/dist/generators/shared.js.map +1 -0
  14. package/dist/generators/type-artifacts.d.ts +8 -0
  15. package/dist/generators/type-artifacts.d.ts.map +1 -0
  16. package/dist/generators/type-artifacts.js +293 -0
  17. package/dist/generators/type-artifacts.js.map +1 -0
  18. package/dist/generators.d.ts.map +1 -1
  19. package/dist/generators.js +5 -3
  20. package/dist/generators.js.map +1 -1
  21. package/dist/index.d.ts +6 -3
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/naming.d.ts +0 -1
  26. package/dist/naming.d.ts.map +1 -1
  27. package/dist/naming.js +1 -1
  28. package/dist/naming.js.map +1 -1
  29. package/dist/options.d.ts +58 -7
  30. package/dist/options.d.ts.map +1 -1
  31. package/dist/options.js +47 -108
  32. package/dist/options.js.map +1 -1
  33. package/dist/plugin.d.ts.map +1 -1
  34. package/dist/plugin.js +87 -31
  35. package/dist/plugin.js.map +1 -1
  36. package/dist/types.d.ts +21 -25
  37. package/dist/types.d.ts.map +1 -1
  38. package/package.json +18 -2
package/README.md CHANGED
@@ -7,9 +7,13 @@ Part of the [chkit](https://github.com/obsessiondb/chkit) monorepo. This plugin
7
7
  ## Install
8
8
 
9
9
  ```bash
10
- bun add -d @chkit/plugin-codegen
10
+ bun add -d @chkit/plugin-codegen zod
11
11
  ```
12
12
 
13
+ `zod` is a peer dependency (`^4.0.0`): the plugin uses it at runtime, and any
14
+ generated Zod schemas (`emitZod: true`) import `zod` from your project. Install
15
+ the same `zod` your project already uses to avoid duplicate copies.
16
+
13
17
  ## Usage
14
18
 
15
19
  Register the plugin in your config:
@@ -43,6 +47,8 @@ bunx chkit codegen
43
47
 
44
48
  Codegen also runs automatically after `chkit generate` when `runOnGenerate` is enabled (default).
45
49
 
50
+ When `emitIngest` is enabled, generated ingest helpers gzip-compress request bodies by default. Pass `{ compressed: false }` as the third argument to disable compression for a specific insert.
51
+
46
52
  ## Documentation
47
53
 
48
54
  See the [chkit documentation](https://chkit.obsessiondb.com).
@@ -0,0 +1,3 @@
1
+ import type { GenerateIngestArtifactsInput, GenerateIngestArtifactsOutput } from '../types.js';
2
+ export declare function generateIngestArtifacts(input: GenerateIngestArtifactsInput): GenerateIngestArtifactsOutput;
3
+ //# sourceMappingURL=ingest-artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-artifacts.d.ts","sourceRoot":"","sources":["../../src/generators/ingest-artifacts.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,aAAa,CAAA;AAkDpB,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,6BAA6B,CAyD/B"}
@@ -0,0 +1,98 @@
1
+ import { dirname, relative } from 'node:path';
2
+ import { canonicalizeDefinitions, } from '@chkit/core';
3
+ import { normalizeCodegenOptions } from '../options.js';
4
+ import { resolveTableNames } from '../naming.js';
5
+ import { renderHeader } from './shared.js';
6
+ function computeRelativeImportPath(fromFile, toFile) {
7
+ const fromDir = dirname(fromFile);
8
+ let rel = relative(fromDir, toFile);
9
+ if (!rel.startsWith('.'))
10
+ rel = `./${rel}`;
11
+ // Replace .ts extension with .js for ESM imports
12
+ return rel.replace(/\.ts$/, '.js');
13
+ }
14
+ function stripRowSuffix(name) {
15
+ if (name.endsWith('Row'))
16
+ return name.slice(0, -3);
17
+ if (name.endsWith('_row'))
18
+ return name.slice(0, -4);
19
+ return name;
20
+ }
21
+ function renderIngestFunction(table, interfaceName, emitZod) {
22
+ const funcName = `ingest${stripRowSuffix(interfaceName)}`;
23
+ const tableFqn = `${table.database}.${table.name}`;
24
+ const lines = [];
25
+ if (emitZod) {
26
+ lines.push(`export async function ${funcName}(`);
27
+ lines.push(` ingestor: Ingestor,`);
28
+ lines.push(` rows: ${interfaceName}[],`);
29
+ lines.push(` options?: IngestOptions`);
30
+ lines.push(`): Promise<void> {`);
31
+ lines.push(` const data = options?.validate ? rows.map(row => ${interfaceName}Schema.parse(row)) : rows`);
32
+ lines.push(` await ingestor.insert({ table: '${tableFqn}', values: data, compressed: options?.compressed ?? true })`);
33
+ lines.push(`}`);
34
+ }
35
+ else {
36
+ lines.push(`export async function ${funcName}(`);
37
+ lines.push(` ingestor: Ingestor,`);
38
+ lines.push(` rows: ${interfaceName}[],`);
39
+ lines.push(` options?: IngestOptions`);
40
+ lines.push(`): Promise<void> {`);
41
+ lines.push(` await ingestor.insert({ table: '${tableFqn}', values: rows, compressed: options?.compressed ?? true })`);
42
+ lines.push(`}`);
43
+ }
44
+ return lines;
45
+ }
46
+ export function generateIngestArtifacts(input) {
47
+ const normalized = normalizeCodegenOptions(input.options);
48
+ const definitions = canonicalizeDefinitions(input.definitions);
49
+ const tables = definitions
50
+ .filter((definition) => definition.kind === 'table')
51
+ .sort((a, b) => {
52
+ if (a.database !== b.database)
53
+ return a.database.localeCompare(b.database);
54
+ return a.name.localeCompare(b.name);
55
+ });
56
+ const resolved = resolveTableNames(tables, normalized.tableNameStyle);
57
+ const importPath = computeRelativeImportPath(normalized.ingestOutFile, normalized.outFile);
58
+ const typeImports = [];
59
+ const valueImports = [];
60
+ for (const entry of resolved) {
61
+ typeImports.push(entry.interfaceName);
62
+ if (normalized.emitZod) {
63
+ valueImports.push(`${entry.interfaceName}Schema`);
64
+ }
65
+ }
66
+ const header = renderHeader(input.toolVersion ?? '0.1.0');
67
+ const lines = [...header, ''];
68
+ if (typeImports.length > 0) {
69
+ lines.push(`import type { ${typeImports.join(', ')} } from '${importPath}'`);
70
+ }
71
+ if (valueImports.length > 0) {
72
+ lines.push(`import { ${valueImports.join(', ')} } from '${importPath}'`);
73
+ }
74
+ lines.push('');
75
+ lines.push('export interface Ingestor {');
76
+ lines.push(' insert(params: { table: string; values: Record<string, unknown>[]; compressed?: boolean }): Promise<void>');
77
+ lines.push('}');
78
+ lines.push('');
79
+ lines.push('export interface IngestOptions {');
80
+ lines.push(' compressed?: boolean');
81
+ if (normalized.emitZod) {
82
+ lines.push(' validate?: boolean');
83
+ }
84
+ lines.push('}');
85
+ for (const entry of resolved) {
86
+ if (entry.definition.kind !== 'table')
87
+ continue;
88
+ lines.push('');
89
+ lines.push(...renderIngestFunction(entry.definition, entry.interfaceName, normalized.emitZod));
90
+ }
91
+ const content = `${lines.join('\n').trimEnd()}\n`;
92
+ return {
93
+ content,
94
+ outFile: normalized.ingestOutFile,
95
+ functionCount: resolved.length,
96
+ };
97
+ }
98
+ //# sourceMappingURL=ingest-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-artifacts.js","sourceRoot":"","sources":["../../src/generators/ingest-artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GenerateMigrationArtifactsInput, GenerateMigrationArtifactsOutput } from '../types.js';
2
+ export declare function generateMigrationArtifacts(input: GenerateMigrationArtifactsInput): Promise<GenerateMigrationArtifactsOutput>;
3
+ //# sourceMappingURL=migration-artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-artifacts.d.ts","sourceRoot":"","sources":["../../src/generators/migration-artifacts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EACjC,MAAM,aAAa,CAAA;AAiBpB,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,gCAAgC,CAAC,CA2C3C"}
@@ -0,0 +1,102 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { normalizeCodegenOptions } from '../options.js';
4
+ import { renderHeader } from './shared.js';
5
+ function escapeTemplateLiteral(sql) {
6
+ return sql.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\${');
7
+ }
8
+ function renderMigrationsArray(migrations) {
9
+ if (migrations.length === 0)
10
+ return 'export const migrations: MigrationEntry[] = []';
11
+ const entries = migrations.map((m) => ` {\n name: '${m.name}',\n sql: \`${escapeTemplateLiteral(m.sql)}\`,\n },`);
12
+ return `export const migrations: MigrationEntry[] = [\n${entries.join('\n')}\n]`;
13
+ }
14
+ export async function generateMigrationArtifacts(input) {
15
+ const normalized = normalizeCodegenOptions(input.options);
16
+ const toolVersion = input.toolVersion ?? '0.1.0';
17
+ const entries = await readdir(input.migrationsDir).catch(() => []);
18
+ const sqlFiles = entries.filter((f) => f.endsWith('.sql')).sort();
19
+ const migrations = await Promise.all(sqlFiles.map(async (file) => ({
20
+ name: file.replace(/\.sql$/, ''),
21
+ sql: await readFile(join(input.migrationsDir, file), 'utf8'),
22
+ })));
23
+ const header = renderHeader(toolVersion);
24
+ const migrationsArray = renderMigrationsArray(migrations);
25
+ // biome-ignore lint/style/useTemplate: join+concat is clearer here
26
+ const content = [
27
+ ...header,
28
+ '',
29
+ "import { extractExecutableStatements } from '@chkit/core'",
30
+ '',
31
+ 'export interface MigrationEntry {',
32
+ ' name: string',
33
+ ' sql: string',
34
+ '}',
35
+ '',
36
+ 'export interface MigrationExecutor {',
37
+ ' command(sql: string): Promise<void>',
38
+ ' query<T>(sql: string): Promise<T[]>',
39
+ '}',
40
+ '',
41
+ migrationsArray,
42
+ '',
43
+ RUN_MIGRATIONS_FUNCTION,
44
+ ].join('\n').trimEnd() + '\n';
45
+ return {
46
+ content,
47
+ outFile: normalized.migrationsOutFile,
48
+ migrationCount: migrations.length,
49
+ };
50
+ }
51
+ // The runMigrations function is static — it doesn't depend on the SQL splitter source,
52
+ // so it's safe to keep as a constant string.
53
+ const RUN_MIGRATIONS_FUNCTION = `/**
54
+ * Run all pending migrations against the provided executor.
55
+ * Migrations that have already been applied (tracked in _chkit_migrations) are skipped.
56
+ * Each migration is recorded in the journal after successful execution.
57
+ */
58
+ export async function runMigrations(
59
+ executor: MigrationExecutor,
60
+ options?: { journalTable?: string }
61
+ ): Promise<{ applied: string[]; skipped: string[] }> {
62
+ const journalTable = options?.journalTable ?? '_chkit_migrations'
63
+
64
+ // Ensure journal table exists
65
+ await executor.command(\`
66
+ CREATE TABLE IF NOT EXISTS \${journalTable} (
67
+ name String,
68
+ applied_at DateTime64(3, 'UTC') DEFAULT now64(3),
69
+ checksum String,
70
+ chkit_version String DEFAULT 'runtime'
71
+ ) ENGINE = ReplacingMergeTree(applied_at) ORDER BY (name)
72
+ \`)
73
+
74
+ // Read already-applied migrations
75
+ const applied = await executor.query<{ name: string }>(
76
+ \`SELECT name FROM \${journalTable} FINAL\`
77
+ )
78
+ const appliedSet = new Set(applied.map(r => r.name))
79
+
80
+ const result = { applied: [] as string[], skipped: [] as string[] }
81
+
82
+ for (const migration of migrations) {
83
+ if (appliedSet.has(migration.name)) {
84
+ result.skipped.push(migration.name)
85
+ continue
86
+ }
87
+
88
+ const statements = extractExecutableStatements(migration.sql)
89
+ for (const statement of statements) {
90
+ await executor.command(statement)
91
+ }
92
+
93
+ // Record in journal
94
+ await executor.command(
95
+ \`INSERT INTO \${journalTable} (name, applied_at, checksum) VALUES ('\${migration.name}', now64(3), '')\`
96
+ )
97
+ result.applied.push(migration.name)
98
+ }
99
+
100
+ return result
101
+ }`;
102
+ //# sourceMappingURL=migration-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-artifacts.js","sourceRoot":"","sources":["../../src/generators/migration-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAMhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,SAAS,qBAAqB,CAAC,GAAW;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAwD;IACrF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,gDAAgD,CAAA;IAEpF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,IAAI,kBAAkB,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAC1F,CAAA;IACD,OAAO,kDAAkD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,KAAsC;IAEtC,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACzD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,OAAO,CAAA;IAEhD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAA;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAEjE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QAChC,GAAG,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;KAC7D,CAAC,CAAC,CACJ,CAAA;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IACxC,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAA;IAEzD,mEAAmE;IACnE,MAAM,OAAO,GAAG;QACd,GAAG,MAAM;QACT,EAAE;QACF,2DAA2D;QAC3D,EAAE;QACF,mCAAmC;QACnC,gBAAgB;QAChB,eAAe;QACf,GAAG;QACH,EAAE;QACF,sCAAsC;QACtC,uCAAuC;QACvC,uCAAuC;QACvC,GAAG;QACH,EAAE;QACF,eAAe;QACf,EAAE;QACF,uBAAuB;KACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAA;IAE7B,OAAO;QACL,OAAO;QACP,OAAO,EAAE,UAAU,CAAC,iBAAiB;QACrC,cAAc,EAAE,UAAU,CAAC,MAAM;KAClC,CAAA;AACH,CAAC;AAED,uFAAuF;AACvF,6CAA6C;AAC7C,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgD9B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function renderHeader(toolVersion: string): string[];
2
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/generators/shared.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAM1D"}
@@ -0,0 +1,8 @@
1
+ export function renderHeader(toolVersion) {
2
+ const lines = [
3
+ '// This file is auto-generated by chkit codegen — do not edit manually.',
4
+ ];
5
+ lines.push(`// chkit-codegen-version: ${toolVersion}`);
6
+ return lines;
7
+ }
8
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/generators/shared.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,MAAM,KAAK,GAAG;QACZ,yEAAyE;KAC1E,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAA;IACtD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type ColumnDefinition } from '@chkit/core';
2
+ import type { CodegenPluginOptions, GenerateTypeArtifactsInput, GenerateTypeArtifactsOutput, MapColumnTypeResult } from '../types.js';
3
+ export declare function mapColumnType(input: {
4
+ column: ColumnDefinition;
5
+ path: string;
6
+ }, options: Pick<Required<CodegenPluginOptions>, 'bigintMode' | 'failOnUnsupportedType'>): MapColumnTypeResult;
7
+ export declare function generateTypeArtifacts(input: GenerateTypeArtifactsInput): GenerateTypeArtifactsOutput;
8
+ //# sourceMappingURL=type-artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-artifacts.d.ts","sourceRoot":"","sources":["../../src/generators/type-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAItB,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAEV,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,aAAa,CAAA;AA4LpB,wBAAgB,aAAa,CAC3B,KAAK,EAAE;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACjD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,YAAY,GAAG,uBAAuB,CAAC,GACpF,mBAAmB,CAyBrB;AAkDD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CA2C7B"}
@@ -0,0 +1,293 @@
1
+ import { canonicalizeDefinitions, } from '@chkit/core';
2
+ import { UnsupportedTypeError } from '../errors.js';
3
+ import { normalizeCodegenOptions } from '../options.js';
4
+ import { renderPropertyName, resolveTableNames } from '../naming.js';
5
+ import { renderHeader } from './shared.js';
6
+ const LARGE_INTEGER_TYPES = new Set([
7
+ 'Int64',
8
+ 'UInt64',
9
+ 'Int128',
10
+ 'UInt128',
11
+ 'Int256',
12
+ 'UInt256',
13
+ ]);
14
+ const NUMBER_TYPES = new Set([
15
+ 'Int8',
16
+ 'Int16',
17
+ 'Int32',
18
+ 'UInt8',
19
+ 'UInt16',
20
+ 'UInt32',
21
+ 'Float32',
22
+ 'Float64',
23
+ 'BFloat16',
24
+ ]);
25
+ const STRING_TYPES = new Set([
26
+ 'String',
27
+ 'FixedString',
28
+ 'Date',
29
+ 'Date32',
30
+ 'DateTime',
31
+ 'DateTime64',
32
+ 'UUID',
33
+ 'IPv4',
34
+ 'IPv6',
35
+ 'Enum',
36
+ 'Enum8',
37
+ 'Enum16',
38
+ 'Decimal',
39
+ 'Decimal32',
40
+ 'Decimal64',
41
+ 'Decimal128',
42
+ 'Decimal256',
43
+ ]);
44
+ const BOOLEAN_TYPES = new Set(['Bool', 'Boolean']);
45
+ function splitTopLevelArgs(input) {
46
+ const args = [];
47
+ let depth = 0;
48
+ let start = 0;
49
+ for (let i = 0; i < input.length; i++) {
50
+ const ch = input[i];
51
+ if (ch === '(')
52
+ depth++;
53
+ else if (ch === ')')
54
+ depth--;
55
+ else if (ch === ',' && depth === 0) {
56
+ args.push(input.slice(start, i).trim());
57
+ start = i + 1;
58
+ }
59
+ }
60
+ const last = input.slice(start).trim();
61
+ if (last.length > 0)
62
+ args.push(last);
63
+ return args;
64
+ }
65
+ function parseClickHouseType(typeStr) {
66
+ const trimmed = typeStr.trim();
67
+ const parenIndex = trimmed.indexOf('(');
68
+ if (parenIndex < 0)
69
+ return { base: trimmed, args: [] };
70
+ const base = trimmed.slice(0, parenIndex);
71
+ const closingParen = trimmed.lastIndexOf(')');
72
+ if (closingParen <= parenIndex)
73
+ return { base: trimmed, args: [] };
74
+ const inner = trimmed.slice(parenIndex + 1, closingParen);
75
+ if (inner.trim().length === 0)
76
+ return { base, args: [] };
77
+ return { base, args: splitTopLevelArgs(inner) };
78
+ }
79
+ function mapScalarType(base, bigintMode) {
80
+ if (STRING_TYPES.has(base))
81
+ return 'string';
82
+ if (BOOLEAN_TYPES.has(base))
83
+ return 'boolean';
84
+ if (NUMBER_TYPES.has(base))
85
+ return 'number';
86
+ if (LARGE_INTEGER_TYPES.has(base))
87
+ return bigintMode;
88
+ return null;
89
+ }
90
+ function scalarToZod(mapped) {
91
+ if (mapped === 'string')
92
+ return 'z.string()';
93
+ if (mapped === 'number')
94
+ return 'z.number()';
95
+ if (mapped === 'boolean')
96
+ return 'z.boolean()';
97
+ if (mapped === 'bigint')
98
+ return 'z.bigint()';
99
+ return 'z.unknown()';
100
+ }
101
+ function resolveInnerType(typeStr, bigintMode) {
102
+ const parsed = parseClickHouseType(typeStr);
103
+ const scalar = mapScalarType(parsed.base, bigintMode);
104
+ if (scalar)
105
+ return { tsType: scalar, zodType: scalarToZod(scalar) };
106
+ switch (parsed.base) {
107
+ case 'Nullable': {
108
+ const arg = parsed.args[0];
109
+ if (!arg)
110
+ return null;
111
+ const inner = resolveInnerType(arg, bigintMode);
112
+ if (!inner)
113
+ return null;
114
+ return { tsType: `${inner.tsType} | null`, zodType: `${inner.zodType}.nullable()` };
115
+ }
116
+ case 'LowCardinality': {
117
+ const arg = parsed.args[0];
118
+ if (!arg)
119
+ return null;
120
+ return resolveInnerType(arg, bigintMode);
121
+ }
122
+ case 'Array': {
123
+ const arg = parsed.args[0];
124
+ if (!arg)
125
+ return null;
126
+ const inner = resolveInnerType(arg, bigintMode);
127
+ if (!inner)
128
+ return null;
129
+ const needsWrap = inner.tsType.includes('|');
130
+ const tsType = needsWrap ? `(${inner.tsType})[]` : `${inner.tsType}[]`;
131
+ return { tsType, zodType: `z.array(${inner.zodType})` };
132
+ }
133
+ case 'Map': {
134
+ const keyArg = parsed.args[0];
135
+ const valueArg = parsed.args[1];
136
+ if (!keyArg || !valueArg)
137
+ return null;
138
+ const key = resolveInnerType(keyArg, bigintMode);
139
+ const value = resolveInnerType(valueArg, bigintMode);
140
+ if (!key || !value)
141
+ return null;
142
+ return {
143
+ tsType: `Record<${key.tsType}, ${value.tsType}>`,
144
+ zodType: `z.record(${key.zodType}, ${value.zodType})`,
145
+ };
146
+ }
147
+ case 'Tuple': {
148
+ if (parsed.args.length === 0)
149
+ return null;
150
+ const elements = parsed.args.map((a) => resolveInnerType(a, bigintMode));
151
+ if (elements.some((e) => e === null))
152
+ return null;
153
+ const valid = elements;
154
+ return {
155
+ tsType: `[${valid.map((e) => e.tsType).join(', ')}]`,
156
+ zodType: `z.tuple([${valid.map((e) => e.zodType).join(', ')}])`,
157
+ };
158
+ }
159
+ case 'SimpleAggregateFunction': {
160
+ const lastArg = parsed.args[parsed.args.length - 1];
161
+ if (parsed.args.length < 2 || !lastArg)
162
+ return null;
163
+ return resolveInnerType(lastArg, bigintMode);
164
+ }
165
+ case 'JSON': {
166
+ return { tsType: 'Record<string, unknown>', zodType: 'z.record(z.string(), z.unknown())' };
167
+ }
168
+ default:
169
+ return null;
170
+ }
171
+ }
172
+ function resolveColumnType(typeStr, bigintMode) {
173
+ const parsed = parseClickHouseType(typeStr);
174
+ const firstArg = parsed.args[0];
175
+ if (parsed.base === 'LowCardinality' && firstArg) {
176
+ return resolveColumnType(firstArg, bigintMode);
177
+ }
178
+ if (parsed.base === 'Nullable' && firstArg) {
179
+ const inner = resolveColumnType(firstArg, bigintMode);
180
+ if (!inner)
181
+ return null;
182
+ return { tsType: inner.tsType, zodType: inner.zodType, nullable: true };
183
+ }
184
+ const resolved = resolveInnerType(typeStr, bigintMode);
185
+ if (!resolved)
186
+ return null;
187
+ return { tsType: resolved.tsType, zodType: resolved.zodType, nullable: false };
188
+ }
189
+ export function mapColumnType(input, options) {
190
+ const resolved = resolveColumnType(input.column.type, options.bigintMode);
191
+ const columnNullable = input.column.nullable === true;
192
+ if (!resolved) {
193
+ if (options.failOnUnsupportedType) {
194
+ throw new UnsupportedTypeError(input.path, input.column.type);
195
+ }
196
+ const unknownType = columnNullable ? 'unknown | null' : 'unknown';
197
+ return {
198
+ tsType: unknownType,
199
+ zodType: 'z.unknown()',
200
+ nullable: columnNullable,
201
+ finding: {
202
+ code: 'codegen_unsupported_type',
203
+ message: `Unsupported type "${input.column.type}" at ${input.path}; emitted unknown.`,
204
+ severity: 'warn',
205
+ path: input.path,
206
+ },
207
+ };
208
+ }
209
+ const nullable = columnNullable || resolved.nullable;
210
+ const tsType = nullable ? `${resolved.tsType} | null` : resolved.tsType;
211
+ return { tsType, zodType: resolved.zodType, nullable };
212
+ }
213
+ function renderTableInterface(table, interfaceName, options) {
214
+ const lines = [`export type ${interfaceName} = {`];
215
+ const findings = [];
216
+ const zodFields = [];
217
+ for (const column of table.columns) {
218
+ const path = `${table.database}.${table.name}.${column.name}`;
219
+ const mapped = mapColumnType({ column, path }, options);
220
+ if (mapped.finding)
221
+ findings.push(mapped.finding);
222
+ lines.push(` ${renderPropertyName(column.name)}: ${mapped.tsType}`);
223
+ const zodExpr = mapped.nullable ? `${mapped.zodType}.nullable()` : mapped.zodType;
224
+ zodFields.push(` ${renderPropertyName(column.name)}: ${zodExpr},`);
225
+ }
226
+ lines.push('}');
227
+ if (options.emitZod) {
228
+ lines.push('');
229
+ lines.push(`export const ${interfaceName}Schema = z.object({`);
230
+ lines.push(...zodFields);
231
+ lines.push('})');
232
+ lines.push('');
233
+ lines.push(`export type ${interfaceName}Input = z.input<typeof ${interfaceName}Schema>`);
234
+ lines.push(`export type ${interfaceName}Output = z.output<typeof ${interfaceName}Schema>`);
235
+ }
236
+ return { lines, findings };
237
+ }
238
+ function renderViewInterface(definition, interfaceName) {
239
+ const kind = definition.kind === 'view' ? 'view' : 'materialized_view';
240
+ return {
241
+ lines: [
242
+ `export type ${interfaceName} = {`,
243
+ ' [key: string]: unknown',
244
+ '}',
245
+ '',
246
+ `// ${kind} ${definition.database}.${definition.name} is emitted as unknown-key row shape in v1.`,
247
+ ],
248
+ findings: [],
249
+ };
250
+ }
251
+ export function generateTypeArtifacts(input) {
252
+ const normalized = normalizeCodegenOptions(input.options);
253
+ const definitions = canonicalizeDefinitions(input.definitions);
254
+ const sortedDefinitions = definitions
255
+ .filter((definition) => {
256
+ if (definition.kind === 'table')
257
+ return true;
258
+ if (!normalized.includeViews)
259
+ return false;
260
+ return definition.kind === 'view' || definition.kind === 'materialized_view';
261
+ })
262
+ .sort((a, b) => {
263
+ if (a.database !== b.database)
264
+ return a.database.localeCompare(b.database);
265
+ return a.name.localeCompare(b.name);
266
+ });
267
+ const resolved = resolveTableNames(sortedDefinitions, normalized.tableNameStyle);
268
+ const findings = [];
269
+ const bodyLines = [];
270
+ for (const entry of resolved) {
271
+ const rendered = entry.definition.kind === 'table'
272
+ ? renderTableInterface(entry.definition, entry.interfaceName, normalized)
273
+ : renderViewInterface(entry.definition, entry.interfaceName);
274
+ findings.push(...rendered.findings);
275
+ bodyLines.push(...rendered.lines);
276
+ bodyLines.push('');
277
+ }
278
+ const header = renderHeader(input.toolVersion ?? '0.1.0');
279
+ const lines = [
280
+ ...header,
281
+ ...(normalized.emitZod ? ['', "import { z } from 'zod'"] : []),
282
+ '',
283
+ ...bodyLines,
284
+ ];
285
+ const content = `${lines.join('\n').trimEnd()}\n`;
286
+ return {
287
+ content,
288
+ outFile: normalized.outFile,
289
+ declarationCount: resolved.length,
290
+ findings,
291
+ };
292
+ }
293
+ //# sourceMappingURL=type-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-artifacts.js","sourceRoot":"","sources":["../../src/generators/type-artifacts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../src/generators.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,gBAAgB,EAItB,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAEV,oBAAoB,EACpB,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,YAAY,CAAA;AA2LnB,wBAAgB,aAAa,CAC3B,KAAK,EAAE;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACjD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,YAAY,GAAG,uBAAuB,CAAC,GACpF,mBAAmB,CAyBrB;AAwDD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CA2C7B;AA8CD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,6BAA6B,CAkD/B"}
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../src/generators.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,gBAAgB,EAItB,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAEV,oBAAoB,EACpB,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,YAAY,CAAA;AA2LnB,wBAAgB,aAAa,CAC3B,KAAK,EAAE;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACjD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,YAAY,GAAG,uBAAuB,CAAC,GACpF,mBAAmB,CAyBrB;AA0DD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CA2C7B;AA8CD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,6BAA6B,CAkD/B"}
@@ -211,12 +211,14 @@ export function mapColumnType(input, options) {
211
211
  return { tsType, zodType: resolved.zodType, nullable };
212
212
  }
213
213
  function renderHeader(toolVersion) {
214
- const lines = ['// Generated by chkit codegen plugin'];
214
+ const lines = [
215
+ '// This file is auto-generated by chkit codegen — do not edit manually.',
216
+ ];
215
217
  lines.push(`// chkit-codegen-version: ${toolVersion}`);
216
218
  return lines;
217
219
  }
218
220
  function renderTableInterface(table, interfaceName, options) {
219
- const lines = [`export interface ${interfaceName} {`];
221
+ const lines = [`export type ${interfaceName} = {`];
220
222
  const findings = [];
221
223
  const zodFields = [];
222
224
  for (const column of table.columns) {
@@ -244,7 +246,7 @@ function renderViewInterface(definition, interfaceName) {
244
246
  const kind = definition.kind === 'view' ? 'view' : 'materialized_view';
245
247
  return {
246
248
  lines: [
247
- `export interface ${interfaceName} {`,
249
+ `export type ${interfaceName} = {`,
248
250
  ' [key: string]: unknown',
249
251
  '}',
250
252
  '',