@chkit/plugin-codegen 0.1.0-beta.9 → 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/README.md +7 -1
- package/dist/generators/ingest-artifacts.d.ts +3 -0
- package/dist/generators/ingest-artifacts.d.ts.map +1 -0
- package/dist/generators/ingest-artifacts.js +98 -0
- package/dist/generators/ingest-artifacts.js.map +1 -0
- package/dist/generators/migration-artifacts.d.ts +3 -0
- package/dist/generators/migration-artifacts.d.ts.map +1 -0
- package/dist/generators/migration-artifacts.js +102 -0
- package/dist/generators/migration-artifacts.js.map +1 -0
- package/dist/generators/shared.d.ts +2 -0
- package/dist/generators/shared.d.ts.map +1 -0
- package/dist/generators/shared.js +8 -0
- package/dist/generators/shared.js.map +1 -0
- package/dist/generators/type-artifacts.d.ts +8 -0
- package/dist/generators/type-artifacts.d.ts.map +1 -0
- package/dist/generators/type-artifacts.js +293 -0
- package/dist/generators/type-artifacts.js.map +1 -0
- package/dist/generators.d.ts.map +1 -1
- package/dist/generators.js +5 -3
- package/dist/generators.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/naming.d.ts +0 -1
- package/dist/naming.d.ts.map +1 -1
- package/dist/naming.js +1 -1
- package/dist/naming.js.map +1 -1
- package/dist/options.d.ts +58 -7
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +47 -108
- package/dist/options.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +87 -31
- package/dist/plugin.js.map +1 -1
- package/dist/types.d.ts +21 -25
- package/dist/types.d.ts.map +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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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"}
|
package/dist/generators.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/generators.js
CHANGED
|
@@ -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 = [
|
|
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
|
|
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
|
|
249
|
+
`export type ${interfaceName} = {`,
|
|
248
250
|
' [key: string]: unknown',
|
|
249
251
|
'}',
|
|
250
252
|
'',
|