chkit 0.1.0-beta.5

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 (114) hide show
  1. package/README.md +43 -0
  2. package/dist/bin/chkit.d.ts +3 -0
  3. package/dist/bin/chkit.d.ts.map +1 -0
  4. package/dist/bin/chkit.js +337 -0
  5. package/dist/bin/chkit.js.map +1 -0
  6. package/dist/bin/commands/check.d.ts +2 -0
  7. package/dist/bin/commands/check.d.ts.map +1 -0
  8. package/dist/bin/commands/check.js +123 -0
  9. package/dist/bin/commands/check.js.map +1 -0
  10. package/dist/bin/commands/codegen.d.ts +2 -0
  11. package/dist/bin/commands/codegen.d.ts.map +1 -0
  12. package/dist/bin/commands/codegen.js +25 -0
  13. package/dist/bin/commands/codegen.js.map +1 -0
  14. package/dist/bin/commands/drift.d.ts +22 -0
  15. package/dist/bin/commands/drift.d.ts.map +1 -0
  16. package/dist/bin/commands/drift.js +170 -0
  17. package/dist/bin/commands/drift.js.map +1 -0
  18. package/dist/bin/commands/generate/output.d.ts +8 -0
  19. package/dist/bin/commands/generate/output.d.ts.map +1 -0
  20. package/dist/bin/commands/generate/output.js +58 -0
  21. package/dist/bin/commands/generate/output.js.map +1 -0
  22. package/dist/bin/commands/generate/plan-pipeline.d.ts +7 -0
  23. package/dist/bin/commands/generate/plan-pipeline.d.ts.map +1 -0
  24. package/dist/bin/commands/generate/plan-pipeline.js +139 -0
  25. package/dist/bin/commands/generate/plan-pipeline.js.map +1 -0
  26. package/dist/bin/commands/generate/rename-mappings.d.ts +29 -0
  27. package/dist/bin/commands/generate/rename-mappings.d.ts.map +1 -0
  28. package/dist/bin/commands/generate/rename-mappings.js +207 -0
  29. package/dist/bin/commands/generate/rename-mappings.js.map +1 -0
  30. package/dist/bin/commands/generate.d.ts +2 -0
  31. package/dist/bin/commands/generate.d.ts.map +1 -0
  32. package/dist/bin/commands/generate.js +137 -0
  33. package/dist/bin/commands/generate.js.map +1 -0
  34. package/dist/bin/commands/init.d.ts +2 -0
  35. package/dist/bin/commands/init.d.ts.map +1 -0
  36. package/dist/bin/commands/init.js +12 -0
  37. package/dist/bin/commands/init.js.map +1 -0
  38. package/dist/bin/commands/migrate.d.ts +2 -0
  39. package/dist/bin/commands/migrate.d.ts.map +1 -0
  40. package/dist/bin/commands/migrate.js +262 -0
  41. package/dist/bin/commands/migrate.js.map +1 -0
  42. package/dist/bin/commands/plugin-like.d.ts +38 -0
  43. package/dist/bin/commands/plugin-like.d.ts.map +1 -0
  44. package/dist/bin/commands/plugin-like.js +101 -0
  45. package/dist/bin/commands/plugin-like.js.map +1 -0
  46. package/dist/bin/commands/plugin.d.ts +2 -0
  47. package/dist/bin/commands/plugin.d.ts.map +1 -0
  48. package/dist/bin/commands/plugin.js +92 -0
  49. package/dist/bin/commands/plugin.js.map +1 -0
  50. package/dist/bin/commands/pull.d.ts +2 -0
  51. package/dist/bin/commands/pull.d.ts.map +1 -0
  52. package/dist/bin/commands/pull.js +25 -0
  53. package/dist/bin/commands/pull.js.map +1 -0
  54. package/dist/bin/commands/status.d.ts +2 -0
  55. package/dist/bin/commands/status.d.ts.map +1 -0
  56. package/dist/bin/commands/status.js +42 -0
  57. package/dist/bin/commands/status.js.map +1 -0
  58. package/dist/bin/commands/typegen.d.ts +2 -0
  59. package/dist/bin/commands/typegen.d.ts.map +1 -0
  60. package/dist/bin/commands/typegen.js +25 -0
  61. package/dist/bin/commands/typegen.js.map +1 -0
  62. package/dist/bin/config.d.ts +26 -0
  63. package/dist/bin/config.d.ts.map +1 -0
  64. package/dist/bin/config.js +59 -0
  65. package/dist/bin/config.js.map +1 -0
  66. package/dist/bin/json-output.d.ts +8 -0
  67. package/dist/bin/json-output.d.ts.map +1 -0
  68. package/dist/bin/json-output.js +21 -0
  69. package/dist/bin/json-output.js.map +1 -0
  70. package/dist/bin/lib.d.ts +7 -0
  71. package/dist/bin/lib.d.ts.map +1 -0
  72. package/dist/bin/lib.js +7 -0
  73. package/dist/bin/lib.js.map +1 -0
  74. package/dist/bin/migration-store.d.ts +24 -0
  75. package/dist/bin/migration-store.d.ts.map +1 -0
  76. package/dist/bin/migration-store.js +96 -0
  77. package/dist/bin/migration-store.js.map +1 -0
  78. package/dist/bin/plugin-runtime.d.ts +37 -0
  79. package/dist/bin/plugin-runtime.d.ts.map +1 -0
  80. package/dist/bin/plugin-runtime.js +264 -0
  81. package/dist/bin/plugin-runtime.js.map +1 -0
  82. package/dist/bin/safety-markers.d.ts +24 -0
  83. package/dist/bin/safety-markers.d.ts.map +1 -0
  84. package/dist/bin/safety-markers.js +94 -0
  85. package/dist/bin/safety-markers.js.map +1 -0
  86. package/dist/bin/schema-loader.d.ts +3 -0
  87. package/dist/bin/schema-loader.d.ts.map +1 -0
  88. package/dist/bin/schema-loader.js +6 -0
  89. package/dist/bin/schema-loader.js.map +1 -0
  90. package/dist/bin/table-scope.d.ts +39 -0
  91. package/dist/bin/table-scope.d.ts.map +1 -0
  92. package/dist/bin/table-scope.js +167 -0
  93. package/dist/bin/table-scope.js.map +1 -0
  94. package/dist/bin/version.d.ts +2 -0
  95. package/dist/bin/version.d.ts.map +1 -0
  96. package/dist/bin/version.js +2 -0
  97. package/dist/bin/version.js.map +1 -0
  98. package/dist/drift-diff.d.ts +8 -0
  99. package/dist/drift-diff.d.ts.map +1 -0
  100. package/dist/drift-diff.js +46 -0
  101. package/dist/drift-diff.js.map +1 -0
  102. package/dist/drift.d.ts +65 -0
  103. package/dist/drift.d.ts.map +1 -0
  104. package/dist/drift.js +209 -0
  105. package/dist/drift.js.map +1 -0
  106. package/dist/index.d.ts +2 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +2 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/plugins.d.ts +103 -0
  111. package/dist/plugins.d.ts.map +1 -0
  112. package/dist/plugins.js +10 -0
  113. package/dist/plugins.js.map +1 -0
  114. package/package.json +28 -0
