@rawsql-ts/ztd-cli 0.20.0 → 0.20.3
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/LICENSE +21 -0
- package/dist/commands/agents.d.ts +2 -0
- package/dist/commands/agents.js +68 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/checkContract.d.ts +46 -0
- package/dist/commands/checkContract.js +359 -0
- package/dist/commands/checkContract.js.map +1 -0
- package/dist/commands/connectionOptions.d.ts +12 -0
- package/dist/commands/connectionOptions.js +22 -0
- package/dist/commands/connectionOptions.js.map +1 -0
- package/dist/commands/ddl.d.ts +7 -0
- package/dist/commands/ddl.js +145 -0
- package/dist/commands/ddl.js.map +1 -0
- package/dist/commands/describe.d.ts +23 -0
- package/dist/commands/describe.js +399 -0
- package/dist/commands/describe.js.map +1 -0
- package/dist/commands/diff.d.ts +24 -0
- package/dist/commands/diff.js +73 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/genEntities.d.ts +14 -0
- package/dist/commands/genEntities.js +58 -0
- package/dist/commands/genEntities.js.map +1 -0
- package/dist/commands/init.d.ts +105 -0
- package/dist/commands/init.js +1508 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +89 -0
- package/dist/commands/lint.js +501 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/modelGen.d.ts +60 -0
- package/dist/commands/modelGen.js +572 -0
- package/dist/commands/modelGen.js.map +1 -0
- package/dist/commands/options.d.ts +9 -0
- package/dist/commands/options.js +48 -0
- package/dist/commands/options.js.map +1 -0
- package/dist/commands/perf.d.ts +9 -0
- package/dist/commands/perf.js +374 -0
- package/dist/commands/perf.js.map +1 -0
- package/dist/commands/pull.d.ts +21 -0
- package/dist/commands/pull.js +115 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/query.d.ts +9 -0
- package/dist/commands/query.js +377 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/testEvidence.d.ts +237 -0
- package/dist/commands/testEvidence.js +1220 -0
- package/dist/commands/testEvidence.js.map +1 -0
- package/dist/commands/ztdConfig.d.ts +30 -0
- package/dist/commands/ztdConfig.js +224 -0
- package/dist/commands/ztdConfig.js.map +1 -0
- package/dist/commands/ztdConfigCommand.d.ts +18 -0
- package/dist/commands/ztdConfigCommand.js +268 -0
- package/dist/commands/ztdConfigCommand.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/perf/benchmark.d.ts +277 -0
- package/dist/perf/benchmark.js +2186 -0
- package/dist/perf/benchmark.js.map +1 -0
- package/dist/perf/sandbox.d.ts +73 -0
- package/dist/perf/sandbox.js +492 -0
- package/dist/perf/sandbox.js.map +1 -0
- package/dist/query/analysis.d.ts +20 -0
- package/dist/query/analysis.js +192 -0
- package/dist/query/analysis.js.map +1 -0
- package/dist/query/analyzeColumnUsage.d.ts +10 -0
- package/dist/query/analyzeColumnUsage.js +451 -0
- package/dist/query/analyzeColumnUsage.js.map +1 -0
- package/dist/query/analyzeTableUsage.d.ts +10 -0
- package/dist/query/analyzeTableUsage.js +318 -0
- package/dist/query/analyzeTableUsage.js.map +1 -0
- package/dist/query/execute.d.ts +40 -0
- package/dist/query/execute.js +784 -0
- package/dist/query/execute.js.map +1 -0
- package/dist/query/format.d.ts +1 -0
- package/dist/query/format.js +9 -0
- package/dist/query/format.js.map +1 -0
- package/dist/query/lint.d.ts +29 -0
- package/dist/query/lint.js +340 -0
- package/dist/query/lint.js.map +1 -0
- package/dist/query/location.d.ts +18 -0
- package/dist/query/location.js +204 -0
- package/dist/query/location.js.map +1 -0
- package/dist/query/patch.d.ts +21 -0
- package/dist/query/patch.js +151 -0
- package/dist/query/patch.js.map +1 -0
- package/dist/query/planner.d.ts +31 -0
- package/dist/query/planner.js +134 -0
- package/dist/query/planner.js.map +1 -0
- package/dist/query/report.d.ts +7 -0
- package/dist/query/report.js +19 -0
- package/dist/query/report.js.map +1 -0
- package/dist/query/scalarFilterAnalysis.d.ts +6 -0
- package/dist/query/scalarFilterAnalysis.js +212 -0
- package/dist/query/scalarFilterAnalysis.js.map +1 -0
- package/dist/query/slice.d.ts +17 -0
- package/dist/query/slice.js +204 -0
- package/dist/query/slice.js.map +1 -0
- package/dist/query/structure.d.ts +24 -0
- package/dist/query/structure.js +135 -0
- package/dist/query/structure.js.map +1 -0
- package/dist/query/targets.d.ts +2 -0
- package/dist/query/targets.js +6 -0
- package/dist/query/targets.js.map +1 -0
- package/dist/query/types.d.ts +97 -0
- package/dist/query/types.js +3 -0
- package/dist/query/types.js.map +1 -0
- package/dist/specs/sql/activeOrders.catalog.d.ts +12 -0
- package/dist/specs/sql/activeOrders.catalog.js +36 -0
- package/dist/specs/sql/activeOrders.catalog.js.map +1 -0
- package/dist/specs/sql/usersList.catalog.d.ts +8 -0
- package/dist/specs/sql/usersList.catalog.js +14 -0
- package/dist/specs/sql/usersList.catalog.js.map +1 -0
- package/dist/specs/sqlCatalogDefinition.d.ts +20 -0
- package/dist/specs/sqlCatalogDefinition.js +10 -0
- package/dist/specs/sqlCatalogDefinition.js.map +1 -0
- package/dist/utils/agentCli.d.ts +23 -0
- package/dist/utils/agentCli.js +84 -0
- package/dist/utils/agentCli.js.map +1 -0
- package/dist/utils/agentSafety.d.ts +4 -0
- package/dist/utils/agentSafety.js +50 -0
- package/dist/utils/agentSafety.js.map +1 -0
- package/dist/utils/agents.d.ts +31 -0
- package/dist/utils/agents.js +362 -0
- package/dist/utils/agents.js.map +1 -0
- package/dist/utils/collectSqlFiles.d.ts +9 -0
- package/dist/utils/collectSqlFiles.js +58 -0
- package/dist/utils/collectSqlFiles.js.map +1 -0
- package/dist/utils/connectionSummary.d.ts +3 -0
- package/dist/utils/connectionSummary.js +29 -0
- package/dist/utils/connectionSummary.js.map +1 -0
- package/dist/utils/dbConnection.d.ts +31 -0
- package/dist/utils/dbConnection.js +151 -0
- package/dist/utils/dbConnection.js.map +1 -0
- package/dist/utils/fs.d.ts +1 -0
- package/dist/utils/fs.js +12 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/modelGenBinder.d.ts +8 -0
- package/dist/utils/modelGenBinder.js +31 -0
- package/dist/utils/modelGenBinder.js.map +1 -0
- package/dist/utils/modelGenRender.d.ts +29 -0
- package/dist/utils/modelGenRender.js +158 -0
- package/dist/utils/modelGenRender.js.map +1 -0
- package/dist/utils/modelGenScanner.d.ts +24 -0
- package/dist/utils/modelGenScanner.js +196 -0
- package/dist/utils/modelGenScanner.js.map +1 -0
- package/dist/utils/modelProbe.d.ts +14 -0
- package/dist/utils/modelProbe.js +121 -0
- package/dist/utils/modelProbe.js.map +1 -0
- package/dist/utils/normalizePulledSchema.d.ts +12 -0
- package/dist/utils/normalizePulledSchema.js +213 -0
- package/dist/utils/normalizePulledSchema.js.map +1 -0
- package/dist/utils/optionalDependencies.d.ts +45 -0
- package/dist/utils/optionalDependencies.js +153 -0
- package/dist/utils/optionalDependencies.js.map +1 -0
- package/dist/utils/pgDump.d.ts +12 -0
- package/dist/utils/pgDump.js +58 -0
- package/dist/utils/pgDump.js.map +1 -0
- package/dist/utils/queryFingerprint.d.ts +14 -0
- package/dist/utils/queryFingerprint.js +34 -0
- package/dist/utils/queryFingerprint.js.map +1 -0
- package/dist/utils/sqlCatalogDiscovery.d.ts +44 -0
- package/dist/utils/sqlCatalogDiscovery.js +166 -0
- package/dist/utils/sqlCatalogDiscovery.js.map +1 -0
- package/dist/utils/sqlCatalogStatements.d.ts +20 -0
- package/dist/utils/sqlCatalogStatements.js +23 -0
- package/dist/utils/sqlCatalogStatements.js.map +1 -0
- package/dist/utils/sqlLintHelpers.d.ts +18 -0
- package/dist/utils/sqlLintHelpers.js +270 -0
- package/dist/utils/sqlLintHelpers.js.map +1 -0
- package/dist/utils/telemetry.d.ts +71 -0
- package/dist/utils/telemetry.js +597 -0
- package/dist/utils/telemetry.js.map +1 -0
- package/dist/utils/typeMapper.d.ts +4 -0
- package/dist/utils/typeMapper.js +79 -0
- package/dist/utils/typeMapper.js.map +1 -0
- package/dist/utils/ztdProjectConfig.d.ts +41 -0
- package/dist/utils/ztdProjectConfig.js +182 -0
- package/dist/utils/ztdProjectConfig.js.map +1 -0
- package/package.json +19 -20
- package/templates/src/catalog/runtime/_smoke.runtime.ts +2 -2
- package/templates/src/db/sql-client-adapters.ts +1 -1
- package/templates/src/infrastructure/db/sql-client-adapters.ts +1 -1
- package/templates/src/infrastructure/telemetry/consoleRepositoryTelemetry.ts +1 -1
- package/templates/src/infrastructure/telemetry/repositoryTelemetry.ts +4 -4
- package/templates/tests/smoke.test.ts +2 -2
- package/templates/tests/smoke.validation.test.ts +1 -1
- package/templates/tests/support/testkit-client.ts +1 -1
- package/templates/tests/support/testkit-client.webapi.ts +1 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 MSugiura
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAgentsCommand = registerAgentsCommand;
|
|
4
|
+
const agents_1 = require("../utils/agents");
|
|
5
|
+
const agentCli_1 = require("../utils/agentCli");
|
|
6
|
+
function registerAgentsCommand(program) {
|
|
7
|
+
const agents = program.command('agents').description('Manage internal and visible AGENTS guidance for ztd projects');
|
|
8
|
+
agents
|
|
9
|
+
.command('install')
|
|
10
|
+
.description('Install visible AGENTS.md files from the managed templates')
|
|
11
|
+
.action(() => {
|
|
12
|
+
const plannedPaths = (0, agents_1.getVisibleAgentsInstallPaths)(process.cwd());
|
|
13
|
+
const lines = ['About to create:'];
|
|
14
|
+
if (plannedPaths.length === 0) {
|
|
15
|
+
lines.push(' - (none)');
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
for (const targetPath of plannedPaths) {
|
|
19
|
+
lines.push(` - ${targetPath}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
lines.push('No files will be overwritten.');
|
|
23
|
+
lines.push('Disable with: skip `ztd agents install` (visible AGENTS are disabled by default).');
|
|
24
|
+
const written = (0, agents_1.installVisibleAgents)(process.cwd());
|
|
25
|
+
if ((0, agentCli_1.isJsonOutput)()) {
|
|
26
|
+
(0, agentCli_1.writeCommandEnvelope)('agents install', {
|
|
27
|
+
schemaVersion: 1,
|
|
28
|
+
plannedPaths,
|
|
29
|
+
createdPaths: written.map((summary) => summary.relativePath),
|
|
30
|
+
messageLines: lines
|
|
31
|
+
});
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const finalLines = [...lines];
|
|
35
|
+
if (written.length === 0) {
|
|
36
|
+
finalLines.push('Visible AGENTS guidance is already installed or intentionally preserved.');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
finalLines.push('Installed visible AGENTS guidance:');
|
|
40
|
+
for (const summary of written) {
|
|
41
|
+
finalLines.push(` - ${summary.relativePath}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
process.stdout.write(`${finalLines.join('\n')}\n`);
|
|
45
|
+
});
|
|
46
|
+
agents
|
|
47
|
+
.command('status')
|
|
48
|
+
.description('Report managed AGENTS guidance state and drift signals')
|
|
49
|
+
.action(() => {
|
|
50
|
+
var _a;
|
|
51
|
+
const report = (0, agents_1.getAgentsStatus)(process.cwd());
|
|
52
|
+
if ((0, agentCli_1.isJsonOutput)()) {
|
|
53
|
+
(0, agentCli_1.writeCommandEnvelope)('agents status', {
|
|
54
|
+
schemaVersion: 1,
|
|
55
|
+
targets: report.targets,
|
|
56
|
+
recommended_actions: report.recommendedActions
|
|
57
|
+
});
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const lines = ['AGENTS status:'];
|
|
61
|
+
for (const target of report.targets) {
|
|
62
|
+
lines.push(`- ${target.path}: installed=${target.installed} managed=${target.managed} installed_version=${(_a = target.installedVersion) !== null && _a !== void 0 ? _a : 'null'} template_version=${target.templateVersion} drift=${target.drift}`);
|
|
63
|
+
}
|
|
64
|
+
lines.push(`recommended_actions: ${report.recommendedActions.length > 0 ? report.recommendedActions.join(', ') : '(none)'}`);
|
|
65
|
+
process.stdout.write(`${lines.join('\n')}\n`);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export type CheckFormat = 'human' | 'json';
|
|
3
|
+
export type ViolationSeverity = 'error' | 'warning';
|
|
4
|
+
/** A single deterministic contract-check violation/warning item. */
|
|
5
|
+
export interface ContractViolation {
|
|
6
|
+
rule: 'duplicate-spec-id' | 'unresolved-sql-file' | 'params-shape-mismatch' | 'mapping-invalid-entry' | 'mapping-duplicate-entry' | 'safety-select-star' | 'safety-missing-where' | 'sql-parse-error';
|
|
7
|
+
severity: ViolationSeverity;
|
|
8
|
+
specId: string;
|
|
9
|
+
filePath: string;
|
|
10
|
+
message: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CheckContractResult {
|
|
13
|
+
ok: boolean;
|
|
14
|
+
violations: ContractViolation[];
|
|
15
|
+
filesChecked: number;
|
|
16
|
+
specsChecked: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Resolve command exit code for contract checks.
|
|
20
|
+
* @param args.result Completed check result when execution succeeded.
|
|
21
|
+
* @param args.error Error thrown while running checks.
|
|
22
|
+
* @returns 0 when result is ok, 1 when violations exist or non-runtime errors occur, 2 for runtime/config errors.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveCheckContractExitCode(args: {
|
|
25
|
+
result?: CheckContractResult;
|
|
26
|
+
error?: unknown;
|
|
27
|
+
}): 0 | 1 | 2;
|
|
28
|
+
/** Runtime/configuration error for contract check command (maps to exit code 2). */
|
|
29
|
+
export declare class CheckContractRuntimeError extends Error {
|
|
30
|
+
readonly exitCode = 2;
|
|
31
|
+
}
|
|
32
|
+
/** Register `ztd check contract` command on the CLI root program. */
|
|
33
|
+
export declare function registerCheckContractCommand(program: Command): void;
|
|
34
|
+
/**
|
|
35
|
+
* Run deterministic contract checks for catalog specs under a project root.
|
|
36
|
+
* @param options.strict Treat safety checks as errors when true, warnings otherwise.
|
|
37
|
+
* @param options.rootDir Optional project root override.
|
|
38
|
+
* @param options.specsDir Optional specs directory override (relative to rootDir).
|
|
39
|
+
*/
|
|
40
|
+
export declare function runCheckContract(options: {
|
|
41
|
+
strict: boolean;
|
|
42
|
+
rootDir?: string;
|
|
43
|
+
specsDir?: string;
|
|
44
|
+
}): CheckContractResult;
|
|
45
|
+
/** Format check results into human text or deterministic JSON text. */
|
|
46
|
+
export declare function formatOutput(result: CheckContractResult, format: CheckFormat): string;
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CheckContractRuntimeError = void 0;
|
|
7
|
+
exports.resolveCheckContractExitCode = resolveCheckContractExitCode;
|
|
8
|
+
exports.registerCheckContractCommand = registerCheckContractCommand;
|
|
9
|
+
exports.runCheckContract = runCheckContract;
|
|
10
|
+
exports.formatOutput = formatOutput;
|
|
11
|
+
const node_fs_1 = require("node:fs");
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
const rawsql_ts_1 = require("rawsql-ts");
|
|
14
|
+
const sqlCatalogDiscovery_1 = require("../utils/sqlCatalogDiscovery");
|
|
15
|
+
const agentCli_1 = require("../utils/agentCli");
|
|
16
|
+
/**
|
|
17
|
+
* Resolve command exit code for contract checks.
|
|
18
|
+
* @param args.result Completed check result when execution succeeded.
|
|
19
|
+
* @param args.error Error thrown while running checks.
|
|
20
|
+
* @returns 0 when result is ok, 1 when violations exist or non-runtime errors occur, 2 for runtime/config errors.
|
|
21
|
+
*/
|
|
22
|
+
function resolveCheckContractExitCode(args) {
|
|
23
|
+
if (args.error) {
|
|
24
|
+
return args.error instanceof CheckContractRuntimeError ? 2 : 1;
|
|
25
|
+
}
|
|
26
|
+
if (!args.result) {
|
|
27
|
+
return 2;
|
|
28
|
+
}
|
|
29
|
+
return args.result.ok ? 0 : 1;
|
|
30
|
+
}
|
|
31
|
+
/** Runtime/configuration error for contract check command (maps to exit code 2). */
|
|
32
|
+
class CheckContractRuntimeError extends Error {
|
|
33
|
+
constructor() {
|
|
34
|
+
super(...arguments);
|
|
35
|
+
this.exitCode = 2;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.CheckContractRuntimeError = CheckContractRuntimeError;
|
|
39
|
+
/** Register `ztd check contract` command on the CLI root program. */
|
|
40
|
+
function registerCheckContractCommand(program) {
|
|
41
|
+
const check = program.command('check').description('Contract validation workflows');
|
|
42
|
+
check
|
|
43
|
+
.command('contract')
|
|
44
|
+
.description('Check SQL contract specs deterministically')
|
|
45
|
+
.option('--format <format>', 'Output format (human|json)')
|
|
46
|
+
.option('--out <path>', 'Write output to file')
|
|
47
|
+
.option('--strict', 'Treat safety warnings as violations')
|
|
48
|
+
.option('--specs-dir <path>', 'Override specs directory (default: src/catalog/specs)')
|
|
49
|
+
.option('--json <payload>', 'Pass command options as a JSON object')
|
|
50
|
+
.action(async (options) => {
|
|
51
|
+
try {
|
|
52
|
+
const merged = options.json ? { ...options, ...(0, agentCli_1.parseJsonPayload)(options.json, '--json') } : options;
|
|
53
|
+
const format = resolveCheckOutputFormat(merged.format);
|
|
54
|
+
const result = runCheckContract({
|
|
55
|
+
strict: normalizeBooleanOption(merged.strict),
|
|
56
|
+
rootDir: process.env.ZTD_PROJECT_ROOT,
|
|
57
|
+
specsDir: normalizeStringOption(merged.specsDir)
|
|
58
|
+
});
|
|
59
|
+
const text = formatOutput(result, format);
|
|
60
|
+
const outPath = normalizeStringOption(merged.out);
|
|
61
|
+
if (outPath) {
|
|
62
|
+
const absolute = node_path_1.default.resolve(process.cwd(), outPath);
|
|
63
|
+
(0, node_fs_1.mkdirSync)(node_path_1.default.dirname(absolute), { recursive: true });
|
|
64
|
+
(0, node_fs_1.writeFileSync)(absolute, text, 'utf8');
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const writer = result.ok ? console.log : console.error;
|
|
68
|
+
writer(text);
|
|
69
|
+
}
|
|
70
|
+
process.exitCode = resolveCheckContractExitCode({ result });
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
process.exitCode = resolveCheckContractExitCode({ error });
|
|
74
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function normalizeFormat(format) {
|
|
79
|
+
const normalized = format.trim().toLowerCase();
|
|
80
|
+
if (normalized === 'human') {
|
|
81
|
+
return 'human';
|
|
82
|
+
}
|
|
83
|
+
if (normalized === 'json') {
|
|
84
|
+
return 'json';
|
|
85
|
+
}
|
|
86
|
+
throw new CheckContractRuntimeError(`Unsupported format: ${format}`);
|
|
87
|
+
}
|
|
88
|
+
function resolveCheckOutputFormat(value) {
|
|
89
|
+
const explicitFormat = normalizeStringOption(value);
|
|
90
|
+
if (explicitFormat) {
|
|
91
|
+
return normalizeFormat(explicitFormat);
|
|
92
|
+
}
|
|
93
|
+
// Map the global CLI output mode onto the contract command's local format names.
|
|
94
|
+
return (0, agentCli_1.getAgentOutputFormat)() === 'json' ? 'json' : 'human';
|
|
95
|
+
}
|
|
96
|
+
function normalizeStringOption(value) {
|
|
97
|
+
if (value === undefined || value === null || value === '') {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
if (typeof value !== 'string') {
|
|
101
|
+
throw new CheckContractRuntimeError(`Expected a string option but received ${typeof value}.`);
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
function normalizeBooleanOption(value) {
|
|
106
|
+
if (value === undefined) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (typeof value !== 'boolean') {
|
|
110
|
+
throw new CheckContractRuntimeError(`Expected a boolean option but received ${typeof value}.`);
|
|
111
|
+
}
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Run deterministic contract checks for catalog specs under a project root.
|
|
116
|
+
* @param options.strict Treat safety checks as errors when true, warnings otherwise.
|
|
117
|
+
* @param options.rootDir Optional project root override.
|
|
118
|
+
* @param options.specsDir Optional specs directory override (relative to rootDir).
|
|
119
|
+
*/
|
|
120
|
+
function runCheckContract(options) {
|
|
121
|
+
var _a, _b, _c, _d, _e;
|
|
122
|
+
const root = node_path_1.default.resolve((_a = options.rootDir) !== null && _a !== void 0 ? _a : process.cwd());
|
|
123
|
+
const specsDir = options.specsDir ? node_path_1.default.resolve(root, options.specsDir) : node_path_1.default.resolve(root, 'src', 'catalog', 'specs');
|
|
124
|
+
if (!(0, node_fs_1.existsSync)(specsDir)) {
|
|
125
|
+
throw new CheckContractRuntimeError(`Spec directory not found: ${specsDir}`);
|
|
126
|
+
}
|
|
127
|
+
const specFiles = (0, sqlCatalogDiscovery_1.walkSqlCatalogSpecFiles)(specsDir, { excludeTestFiles: true });
|
|
128
|
+
const loadedSpecs = specFiles.flatMap((filePath) => (0, sqlCatalogDiscovery_1.loadSqlCatalogSpecsFromFile)(filePath, (message) => new CheckContractRuntimeError(message)));
|
|
129
|
+
const violations = [];
|
|
130
|
+
const duplicateMap = new Map();
|
|
131
|
+
for (const loaded of loadedSpecs) {
|
|
132
|
+
const id = typeof loaded.spec.id === 'string' ? loaded.spec.id.trim() : '';
|
|
133
|
+
if (!id) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const list = (_b = duplicateMap.get(id)) !== null && _b !== void 0 ? _b : [];
|
|
137
|
+
list.push(loaded);
|
|
138
|
+
duplicateMap.set(id, list);
|
|
139
|
+
}
|
|
140
|
+
for (const [id, entries] of Array.from(duplicateMap.entries()).sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
141
|
+
if (entries.length < 2) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
for (const entry of entries.sort((a, b) => a.filePath.localeCompare(b.filePath))) {
|
|
145
|
+
violations.push({
|
|
146
|
+
rule: 'duplicate-spec-id',
|
|
147
|
+
severity: 'error',
|
|
148
|
+
specId: id,
|
|
149
|
+
filePath: entry.filePath,
|
|
150
|
+
message: `Duplicate spec.id "${id}" detected.`
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
for (const loaded of loadedSpecs.sort((a, b) => {
|
|
155
|
+
const idA = typeof a.spec.id === 'string' ? a.spec.id : '';
|
|
156
|
+
const idB = typeof b.spec.id === 'string' ? b.spec.id : '';
|
|
157
|
+
return idA.localeCompare(idB) || a.filePath.localeCompare(b.filePath);
|
|
158
|
+
})) {
|
|
159
|
+
const specId = typeof loaded.spec.id === 'string' && loaded.spec.id.trim().length > 0
|
|
160
|
+
? loaded.spec.id.trim()
|
|
161
|
+
: '<missing-id>';
|
|
162
|
+
if (typeof loaded.spec.sqlFile !== 'string' || loaded.spec.sqlFile.trim().length === 0) {
|
|
163
|
+
violations.push({
|
|
164
|
+
rule: 'unresolved-sql-file',
|
|
165
|
+
severity: 'error',
|
|
166
|
+
specId,
|
|
167
|
+
filePath: loaded.filePath,
|
|
168
|
+
message: 'spec.sqlFile must be a non-empty string.'
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const sqlPath = node_path_1.default.resolve(node_path_1.default.dirname(loaded.filePath), loaded.spec.sqlFile);
|
|
173
|
+
if (!(0, node_fs_1.existsSync)(sqlPath)) {
|
|
174
|
+
violations.push({
|
|
175
|
+
rule: 'unresolved-sql-file',
|
|
176
|
+
severity: 'error',
|
|
177
|
+
specId,
|
|
178
|
+
filePath: loaded.filePath,
|
|
179
|
+
message: `SQL file does not exist: ${loaded.spec.sqlFile}`
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
applySafetyChecks(sqlPath, specId, loaded.filePath, options.strict, violations);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const shape = (_c = loaded.spec.params) === null || _c === void 0 ? void 0 : _c.shape;
|
|
187
|
+
const example = (_d = loaded.spec.params) === null || _d === void 0 ? void 0 : _d.example;
|
|
188
|
+
if (shape === 'positional' && !Array.isArray(example)) {
|
|
189
|
+
violations.push({
|
|
190
|
+
rule: 'params-shape-mismatch',
|
|
191
|
+
severity: 'error',
|
|
192
|
+
specId,
|
|
193
|
+
filePath: loaded.filePath,
|
|
194
|
+
message: 'params.shape="positional" requires params.example to be an array.'
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
else if (shape === 'named' && !(0, sqlCatalogDiscovery_1.isPlainObject)(example)) {
|
|
198
|
+
violations.push({
|
|
199
|
+
rule: 'params-shape-mismatch',
|
|
200
|
+
severity: 'error',
|
|
201
|
+
specId,
|
|
202
|
+
filePath: loaded.filePath,
|
|
203
|
+
message: 'params.shape="named" requires params.example to be an object.'
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
const mapping = (_e = loaded.spec.output) === null || _e === void 0 ? void 0 : _e.mapping;
|
|
207
|
+
if (mapping) {
|
|
208
|
+
validateMapping(specId, loaded.filePath, mapping, violations);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const sorted = violations.sort((a, b) => a.rule.localeCompare(b.rule) ||
|
|
212
|
+
a.specId.localeCompare(b.specId) ||
|
|
213
|
+
a.filePath.localeCompare(b.filePath) ||
|
|
214
|
+
a.message.localeCompare(b.message));
|
|
215
|
+
return {
|
|
216
|
+
ok: sorted.length === 0 || sorted.every((item) => item.severity === 'warning'),
|
|
217
|
+
violations: sorted,
|
|
218
|
+
filesChecked: specFiles.length,
|
|
219
|
+
specsChecked: loadedSpecs.length
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
function applySafetyChecks(sqlPath, specId, specFilePath, strict, violations) {
|
|
223
|
+
const sql = (0, node_fs_1.readFileSync)(sqlPath, 'utf8');
|
|
224
|
+
const chunks = rawsql_ts_1.MultiQuerySplitter.split(sql).queries.filter((item) => !item.isEmpty);
|
|
225
|
+
for (const chunk of chunks) {
|
|
226
|
+
const statement = chunk.sql.trim();
|
|
227
|
+
if (!statement) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
let parsed;
|
|
231
|
+
try {
|
|
232
|
+
parsed = rawsql_ts_1.SqlParser.parse(statement);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
violations.push({
|
|
236
|
+
rule: 'sql-parse-error',
|
|
237
|
+
severity: 'warning',
|
|
238
|
+
specId,
|
|
239
|
+
filePath: specFilePath,
|
|
240
|
+
message: `SQL parse failed in safety check: ${error instanceof Error ? error.message : String(error)}`
|
|
241
|
+
});
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
const severity = strict ? 'error' : 'warning';
|
|
245
|
+
if (parsed instanceof rawsql_ts_1.UpdateQuery || parsed instanceof rawsql_ts_1.DeleteQuery) {
|
|
246
|
+
if (!parsed.whereClause) {
|
|
247
|
+
violations.push({
|
|
248
|
+
rule: 'safety-missing-where',
|
|
249
|
+
severity,
|
|
250
|
+
specId,
|
|
251
|
+
filePath: specFilePath,
|
|
252
|
+
message: 'UPDATE/DELETE statement without WHERE detected.'
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (hasRootLevelSelectWildcard(parsed)) {
|
|
258
|
+
violations.push({
|
|
259
|
+
rule: 'safety-select-star',
|
|
260
|
+
severity,
|
|
261
|
+
specId,
|
|
262
|
+
filePath: specFilePath,
|
|
263
|
+
message: 'SELECT * detected at root query level.'
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
function hasRootLevelSelectWildcard(parsed) {
|
|
269
|
+
if (parsed instanceof rawsql_ts_1.SimpleSelectQuery) {
|
|
270
|
+
return parsed.selectClause.items.some((item) => isWildcardSelectItem(item.value));
|
|
271
|
+
}
|
|
272
|
+
if (parsed instanceof rawsql_ts_1.BinarySelectQuery) {
|
|
273
|
+
return hasRootLevelSelectWildcard(parsed.left) || hasRootLevelSelectWildcard(parsed.right);
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
function isWildcardSelectItem(value) {
|
|
278
|
+
return value instanceof rawsql_ts_1.ColumnReference && value.column.name === '*';
|
|
279
|
+
}
|
|
280
|
+
function validateMapping(specId, filePath, mapping, violations) {
|
|
281
|
+
const hasPrefix = typeof mapping.prefix === 'string' && mapping.prefix.trim().length > 0;
|
|
282
|
+
if (!hasPrefix && mapping.columnMap === undefined) {
|
|
283
|
+
violations.push({
|
|
284
|
+
rule: 'mapping-invalid-entry',
|
|
285
|
+
severity: 'error',
|
|
286
|
+
specId,
|
|
287
|
+
filePath,
|
|
288
|
+
message: 'output.mapping must provide prefix or columnMap.'
|
|
289
|
+
});
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (mapping.columnMap === undefined) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (!(0, sqlCatalogDiscovery_1.isPlainObject)(mapping.columnMap)) {
|
|
296
|
+
violations.push({
|
|
297
|
+
rule: 'mapping-invalid-entry',
|
|
298
|
+
severity: 'error',
|
|
299
|
+
specId,
|
|
300
|
+
filePath,
|
|
301
|
+
message: 'output.mapping.columnMap must be an object when provided.'
|
|
302
|
+
});
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
const seenColumns = new Map();
|
|
306
|
+
for (const key of Object.keys(mapping.columnMap).sort()) {
|
|
307
|
+
const value = mapping.columnMap[key];
|
|
308
|
+
if (!key.trim()) {
|
|
309
|
+
violations.push({
|
|
310
|
+
rule: 'mapping-invalid-entry',
|
|
311
|
+
severity: 'error',
|
|
312
|
+
specId,
|
|
313
|
+
filePath,
|
|
314
|
+
message: 'output.mapping.columnMap keys must be non-empty strings.'
|
|
315
|
+
});
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
319
|
+
violations.push({
|
|
320
|
+
rule: 'mapping-invalid-entry',
|
|
321
|
+
severity: 'error',
|
|
322
|
+
specId,
|
|
323
|
+
filePath,
|
|
324
|
+
message: `output.mapping.columnMap["${key}"] must be a non-empty string.`
|
|
325
|
+
});
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
const normalized = value.trim();
|
|
329
|
+
const prev = seenColumns.get(normalized);
|
|
330
|
+
if (prev) {
|
|
331
|
+
violations.push({
|
|
332
|
+
rule: 'mapping-duplicate-entry',
|
|
333
|
+
severity: 'error',
|
|
334
|
+
specId,
|
|
335
|
+
filePath,
|
|
336
|
+
message: `Duplicate mapped column "${normalized}" for keys "${prev}" and "${key}".`
|
|
337
|
+
});
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
seenColumns.set(normalized, key);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/** Format check results into human text or deterministic JSON text. */
|
|
344
|
+
function formatOutput(result, format) {
|
|
345
|
+
if (format === 'json') {
|
|
346
|
+
return `${JSON.stringify(result, null, 2)}\n`;
|
|
347
|
+
}
|
|
348
|
+
if (result.violations.length === 0) {
|
|
349
|
+
return `contract check passed (${result.specsChecked} specs in ${result.filesChecked} files)`;
|
|
350
|
+
}
|
|
351
|
+
const lines = [];
|
|
352
|
+
lines.push(`contract check found ${result.violations.length} violation(s)`);
|
|
353
|
+
for (const item of result.violations) {
|
|
354
|
+
lines.push(`- [${item.severity}] ${item.rule} ${item.specId} @ ${item.filePath}`);
|
|
355
|
+
lines.push(` ${item.message}`);
|
|
356
|
+
}
|
|
357
|
+
return lines.join('\n');
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=checkContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkContract.js","sourceRoot":"","sources":["../../src/commands/checkContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DbConnectionFlags, ResolvedDatabaseConnection } from '../utils/dbConnection';
|
|
2
|
+
export interface ConnectionCliOptions {
|
|
3
|
+
url?: string;
|
|
4
|
+
dbHost?: string;
|
|
5
|
+
dbPort?: string;
|
|
6
|
+
dbUser?: string;
|
|
7
|
+
dbPassword?: string;
|
|
8
|
+
dbName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function resolveExplicitCliConnection(options: ConnectionCliOptions): ResolvedDatabaseConnection;
|
|
11
|
+
export declare function resolveZtdOwnedCliConnection(): ResolvedDatabaseConnection;
|
|
12
|
+
export declare function buildFlagSet(options: ConnectionCliOptions): DbConnectionFlags;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveExplicitCliConnection = resolveExplicitCliConnection;
|
|
4
|
+
exports.resolveZtdOwnedCliConnection = resolveZtdOwnedCliConnection;
|
|
5
|
+
exports.buildFlagSet = buildFlagSet;
|
|
6
|
+
const dbConnection_1 = require("../utils/dbConnection");
|
|
7
|
+
function resolveExplicitCliConnection(options) {
|
|
8
|
+
return (0, dbConnection_1.resolveExplicitTargetConnection)(buildFlagSet(options), options.url);
|
|
9
|
+
}
|
|
10
|
+
function resolveZtdOwnedCliConnection() {
|
|
11
|
+
return (0, dbConnection_1.resolveZtdOwnedTestConnection)();
|
|
12
|
+
}
|
|
13
|
+
function buildFlagSet(options) {
|
|
14
|
+
return {
|
|
15
|
+
host: options.dbHost,
|
|
16
|
+
port: options.dbPort,
|
|
17
|
+
user: options.dbUser,
|
|
18
|
+
password: options.dbPassword,
|
|
19
|
+
database: options.dbName
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=connectionOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectionOptions.js","sourceRoot":"","sources":["../../src/commands/connectionOptions.ts"],"names":[],"mappings":";;AAeA,oEAEC;AAED,oEAEC;AAED,oCAQC;AA/BD,wDAG+B;AAY/B,SAAgB,4BAA4B,CAAC,OAA6B;IACxE,OAAO,IAAA,8CAA+B,EAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,4BAA4B;IAC1C,OAAO,IAAA,4CAA6B,GAAE,CAAC;AACzC,CAAC;AAED,SAAgB,YAAY,CAAC,OAA6B;IACxD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,QAAQ,EAAE,OAAO,CAAC,UAAU;QAC5B,QAAQ,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers all DDL-related commands (`pull`, `gen-entities`, `diff`) on the top-level CLI program.
|
|
4
|
+
* @param program - The Commander program instance to extend.
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerDdlCommands(program: Command): void;
|
|
7
|
+
export { collectDirectories, parseExtensions, DEFAULT_EXTENSIONS, DEFAULT_DDL_DIRECTORY } from './options';
|