chkit 0.1.2-beta.7 → 0.2.0-beta.12
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 +69 -56
- package/dist/bin/chkit.js +82 -31
- package/dist/bin/chkit.js.map +1 -1
- package/dist/commands/check/output.js +1 -1
- package/dist/commands/check/output.js.map +1 -1
- package/dist/commands/drift/command.d.ts.map +1 -1
- package/dist/commands/drift/command.js +9 -0
- package/dist/commands/drift/command.js.map +1 -1
- package/dist/commands/drift/compare.d.ts +52 -4
- package/dist/commands/drift/compare.d.ts.map +1 -1
- package/dist/commands/drift/compare.js +258 -49
- package/dist/commands/drift/compare.js.map +1 -1
- package/dist/commands/drift/payload.d.ts +1 -0
- package/dist/commands/drift/payload.d.ts.map +1 -1
- package/dist/commands/drift/payload.js +59 -10
- package/dist/commands/drift/payload.js.map +1 -1
- package/dist/commands/generate/command.d.ts.map +1 -1
- package/dist/commands/generate/command.js +73 -33
- package/dist/commands/generate/command.js.map +1 -1
- package/dist/commands/generate/cutover.d.ts +56 -0
- package/dist/commands/generate/cutover.d.ts.map +1 -0
- package/dist/commands/generate/cutover.js +138 -0
- package/dist/commands/generate/cutover.js.map +1 -0
- package/dist/commands/generate/output.d.ts +3 -2
- package/dist/commands/generate/output.d.ts.map +1 -1
- package/dist/commands/generate/output.js +17 -2
- package/dist/commands/generate/output.js.map +1 -1
- package/dist/commands/generate/plan-pipeline.d.ts.map +1 -1
- package/dist/commands/generate/plan-pipeline.js +35 -36
- package/dist/commands/generate/plan-pipeline.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate/abandon.d.ts +39 -0
- package/dist/commands/migrate/abandon.d.ts.map +1 -0
- package/dist/commands/migrate/abandon.js +76 -0
- package/dist/commands/migrate/abandon.js.map +1 -0
- package/dist/commands/migrate/apply.d.ts +10 -1
- package/dist/commands/migrate/apply.d.ts.map +1 -1
- package/dist/commands/migrate/apply.js +108 -10
- package/dist/commands/migrate/apply.js.map +1 -1
- package/dist/commands/migrate/async-apply.d.ts +11 -3
- package/dist/commands/migrate/async-apply.d.ts.map +1 -1
- package/dist/commands/migrate/async-apply.js +113 -27
- package/dist/commands/migrate/async-apply.js.map +1 -1
- package/dist/commands/migrate/command.d.ts +46 -1
- package/dist/commands/migrate/command.d.ts.map +1 -1
- package/dist/commands/migrate/command.js +159 -35
- package/dist/commands/migrate/command.js.map +1 -1
- package/dist/commands/migrate/empty.d.ts +8 -0
- package/dist/commands/migrate/empty.d.ts.map +1 -0
- package/dist/commands/migrate/empty.js +17 -0
- package/dist/commands/migrate/empty.js.map +1 -0
- package/dist/commands/migrate/errors.d.ts +22 -0
- package/dist/commands/migrate/errors.d.ts.map +1 -0
- package/dist/commands/migrate/errors.js +31 -0
- package/dist/commands/migrate/errors.js.map +1 -0
- package/dist/commands/migrate/output.d.ts +31 -0
- package/dist/commands/migrate/output.d.ts.map +1 -1
- package/dist/commands/migrate/output.js +120 -9
- package/dist/commands/migrate/output.js.map +1 -1
- package/dist/commands/migrate/prompts.d.ts +1 -0
- package/dist/commands/migrate/prompts.d.ts.map +1 -1
- package/dist/commands/migrate/prompts.js +3 -0
- package/dist/commands/migrate/prompts.js.map +1 -1
- package/dist/commands/migrate/recovery.d.ts +90 -0
- package/dist/commands/migrate/recovery.d.ts.map +1 -0
- package/dist/commands/migrate/recovery.js +163 -0
- package/dist/commands/migrate/recovery.js.map +1 -0
- package/dist/commands/migrate/retry.d.ts +37 -0
- package/dist/commands/migrate/retry.d.ts.map +1 -0
- package/dist/commands/migrate/retry.js +46 -0
- package/dist/commands/migrate/retry.js.map +1 -0
- package/dist/commands/migrate/settings.d.ts +8 -0
- package/dist/commands/migrate/settings.d.ts.map +1 -0
- package/dist/commands/migrate/settings.js +40 -0
- package/dist/commands/migrate/settings.js.map +1 -0
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +28 -4
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +11 -15
- package/dist/commands/query.js.map +1 -1
- package/dist/commands/registry.d.ts +2 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +228 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/snapshot/command.d.ts +3 -0
- package/dist/commands/snapshot/command.d.ts.map +1 -0
- package/dist/commands/snapshot/command.js +32 -0
- package/dist/commands/snapshot/command.js.map +1 -0
- package/dist/commands/snapshot/output.d.ts +24 -0
- package/dist/commands/snapshot/output.d.ts.map +1 -0
- package/dist/commands/snapshot/output.js +86 -0
- package/dist/commands/snapshot/output.js.map +1 -0
- package/dist/commands/snapshot/rebuild.d.ts +19 -0
- package/dist/commands/snapshot/rebuild.d.ts.map +1 -0
- package/dist/commands/snapshot/rebuild.js +94 -0
- package/dist/commands/snapshot/rebuild.js.map +1 -0
- package/dist/internal-plugins/core/plugin.d.ts.map +1 -1
- package/dist/internal-plugins/core/plugin.js +2 -0
- package/dist/internal-plugins/core/plugin.js.map +1 -1
- package/dist/registry/build.d.ts +17 -0
- package/dist/registry/build.d.ts.map +1 -0
- package/dist/registry/build.js +94 -0
- package/dist/registry/build.js.map +1 -0
- package/dist/registry/dependencies.d.ts +19 -0
- package/dist/registry/dependencies.d.ts.map +1 -0
- package/dist/registry/dependencies.js +105 -0
- package/dist/registry/dependencies.js.map +1 -0
- package/dist/registry/files.d.ts +4 -0
- package/dist/registry/files.d.ts.map +1 -0
- package/dist/registry/files.js +33 -0
- package/dist/registry/files.js.map +1 -0
- package/dist/registry/install.d.ts +55 -0
- package/dist/registry/install.d.ts.map +1 -0
- package/dist/registry/install.js +175 -0
- package/dist/registry/install.js.map +1 -0
- package/dist/registry/model.d.ts +172 -0
- package/dist/registry/model.d.ts.map +1 -0
- package/dist/registry/model.js +161 -0
- package/dist/registry/model.js.map +1 -0
- package/dist/registry/project-config.d.ts +18 -0
- package/dist/registry/project-config.d.ts.map +1 -0
- package/dist/registry/project-config.js +337 -0
- package/dist/registry/project-config.js.map +1 -0
- package/dist/registry/resolve.d.ts +7 -0
- package/dist/registry/resolve.d.ts.map +1 -0
- package/dist/registry/resolve.js +136 -0
- package/dist/registry/resolve.js.map +1 -0
- package/dist/runtime/argv.d.ts +3 -0
- package/dist/runtime/argv.d.ts.map +1 -0
- package/dist/runtime/argv.js +29 -0
- package/dist/runtime/argv.js.map +1 -0
- package/dist/runtime/command-dispatch.d.ts +2 -1
- package/dist/runtime/command-dispatch.d.ts.map +1 -1
- package/dist/runtime/command-dispatch.js +15 -7
- package/dist/runtime/command-dispatch.js.map +1 -1
- package/dist/runtime/config-merge.d.ts.map +1 -1
- package/dist/runtime/config-merge.js +2 -1
- package/dist/runtime/config-merge.js.map +1 -1
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +2 -1
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/global-flags.d.ts +4 -0
- package/dist/runtime/global-flags.d.ts.map +1 -1
- package/dist/runtime/global-flags.js +1 -0
- package/dist/runtime/global-flags.js.map +1 -1
- package/dist/runtime/help.d.ts +1 -1
- package/dist/runtime/help.d.ts.map +1 -1
- package/dist/runtime/help.js +13 -4
- package/dist/runtime/help.js.map +1 -1
- package/dist/runtime/journal-store.d.ts.map +1 -1
- package/dist/runtime/journal-store.js +178 -42
- package/dist/runtime/journal-store.js.map +1 -1
- package/dist/runtime/json-output.d.ts +15 -1
- package/dist/runtime/json-output.d.ts.map +1 -1
- package/dist/runtime/json-output.js +43 -2
- package/dist/runtime/json-output.js.map +1 -1
- package/dist/runtime/migration-store.d.ts +1 -1
- package/dist/runtime/migration-store.d.ts.map +1 -1
- package/dist/runtime/migration-store.js +17 -16
- package/dist/runtime/migration-store.js.map +1 -1
- package/dist/runtime/plugin-runtime/executor-debug.d.ts.map +1 -1
- package/dist/runtime/plugin-runtime/executor-debug.js +10 -8
- package/dist/runtime/plugin-runtime/executor-debug.js.map +1 -1
- package/dist/runtime/plugin-runtime/loader.js +1 -1
- package/dist/runtime/plugin-runtime/loader.js.map +1 -1
- package/dist/runtime/safety-markers.d.ts +4 -2
- package/dist/runtime/safety-markers.d.ts.map +1 -1
- package/dist/runtime/safety-markers.js +4 -2
- package/dist/runtime/safety-markers.js.map +1 -1
- package/dist/runtime/schema-loader.d.ts +20 -1
- package/dist/runtime/schema-loader.d.ts.map +1 -1
- package/dist/runtime/schema-loader.js +26 -0
- package/dist/runtime/schema-loader.js.map +1 -1
- package/dist/runtime/snapshot-document.d.ts +33 -0
- package/dist/runtime/snapshot-document.d.ts.map +1 -0
- package/dist/runtime/snapshot-document.js +65 -0
- package/dist/runtime/snapshot-document.js.map +1 -0
- package/package.json +20 -7
- package/dist/bin/clickhouse-resource.d.ts +0 -4
- package/dist/bin/clickhouse-resource.d.ts.map +0 -1
- package/dist/bin/clickhouse-resource.js +0 -11
- package/dist/bin/clickhouse-resource.js.map +0 -1
- package/dist/bin/command-dispatch.d.ts +0 -13
- package/dist/bin/command-dispatch.d.ts.map +0 -1
- package/dist/bin/command-dispatch.js +0 -186
- package/dist/bin/command-dispatch.js.map +0 -1
- package/dist/bin/command-registry.d.ts +0 -34
- package/dist/bin/command-registry.d.ts.map +0 -1
- package/dist/bin/command-registry.js +0 -87
- package/dist/bin/command-registry.js.map +0 -1
- package/dist/bin/commands/check.d.ts +0 -3
- package/dist/bin/commands/check.d.ts.map +0 -1
- package/dist/bin/commands/check.js +0 -181
- package/dist/bin/commands/check.js.map +0 -1
- package/dist/bin/commands/codegen.d.ts +0 -2
- package/dist/bin/commands/codegen.d.ts.map +0 -1
- package/dist/bin/commands/codegen.js +0 -25
- package/dist/bin/commands/codegen.js.map +0 -1
- package/dist/bin/commands/drift.d.ts +0 -27
- package/dist/bin/commands/drift.d.ts.map +0 -1
- package/dist/bin/commands/drift.js +0 -220
- package/dist/bin/commands/drift.js.map +0 -1
- package/dist/bin/commands/generate/output.d.ts +0 -8
- package/dist/bin/commands/generate/output.d.ts.map +0 -1
- package/dist/bin/commands/generate/output.js +0 -58
- package/dist/bin/commands/generate/output.js.map +0 -1
- package/dist/bin/commands/generate/plan-pipeline.d.ts +0 -7
- package/dist/bin/commands/generate/plan-pipeline.d.ts.map +0 -1
- package/dist/bin/commands/generate/plan-pipeline.js +0 -143
- package/dist/bin/commands/generate/plan-pipeline.js.map +0 -1
- package/dist/bin/commands/generate/rename-mappings.d.ts +0 -29
- package/dist/bin/commands/generate/rename-mappings.d.ts.map +0 -1
- package/dist/bin/commands/generate/rename-mappings.js +0 -195
- package/dist/bin/commands/generate/rename-mappings.js.map +0 -1
- package/dist/bin/commands/generate.d.ts +0 -3
- package/dist/bin/commands/generate.d.ts.map +0 -1
- package/dist/bin/commands/generate.js +0 -158
- package/dist/bin/commands/generate.js.map +0 -1
- package/dist/bin/commands/init.d.ts +0 -2
- package/dist/bin/commands/init.d.ts.map +0 -1
- package/dist/bin/commands/init.js +0 -12
- package/dist/bin/commands/init.js.map +0 -1
- package/dist/bin/commands/migrate.d.ts +0 -3
- package/dist/bin/commands/migrate.d.ts.map +0 -1
- package/dist/bin/commands/migrate.js +0 -288
- package/dist/bin/commands/migrate.js.map +0 -1
- package/dist/bin/commands/plugin-like.d.ts +0 -38
- package/dist/bin/commands/plugin-like.d.ts.map +0 -1
- package/dist/bin/commands/plugin-like.js +0 -101
- package/dist/bin/commands/plugin-like.js.map +0 -1
- package/dist/bin/commands/plugin.d.ts +0 -3
- package/dist/bin/commands/plugin.d.ts.map +0 -1
- package/dist/bin/commands/plugin.js +0 -148
- package/dist/bin/commands/plugin.js.map +0 -1
- package/dist/bin/commands/pull.d.ts +0 -2
- package/dist/bin/commands/pull.d.ts.map +0 -1
- package/dist/bin/commands/pull.js +0 -25
- package/dist/bin/commands/pull.js.map +0 -1
- package/dist/bin/commands/status.d.ts +0 -3
- package/dist/bin/commands/status.d.ts.map +0 -1
- package/dist/bin/commands/status.js +0 -63
- package/dist/bin/commands/status.js.map +0 -1
- package/dist/bin/commands/typegen.d.ts +0 -2
- package/dist/bin/commands/typegen.d.ts.map +0 -1
- package/dist/bin/commands/typegen.js +0 -25
- package/dist/bin/commands/typegen.js.map +0 -1
- package/dist/bin/config.d.ts +0 -13
- package/dist/bin/config.d.ts.map +0 -1
- package/dist/bin/config.js +0 -48
- package/dist/bin/config.js.map +0 -1
- package/dist/bin/debug.d.ts +0 -3
- package/dist/bin/debug.d.ts.map +0 -1
- package/dist/bin/debug.js +0 -14
- package/dist/bin/debug.js.map +0 -1
- package/dist/bin/global-flags.d.ts +0 -16
- package/dist/bin/global-flags.d.ts.map +0 -1
- package/dist/bin/global-flags.js +0 -7
- package/dist/bin/global-flags.js.map +0 -1
- package/dist/bin/help.d.ts +0 -5
- package/dist/bin/help.d.ts.map +0 -1
- package/dist/bin/help.js +0 -84
- package/dist/bin/help.js.map +0 -1
- package/dist/bin/internal-plugins/index.d.ts +0 -3
- package/dist/bin/internal-plugins/index.d.ts.map +0 -1
- package/dist/bin/internal-plugins/index.js +0 -5
- package/dist/bin/internal-plugins/index.js.map +0 -1
- package/dist/bin/internal-plugins/skill-hint.d.ts +0 -31
- package/dist/bin/internal-plugins/skill-hint.d.ts.map +0 -1
- package/dist/bin/internal-plugins/skill-hint.js +0 -172
- package/dist/bin/internal-plugins/skill-hint.js.map +0 -1
- package/dist/bin/journal-store.d.ts +0 -10
- package/dist/bin/journal-store.d.ts.map +0 -1
- package/dist/bin/journal-store.js +0 -137
- package/dist/bin/journal-store.js.map +0 -1
- package/dist/bin/json-output.d.ts +0 -5
- package/dist/bin/json-output.d.ts.map +0 -1
- package/dist/bin/json-output.js +0 -21
- package/dist/bin/json-output.js.map +0 -1
- package/dist/bin/lib.d.ts +0 -5
- package/dist/bin/lib.d.ts.map +0 -1
- package/dist/bin/lib.js +0 -5
- package/dist/bin/lib.js.map +0 -1
- package/dist/bin/logging.d.ts +0 -3
- package/dist/bin/logging.d.ts.map +0 -1
- package/dist/bin/logging.js +0 -31
- package/dist/bin/logging.js.map +0 -1
- package/dist/bin/migration-store.d.ts +0 -22
- package/dist/bin/migration-store.d.ts.map +0 -1
- package/dist/bin/migration-store.js +0 -60
- package/dist/bin/migration-store.js.map +0 -1
- package/dist/bin/plugin-runtime.d.ts +0 -45
- package/dist/bin/plugin-runtime.d.ts.map +0 -1
- package/dist/bin/plugin-runtime.js +0 -513
- package/dist/bin/plugin-runtime.js.map +0 -1
- package/dist/bin/safety-markers.d.ts +0 -23
- package/dist/bin/safety-markers.d.ts.map +0 -1
- package/dist/bin/safety-markers.js +0 -85
- package/dist/bin/safety-markers.js.map +0 -1
- package/dist/bin/schema-loader.d.ts +0 -3
- package/dist/bin/schema-loader.d.ts.map +0 -1
- package/dist/bin/schema-loader.js +0 -11
- package/dist/bin/schema-loader.js.map +0 -1
- package/dist/bin/table-scope.d.ts +0 -38
- package/dist/bin/table-scope.d.ts.map +0 -1
- package/dist/bin/table-scope.js +0 -167
- package/dist/bin/table-scope.js.map +0 -1
- package/dist/bin/version.d.ts +0 -2
- package/dist/bin/version.d.ts.map +0 -1
- package/dist/bin/version.js +0 -5
- package/dist/bin/version.js.map +0 -1
- package/dist/drift-diff.d.ts +0 -8
- package/dist/drift-diff.d.ts.map +0 -1
- package/dist/drift-diff.js +0 -46
- package/dist/drift-diff.js.map +0 -1
- package/dist/drift.d.ts +0 -66
- package/dist/drift.d.ts.map +0 -1
- package/dist/drift.js +0 -220
- package/dist/drift.js.map +0 -1
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, relative, resolve } from 'node:path';
|
|
3
|
+
import micromatch from 'micromatch';
|
|
4
|
+
import * as ts from 'typescript';
|
|
5
|
+
import { assertProjectPath } from './files.js';
|
|
6
|
+
/** Plan source edits without importing project code or writing any files. */
|
|
7
|
+
export async function planProjectConfig(input) {
|
|
8
|
+
const configPath = resolve(input.cwd, input.configPath ?? 'clickhouse.config.ts');
|
|
9
|
+
await assertProjectPath(input.cwd, configPath);
|
|
10
|
+
const providerEntry = resolve(input.providerEntry);
|
|
11
|
+
const providerPath = relativePath(input.cwd, providerEntry);
|
|
12
|
+
const names = [...new Set(input.exportNames)];
|
|
13
|
+
if (names.length === 0 || names.some((name) => !/^[A-Za-z_$][\w$]*$/.test(name) || name === 'default')) {
|
|
14
|
+
throw new Error('Registry entry exports must be nonempty, named JavaScript identifiers.');
|
|
15
|
+
}
|
|
16
|
+
const content = await readOptional(configPath);
|
|
17
|
+
if (content === undefined) {
|
|
18
|
+
return { configPath, files: [{ path: configPath, content: newConfig(providerPath) }] };
|
|
19
|
+
}
|
|
20
|
+
const source = parseSource(configPath, content);
|
|
21
|
+
const fail = (reason) => {
|
|
22
|
+
throw configError(configPath, providerPath, reason);
|
|
23
|
+
};
|
|
24
|
+
const object = configObject(source, fail);
|
|
25
|
+
const properties = configProperties(object, fail);
|
|
26
|
+
const entry = properties.get('entry');
|
|
27
|
+
const schema = properties.get('schema');
|
|
28
|
+
if (entry && schema)
|
|
29
|
+
fail('Both entry and schema are present; choose one schema discovery mode.');
|
|
30
|
+
const edits = [];
|
|
31
|
+
const additions = [];
|
|
32
|
+
const files = [];
|
|
33
|
+
if (entry) {
|
|
34
|
+
const entryValue = literalString(entry.initializer);
|
|
35
|
+
if (entryValue === undefined || entryValue === '')
|
|
36
|
+
fail('entry must be a nonempty literal path.');
|
|
37
|
+
// chkit resolves configured schema/entry paths from cwd, even with --config.
|
|
38
|
+
const entryPath = resolve(input.cwd, entryValue);
|
|
39
|
+
await assertProjectPath(input.cwd, entryPath);
|
|
40
|
+
if (entryPath !== providerEntry) {
|
|
41
|
+
const entryContent = await readOptional(entryPath);
|
|
42
|
+
if (entryContent === undefined)
|
|
43
|
+
fail(`The configured entry does not exist: ${entryPath}.`);
|
|
44
|
+
const updated = addEntryExports(entryPath, entryContent, providerEntry, names);
|
|
45
|
+
if (updated !== entryContent)
|
|
46
|
+
files.push({ path: entryPath, content: updated });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (schema) {
|
|
50
|
+
const value = unwrap(schema.initializer);
|
|
51
|
+
if (ts.isArrayLiteralExpression(value)) {
|
|
52
|
+
const paths = value.elements.map((element) => literalString(element));
|
|
53
|
+
if (paths.some((path) => path === undefined))
|
|
54
|
+
fail('schema must contain only literal glob/path strings.');
|
|
55
|
+
assertSchemaCoverage(input, paths.filter((path) => path !== undefined), fail);
|
|
56
|
+
if (!paths.some((path) => path !== undefined && resolve(input.cwd, path) === providerEntry)) {
|
|
57
|
+
appendList(edits, value.elements, value.end - 1, [quote(providerPath)]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const path = literalString(value);
|
|
62
|
+
if (path === undefined)
|
|
63
|
+
fail('schema must be a literal string or array of literal strings.');
|
|
64
|
+
assertSchemaCoverage(input, [path], fail);
|
|
65
|
+
if (resolve(input.cwd, path) !== providerEntry) {
|
|
66
|
+
edits.push({ start: value.getStart(source), end: value.end, text: `[${value.getText(source)}, ${quote(providerPath)}]` });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
additions.push(`entry: ${quote(providerPath)}`);
|
|
72
|
+
}
|
|
73
|
+
registerIngest(source, properties.get('plugins'), edits, additions, fail);
|
|
74
|
+
appendList(edits, object.properties, object.end - 1, additions);
|
|
75
|
+
const updated = applyEdits(content, edits);
|
|
76
|
+
if (updated !== content)
|
|
77
|
+
files.unshift({ path: configPath, content: updated });
|
|
78
|
+
return { configPath, files };
|
|
79
|
+
}
|
|
80
|
+
function assertSchemaCoverage(input, paths, fail) {
|
|
81
|
+
const entry = relative(input.cwd, input.providerEntry).replaceAll('\\', '/');
|
|
82
|
+
const files = (input.providerFiles ?? []).filter((path) => path !== input.providerEntry)
|
|
83
|
+
.map((path) => relative(input.cwd, path).replaceAll('\\', '/'));
|
|
84
|
+
const patterns = paths.map((path) => {
|
|
85
|
+
const negative = path.startsWith('!');
|
|
86
|
+
const normalized = relative(input.cwd, resolve(input.cwd, negative ? path.slice(1) : path)).replaceAll('\\', '/');
|
|
87
|
+
return `${negative ? '!' : ''}${normalized}`;
|
|
88
|
+
});
|
|
89
|
+
// fast-glob applies exclusions to all positive paths, irrespective of order.
|
|
90
|
+
const ordered = [...patterns.filter((pattern) => !pattern.startsWith('!')), entry, ...patterns.filter((pattern) => pattern.startsWith('!'))];
|
|
91
|
+
const overlap = micromatch(files, ordered, { dot: false });
|
|
92
|
+
if (overlap.length > 0) {
|
|
93
|
+
fail(`Existing schema globs also discover provider internals (${overlap.join(', ')}), duplicating entry exports. Narrow the schema globs to existing schema directories, or use an explicit project entry; register only ${entry} for this provider.`);
|
|
94
|
+
}
|
|
95
|
+
if (micromatch([entry], ordered, { dot: false }).length === 0) {
|
|
96
|
+
fail(`Existing schema exclusions hide ${entry}. Narrow the exclusion or use an explicit project entry before installing.`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function configObject(source, fail) {
|
|
100
|
+
const defaults = source.statements.filter(ts.isExportAssignment);
|
|
101
|
+
const assignment = defaults[0];
|
|
102
|
+
if (defaults.length !== 1 || !assignment || assignment.isExportEquals) {
|
|
103
|
+
return fail('Expected export default defineConfig({ ... }) or export default { ... }.');
|
|
104
|
+
}
|
|
105
|
+
let expression = unwrap(assignment.expression);
|
|
106
|
+
if (ts.isCallExpression(expression)) {
|
|
107
|
+
const defineNames = importedNames(source, '@chkit/core', 'defineConfig');
|
|
108
|
+
if (!ts.isIdentifier(expression.expression) || !defineNames.includes(expression.expression.text) || expression.arguments.length !== 1) {
|
|
109
|
+
return fail('The config wrapper must be defineConfig imported from @chkit/core.');
|
|
110
|
+
}
|
|
111
|
+
const argument = expression.arguments[0];
|
|
112
|
+
if (!argument)
|
|
113
|
+
return fail('defineConfig requires a literal object.');
|
|
114
|
+
expression = unwrap(argument);
|
|
115
|
+
}
|
|
116
|
+
if (!ts.isObjectLiteralExpression(expression))
|
|
117
|
+
return fail('Computed/function configurations cannot be edited automatically.');
|
|
118
|
+
return expression;
|
|
119
|
+
}
|
|
120
|
+
function configProperties(object, fail) {
|
|
121
|
+
const properties = new Map();
|
|
122
|
+
for (const property of object.properties) {
|
|
123
|
+
if (!ts.isPropertyAssignment(property) || ts.isComputedPropertyName(property.name)) {
|
|
124
|
+
fail('Config spreads, methods, shorthand, and computed properties require a manual edit.');
|
|
125
|
+
}
|
|
126
|
+
const name = ts.isIdentifier(property.name) || ts.isStringLiteral(property.name) ? property.name.text : undefined;
|
|
127
|
+
if (name === undefined)
|
|
128
|
+
fail('Config property names must be identifiers or string literals.');
|
|
129
|
+
if (properties.has(name))
|
|
130
|
+
fail(`Config property ${name} is repeated.`);
|
|
131
|
+
properties.set(name, property);
|
|
132
|
+
}
|
|
133
|
+
return properties;
|
|
134
|
+
}
|
|
135
|
+
function registerIngest(source, plugins, edits, additions, fail) {
|
|
136
|
+
const aliases = importedNames(source, '@chkit/plugin-ingest', 'ingest');
|
|
137
|
+
let list;
|
|
138
|
+
if (plugins) {
|
|
139
|
+
const value = unwrap(plugins.initializer);
|
|
140
|
+
if (!ts.isArrayLiteralExpression(value))
|
|
141
|
+
fail('plugins must be a literal array; preserve its existing registrations when adding ingest().');
|
|
142
|
+
list = value;
|
|
143
|
+
let registrations = 0;
|
|
144
|
+
for (const element of list.elements) {
|
|
145
|
+
const registration = unwrap(element);
|
|
146
|
+
if (!ts.isCallExpression(registration) || !ts.isIdentifier(registration.expression)) {
|
|
147
|
+
fail('Plugin registrations must be direct factory calls; inspect computed/inline registrations before adding ingest().');
|
|
148
|
+
}
|
|
149
|
+
if (aliases.includes(registration.expression.text))
|
|
150
|
+
registrations += 1;
|
|
151
|
+
else if (!isOtherPluginFactory(source, registration.expression.text)) {
|
|
152
|
+
fail(`Cannot identify plugin factory ${registration.expression.text}; automatic wiring supports direct named imports from @chkit/plugin-* packages. Add ingest() manually when using custom wrappers.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (registrations > 1)
|
|
156
|
+
fail('The ingestion plugin is registered more than once.');
|
|
157
|
+
if (registrations === 1)
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
let name = aliases[0];
|
|
161
|
+
if (name === undefined) {
|
|
162
|
+
name = unusedIdentifier(source, 'ingest');
|
|
163
|
+
const binding = name === 'ingest' ? 'ingest' : `ingest as ${name}`;
|
|
164
|
+
// Inserting after the last import preserves shebangs and directive prologues.
|
|
165
|
+
const imports = source.statements.filter(ts.isImportDeclaration);
|
|
166
|
+
const position = imports.at(-1)?.end ?? directiveEnd(source);
|
|
167
|
+
edits.push({ start: position, end: position, text: `\nimport { ${binding} } from '@chkit/plugin-ingest'\n` });
|
|
168
|
+
}
|
|
169
|
+
if (list)
|
|
170
|
+
appendList(edits, list.elements, list.end - 1, [`${name}()`]);
|
|
171
|
+
else
|
|
172
|
+
additions.push(`plugins: [${name}()]`);
|
|
173
|
+
}
|
|
174
|
+
function addEntryExports(path, content, providerEntry, names) {
|
|
175
|
+
const source = parseSource(path, content);
|
|
176
|
+
const specifier = relativePath(dirname(path), providerEntry).replace(/\.ts$/, '.js');
|
|
177
|
+
const snippet = `export { ${names.join(', ')} } from ${quote(specifier)}`;
|
|
178
|
+
const fail = (reason) => {
|
|
179
|
+
throw new Error(`Cannot wire registry exports into ${path}: ${reason}\nKeep existing schema exports and add or reconcile this exact export:\n${snippet}`);
|
|
180
|
+
};
|
|
181
|
+
const found = new Set();
|
|
182
|
+
const occupied = new Set();
|
|
183
|
+
for (const statement of source.statements) {
|
|
184
|
+
if (ts.isExportDeclaration(statement)) {
|
|
185
|
+
if (statement.isTypeOnly)
|
|
186
|
+
continue;
|
|
187
|
+
if (!statement.exportClause || !ts.isNamedExports(statement.exportClause)) {
|
|
188
|
+
fail('Wildcard/namespace exports cannot be checked safely for name collisions. Use explicit named exports.');
|
|
189
|
+
}
|
|
190
|
+
const moduleName = statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier) ? statement.moduleSpecifier.text : undefined;
|
|
191
|
+
const sameProvider = moduleName !== undefined && sameModule(dirname(path), moduleName, providerEntry);
|
|
192
|
+
for (const exported of statement.exportClause.elements) {
|
|
193
|
+
if (exported.isTypeOnly)
|
|
194
|
+
continue;
|
|
195
|
+
const name = exported.name.text;
|
|
196
|
+
const original = exported.propertyName?.text ?? name;
|
|
197
|
+
if (sameProvider && names.includes(original) && original !== name) {
|
|
198
|
+
fail(`Template export ${original} is already re-exported as ${name}; reconcile the alias before installing.`);
|
|
199
|
+
}
|
|
200
|
+
if (names.includes(name) && sameProvider && original === name)
|
|
201
|
+
found.add(name);
|
|
202
|
+
else
|
|
203
|
+
occupied.add(name);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else if (ts.canHaveModifiers(statement) && ts.getModifiers(statement)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
|
|
207
|
+
if (ts.isVariableStatement(statement)) {
|
|
208
|
+
for (const declaration of statement.declarationList.declarations)
|
|
209
|
+
bindingNames(declaration.name, occupied);
|
|
210
|
+
}
|
|
211
|
+
else if ((ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement) || ts.isEnumDeclaration(statement) || ts.isModuleDeclaration(statement) || ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) && statement.name && ts.isIdentifier(statement.name)) {
|
|
212
|
+
occupied.add(statement.name.text);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const collision = names.find((name) => occupied.has(name));
|
|
217
|
+
if (collision)
|
|
218
|
+
fail(`The name ${collision} is already exported by another declaration.`);
|
|
219
|
+
const missing = names.filter((name) => !found.has(name));
|
|
220
|
+
if (missing.length === 0)
|
|
221
|
+
return content;
|
|
222
|
+
return `${content}${content.endsWith('\n') ? '' : '\n'}\nexport { ${missing.join(', ')} } from ${quote(specifier)}\n`;
|
|
223
|
+
}
|
|
224
|
+
function importedNames(source, moduleName, imported) {
|
|
225
|
+
return source.statements.flatMap((statement) => {
|
|
226
|
+
if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier) || statement.moduleSpecifier.text !== moduleName)
|
|
227
|
+
return [];
|
|
228
|
+
const clause = statement.importClause;
|
|
229
|
+
if (!clause || clause.isTypeOnly || !clause.namedBindings || !ts.isNamedImports(clause.namedBindings))
|
|
230
|
+
return [];
|
|
231
|
+
return clause.namedBindings.elements.filter((element) => !element.isTypeOnly && (element.propertyName?.text ?? element.name.text) === imported)
|
|
232
|
+
.map((element) => element.name.text);
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
function isOtherPluginFactory(source, name) {
|
|
236
|
+
return source.statements.some((statement) => {
|
|
237
|
+
if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))
|
|
238
|
+
return false;
|
|
239
|
+
// Local/third-party wrappers may themselves register ingestion. Do not add
|
|
240
|
+
// another registration unless the existing official factory is identified.
|
|
241
|
+
if (!/^@chkit\/plugin-[a-z0-9-]+$/.test(statement.moduleSpecifier.text) || statement.moduleSpecifier.text === '@chkit/plugin-ingest')
|
|
242
|
+
return false;
|
|
243
|
+
const clause = statement.importClause;
|
|
244
|
+
if (!clause || clause.isTypeOnly)
|
|
245
|
+
return false;
|
|
246
|
+
return clause.namedBindings && ts.isNamedImports(clause.namedBindings)
|
|
247
|
+
? clause.namedBindings.elements.some((element) => !element.isTypeOnly && element.name.text === name)
|
|
248
|
+
: false;
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
function appendList(edits, items, close, additions) {
|
|
252
|
+
if (additions.length === 0)
|
|
253
|
+
return;
|
|
254
|
+
const last = items.at(-1);
|
|
255
|
+
const needsComma = last !== undefined && !items.hasTrailingComma;
|
|
256
|
+
if (last && needsComma && last.end !== close)
|
|
257
|
+
edits.push({ start: last.end, end: last.end, text: ',' });
|
|
258
|
+
edits.push({ start: close, end: close, text: `${needsComma && last?.end === close ? ',' : ''}\n ${additions.join(',\n ')},\n` });
|
|
259
|
+
}
|
|
260
|
+
function applyEdits(content, edits) {
|
|
261
|
+
return [...edits].sort((a, b) => b.start - a.start).reduce((text, edit) => text.slice(0, edit.start) + edit.text + text.slice(edit.end), content);
|
|
262
|
+
}
|
|
263
|
+
function parseSource(path, content) {
|
|
264
|
+
const diagnostics = ts.transpileModule(content, { fileName: path, reportDiagnostics: true, compilerOptions: { target: ts.ScriptTarget.ESNext, module: ts.ModuleKind.ESNext } }).diagnostics ?? [];
|
|
265
|
+
const error = diagnostics.find((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error);
|
|
266
|
+
if (error)
|
|
267
|
+
throw new Error(`Cannot edit ${path}: ${ts.flattenDiagnosticMessageText(error.messageText, '\n')}`);
|
|
268
|
+
return ts.createSourceFile(path, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
269
|
+
}
|
|
270
|
+
function unwrap(expression) {
|
|
271
|
+
if (ts.isParenthesizedExpression(expression) || ts.isAsExpression(expression) || ts.isSatisfiesExpression(expression) || ts.isNonNullExpression(expression)) {
|
|
272
|
+
return unwrap(expression.expression);
|
|
273
|
+
}
|
|
274
|
+
return expression;
|
|
275
|
+
}
|
|
276
|
+
function literalString(expression) {
|
|
277
|
+
const value = unwrap(expression);
|
|
278
|
+
return ts.isStringLiteral(value) || ts.isNoSubstitutionTemplateLiteral(value) ? value.text : undefined;
|
|
279
|
+
}
|
|
280
|
+
function unusedIdentifier(source, preferred) {
|
|
281
|
+
const identifiers = new Set();
|
|
282
|
+
function visit(node) {
|
|
283
|
+
if (ts.isIdentifier(node))
|
|
284
|
+
identifiers.add(node.text);
|
|
285
|
+
ts.forEachChild(node, visit);
|
|
286
|
+
}
|
|
287
|
+
visit(source);
|
|
288
|
+
let candidate = preferred;
|
|
289
|
+
let suffix = 1;
|
|
290
|
+
while (identifiers.has(candidate))
|
|
291
|
+
candidate = `chkitIngest${suffix++}`;
|
|
292
|
+
return candidate;
|
|
293
|
+
}
|
|
294
|
+
function directiveEnd(source) {
|
|
295
|
+
let end = source.text.startsWith('#!') ? Math.max(0, source.text.indexOf('\n')) : 0;
|
|
296
|
+
for (const statement of source.statements) {
|
|
297
|
+
if (!ts.isExpressionStatement(statement) || !ts.isStringLiteral(statement.expression))
|
|
298
|
+
break;
|
|
299
|
+
end = statement.end;
|
|
300
|
+
}
|
|
301
|
+
return end;
|
|
302
|
+
}
|
|
303
|
+
function bindingNames(name, names) {
|
|
304
|
+
if (ts.isIdentifier(name))
|
|
305
|
+
names.add(name.text);
|
|
306
|
+
else
|
|
307
|
+
for (const element of name.elements)
|
|
308
|
+
if (ts.isBindingElement(element))
|
|
309
|
+
bindingNames(element.name, names);
|
|
310
|
+
}
|
|
311
|
+
function sameModule(directory, specifier, target) {
|
|
312
|
+
if (!specifier.startsWith('.'))
|
|
313
|
+
return false;
|
|
314
|
+
const normalized = resolve(directory, specifier).replace(/\.(?:m?[jt]s)$/, '');
|
|
315
|
+
return normalized === target.replace(/\.(?:m?[jt]s)$/, '');
|
|
316
|
+
}
|
|
317
|
+
function relativePath(from, to) {
|
|
318
|
+
const path = relative(from, to).replaceAll('\\', '/');
|
|
319
|
+
return path.startsWith('.') ? path : `./${path}`;
|
|
320
|
+
}
|
|
321
|
+
function quote(value) {
|
|
322
|
+
return JSON.stringify(value);
|
|
323
|
+
}
|
|
324
|
+
async function readOptional(path) {
|
|
325
|
+
return readFile(path, 'utf8').catch((error) => {
|
|
326
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT')
|
|
327
|
+
return undefined;
|
|
328
|
+
throw error;
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
function configError(path, providerPath, reason) {
|
|
332
|
+
return new Error(`Cannot safely update ${path}: ${reason}\nNo files were written. Add ingestion while preserving existing plugins:\nimport { ingest as chkitIngest } from '@chkit/plugin-ingest'\n// Add chkitIngest() to your plugins array.\n// In schema mode, add this exact path to the existing schema paths:\n${quote(providerPath)}\n// In entry mode, explicitly re-export the template's schema and pipeline from the existing entry.`);
|
|
333
|
+
}
|
|
334
|
+
function newConfig(providerPath) {
|
|
335
|
+
return `import { defineConfig } from '@chkit/core'\nimport { ingest } from '@chkit/plugin-ingest'\n\nexport default defineConfig({\n entry: ${quote(providerPath)},\n plugins: [ingest()],\n clickhouse: {\n url: process.env.CLICKHOUSE_URL ?? 'http://localhost:8123',\n username: process.env.CLICKHOUSE_USER ?? 'default',\n password: process.env.CLICKHOUSE_PASSWORD ?? '',\n database: process.env.CLICKHOUSE_DB ?? 'default',\n },\n})\n`;
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=project-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/registry/project-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type RegistryCatalog, type RegistryItem } from './model.js';
|
|
2
|
+
export declare function resolveRegistryItem(reference: string, registry?: string): Promise<{
|
|
3
|
+
item: RegistryItem;
|
|
4
|
+
origin: string;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function readRegistryCatalog(registry?: string): Promise<RegistryCatalog>;
|
|
7
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/registry/resolve.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiF,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAMnJ,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAmB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBzI;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,SAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAG/F"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { DEFAULT_REGISTRY, MAX_ARTIFACT_BYTES, parseRegistryCatalog, parseRegistryItem } from './model.js';
|
|
4
|
+
const GITHUB_REGISTRY_API = 'https://api.github.com/repos/obsessiondb/chkit/contents/registry?ref=main';
|
|
5
|
+
const GITHUB_REGISTRY_RAW = 'https://raw.githubusercontent.com/obsessiondb/chkit/main/registry/';
|
|
6
|
+
const GITHUB_CATALOG_HOME = 'https://chkit.obsessiondb.com';
|
|
7
|
+
export async function resolveRegistryItem(reference, registry = DEFAULT_REGISTRY) {
|
|
8
|
+
if (registry === DEFAULT_REGISTRY && !isDirectReference(reference))
|
|
9
|
+
return resolveGitHubItem(reference);
|
|
10
|
+
let origin;
|
|
11
|
+
let expectedName;
|
|
12
|
+
let expectedVersion;
|
|
13
|
+
if (isDirectReference(reference)) {
|
|
14
|
+
origin = isHttp(reference) ? reference : resolve(reference);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const match = /^([a-z][a-z0-9-]*)(?:@(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?))?$/.exec(reference);
|
|
18
|
+
const name = match?.[1];
|
|
19
|
+
const version = match?.[2];
|
|
20
|
+
if (!name)
|
|
21
|
+
throw new Error(`Invalid template reference: ${reference}`);
|
|
22
|
+
expectedName = name;
|
|
23
|
+
expectedVersion = version;
|
|
24
|
+
const catalogLocation = registryLocation(registry);
|
|
25
|
+
const path = version ? `${name}/${version}.json` : `${name}.json`;
|
|
26
|
+
origin = isHttp(catalogLocation) ? new URL(path, catalogLocation).href : resolve(dirname(catalogLocation), path);
|
|
27
|
+
if (!isHttp(origin) && !(await stat(origin).catch(() => undefined))) {
|
|
28
|
+
throw new Error(`Template ${reference} is not in registry ${registry}: ${origin} does not exist. Run chkit registry list --registry ${registry} to see its templates.`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const item = parseRegistryItem(await readJson(origin));
|
|
32
|
+
if (expectedName !== undefined && item.name !== expectedName)
|
|
33
|
+
throw new Error(`Registry returned ${item.name} for requested template ${expectedName}`);
|
|
34
|
+
if (expectedVersion !== undefined && item.meta.chkit.version !== expectedVersion)
|
|
35
|
+
throw new Error(`Registry returned version ${item.meta.chkit.version} for requested version ${expectedVersion}`);
|
|
36
|
+
return { item, origin };
|
|
37
|
+
}
|
|
38
|
+
export async function readRegistryCatalog(registry = DEFAULT_REGISTRY) {
|
|
39
|
+
if (registry === DEFAULT_REGISTRY)
|
|
40
|
+
return readGitHubCatalog();
|
|
41
|
+
return parseRegistryCatalog(await readJson(registryLocation(registry)));
|
|
42
|
+
}
|
|
43
|
+
async function resolveGitHubItem(reference) {
|
|
44
|
+
const match = /^([a-z][a-z0-9-]*)(?:@(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?))?$/.exec(reference);
|
|
45
|
+
const name = match?.[1];
|
|
46
|
+
if (!name)
|
|
47
|
+
throw new Error(`Invalid template reference: ${reference}`);
|
|
48
|
+
let version = match?.[2];
|
|
49
|
+
if (!version) {
|
|
50
|
+
const manifest = parseRegistryItem(await readJson(`${GITHUB_REGISTRY_RAW}${name}/manifest.json`), false);
|
|
51
|
+
if (manifest.name !== name)
|
|
52
|
+
throw new Error(`Registry returned ${manifest.name} for requested template ${name}`);
|
|
53
|
+
version = manifest.meta.chkit.version;
|
|
54
|
+
}
|
|
55
|
+
const origin = `${GITHUB_REGISTRY_RAW}${name}/releases/${version}.json`;
|
|
56
|
+
const item = parseRegistryItem(await readJson(origin));
|
|
57
|
+
if (item.name !== name)
|
|
58
|
+
throw new Error(`Registry returned ${item.name} for requested template ${name}`);
|
|
59
|
+
if (item.meta.chkit.version !== version)
|
|
60
|
+
throw new Error(`Registry returned version ${item.meta.chkit.version} for requested version ${version}`);
|
|
61
|
+
return { item, origin };
|
|
62
|
+
}
|
|
63
|
+
async function readGitHubCatalog() {
|
|
64
|
+
const listing = await readJson(GITHUB_REGISTRY_API);
|
|
65
|
+
if (!Array.isArray(listing))
|
|
66
|
+
throw new Error('GitHub registry directory response is not an array');
|
|
67
|
+
const names = listing.flatMap((entry) => {
|
|
68
|
+
if (typeof entry !== 'object' || entry === null || !('type' in entry) || entry.type !== 'dir' || !('name' in entry))
|
|
69
|
+
return [];
|
|
70
|
+
const name = entry.name;
|
|
71
|
+
return typeof name === 'string' && /^[a-z][a-z0-9-]*$/.test(name) ? [name] : [];
|
|
72
|
+
}).sort();
|
|
73
|
+
const items = await Promise.all(names.map(async (name) => {
|
|
74
|
+
const item = parseRegistryItem(await readJson(`${GITHUB_REGISTRY_RAW}${name}/manifest.json`), false);
|
|
75
|
+
if (item.name !== name)
|
|
76
|
+
throw new Error(`Registry folder ${name} does not match manifest name ${item.name}`);
|
|
77
|
+
return { ...item, files: item.files.map((file) => ({ ...file, path: `${name}/${file.path}` })) };
|
|
78
|
+
}));
|
|
79
|
+
return parseRegistryCatalog({ name: 'chkit', homepage: GITHUB_CATALOG_HOME, items });
|
|
80
|
+
}
|
|
81
|
+
function registryLocation(registry) {
|
|
82
|
+
if (isHttp(registry)) {
|
|
83
|
+
const url = new URL(registry);
|
|
84
|
+
if (!url.pathname.endsWith('.json'))
|
|
85
|
+
url.pathname = `${url.pathname.replace(/\/$/, '')}/registry.json`;
|
|
86
|
+
return url.href;
|
|
87
|
+
}
|
|
88
|
+
return resolve(registry, registry.endsWith('.json') ? '' : 'registry.json');
|
|
89
|
+
}
|
|
90
|
+
function isDirectReference(reference) {
|
|
91
|
+
return isHttp(reference) || reference.endsWith('.json') || reference.startsWith('.') || reference.startsWith('/');
|
|
92
|
+
}
|
|
93
|
+
async function readJson(location) {
|
|
94
|
+
if (!isHttp(location)) {
|
|
95
|
+
if ((await stat(location)).size > MAX_ARTIFACT_BYTES)
|
|
96
|
+
throw new Error('Registry artifact exceeds the 8 MiB limit');
|
|
97
|
+
return JSON.parse(await readFile(location, 'utf8'));
|
|
98
|
+
}
|
|
99
|
+
const url = new URL(location);
|
|
100
|
+
if (url.username || url.password)
|
|
101
|
+
throw new Error('Credentials in registry URLs are not supported');
|
|
102
|
+
const response = await fetch(url, {
|
|
103
|
+
signal: AbortSignal.timeout(15_000), redirect: 'error',
|
|
104
|
+
...(url.hostname === 'api.github.com' ? { headers: { Accept: 'application/vnd.github+json', 'X-GitHub-Api-Version': '2022-11-28' } } : {}),
|
|
105
|
+
}).catch((error) => {
|
|
106
|
+
const cause = error instanceof Error && error.cause instanceof Error ? error.cause : error;
|
|
107
|
+
const reason = cause instanceof Error ? ('code' in cause && typeof cause.code === 'string' ? cause.code : cause.message) : String(cause);
|
|
108
|
+
throw new Error(`Registry request failed for ${url.origin}${url.pathname}: ${reason}. Check the network connection or pass --registry with a reachable catalog.`, { cause: error });
|
|
109
|
+
});
|
|
110
|
+
if (!response.ok)
|
|
111
|
+
throw new Error(`Registry request failed (${response.status}): ${url.origin}${url.pathname}`);
|
|
112
|
+
if (!response.body)
|
|
113
|
+
throw new Error('Registry response is empty');
|
|
114
|
+
const reader = response.body.getReader();
|
|
115
|
+
const chunks = [];
|
|
116
|
+
let length = 0;
|
|
117
|
+
try {
|
|
118
|
+
while (true) {
|
|
119
|
+
const { done, value } = await reader.read();
|
|
120
|
+
if (done)
|
|
121
|
+
break;
|
|
122
|
+
length += value.byteLength;
|
|
123
|
+
if (length > MAX_ARTIFACT_BYTES)
|
|
124
|
+
throw new Error('Registry artifact exceeds the 8 MiB limit');
|
|
125
|
+
chunks.push(value);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
await reader.cancel();
|
|
130
|
+
}
|
|
131
|
+
return JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
132
|
+
}
|
|
133
|
+
function isHttp(value) {
|
|
134
|
+
return /^https?:\/\//.test(value);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/registry/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"argv.d.ts","sourceRoot":"","sources":["../../src/runtime/argv.ts"],"names":[],"mappings":"AAIA,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAqB5D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { MissingFlagValueError } from '@chkit/core';
|
|
2
|
+
import { GLOBAL_FLAGS } from './global-flags.js';
|
|
3
|
+
/** Move leading global options behind the command without consuming command arguments. */
|
|
4
|
+
export function normalizeGlobalArgs(argv) {
|
|
5
|
+
const globals = new Map(GLOBAL_FLAGS.map((flag) => [flag.name, flag]));
|
|
6
|
+
let index = 0;
|
|
7
|
+
while (index < argv.length) {
|
|
8
|
+
const token = argv[index];
|
|
9
|
+
const equal = token.indexOf('=');
|
|
10
|
+
const name = equal < 0 ? token : token.slice(0, equal);
|
|
11
|
+
const flag = globals.get(name);
|
|
12
|
+
if (!flag)
|
|
13
|
+
break;
|
|
14
|
+
index += 1;
|
|
15
|
+
if (flag.type !== 'boolean' && equal < 0) {
|
|
16
|
+
const value = argv[index];
|
|
17
|
+
if (value === undefined || value.startsWith('--')) {
|
|
18
|
+
throw new MissingFlagValueError(name);
|
|
19
|
+
}
|
|
20
|
+
index += 1;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (index === 0)
|
|
24
|
+
return argv;
|
|
25
|
+
if (index === argv.length)
|
|
26
|
+
return ['--help', ...argv];
|
|
27
|
+
return [argv[index], ...argv.slice(0, index), ...argv.slice(index + 1)];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=argv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"argv.js","sourceRoot":"","sources":["../../src/runtime/argv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAChF,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAW,CAAA;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChC,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI;YAAE,MAAK;QAChB,KAAK,IAAI,CAAC,CAAA;QACV,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAA;YACvC,CAAC;YACD,KAAK,IAAI,CAAC,CAAA;QACZ,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAA;IACrD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;AACnF,CAAC"}
|
|
@@ -13,6 +13,7 @@ export declare function runResolvedCommand(input: {
|
|
|
13
13
|
config: Parameters<PluginRuntime['runOnConfigLoaded']>[0]['config'];
|
|
14
14
|
configPath: string;
|
|
15
15
|
pluginRuntime: PluginRuntime;
|
|
16
|
-
|
|
16
|
+
/** Called with the unmatched subcommand token, or `undefined` when none was given. */
|
|
17
|
+
onAmbiguousPluginSubcommand?: (token: string | undefined) => void;
|
|
17
18
|
}): Promise<void>;
|
|
18
19
|
//# sourceMappingURL=command-dispatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-dispatch.d.ts","sourceRoot":"","sources":["../../src/runtime/command-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,OAAO,EAEZ,KAAK,WAAW,EAGhB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,eAAe,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAyE/E,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC1B;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAWtD;
|
|
1
|
+
{"version":3,"file":"command-dispatch.d.ts","sourceRoot":"","sources":["../../src/runtime/command-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,OAAO,EAEZ,KAAK,WAAW,EAGhB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,eAAe,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAyE/E,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC1B;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAWtD;AAiFD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,QAAQ,EAAE,eAAe,CAAA;IACzB,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IACnE,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,aAAa,CAAA;IAC5B,sFAAsF;IACtF,2BAA2B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;CACjE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GhB"}
|