package/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # chkit
2
+
3
+ ClickHouse schema and migration CLI for TypeScript projects.
4
+
5
+ Part of the [chkit](https://github.com/obsessiondb/chkit) monorepo.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ bun add -d chkit @chkit/core
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```bash
16
+ # Scaffold a new project
17
+ bunx chkit init
18
+
19
+ # Generate a migration from schema changes
20
+ bunx chkit generate --name add-users-table
21
+
22
+ # Preview and apply pending migrations
23
+ bunx chkit migrate --apply
24
+
25
+ # Check migration status
26
+ bunx chkit status
27
+
28
+ # Detect schema drift
29
+ bunx chkit drift
30
+
31
+ # CI gate (fails on pending migrations or drift)
32
+ bunx chkit check
33
+ ```
34
+
35
+ All commands support `--json` for machine-readable output and `--config <path>` to specify a custom config file.
36
+
37
+ ## Documentation
38
+
39
+ See the [chkit documentation](https://chkit.obsessiondb.com).
40
+
41
+ ## License
42
+
43
+ [MIT](../../LICENSE)
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=chkit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chkit.d.ts","sourceRoot":"","sources":["../../src/bin/chkit.ts"],"names":[],"mappings":""}
@@ -0,0 +1,337 @@
1
+ #!/usr/bin/env node
2
+ import process from 'node:process';
3
+ import { buildApplication, buildCommand, buildRouteMap, run } from '@stricli/core';
4
+ import { CLI_VERSION } from './lib.js';
5
+ import { cmdCheck } from './commands/check.js';
6
+ import { cmdDrift } from './commands/drift.js';
7
+ import { cmdGenerate } from './commands/generate.js';
8
+ import { cmdInit } from './commands/init.js';
9
+ import { cmdMigrate } from './commands/migrate.js';
10
+ import { cmdPlugin } from './commands/plugin.js';
11
+ import { cmdPull } from './commands/pull.js';
12
+ import { cmdStatus } from './commands/status.js';
13
+ import { cmdCodegen } from './commands/codegen.js';
14
+ function printHelp() {
15
+ console.log(`chkit - ClickHouse toolkit\n
16
+ Usage:
17
+ chkit init
18
+ chkit generate [--name <migration-name>] [--migration-id <id>] [--rename-table <old_db.old_table=new_db.new_table>] [--rename-column <db.table.old_column=new_column>] [--table <selector>] [--config <path>] [--dryrun] [--json]
19
+ chkit pull [--out-file <path>] [--database <db>] [--dryrun] [--force] [--config <path>] [--json]
20
+ chkit codegen [--check] [--out-file <path>] [--emit-zod] [--no-emit-zod] [--emit-ingest] [--no-emit-ingest] [--ingest-out-file <path>] [--bigint-mode <string|bigint>] [--include-views] [--config <path>] [--json]
21
+ chkit migrate [--config <path>] [--apply|--execute] [--allow-destructive] [--table <selector>] [--json]
22
+ chkit status [--config <path>] [--json]
23
+ chkit drift [--config <path>] [--table <selector>] [--json]
24
+ chkit check [--config <path>] [--strict] [--json]
25
+ chkit plugin [<plugin-name> [<command> ...]] [--config <path>] [--json]
26
+
27
+ Options:
28
+ --config <path> Path to config file (default: clickhouse.config.ts)
29
+ --name <name> Migration name for generate
30
+ --migration-id <id>
31
+ Deterministic migration file prefix override (e.g. 20260101010101)
32
+ --rename-table <old_db.old_table=new_db.new_table>
33
+ Explicit table rename mapping (comma-separated values supported)
34
+ --rename-column <db.table.old_column=new_column>
35
+ Explicit column rename mapping (comma-separated values supported)
36
+ --table <selector>
37
+ Limit command scope to tables by exact name or trailing wildcard prefix
38
+ --apply Apply pending migrations on ClickHouse (no prompt)
39
+ --execute Alias for --apply
40
+ --allow-destructive
41
+ Required in non-interactive mode when pending migrations contain destructive operations
42
+ --dryrun Print operation plan without writing artifacts
43
+ --check Validate generated type artifacts are up-to-date
44
+ --out-file <path>
45
+ Override output file path for pull/codegen one run
46
+ --database <db> Limit pull to one or more databases (repeat or comma-separate)
47
+ --force Allow pull schema to overwrite existing output file
48
+ --emit-zod Enable Zod validator generation in codegen
49
+ --no-emit-zod Disable Zod validator generation in codegen
50
+ --emit-ingest Enable ingestion function generation in codegen
51
+ --no-emit-ingest Disable ingestion function generation in codegen
52
+ --ingest-out-file <path>
53
+ Override ingestion output file path for codegen
54
+ --bigint-mode <mode>
55
+ Set large integer mapping mode for codegen (string|bigint)
56
+ --include-views Include views in codegen output
57
+ --strict Force all check policies on for this invocation
58
+ --json Emit machine-readable JSON output
59
+ -h, --help Show help
60
+ -v, --version Show version
61
+ `);
62
+ }
63
+ function addStringFlag(args, flag, value) {
64
+ if (value === undefined || value.length === 0)
65
+ return;
66
+ args.push(flag, value);
67
+ }
68
+ function addBooleanFlag(args, flag, enabled) {
69
+ if (enabled)
70
+ args.push(flag);
71
+ }
72
+ function exitIfNeeded() {
73
+ const code = typeof process.exitCode === 'number'
74
+ ? process.exitCode
75
+ : process.exitCode
76
+ ? Number(process.exitCode)
77
+ : 0;
78
+ if (Number.isFinite(code) && code > 0) {
79
+ process.exit(code);
80
+ }
81
+ }
82
+ const optionalStringFlag = (brief, placeholder = 'value') => ({
83
+ kind: 'parsed',
84
+ brief,
85
+ parse: (input) => input,
86
+ optional: true,
87
+ placeholder,
88
+ });
89
+ const optionalBooleanFlag = (brief) => ({
90
+ kind: 'boolean',
91
+ brief,
92
+ optional: true,
93
+ });
94
+ const app = buildApplication(buildRouteMap({
95
+ docs: {
96
+ brief: 'ClickHouse schema and migration toolkit',
97
+ },
98
+ routes: {
99
+ init: buildCommand({
100
+ parameters: {},
101
+ docs: {
102
+ brief: 'Initialize config and schema starter files',
103
+ },
104
+ async func() {
105
+ await cmdInit();
106
+ },
107
+ }),
108
+ generate: buildCommand({
109
+ parameters: {
110
+ flags: {
111
+ config: optionalStringFlag('Path to config file', 'path'),
112
+ name: optionalStringFlag('Migration name', 'name'),
113
+ migrationId: optionalStringFlag('Deterministic migration file prefix', 'id'),
114
+ renameTable: optionalStringFlag('Explicit table rename mapping old_db.old_table=new_db.new_table'),
115
+ renameColumn: optionalStringFlag('Explicit column rename mapping db.table.old_column=new_column'),
116
+ table: optionalStringFlag('Table selector (exact or trailing wildcard prefix)'),
117
+ dryrun: optionalBooleanFlag('Print operation plan without writing artifacts'),
118
+ json: optionalBooleanFlag('Emit machine-readable JSON output'),
119
+ },
120
+ },
121
+ docs: {
122
+ brief: 'Generate migration artifacts from schema definitions',
123
+ },
124
+ async func(flags) {
125
+ const args = [];
126
+ addStringFlag(args, '--config', flags.config);
127
+ addStringFlag(args, '--name', flags.name);
128
+ addStringFlag(args, '--migration-id', flags.migrationId);
129
+ addStringFlag(args, '--rename-table', flags.renameTable);
130
+ addStringFlag(args, '--rename-column', flags.renameColumn);
131
+ addStringFlag(args, '--table', flags.table);
132
+ addBooleanFlag(args, '--dryrun', flags.dryrun);
133
+ addBooleanFlag(args, '--json', flags.json);
134
+ await cmdGenerate(args);
135
+ exitIfNeeded();
136
+ },
137
+ }),
138
+ codegen: buildCommand({
139
+ parameters: {
140
+ flags: {
141
+ config: optionalStringFlag('Path to config file', 'path'),
142
+ check: optionalBooleanFlag('Check for stale generated artifacts without writing'),
143
+ outFile: optionalStringFlag('Output file path override', 'path'),
144
+ emitZod: optionalBooleanFlag('Emit Zod validators'),
145
+ noEmitZod: optionalBooleanFlag('Disable Zod validator emission'),
146
+ emitIngest: optionalBooleanFlag('Emit ingestion functions'),
147
+ noEmitIngest: optionalBooleanFlag('Disable ingestion function emission'),
148
+ ingestOutFile: optionalStringFlag('Ingestion output file path override', 'path'),
149
+ bigintMode: optionalStringFlag('Bigint type mode: string or bigint', 'mode'),
150
+ includeViews: optionalBooleanFlag('Include views in generated types'),
151
+ json: optionalBooleanFlag('Emit machine-readable JSON output'),
152
+ },
153
+ },
154
+ docs: {
155
+ brief: 'Run code generation plugin workflow',
156
+ },
157
+ async func(flags) {
158
+ const args = [];
159
+ addStringFlag(args, '--config', flags.config);
160
+ addBooleanFlag(args, '--check', flags.check);
161
+ addStringFlag(args, '--out-file', flags.outFile);
162
+ addBooleanFlag(args, '--emit-zod', flags.emitZod);
163
+ addBooleanFlag(args, '--no-emit-zod', flags.noEmitZod);
164
+ addBooleanFlag(args, '--emit-ingest', flags.emitIngest);
165
+ addBooleanFlag(args, '--no-emit-ingest', flags.noEmitIngest);
166
+ addStringFlag(args, '--ingest-out-file', flags.ingestOutFile);
167
+ addStringFlag(args, '--bigint-mode', flags.bigintMode);
168
+ addBooleanFlag(args, '--include-views', flags.includeViews);
169
+ addBooleanFlag(args, '--json', flags.json);
170
+ await cmdCodegen(args);
171
+ exitIfNeeded();
172
+ },
173
+ }),
174
+ migrate: buildCommand({
175
+ parameters: {
176
+ flags: {
177
+ config: optionalStringFlag('Path to config file', 'path'),
178
+ apply: optionalBooleanFlag('Apply pending migrations on ClickHouse'),
179
+ execute: optionalBooleanFlag('Execute pending migrations on ClickHouse'),
180
+ allowDestructive: optionalBooleanFlag('Allow destructive migrations tagged with risk=danger'),
181
+ table: optionalStringFlag('Table selector (exact or trailing wildcard prefix)'),
182
+ json: optionalBooleanFlag('Emit machine-readable JSON output'),
183
+ },
184
+ },
185
+ docs: {
186
+ brief: 'Review or execute pending migrations',
187
+ },
188
+ async func(flags) {
189
+ const args = [];
190
+ addStringFlag(args, '--config', flags.config);
191
+ addBooleanFlag(args, '--apply', flags.apply);
192
+ addBooleanFlag(args, '--execute', flags.execute);
193
+ addBooleanFlag(args, '--allow-destructive', flags.allowDestructive);
194
+ addStringFlag(args, '--table', flags.table);
195
+ addBooleanFlag(args, '--json', flags.json);
196
+ await cmdMigrate(args);
197
+ exitIfNeeded();
198
+ },
199
+ }),
200
+ status: buildCommand({
201
+ parameters: {
202
+ flags: {
203
+ config: optionalStringFlag('Path to config file', 'path'),
204
+ json: optionalBooleanFlag('Emit machine-readable JSON output'),
205
+ },
206
+ },
207
+ docs: {
208
+ brief: 'Show migration status and checksum mismatch information',
209
+ },
210
+ async func(flags) {
211
+ const args = [];
212
+ addStringFlag(args, '--config', flags.config);
213
+ addBooleanFlag(args, '--json', flags.json);
214
+ await cmdStatus(args);
215
+ exitIfNeeded();
216
+ },
217
+ }),
218
+ drift: buildCommand({
219
+ parameters: {
220
+ flags: {
221
+ config: optionalStringFlag('Path to config file', 'path'),
222
+ table: optionalStringFlag('Table selector (exact or trailing wildcard prefix)'),
223
+ json: optionalBooleanFlag('Emit machine-readable JSON output'),
224
+ },
225
+ },
226
+ docs: {
227
+ brief: 'Compare snapshot state with current ClickHouse objects',
228
+ },
229
+ async func(flags) {
230
+ const args = [];
231
+ addStringFlag(args, '--config', flags.config);
232
+ addStringFlag(args, '--table', flags.table);
233
+ addBooleanFlag(args, '--json', flags.json);
234
+ await cmdDrift(args);
235
+ exitIfNeeded();
236
+ },
237
+ }),
238
+ check: buildCommand({
239
+ parameters: {
240
+ flags: {
241
+ config: optionalStringFlag('Path to config file', 'path'),
242
+ strict: optionalBooleanFlag('Enable all policy checks'),
243
+ json: optionalBooleanFlag('Emit machine-readable JSON output'),
244
+ },
245
+ },
246
+ docs: {
247
+ brief: 'Run policy checks for CI and release gates',
248
+ },
249
+ async func(flags) {
250
+ const args = [];
251
+ addStringFlag(args, '--config', flags.config);
252
+ addBooleanFlag(args, '--strict', flags.strict);
253
+ addBooleanFlag(args, '--json', flags.json);
254
+ await cmdCheck(args);
255
+ exitIfNeeded();
256
+ },
257
+ }),
258
+ plugin: buildCommand({
259
+ parameters: {
260
+ flags: {
261
+ config: optionalStringFlag('Path to config file', 'path'),
262
+ json: optionalBooleanFlag('Emit machine-readable JSON output'),
263
+ },
264
+ },
265
+ docs: {
266
+ brief: 'List plugins and run plugin namespace commands',
267
+ },
268
+ async func(flags) {
269
+ const args = [];
270
+ addStringFlag(args, '--config', flags.config);
271
+ addBooleanFlag(args, '--json', flags.json);
272
+ await cmdPlugin(args);
273
+ exitIfNeeded();
274
+ },
275
+ }),
276
+ help: buildCommand({
277
+ parameters: {},
278
+ docs: {
279
+ brief: 'Print help information',
280
+ },
281
+ func() {
282
+ printHelp();
283
+ },
284
+ }),
285
+ version: buildCommand({
286
+ parameters: {},
287
+ docs: {
288
+ brief: 'Print version information',
289
+ },
290
+ func() {
291
+ console.log(CLI_VERSION);
292
+ },
293
+ }),
294
+ },
295
+ }), {
296
+ name: 'chkit',
297
+ versionInfo: { currentVersion: CLI_VERSION },
298
+ scanner: { caseStyle: 'allow-kebab-for-camel' },
299
+ });
300
+ const argv = process.argv.slice(2);
301
+ if (argv[0] === 'plugin') {
302
+ cmdPlugin(argv.slice(1))
303
+ .then(() => {
304
+ exitIfNeeded();
305
+ })
306
+ .catch((error) => {
307
+ console.error(error instanceof Error ? error.message : String(error));
308
+ process.exit(1);
309
+ });
310
+ }
311
+ else if (argv[0] === 'codegen') {
312
+ cmdCodegen(argv.slice(1))
313
+ .then(() => {
314
+ exitIfNeeded();
315
+ })
316
+ .catch((error) => {
317
+ console.error(error instanceof Error ? error.message : String(error));
318
+ process.exit(1);
319
+ });
320
+ }
321
+ else if (argv[0] === 'pull') {
322
+ cmdPull(argv.slice(1))
323
+ .then(() => {
324
+ exitIfNeeded();
325
+ })
326
+ .catch((error) => {
327
+ console.error(error instanceof Error ? error.message : String(error));
328
+ process.exit(1);
329
+ });
330
+ }
331
+ else {
332
+ run(app, argv, { process }).catch((error) => {
333
+ console.error(error instanceof Error ? error.message : String(error));
334
+ process.exit(1);
335
+ });
336
+ }
337
+ //# sourceMappingURL=chkit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chkit.js","sourceRoot":"","sources":["../../src/bin/chkit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdCheck(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/check.ts"],"names":[],"mappings":"AAUA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2H5D"}
@@ -0,0 +1,123 @@
1
+ import { mkdir } from 'node:fs/promises';
2
+ import { summarizeDriftReasons } from '../../drift.js';
3
+ import { CLI_VERSION } from '../version.js';
4
+ import { getCommandContext, hasFlag } from '../config.js';
5
+ import { emitJson } from '../json-output.js';
6
+ import { findChecksumMismatches, listMigrations, readJournal, readSnapshot } from '../migration-store.js';
7
+ import { loadPluginRuntime } from '../plugin-runtime.js';
8
+ import { buildDriftPayload } from './drift.js';
9
+ export async function cmdCheck(args) {
10
+ const strict = hasFlag('--strict', args);
11
+ const { config, configPath, dirs, jsonMode } = await getCommandContext(args);
12
+ const { migrationsDir, metaDir } = dirs;
13
+ await mkdir(migrationsDir, { recursive: true });
14
+ const files = await listMigrations(migrationsDir);
15
+ const journal = await readJournal(metaDir);
16
+ const appliedNames = new Set(journal.applied.map((entry) => entry.name));
17
+ const pending = files.filter((f) => !appliedNames.has(f));
18
+ const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
19
+ const snapshot = await readSnapshot(metaDir);
20
+ const drift = snapshot && config.clickhouse ? await buildDriftPayload(config, metaDir, snapshot) : null;
21
+ const policy = {
22
+ failOnPending: strict ? true : config.check?.failOnPending ?? true,
23
+ failOnChecksumMismatch: strict ? true : config.check?.failOnChecksumMismatch ?? true,
24
+ failOnDrift: strict ? true : config.check?.failOnDrift ?? true,
25
+ };
26
+ const runtime = await loadPluginRuntime({
27
+ config,
28
+ configPath,
29
+ cliVersion: CLI_VERSION,
30
+ });
31
+ await runtime.runOnConfigLoaded({
32
+ command: 'check',
33
+ config,
34
+ configPath,
35
+ });
36
+ const pluginResults = await runtime.runOnCheck({
37
+ command: 'check',
38
+ config,
39
+ configPath,
40
+ jsonMode,
41
+ });
42
+ const failedChecks = [];
43
+ if (policy.failOnPending && pending.length > 0)
44
+ failedChecks.push('pending_migrations');
45
+ if (policy.failOnChecksumMismatch && checksumMismatches.length > 0)
46
+ failedChecks.push('checksum_mismatch');
47
+ if (policy.failOnDrift && drift?.drifted)
48
+ failedChecks.push('schema_drift');
49
+ for (const result of pluginResults) {
50
+ const hasErrorFinding = result.findings.some((finding) => finding.severity === 'error');
51
+ if (result.evaluated && !result.ok && hasErrorFinding) {
52
+ failedChecks.push(`plugin:${result.plugin}`);
53
+ }
54
+ }
55
+ const ok = failedChecks.length === 0;
56
+ const driftReasonSummary = drift
57
+ ? summarizeDriftReasons({
58
+ objectDrift: drift.objectDrift,
59
+ tableDrift: drift.tableDrift,
60
+ })
61
+ : { counts: {}, total: 0, object: 0, table: 0 };
62
+ const payload = {
63
+ strict,
64
+ policy,
65
+ ok,
66
+ failedChecks,
67
+ pendingCount: pending.length,
68
+ checksumMismatchCount: checksumMismatches.length,
69
+ drifted: drift?.drifted ?? false,
70
+ driftEvaluated: drift !== null,
71
+ driftReasonCounts: driftReasonSummary.counts,
72
+ driftReasonTotals: {
73
+ total: driftReasonSummary.total,
74
+ object: driftReasonSummary.object,
75
+ table: driftReasonSummary.table,
76
+ },
77
+ plugins: Object.fromEntries(pluginResults.map((result) => [
78
+ result.plugin,
79
+ {
80
+ evaluated: result.evaluated,
81
+ ok: result.ok,
82
+ findingCodes: result.findings.map((finding) => finding.code),
83
+ ...(result.metadata ?? {}),
84
+ },
85
+ ])),
86
+ };
87
+ if (jsonMode) {
88
+ emitJson('check', payload);
89
+ if (!ok)
90
+ process.exitCode = 1;
91
+ return;
92
+ }
93
+ console.log(`Check status: ${ok ? 'ok' : 'failed'}`);
94
+ console.log(`Policy: pending=${policy.failOnPending ? 'on' : 'off'}, checksum=${policy.failOnChecksumMismatch ? 'on' : 'off'}, drift=${policy.failOnDrift ? 'on' : 'off'}`);
95
+ console.log(`Pending migrations: ${pending.length}`);
96
+ console.log(`Checksum mismatches: ${checksumMismatches.length}`);
97
+ if (drift === null) {
98
+ console.log('Schema drift: not evaluated (missing snapshot or clickhouse config)');
99
+ }
100
+ else {
101
+ console.log(`Schema drift: ${drift.drifted ? 'yes' : 'no'}`);
102
+ const summary = summarizeDriftReasons({
103
+ objectDrift: drift.objectDrift,
104
+ tableDrift: drift.tableDrift,
105
+ });
106
+ console.log(`Drift reasons: total=${summary.total}, object=${summary.object}, table=${summary.table}`);
107
+ }
108
+ if (pluginResults.length > 0) {
109
+ console.log('Plugin checks:');
110
+ for (const result of pluginResults) {
111
+ const findingCodes = result.findings.map((finding) => finding.code);
112
+ console.log(`- ${result.plugin}: ${result.ok ? 'ok' : 'failed'}${findingCodes.length > 0 ? ` (${findingCodes.join(', ')})` : ''}`);
113
+ }
114
+ await runtime.runOnCheckReport(pluginResults, (line) => {
115
+ console.log(line);
116
+ });
117
+ }
118
+ if (!ok) {
119
+ console.log(`Failed checks: ${failedChecks.join(', ')}`);
120
+ process.exitCode = 1;
121
+ }
122
+ }
123
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/bin/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACxC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC5E,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IACvC,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE/C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACzD,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAC/E,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvG,MAAM,MAAM,GAAG;QACb,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,IAAI;QAClE,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,IAAI,IAAI;QACpF,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI;KAC/D,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC;QACtC,MAAM;QACN,UAAU;QACV,UAAU,EAAE,WAAW;KACxB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,iBAAiB,CAAC;QAC9B,OAAO,EAAE,OAAO;QAChB,MAAM;QACN,UAAU;KACX,CAAC,CAAA;IACF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QAC7C,OAAO,EAAE,OAAO;QAChB,MAAM;QACN,UAAU;QACV,QAAQ;KACT,CAAC,CAAA;IAEF,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,IAAI,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACvF,IAAI,MAAM,CAAC,sBAAsB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC;QAAE,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC1G,IAAI,MAAM,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO;QAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC3E,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;QACvF,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,eAAe,EAAE,CAAC;YACtD,YAAY,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAA;IACpC,MAAM,kBAAkB,GAAG,KAAK;QAC9B,CAAC,CAAC,qBAAqB,CAAC;YACpB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;QACJ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IAEjD,MAAM,OAAO,GAAG;QACd,MAAM;QACN,MAAM;QACN,EAAE;QACF,YAAY;QACZ,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,qBAAqB,EAAE,kBAAkB,CAAC,MAAM;QAChD,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK;QAChC,cAAc,EAAE,KAAK,KAAK,IAAI;QAC9B,iBAAiB,EAAE,kBAAkB,CAAC,MAAM;QAC5C,iBAAiB,EAAE;YACjB,KAAK,EAAE,kBAAkB,CAAC,KAAK;YAC/B,MAAM,EAAE,kBAAkB,CAAC,MAAM;YACjC,KAAK,EAAE,kBAAkB,CAAC,KAAK;SAChC;QACD,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,MAAM;YACb;gBACE,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC5D,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;aAC3B;SACF,CAAC,CACH;KACF,CAAA;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC1B,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QAC7B,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpD,OAAO,CAAC,GAAG,CACT,mBAAmB,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,cAAc,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC/J,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACpD,OAAO,CAAC,GAAG,CAAC,wBAAwB,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAA;IAChE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAA;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,OAAO,GAAG,qBAAqB,CAAC;YACpC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,CACT,wBAAwB,OAAO,CAAC,KAAK,YAAY,OAAO,CAAC,MAAM,WAAW,OAAO,CAAC,KAAK,EAAE,CAC1F,CAAA;IACH,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAC7B,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACnE,OAAO,CAAC,GAAG,CACT,KAAK,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtH,CAAA;QACH,CAAC;QACD,MAAM,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;YACrD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdCodegen(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=codegen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/codegen.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB9D"}
@@ -0,0 +1,25 @@
1
+ import { buildPluginLikeContext, runPluginLikeCommand } from './plugin-like.js';
2
+ export async function cmdCodegen(args) {
3
+ const context = await buildPluginLikeContext({
4
+ args,
5
+ command: 'codegen',
6
+ handleInvalidPluginOptions: true,
7
+ });
8
+ if (!context)
9
+ return;
10
+ const pluginName = 'codegen';
11
+ const commandName = 'codegen';
12
+ await runPluginLikeCommand({
13
+ context,
14
+ pluginName,
15
+ commandName,
16
+ commandArgs: context.commandArgs,
17
+ missingPluginMessage() {
18
+ return 'Codegen plugin is not configured. Add a plugin with manifest.name "codegen" to config.plugins.';
19
+ },
20
+ missingCommandMessage({ availableCommands }) {
21
+ return `Codegen plugin is configured but does not expose command "${commandName}". Available: ${availableCommands.length > 0 ? availableCommands.join(', ') : '(none)'}.`;
22
+ },
23
+ });
24
+ }
25
+ //# sourceMappingURL=codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/bin/commands/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE/E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;QAC3C,IAAI;QACJ,OAAO,EAAE,SAAS;QAClB,0BAA0B,EAAE,IAAI;KACjC,CAAC,CAAA;IACF,IAAI,CAAC,OAAO;QAAE,OAAM;IAEpB,MAAM,UAAU,GAAG,SAAS,CAAA;IAC5B,MAAM,WAAW,GAAG,SAAS,CAAA;IAC7B,MAAM,oBAAoB,CAAC;QACzB,OAAO;QACP,UAAU;QACV,WAAW;QACX,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,oBAAoB;YAClB,OAAO,gGAAgG,CAAA;QACzG,CAAC;QACD,qBAAqB,CAAC,EAAE,iBAAiB,EAAE;YACzC,OAAO,6DAA6D,WAAW,iBAAiB,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAA;QAC3K,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ChxConfig, Snapshot } from '@chkit/core';
2
+ import { type ObjectDriftDetail, type TableDriftDetail } from '../../drift.js';
3
+ import { type TableScope } from '../table-scope.js';
4
+ export interface DriftPayload {
5
+ scope?: TableScope;
6
+ snapshotFile: string;
7
+ expectedCount: number;
8
+ actualCount: number;
9
+ drifted: boolean;
10
+ missing: string[];
11
+ extra: string[];
12
+ kindMismatches: Array<{
13
+ expected: string;
14
+ actual: string;
15
+ object: string;
16
+ }>;
17
+ objectDrift: ObjectDriftDetail[];
18
+ tableDrift: TableDriftDetail[];
19
+ }
20
+ export declare function buildDriftPayload(config: ChxConfig, metaDir: string, snapshot: Snapshot, scope?: TableScope): Promise<DriftPayload>;
21
+ export declare function cmdDrift(args: string[]): Promise<void>;
22
+ //# sourceMappingURL=drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/drift.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAA;AAEvE,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEhG,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,cAAc,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,WAAW,EAAE,iBAAiB,EAAE,CAAA;IAChC,UAAU,EAAE,gBAAgB,EAAE,CAAA;CAC/B;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,YAAY,CAAC,CA6DvB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6F5D"}