chkit 0.1.0-beta.10
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 +76 -0
- package/dist/bin/chkit.d.ts +3 -0
- package/dist/bin/chkit.d.ts.map +1 -0
- package/dist/bin/chkit.js +304 -0
- package/dist/bin/chkit.js.map +1 -0
- package/dist/bin/command-registry.d.ts +34 -0
- package/dist/bin/command-registry.d.ts.map +1 -0
- package/dist/bin/command-registry.js +87 -0
- package/dist/bin/command-registry.js.map +1 -0
- package/dist/bin/commands/check.d.ts +3 -0
- package/dist/bin/commands/check.d.ts.map +1 -0
- package/dist/bin/commands/check.js +131 -0
- package/dist/bin/commands/check.js.map +1 -0
- package/dist/bin/commands/codegen.d.ts +2 -0
- package/dist/bin/commands/codegen.d.ts.map +1 -0
- package/dist/bin/commands/codegen.js +25 -0
- package/dist/bin/commands/codegen.js.map +1 -0
- package/dist/bin/commands/drift.d.ts +23 -0
- package/dist/bin/commands/drift.d.ts.map +1 -0
- package/dist/bin/commands/drift.js +179 -0
- package/dist/bin/commands/drift.js.map +1 -0
- package/dist/bin/commands/generate/output.d.ts +8 -0
- package/dist/bin/commands/generate/output.d.ts.map +1 -0
- package/dist/bin/commands/generate/output.js +58 -0
- package/dist/bin/commands/generate/output.js.map +1 -0
- package/dist/bin/commands/generate/plan-pipeline.d.ts +7 -0
- package/dist/bin/commands/generate/plan-pipeline.d.ts.map +1 -0
- package/dist/bin/commands/generate/plan-pipeline.js +143 -0
- package/dist/bin/commands/generate/plan-pipeline.js.map +1 -0
- package/dist/bin/commands/generate/rename-mappings.d.ts +29 -0
- package/dist/bin/commands/generate/rename-mappings.d.ts.map +1 -0
- package/dist/bin/commands/generate/rename-mappings.js +195 -0
- package/dist/bin/commands/generate/rename-mappings.js.map +1 -0
- package/dist/bin/commands/generate.d.ts +3 -0
- package/dist/bin/commands/generate.d.ts.map +1 -0
- package/dist/bin/commands/generate.js +154 -0
- package/dist/bin/commands/generate.js.map +1 -0
- package/dist/bin/commands/init.d.ts +2 -0
- package/dist/bin/commands/init.d.ts.map +1 -0
- package/dist/bin/commands/init.js +12 -0
- package/dist/bin/commands/init.js.map +1 -0
- package/dist/bin/commands/migrate.d.ts +3 -0
- package/dist/bin/commands/migrate.d.ts.map +1 -0
- package/dist/bin/commands/migrate.js +270 -0
- package/dist/bin/commands/migrate.js.map +1 -0
- package/dist/bin/commands/plugin-like.d.ts +38 -0
- package/dist/bin/commands/plugin-like.d.ts.map +1 -0
- package/dist/bin/commands/plugin-like.js +101 -0
- package/dist/bin/commands/plugin-like.js.map +1 -0
- package/dist/bin/commands/plugin.d.ts +3 -0
- package/dist/bin/commands/plugin.d.ts.map +1 -0
- package/dist/bin/commands/plugin.js +148 -0
- package/dist/bin/commands/plugin.js.map +1 -0
- package/dist/bin/commands/pull.d.ts +2 -0
- package/dist/bin/commands/pull.d.ts.map +1 -0
- package/dist/bin/commands/pull.js +25 -0
- package/dist/bin/commands/pull.js.map +1 -0
- package/dist/bin/commands/status.d.ts +3 -0
- package/dist/bin/commands/status.d.ts.map +1 -0
- package/dist/bin/commands/status.js +53 -0
- package/dist/bin/commands/status.js.map +1 -0
- package/dist/bin/commands/typegen.d.ts +2 -0
- package/dist/bin/commands/typegen.d.ts.map +1 -0
- package/dist/bin/commands/typegen.js +25 -0
- package/dist/bin/commands/typegen.js.map +1 -0
- package/dist/bin/config.d.ts +13 -0
- package/dist/bin/config.d.ts.map +1 -0
- package/dist/bin/config.js +39 -0
- package/dist/bin/config.js.map +1 -0
- package/dist/bin/global-flags.d.ts +16 -0
- package/dist/bin/global-flags.d.ts.map +1 -0
- package/dist/bin/global-flags.js +7 -0
- package/dist/bin/global-flags.js.map +1 -0
- package/dist/bin/help.d.ts +5 -0
- package/dist/bin/help.d.ts.map +1 -0
- package/dist/bin/help.js +84 -0
- package/dist/bin/help.js.map +1 -0
- package/dist/bin/internal-plugins/index.d.ts +3 -0
- package/dist/bin/internal-plugins/index.d.ts.map +1 -0
- package/dist/bin/internal-plugins/index.js +5 -0
- package/dist/bin/internal-plugins/index.js.map +1 -0
- package/dist/bin/internal-plugins/skill-hint.d.ts +16 -0
- package/dist/bin/internal-plugins/skill-hint.d.ts.map +1 -0
- package/dist/bin/internal-plugins/skill-hint.js +101 -0
- package/dist/bin/internal-plugins/skill-hint.js.map +1 -0
- package/dist/bin/journal-store.d.ts +13 -0
- package/dist/bin/journal-store.d.ts.map +1 -0
- package/dist/bin/journal-store.js +79 -0
- package/dist/bin/journal-store.js.map +1 -0
- package/dist/bin/json-output.d.ts +8 -0
- package/dist/bin/json-output.d.ts.map +1 -0
- package/dist/bin/json-output.js +21 -0
- package/dist/bin/json-output.js.map +1 -0
- package/dist/bin/lib.d.ts +8 -0
- package/dist/bin/lib.d.ts.map +1 -0
- package/dist/bin/lib.js +8 -0
- package/dist/bin/lib.js.map +1 -0
- package/dist/bin/migration-store.d.ts +22 -0
- package/dist/bin/migration-store.d.ts.map +1 -0
- package/dist/bin/migration-store.js +60 -0
- package/dist/bin/migration-store.js.map +1 -0
- package/dist/bin/plugin-runtime.d.ts +42 -0
- package/dist/bin/plugin-runtime.d.ts.map +1 -0
- package/dist/bin/plugin-runtime.js +298 -0
- package/dist/bin/plugin-runtime.js.map +1 -0
- package/dist/bin/safety-markers.d.ts +24 -0
- package/dist/bin/safety-markers.d.ts.map +1 -0
- package/dist/bin/safety-markers.js +94 -0
- package/dist/bin/safety-markers.js.map +1 -0
- package/dist/bin/schema-loader.d.ts +3 -0
- package/dist/bin/schema-loader.d.ts.map +1 -0
- package/dist/bin/schema-loader.js +6 -0
- package/dist/bin/schema-loader.js.map +1 -0
- package/dist/bin/table-scope.d.ts +39 -0
- package/dist/bin/table-scope.d.ts.map +1 -0
- package/dist/bin/table-scope.js +167 -0
- package/dist/bin/table-scope.js.map +1 -0
- package/dist/bin/version.d.ts +2 -0
- package/dist/bin/version.d.ts.map +1 -0
- package/dist/bin/version.js +5 -0
- package/dist/bin/version.js.map +1 -0
- package/dist/drift-diff.d.ts +8 -0
- package/dist/drift-diff.d.ts.map +1 -0
- package/dist/drift-diff.js +46 -0
- package/dist/drift-diff.js.map +1 -0
- package/dist/drift.d.ts +65 -0
- package/dist/drift.d.ts.map +1 -0
- package/dist/drift.js +204 -0
- package/dist/drift.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins.d.ts +142 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +11 -0
- package/dist/plugins.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAA;AAKrE,eAAO,MAAM,aAAa,EAAE,UAK3B,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import { emitJson } from '../json-output.js';
|
|
3
|
+
import { createJournalStoreFromConfig } from '../journal-store.js';
|
|
4
|
+
import { findChecksumMismatches, listMigrations } from '../migration-store.js';
|
|
5
|
+
export const statusCommand = {
|
|
6
|
+
name: 'status',
|
|
7
|
+
description: 'Show migration status and checksum mismatch information',
|
|
8
|
+
flags: [],
|
|
9
|
+
run: cmdStatus,
|
|
10
|
+
};
|
|
11
|
+
async function cmdStatus(ctx) {
|
|
12
|
+
const { flags, config, dirs } = ctx;
|
|
13
|
+
const jsonMode = flags['--json'] === true;
|
|
14
|
+
const { migrationsDir } = dirs;
|
|
15
|
+
if (!config.clickhouse) {
|
|
16
|
+
throw new Error('clickhouse config is required for status (journal is stored in ClickHouse)');
|
|
17
|
+
}
|
|
18
|
+
const { journalStore } = createJournalStoreFromConfig(config.clickhouse);
|
|
19
|
+
await mkdir(migrationsDir, { recursive: true });
|
|
20
|
+
const files = await listMigrations(migrationsDir);
|
|
21
|
+
const journal = await journalStore.readJournal();
|
|
22
|
+
const appliedNames = new Set(journal.applied.map((entry) => entry.name));
|
|
23
|
+
const pending = files.filter((f) => !appliedNames.has(f));
|
|
24
|
+
const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
|
|
25
|
+
const payload = {
|
|
26
|
+
migrationsDir,
|
|
27
|
+
total: files.length,
|
|
28
|
+
applied: journal.applied.length,
|
|
29
|
+
pending: pending.length,
|
|
30
|
+
pendingMigrations: pending,
|
|
31
|
+
checksumMismatchCount: checksumMismatches.length,
|
|
32
|
+
checksumMismatches,
|
|
33
|
+
};
|
|
34
|
+
if (jsonMode) {
|
|
35
|
+
emitJson('status', payload);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.log(`Migrations directory: ${migrationsDir}`);
|
|
39
|
+
console.log(`Total migrations: ${files.length}`);
|
|
40
|
+
console.log(`Applied: ${journal.applied.length}`);
|
|
41
|
+
console.log(`Pending: ${pending.length}`);
|
|
42
|
+
if (pending.length > 0) {
|
|
43
|
+
console.log('\nPending migrations:');
|
|
44
|
+
for (const item of pending)
|
|
45
|
+
console.log(`- ${item}`);
|
|
46
|
+
}
|
|
47
|
+
if (checksumMismatches.length > 0) {
|
|
48
|
+
console.log('\nChecksum mismatches on applied migrations:');
|
|
49
|
+
for (const item of checksumMismatches)
|
|
50
|
+
console.log(`- ${item.name}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typegen.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/typegen.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 cmdTypegen(args) {
|
|
3
|
+
const context = await buildPluginLikeContext({
|
|
4
|
+
args,
|
|
5
|
+
command: 'typegen',
|
|
6
|
+
handleInvalidPluginOptions: true,
|
|
7
|
+
});
|
|
8
|
+
if (!context)
|
|
9
|
+
return;
|
|
10
|
+
const pluginName = 'typegen';
|
|
11
|
+
const commandName = 'typegen';
|
|
12
|
+
await runPluginLikeCommand({
|
|
13
|
+
context,
|
|
14
|
+
pluginName,
|
|
15
|
+
commandName,
|
|
16
|
+
commandArgs: context.commandArgs,
|
|
17
|
+
missingPluginMessage() {
|
|
18
|
+
return 'Typegen plugin is not configured. Add a plugin with manifest.name "typegen" to config.plugins.';
|
|
19
|
+
},
|
|
20
|
+
missingCommandMessage({ availableCommands }) {
|
|
21
|
+
return `Typegen plugin is configured but does not expose command "${commandName}". Available: ${availableCommands.length > 0 ? availableCommands.join(', ') : '(none)'}.`;
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=typegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../../src/bin/commands/typegen.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,13 @@
|
|
|
1
|
+
import { type ChxConfigEnv, type ResolvedChxConfig } from '@chkit/core';
|
|
2
|
+
export declare const DEFAULT_CONFIG_FILE = "clickhouse.config.ts";
|
|
3
|
+
export declare function loadConfig(configPathArg?: string, env?: ChxConfigEnv): Promise<{
|
|
4
|
+
config: ResolvedChxConfig;
|
|
5
|
+
path: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function writeIfMissing(filePath: string, content: string): Promise<void>;
|
|
8
|
+
export declare function resolveDirs(config: ResolvedChxConfig): {
|
|
9
|
+
outDir: string;
|
|
10
|
+
migrationsDir: string;
|
|
11
|
+
metaDir: string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/bin/config.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,YAAY,EAGjB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAA;AAEpB,eAAO,MAAM,mBAAmB,yBAAyB,CAAA;AAMzD,wBAAsB,UAAU,CAC9B,aAAa,CAAC,EAAE,MAAM,EACtB,GAAG,GAAE,YAAiB,GACrB,OAAO,CAAC;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBtD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAKjH"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import process from 'node:process';
|
|
5
|
+
import { pathToFileURL } from 'node:url';
|
|
6
|
+
import { resolveConfig, } from '@chkit/core';
|
|
7
|
+
export const DEFAULT_CONFIG_FILE = 'clickhouse.config.ts';
|
|
8
|
+
function isConfigFunction(candidate) {
|
|
9
|
+
return typeof candidate === 'function';
|
|
10
|
+
}
|
|
11
|
+
export async function loadConfig(configPathArg, env = {}) {
|
|
12
|
+
const configPath = resolve(process.cwd(), configPathArg ?? DEFAULT_CONFIG_FILE);
|
|
13
|
+
if (!existsSync(configPath)) {
|
|
14
|
+
throw new Error(`Config not found at ${configPath}. Run 'chkit init' first.`);
|
|
15
|
+
}
|
|
16
|
+
const mod = await import(pathToFileURL(configPath).href);
|
|
17
|
+
const candidate = (mod.default ?? mod.config);
|
|
18
|
+
if (!candidate) {
|
|
19
|
+
throw new Error(`Config file ${configPath} must export a default/config object or a function via defineConfig.`);
|
|
20
|
+
}
|
|
21
|
+
const userConfig = isConfigFunction(candidate) ? await candidate(env) : candidate;
|
|
22
|
+
return {
|
|
23
|
+
config: resolveConfig(userConfig),
|
|
24
|
+
path: configPath,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export async function writeIfMissing(filePath, content) {
|
|
28
|
+
if (existsSync(filePath))
|
|
29
|
+
return;
|
|
30
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
31
|
+
await writeFile(filePath, content, 'utf8');
|
|
32
|
+
}
|
|
33
|
+
export function resolveDirs(config) {
|
|
34
|
+
const outDir = resolve(process.cwd(), config.outDir);
|
|
35
|
+
const migrationsDir = resolve(process.cwd(), config.migrationsDir);
|
|
36
|
+
const metaDir = resolve(process.cwd(), config.metaDir);
|
|
37
|
+
return { outDir, migrationsDir, metaDir };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/bin/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EACL,aAAa,GAMd,MAAM,aAAa,CAAA;AAEpB,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAA;AAEzD,SAAS,gBAAgB,CAAC,SAAyB;IACjD,OAAO,OAAO,SAAS,KAAK,UAAU,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,aAAsB,EACtB,MAAoB,EAAE;IAEtB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,IAAI,mBAAmB,CAAC,CAAA;IAC/E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,2BAA2B,CAAC,CAAA;IAC/E,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAA;IACxD,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAA+B,CAAA;IAC3E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,eAAe,UAAU,sEAAsE,CAChG,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,SAAuB,CAAA;IAEhG,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC;QACjC,IAAI,EAAE,UAAU;KACjB,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe;IACpE,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAM;IAChC,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;IAClE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IACtD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const GLOBAL_FLAGS: readonly [{
|
|
2
|
+
readonly name: "--config";
|
|
3
|
+
readonly type: "string";
|
|
4
|
+
readonly description: "Path to config file";
|
|
5
|
+
readonly placeholder: "<path>";
|
|
6
|
+
}, {
|
|
7
|
+
readonly name: "--json";
|
|
8
|
+
readonly type: "boolean";
|
|
9
|
+
readonly description: "Emit machine-readable JSON output";
|
|
10
|
+
}, {
|
|
11
|
+
readonly name: "--table";
|
|
12
|
+
readonly type: "string";
|
|
13
|
+
readonly description: "Limit command scope to tables by exact name or trailing wildcard prefix";
|
|
14
|
+
readonly placeholder: "<selector>";
|
|
15
|
+
}];
|
|
16
|
+
//# sourceMappingURL=global-flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-flags.d.ts","sourceRoot":"","sources":["../../src/bin/global-flags.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;EAId,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { defineFlags } from '@chkit/core';
|
|
2
|
+
export const GLOBAL_FLAGS = defineFlags([
|
|
3
|
+
{ name: '--config', type: 'string', description: 'Path to config file', placeholder: '<path>' },
|
|
4
|
+
{ name: '--json', type: 'boolean', description: 'Emit machine-readable JSON output' },
|
|
5
|
+
{ name: '--table', type: 'string', description: 'Limit command scope to tables by exact name or trailing wildcard prefix', placeholder: '<selector>' },
|
|
6
|
+
]);
|
|
7
|
+
//# sourceMappingURL=global-flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-flags.js","sourceRoot":"","sources":["../../src/bin/global-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;IACtC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,QAAQ,EAAE;IAC/F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mCAAmC,EAAE;IACrF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yEAAyE,EAAE,WAAW,EAAE,YAAY,EAAE;CAC9I,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FlagDef } from '../plugins.js';
|
|
2
|
+
import type { CommandRegistry, RegisteredCommand } from './command-registry.js';
|
|
3
|
+
export declare function formatGlobalHelp(registry: CommandRegistry, version: string): string;
|
|
4
|
+
export declare function formatCommandHelp(command: RegisteredCommand, globalFlags: readonly FlagDef[]): string;
|
|
5
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/bin/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAE/E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0CnF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAuCrG"}
|
package/dist/bin/help.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export function formatGlobalHelp(registry, version) {
|
|
2
|
+
const lines = [];
|
|
3
|
+
lines.push(`chkit v${version} - ClickHouse toolkit`);
|
|
4
|
+
lines.push('');
|
|
5
|
+
lines.push('Usage:');
|
|
6
|
+
lines.push(' chkit <command> [options]');
|
|
7
|
+
lines.push('');
|
|
8
|
+
lines.push('Commands:');
|
|
9
|
+
lines.push(` ${'init'.padEnd(14)} Scaffold a new project with config and example schema`);
|
|
10
|
+
const coreCommands = registry.commands.filter((c) => !c.isPlugin);
|
|
11
|
+
const pluginCommands = registry.commands.filter((c) => c.isPlugin);
|
|
12
|
+
for (const cmd of coreCommands) {
|
|
13
|
+
lines.push(` ${cmd.name.padEnd(14)} ${cmd.description}`);
|
|
14
|
+
}
|
|
15
|
+
if (pluginCommands.length > 0) {
|
|
16
|
+
lines.push('');
|
|
17
|
+
lines.push('Plugin commands:');
|
|
18
|
+
for (const cmd of pluginCommands) {
|
|
19
|
+
if (cmd.subcommands) {
|
|
20
|
+
lines.push(` ${cmd.name.padEnd(14)} ${cmd.description}`);
|
|
21
|
+
for (const sub of cmd.subcommands) {
|
|
22
|
+
lines.push(` ${sub.name.padEnd(12)} ${sub.description}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
lines.push(` ${cmd.name.padEnd(14)} ${cmd.description}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
lines.push('');
|
|
31
|
+
lines.push('Global options:');
|
|
32
|
+
for (const flag of registry.globalFlags) {
|
|
33
|
+
lines.push(formatFlagLine(flag));
|
|
34
|
+
}
|
|
35
|
+
lines.push(formatFlagLine({ name: '-h, --help', type: 'boolean', description: 'Show help' }));
|
|
36
|
+
lines.push(formatFlagLine({ name: '-v, --version', type: 'boolean', description: 'Show version' }));
|
|
37
|
+
return lines.join('\n');
|
|
38
|
+
}
|
|
39
|
+
export function formatCommandHelp(command, globalFlags) {
|
|
40
|
+
const lines = [];
|
|
41
|
+
if (command.subcommands) {
|
|
42
|
+
lines.push(`chkit ${command.name} <command> [options]`);
|
|
43
|
+
lines.push(` ${command.description}`);
|
|
44
|
+
lines.push('');
|
|
45
|
+
lines.push('Commands:');
|
|
46
|
+
for (const sub of command.subcommands) {
|
|
47
|
+
lines.push(` ${sub.name.padEnd(14)} ${sub.description}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
lines.push(`chkit ${command.name} [options]`);
|
|
52
|
+
lines.push(` ${command.description}`);
|
|
53
|
+
}
|
|
54
|
+
if (command.flags.length > 0) {
|
|
55
|
+
lines.push('');
|
|
56
|
+
lines.push('Options:');
|
|
57
|
+
for (const flag of command.flags) {
|
|
58
|
+
lines.push(formatFlagLine(flag));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
for (const pf of command.pluginFlags) {
|
|
62
|
+
lines.push('');
|
|
63
|
+
lines.push(`Plugin: ${pf.pluginName}`);
|
|
64
|
+
for (const flag of pf.flags) {
|
|
65
|
+
lines.push(formatFlagLine(flag));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
lines.push('');
|
|
69
|
+
lines.push('Global options:');
|
|
70
|
+
for (const flag of globalFlags) {
|
|
71
|
+
lines.push(formatFlagLine(flag));
|
|
72
|
+
}
|
|
73
|
+
return lines.join('\n');
|
|
74
|
+
}
|
|
75
|
+
function formatFlagLine(flag) {
|
|
76
|
+
const nameStr = flag.name ?? '';
|
|
77
|
+
const placeholder = flag.placeholder ? ` ${flag.placeholder}` : '';
|
|
78
|
+
const label = `${nameStr}${placeholder}`;
|
|
79
|
+
if (label.length >= 22) {
|
|
80
|
+
return ` ${label}\n${''.padEnd(24)}${flag.description}`;
|
|
81
|
+
}
|
|
82
|
+
return ` ${label.padEnd(22)} ${flag.description}`;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/bin/help.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bin/internal-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,wBAAgB,kBAAkB,IAAI,SAAS,EAAE,CAEhD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bin/internal-plugins/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAA;AAClC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ChxPlugin } from '../../plugins.js';
|
|
2
|
+
export declare const SKILL_INSTALL_COMMAND = "npx skills add obsessiondb/chkit";
|
|
3
|
+
export declare const HINT_INTERVAL_MS: number;
|
|
4
|
+
export interface SkillHintState {
|
|
5
|
+
lastDismissed?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SkillHintDeps {
|
|
8
|
+
isSkillInstalled(): boolean;
|
|
9
|
+
readState(): SkillHintState;
|
|
10
|
+
writeState(state: SkillHintState): void;
|
|
11
|
+
promptUser(): Promise<boolean>;
|
|
12
|
+
installSkill(): Promise<boolean>;
|
|
13
|
+
now(): number;
|
|
14
|
+
}
|
|
15
|
+
export declare function createSkillHintPlugin(overrides?: Partial<SkillHintDeps>): ChxPlugin;
|
|
16
|
+
//# sourceMappingURL=skill-hint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-hint.d.ts","sourceRoot":"","sources":["../../../src/bin/internal-plugins/skill-hint.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE/D,eAAO,MAAM,qBAAqB,qCAAqC,CAAA;AACvE,eAAO,MAAM,gBAAgB,QAA2B,CAAA;AAExD,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,IAAI,OAAO,CAAA;IAC3B,SAAS,IAAI,cAAc,CAAA;IAC3B,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IACvC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC,GAAG,IAAI,MAAM,CAAA;CACd;AA8DD,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,CAqCnF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import process from 'node:process';
|
|
5
|
+
import { definePlugin } from '../../plugins.js';
|
|
6
|
+
export const SKILL_INSTALL_COMMAND = 'npx skills add obsessiondb/chkit';
|
|
7
|
+
export const HINT_INTERVAL_MS = 30 * 24 * 60 * 60 * 1000; // 30 days
|
|
8
|
+
function getStateDir() {
|
|
9
|
+
return join(homedir(), '.chkit');
|
|
10
|
+
}
|
|
11
|
+
function getStateFilePath() {
|
|
12
|
+
return join(getStateDir(), 'skill-hint.json');
|
|
13
|
+
}
|
|
14
|
+
const defaultDeps = {
|
|
15
|
+
isSkillInstalled() {
|
|
16
|
+
const cwd = process.cwd();
|
|
17
|
+
const projectSkill = join(cwd, '.claude', 'skills', 'chkit', 'SKILL.md');
|
|
18
|
+
const globalSkill = join(homedir(), '.claude', 'skills', 'chkit', 'SKILL.md');
|
|
19
|
+
return existsSync(projectSkill) || existsSync(globalSkill);
|
|
20
|
+
},
|
|
21
|
+
readState() {
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(readFileSync(getStateFilePath(), 'utf-8'));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
writeState(state) {
|
|
30
|
+
const dir = getStateDir();
|
|
31
|
+
mkdirSync(dir, { recursive: true });
|
|
32
|
+
writeFileSync(getStateFilePath(), JSON.stringify(state, null, 2) + '\n');
|
|
33
|
+
},
|
|
34
|
+
async promptUser() {
|
|
35
|
+
const { createInterface } = await import('node:readline/promises');
|
|
36
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
37
|
+
try {
|
|
38
|
+
console.error('');
|
|
39
|
+
console.error('chkit has an AI agent skill for Claude Code.');
|
|
40
|
+
console.error(`Install it with: ${SKILL_INSTALL_COMMAND}`);
|
|
41
|
+
console.error('');
|
|
42
|
+
const answer = await rl.question('Install now? [y/N] ');
|
|
43
|
+
return answer.trim().toLowerCase() === 'y' || answer.trim().toLowerCase() === 'yes';
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
rl.close();
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
async installSkill() {
|
|
50
|
+
const { execSync } = await import('node:child_process');
|
|
51
|
+
try {
|
|
52
|
+
console.error('');
|
|
53
|
+
execSync(SKILL_INSTALL_COMMAND, { stdio: 'inherit' });
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
console.error(`Failed to install. Run manually: ${SKILL_INSTALL_COMMAND}`);
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
now: () => Date.now(),
|
|
62
|
+
};
|
|
63
|
+
export function createSkillHintPlugin(overrides) {
|
|
64
|
+
const deps = { ...defaultDeps, ...overrides };
|
|
65
|
+
let pendingMessage;
|
|
66
|
+
return definePlugin({
|
|
67
|
+
manifest: {
|
|
68
|
+
name: '@chkit/internal-skill-hint',
|
|
69
|
+
apiVersion: 1,
|
|
70
|
+
},
|
|
71
|
+
hooks: {
|
|
72
|
+
async onInit(ctx) {
|
|
73
|
+
if (!ctx.isInteractive || ctx.jsonMode)
|
|
74
|
+
return;
|
|
75
|
+
if (deps.isSkillInstalled())
|
|
76
|
+
return;
|
|
77
|
+
const state = deps.readState();
|
|
78
|
+
if (state.lastDismissed) {
|
|
79
|
+
const elapsed = deps.now() - new Date(state.lastDismissed).getTime();
|
|
80
|
+
if (elapsed < HINT_INTERVAL_MS)
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const accepted = await deps.promptUser();
|
|
84
|
+
if (accepted) {
|
|
85
|
+
await deps.installSkill();
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
deps.writeState({ lastDismissed: new Date(deps.now()).toISOString() });
|
|
89
|
+
pendingMessage = `You can install it later with: ${SKILL_INSTALL_COMMAND}`;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
onComplete(ctx) {
|
|
93
|
+
if (pendingMessage && !ctx.jsonMode && ctx.exitCode === 0) {
|
|
94
|
+
console.error('');
|
|
95
|
+
console.error(pendingMessage);
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=skill-hint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-hint.js","sourceRoot":"","sources":["../../../src/bin/internal-plugins/skill-hint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ClickHouseExecutor } from '@chkit/clickhouse';
|
|
2
|
+
import type { ChxConfig } from '@chkit/core';
|
|
3
|
+
import type { MigrationJournal, MigrationJournalEntry } from './migration-store.js';
|
|
4
|
+
export interface JournalStore {
|
|
5
|
+
readJournal(): Promise<MigrationJournal>;
|
|
6
|
+
appendEntry(entry: MigrationJournalEntry): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function createJournalStore(db: ClickHouseExecutor): JournalStore;
|
|
9
|
+
export declare function createJournalStoreFromConfig(clickhouseConfig: NonNullable<ChxConfig['clickhouse']>): {
|
|
10
|
+
journalStore: JournalStore;
|
|
11
|
+
db: ClickHouseExecutor;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=journal-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-store.d.ts","sourceRoot":"","sources":["../../src/bin/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAGnF,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxC,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AAkBD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,GAAG,YAAY,CAiEvE;AAED,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GACrD;IAAE,YAAY,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,kBAAkB,CAAA;CAAE,CAGxD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { createClickHouseExecutor } from '@chkit/clickhouse';
|
|
2
|
+
import { CLI_VERSION } from './version.js';
|
|
3
|
+
const CREATE_TABLE_SQL = `CREATE TABLE IF NOT EXISTS _chkit_migrations (
|
|
4
|
+
name String,
|
|
5
|
+
applied_at DateTime64(3, 'UTC'),
|
|
6
|
+
checksum String,
|
|
7
|
+
chkit_version String
|
|
8
|
+
) ENGINE = MergeTree()
|
|
9
|
+
ORDER BY (name)
|
|
10
|
+
SETTINGS index_granularity = 1`;
|
|
11
|
+
export function createJournalStore(db) {
|
|
12
|
+
let bootstrapped = false;
|
|
13
|
+
async function ensureTable() {
|
|
14
|
+
if (bootstrapped)
|
|
15
|
+
return;
|
|
16
|
+
// Probe whether the table already exists before issuing CREATE TABLE.
|
|
17
|
+
// On ClickHouse Cloud, repeated CREATE TABLE IF NOT EXISTS can fail with
|
|
18
|
+
// "already exists in metadata backend with different schema" because the
|
|
19
|
+
// engine normalisation (SharedMergeTree vs SharedMergeTree()) differs
|
|
20
|
+
// between the stored metadata and the new DDL statement.
|
|
21
|
+
try {
|
|
22
|
+
await db.query(`SELECT name FROM _chkit_migrations LIMIT 0`);
|
|
23
|
+
bootstrapped = true;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Table does not exist yet – create it below.
|
|
28
|
+
}
|
|
29
|
+
await db.execute(CREATE_TABLE_SQL);
|
|
30
|
+
// On ClickHouse Cloud, DDL propagation across nodes may lag behind the
|
|
31
|
+
// CREATE TABLE acknowledgment. Wait until the table is queryable.
|
|
32
|
+
for (let attempt = 0; attempt < 10; attempt++) {
|
|
33
|
+
try {
|
|
34
|
+
await db.query(`SELECT name FROM _chkit_migrations LIMIT 0`);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
await new Promise((r) => setTimeout(r, 250));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
bootstrapped = true;
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
async readJournal() {
|
|
45
|
+
await ensureTable();
|
|
46
|
+
try {
|
|
47
|
+
await db.execute(`SYSTEM SYNC REPLICA _chkit_migrations`);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Non-replicated or single-node setups don't support SYSTEM SYNC REPLICA.
|
|
51
|
+
}
|
|
52
|
+
const rows = await db.query(`SELECT name, applied_at, checksum, chkit_version FROM _chkit_migrations ORDER BY name SETTINGS select_sequential_consistency = 1`);
|
|
53
|
+
return {
|
|
54
|
+
version: 1,
|
|
55
|
+
applied: rows.map((row) => ({
|
|
56
|
+
name: row.name,
|
|
57
|
+
appliedAt: row.applied_at,
|
|
58
|
+
checksum: row.checksum,
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
async appendEntry(entry) {
|
|
63
|
+
await ensureTable();
|
|
64
|
+
const esc = (s) => s.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
65
|
+
await db.execute(`INSERT INTO _chkit_migrations (name, applied_at, checksum, chkit_version) VALUES ('${esc(entry.name)}', '${esc(entry.appliedAt)}', '${esc(entry.checksum)}', '${esc(CLI_VERSION)}')`);
|
|
66
|
+
try {
|
|
67
|
+
await db.execute(`SYSTEM SYNC REPLICA _chkit_migrations`);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Non-replicated or single-node setups don't support SYSTEM SYNC REPLICA.
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export function createJournalStoreFromConfig(clickhouseConfig) {
|
|
76
|
+
const db = createClickHouseExecutor(clickhouseConfig);
|
|
77
|
+
return { journalStore: createJournalStore(db), db };
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=journal-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-store.js","sourceRoot":"","sources":["../../src/bin/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,mBAAmB,CAAA;AAIrF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAO1C,MAAM,gBAAgB,GAAG;;;;;;;+BAOM,CAAA;AAS/B,MAAM,UAAU,kBAAkB,CAAC,EAAsB;IACvD,IAAI,YAAY,GAAG,KAAK,CAAA;IAExB,KAAK,UAAU,WAAW;QACxB,IAAI,YAAY;YAAE,OAAM;QACxB,sEAAsE;QACtE,yEAAyE;QACzE,yEAAyE;QACzE,sEAAsE;QACtE,yDAAyD;QACzD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC5D,YAAY,GAAG,IAAI,CAAA;YACnB,OAAM;QACR,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;QACD,MAAM,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAClC,uEAAuE;QACvE,kEAAkE;QAClE,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;gBAC5D,MAAK;YACP,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QACD,YAAY,GAAG,IAAI,CAAA;IACrB,CAAC;IAED,OAAO;QACL,KAAK,CAAC,WAAW;YACf,MAAM,WAAW,EAAE,CAAA;YACnB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAA;YAC3D,CAAC;YAAC,MAAM,CAAC;gBACP,0EAA0E;YAC5E,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CACzB,kIAAkI,CACnI,CAAA;YACD,OAAO;gBACL,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,SAAS,EAAE,GAAG,CAAC,UAAU;oBACzB,QAAQ,EAAE,GAAG,CAAC,QAAQ;iBACvB,CAAC,CAAC;aACJ,CAAA;QACH,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAA4B;YAC5C,MAAM,WAAW,EAAE,CAAA;YACnB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACxE,MAAM,EAAE,CAAC,OAAO,CACd,sFAAsF,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CACtL,CAAA;YACD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAA;YAC3D,CAAC;YAAC,MAAM,CAAC;gBACP,0EAA0E;YAC5E,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,gBAAsD;IAEtD,MAAM,EAAE,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,CAAA;IACrD,OAAO,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type Command = 'generate' | 'migrate' | 'status' | 'drift' | 'check' | 'plugin';
|
|
2
|
+
export declare function printOutput(value: unknown, jsonMode: boolean): void;
|
|
3
|
+
export declare function jsonPayload<T extends object>(command: Command, payload: T): T & {
|
|
4
|
+
command: Command;
|
|
5
|
+
schemaVersion: number;
|
|
6
|
+
};
|
|
7
|
+
export declare function emitJson<T extends object>(command: Command, payload: T): void;
|
|
8
|
+
//# sourceMappingURL=json-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/bin/json-output.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GACf,UAAU,GACV,SAAS,GACT,QAAQ,GACR,OAAO,GACP,OAAO,GACP,QAAQ,CAAA;AAIZ,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAQnE;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG;IAC/E,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB,CAMA;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAE7E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const JSON_CONTRACT_VERSION = 1;
|
|
2
|
+
export function printOutput(value, jsonMode) {
|
|
3
|
+
if (jsonMode) {
|
|
4
|
+
console.log(JSON.stringify(value, null, 2));
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
if (typeof value === 'string') {
|
|
8
|
+
console.log(value);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function jsonPayload(command, payload) {
|
|
12
|
+
return {
|
|
13
|
+
command,
|
|
14
|
+
schemaVersion: JSON_CONTRACT_VERSION,
|
|
15
|
+
...payload,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function emitJson(command, payload) {
|
|
19
|
+
printOutput(jsonPayload(command, payload), true);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=json-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/bin/json-output.ts"],"names":[],"mappings":"AAQA,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAE/B,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,QAAiB;IAC3D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3C,OAAM;IACR,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAmB,OAAgB,EAAE,OAAU;IAIxE,OAAO;QACL,OAAO;QACP,aAAa,EAAE,qBAAqB;QACpC,GAAG,OAAO;KACX,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAmB,OAAgB,EAAE,OAAU;IACrE,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;AAClD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { CLI_VERSION } from './version.js';
|
|
2
|
+
export { DEFAULT_CONFIG_FILE, loadConfig, resolveDirs, writeIfMissing, } from './config.js';
|
|
3
|
+
export { createJournalStore, createJournalStoreFromConfig, type JournalStore, } from './journal-store.js';
|
|
4
|
+
export { checksumSQL, findChecksumMismatches, listMigrations, parseJSONOrThrow, readSnapshot, summarizePlan, type ChecksumMismatch, type MigrationJournal, type MigrationJournalEntry, } from './migration-store.js';
|
|
5
|
+
export { emitJson, jsonPayload, printOutput, type Command } from './json-output.js';
|
|
6
|
+
export { collectDestructiveOperationMarkers, extractMigrationOperationSummaries, extractDestructiveOperationSummaries, extractExecutableStatements, migrationContainsDangerOperation, parseOperationLine, type MigrationOperationSummary, type DestructiveOperationMarker, } from './safety-markers.js';
|
|
7
|
+
export { loadSchemaDefinitions } from './schema-loader.js';
|
|
8
|
+
//# sourceMappingURL=lib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/bin/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EACL,kCAAkC,EAClC,kCAAkC,EAClC,oCAAoC,EACpC,2BAA2B,EAC3B,gCAAgC,EAChC,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/bin/lib.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { CLI_VERSION } from './version.js';
|
|
2
|
+
export { DEFAULT_CONFIG_FILE, loadConfig, resolveDirs, writeIfMissing, } from './config.js';
|
|
3
|
+
export { createJournalStore, createJournalStoreFromConfig, } from './journal-store.js';
|
|
4
|
+
export { checksumSQL, findChecksumMismatches, listMigrations, parseJSONOrThrow, readSnapshot, summarizePlan, } from './migration-store.js';
|
|
5
|
+
export { emitJson, jsonPayload, printOutput } from './json-output.js';
|
|
6
|
+
export { collectDestructiveOperationMarkers, extractMigrationOperationSummaries, extractDestructiveOperationSummaries, extractExecutableStatements, migrationContainsDangerOperation, parseOperationLine, } from './safety-markers.js';
|
|
7
|
+
export { loadSchemaDefinitions } from './schema-loader.js';
|
|
8
|
+
//# sourceMappingURL=lib.js.map
|