@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
|
@@ -0,0 +1,268 @@
|
|
|
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.registerZtdConfigCommand = registerZtdConfigCommand;
|
|
7
|
+
exports.resolveZtdConfigCommandOptions = resolveZtdConfigCommandOptions;
|
|
8
|
+
const chokidar_1 = __importDefault(require("chokidar"));
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const options_1 = require("./options");
|
|
12
|
+
const ztdProjectConfig_1 = require("../utils/ztdProjectConfig");
|
|
13
|
+
const ztdConfig_1 = require("./ztdConfig");
|
|
14
|
+
const fs_1 = require("../utils/fs");
|
|
15
|
+
const agentCli_1 = require("../utils/agentCli");
|
|
16
|
+
const agentSafety_1 = require("../utils/agentSafety");
|
|
17
|
+
const telemetry_1 = require("../utils/telemetry");
|
|
18
|
+
const WATCH_DEBOUNCE_MS = 150;
|
|
19
|
+
function normalizeZtdConfigCommandOptions(options) {
|
|
20
|
+
const ddlDir = typeof options.ddlDir === 'string'
|
|
21
|
+
? (0, options_1.collectDirectories)(options.ddlDir, [])
|
|
22
|
+
: Array.isArray(options.ddlDir)
|
|
23
|
+
? options.ddlDir.filter((entry) => typeof entry === 'string')
|
|
24
|
+
: [];
|
|
25
|
+
const extensions = typeof options.extensions === 'string'
|
|
26
|
+
? (0, options_1.parseExtensions)(options.extensions)
|
|
27
|
+
: Array.isArray(options.extensions)
|
|
28
|
+
? options.extensions.filter((entry) => typeof entry === 'string')
|
|
29
|
+
: options_1.DEFAULT_EXTENSIONS;
|
|
30
|
+
const searchPath = typeof options.searchPath === 'string'
|
|
31
|
+
? (0, options_1.parseCsvList)(options.searchPath)
|
|
32
|
+
: Array.isArray(options.searchPath)
|
|
33
|
+
? options.searchPath.filter((entry) => typeof entry === 'string')
|
|
34
|
+
: undefined;
|
|
35
|
+
return {
|
|
36
|
+
ddlDir,
|
|
37
|
+
extensions,
|
|
38
|
+
out: typeof options.out === 'string' ? options.out : undefined,
|
|
39
|
+
defaultSchema: typeof options.defaultSchema === 'string' ? options.defaultSchema : undefined,
|
|
40
|
+
searchPath,
|
|
41
|
+
watch: Boolean(options.watch),
|
|
42
|
+
quiet: Boolean(options.quiet),
|
|
43
|
+
dryRun: Boolean(options.dryRun),
|
|
44
|
+
json: typeof options.json === 'string' ? options.json : undefined,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function renderZtdLayoutGeneratedFile(config) {
|
|
48
|
+
// Derive the canonical ztd root directory from the configured DDL path.
|
|
49
|
+
const ddlDir = config.ddlDir.replace(/\\/g, '/');
|
|
50
|
+
const ztdRootDir = node_path_1.default.posix.dirname(ddlDir);
|
|
51
|
+
// Keep default sibling directories deterministic for downstream tooling.
|
|
52
|
+
const enumsDir = node_path_1.default.posix.join(ztdRootDir, 'enums');
|
|
53
|
+
const domainSpecsDir = node_path_1.default.posix.join(ztdRootDir, 'domain-specs');
|
|
54
|
+
return [
|
|
55
|
+
'// GENERATED FILE. DO NOT EDIT.',
|
|
56
|
+
'',
|
|
57
|
+
'export default {',
|
|
58
|
+
` ztdRootDir: ${JSON.stringify(ztdRootDir)},`,
|
|
59
|
+
` ddlDir: ${JSON.stringify(ddlDir)},`,
|
|
60
|
+
` enumsDir: ${JSON.stringify(enumsDir)},`,
|
|
61
|
+
` domainSpecsDir: ${JSON.stringify(domainSpecsDir)},`,
|
|
62
|
+
'};',
|
|
63
|
+
''
|
|
64
|
+
].join('\n');
|
|
65
|
+
}
|
|
66
|
+
function writeZtdLayoutFile(layoutFilePath, config) {
|
|
67
|
+
// Ensure the generated folder exists before emitting the layout snapshot.
|
|
68
|
+
(0, fs_1.ensureDirectory)(node_path_1.default.dirname(layoutFilePath));
|
|
69
|
+
(0, node_fs_1.writeFileSync)(layoutFilePath, renderZtdLayoutGeneratedFile(config), 'utf8');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Registers the `ztd-config` CLI command, which generates the canonical ZTD TestRowMap from DDL sources.
|
|
73
|
+
*/
|
|
74
|
+
function registerZtdConfigCommand(program) {
|
|
75
|
+
program
|
|
76
|
+
.command('ztd-config')
|
|
77
|
+
.description('Generate the canonical ZTD TestRowMap from DDL sources')
|
|
78
|
+
.option('--ddl-dir <directory>', 'DDL directory to scan (repeatable)', options_1.collectDirectories, [])
|
|
79
|
+
.option('--extensions <list>', 'Comma-separated extensions to include', options_1.parseExtensions, options_1.DEFAULT_EXTENSIONS)
|
|
80
|
+
.option('--out <file>', 'Destination TypeScript file for generated config')
|
|
81
|
+
.option('--default-schema <schema>', 'Override ddl.defaultSchema stored in ztd.config.json')
|
|
82
|
+
.option('--search-path <list>', 'Comma-separated schema search path entries', options_1.parseCsvList)
|
|
83
|
+
.option('--watch', 'Watch DDL files and regenerate when schema changes', false)
|
|
84
|
+
.option('--quiet', 'Suppress next-step hints after generation', false)
|
|
85
|
+
.option('--dry-run', 'Validate inputs and render outputs without writing files', false)
|
|
86
|
+
.option('--json <payload>', 'Pass command options as a JSON object')
|
|
87
|
+
.action(async (options) => {
|
|
88
|
+
const commandState = await (0, telemetry_1.withSpan)('resolve-command-state', async () => {
|
|
89
|
+
var _a, _b, _c;
|
|
90
|
+
const merged = options.json ? resolveZtdConfigCommandOptions(options) : normalizeZtdConfigCommandOptions(options);
|
|
91
|
+
if (merged.watch && merged.dryRun) {
|
|
92
|
+
(0, telemetry_1.emitDecisionEvent)('watch.invalid-with-dry-run');
|
|
93
|
+
throw new Error('--watch cannot be combined with --dry-run.');
|
|
94
|
+
}
|
|
95
|
+
const projectConfig = (0, ztdProjectConfig_1.loadZtdProjectConfig)();
|
|
96
|
+
const directories = (0, options_1.normalizeDirectoryList)(merged.ddlDir, (_a = projectConfig.ddlDir) !== null && _a !== void 0 ? _a : options_1.DEFAULT_DDL_DIRECTORY);
|
|
97
|
+
const extensions = (0, options_1.resolveExtensions)(merged.extensions, options_1.DEFAULT_EXTENSIONS);
|
|
98
|
+
const defaultOut = node_path_1.default.join((_b = projectConfig.testsDir) !== null && _b !== void 0 ? _b : options_1.DEFAULT_TESTS_DIRECTORY, 'generated', 'ztd-row-map.generated.ts');
|
|
99
|
+
const output = (_c = merged.out) !== null && _c !== void 0 ? _c : defaultOut;
|
|
100
|
+
const layoutOut = node_path_1.default.join(node_path_1.default.dirname(output), 'ztd-layout.generated.ts');
|
|
101
|
+
const ddlOverrides = { ...projectConfig.ddl };
|
|
102
|
+
let shouldUpdateConfig = false;
|
|
103
|
+
if (merged.defaultSchema) {
|
|
104
|
+
ddlOverrides.defaultSchema = (0, agentSafety_1.validateResourceIdentifier)(merged.defaultSchema, '--default-schema');
|
|
105
|
+
shouldUpdateConfig = true;
|
|
106
|
+
}
|
|
107
|
+
if (merged.searchPath && merged.searchPath.length > 0) {
|
|
108
|
+
ddlOverrides.searchPath = merged.searchPath.map((entry) => (0, agentSafety_1.validateResourceIdentifier)(entry, '--search-path'));
|
|
109
|
+
shouldUpdateConfig = true;
|
|
110
|
+
}
|
|
111
|
+
const validatedOutput = (0, agentSafety_1.validateProjectPath)(output, '--out');
|
|
112
|
+
const validatedLayoutOut = (0, agentSafety_1.validateProjectPath)(layoutOut, 'generated layout output');
|
|
113
|
+
const generationOptions = {
|
|
114
|
+
directories,
|
|
115
|
+
extensions,
|
|
116
|
+
out: validatedOutput,
|
|
117
|
+
defaultSchema: ddlOverrides.defaultSchema,
|
|
118
|
+
searchPath: ddlOverrides.searchPath,
|
|
119
|
+
ddlLint: projectConfig.ddlLint,
|
|
120
|
+
dryRun: merged.dryRun
|
|
121
|
+
};
|
|
122
|
+
const layoutConfig = { ...projectConfig, ddl: ddlOverrides };
|
|
123
|
+
(0, telemetry_1.emitDecisionEvent)('command.options.resolved', {
|
|
124
|
+
dryRun: merged.dryRun,
|
|
125
|
+
watch: merged.watch,
|
|
126
|
+
quiet: merged.quiet,
|
|
127
|
+
shouldUpdateConfig,
|
|
128
|
+
jsonPayload: Boolean(options.json),
|
|
129
|
+
});
|
|
130
|
+
return {
|
|
131
|
+
merged,
|
|
132
|
+
shouldUpdateConfig,
|
|
133
|
+
ddlOverrides,
|
|
134
|
+
validatedOutput,
|
|
135
|
+
validatedLayoutOut,
|
|
136
|
+
generationOptions,
|
|
137
|
+
layoutConfig,
|
|
138
|
+
};
|
|
139
|
+
}, {
|
|
140
|
+
command: 'ztd-config',
|
|
141
|
+
});
|
|
142
|
+
if (commandState.shouldUpdateConfig && !commandState.merged.dryRun) {
|
|
143
|
+
await (0, telemetry_1.withSpan)('persist-project-config', async () => {
|
|
144
|
+
(0, ztdProjectConfig_1.writeZtdProjectConfig)(process.cwd(), { ddl: commandState.ddlOverrides });
|
|
145
|
+
(0, agentCli_1.emitDiagnostic)({ code: 'ztd-config.config-updated', message: 'ztd.config.json ddl schema settings updated.' });
|
|
146
|
+
(0, telemetry_1.emitDecisionEvent)('config.updated');
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const generation = await (0, telemetry_1.withSpan)('generate-ztd-config', async () => {
|
|
150
|
+
return await (0, ztdConfig_1.runGenerateZtdConfig)(commandState.generationOptions);
|
|
151
|
+
}, {
|
|
152
|
+
dryRun: commandState.merged.dryRun,
|
|
153
|
+
directoryCount: commandState.generationOptions.directories.length,
|
|
154
|
+
});
|
|
155
|
+
if (!commandState.merged.dryRun) {
|
|
156
|
+
await (0, telemetry_1.withSpan)('write-layout-file', async () => {
|
|
157
|
+
writeZtdLayoutFile(commandState.validatedLayoutOut, commandState.layoutConfig);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
await (0, telemetry_1.withSpan)('emit-command-output', async () => {
|
|
161
|
+
if ((0, agentCli_1.isJsonOutput)()) {
|
|
162
|
+
(0, agentCli_1.writeCommandEnvelope)('ztd-config', {
|
|
163
|
+
schemaVersion: 1,
|
|
164
|
+
dryRun: commandState.merged.dryRun,
|
|
165
|
+
configUpdated: commandState.shouldUpdateConfig && !commandState.merged.dryRun,
|
|
166
|
+
outputs: [
|
|
167
|
+
{ path: commandState.validatedOutput, bytes: generation.rendered.length, written: !commandState.merged.dryRun },
|
|
168
|
+
{ path: commandState.validatedLayoutOut, written: !commandState.merged.dryRun }
|
|
169
|
+
],
|
|
170
|
+
tables: generation.tables.map((table) => ({ name: table.name, columns: table.columns.length }))
|
|
171
|
+
});
|
|
172
|
+
(0, telemetry_1.emitDecisionEvent)('output.json-envelope');
|
|
173
|
+
}
|
|
174
|
+
if (commandState.merged.watch) {
|
|
175
|
+
console.log(`[watch] Initial generation complete: ${commandState.generationOptions.out}`);
|
|
176
|
+
(0, telemetry_1.emitDecisionEvent)('watch.enabled');
|
|
177
|
+
await watchZtdConfig(commandState.generationOptions, commandState.validatedLayoutOut, commandState.layoutConfig);
|
|
178
|
+
}
|
|
179
|
+
else if (!commandState.merged.quiet) {
|
|
180
|
+
if (commandState.merged.dryRun) {
|
|
181
|
+
(0, agentCli_1.emitDiagnostic)({
|
|
182
|
+
code: 'ztd-config.dry-run',
|
|
183
|
+
message: `Dry-run validated generation for ${commandState.validatedOutput} and ${commandState.validatedLayoutOut}.`
|
|
184
|
+
});
|
|
185
|
+
(0, telemetry_1.emitDecisionEvent)('output.dry-run-diagnostic');
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
(0, agentCli_1.emitDiagnostic)({ code: 'ztd-config.next-steps', message: 'Next: run vitest, ztd lint, and ztd check-contract.' });
|
|
189
|
+
(0, telemetry_1.emitDecisionEvent)('output.next-steps-diagnostic');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
(0, telemetry_1.emitDecisionEvent)('output.quiet-suppressed');
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
function resolveZtdConfigCommandOptions(options) {
|
|
199
|
+
const payload = (0, agentCli_1.parseJsonPayload)(String(options.json), '--json');
|
|
200
|
+
return normalizeZtdConfigCommandOptions({ ...options, ...payload });
|
|
201
|
+
}
|
|
202
|
+
async function watchZtdConfig(options, layoutOut, layoutConfig) {
|
|
203
|
+
const cwd = process.cwd();
|
|
204
|
+
const extensionSet = new Set(options.extensions.map((extension) => extension.toLowerCase()));
|
|
205
|
+
// Watch directories directly to avoid platform-specific glob quirks.
|
|
206
|
+
const watchRoots = options.directories.map((dir) => node_path_1.default.resolve(dir));
|
|
207
|
+
// Only the configured output file (`options.out`) is overwritten while watching DDL changes.
|
|
208
|
+
const watcher = chokidar_1.default.watch(watchRoots, {
|
|
209
|
+
ignoreInitial: true,
|
|
210
|
+
awaitWriteFinish: { stabilityThreshold: 80, pollInterval: 20 }
|
|
211
|
+
});
|
|
212
|
+
console.log('[watch] Watching DDL files for changes (Ctrl+C to stop)...');
|
|
213
|
+
let debounceTimer = null;
|
|
214
|
+
let scheduledPath = null;
|
|
215
|
+
const scheduleReload = (changedPath) => {
|
|
216
|
+
scheduledPath = changedPath;
|
|
217
|
+
if (debounceTimer) {
|
|
218
|
+
clearTimeout(debounceTimer);
|
|
219
|
+
}
|
|
220
|
+
debounceTimer = setTimeout(() => {
|
|
221
|
+
debounceTimer = null;
|
|
222
|
+
void executeReload(scheduledPath);
|
|
223
|
+
scheduledPath = null;
|
|
224
|
+
}, WATCH_DEBOUNCE_MS);
|
|
225
|
+
};
|
|
226
|
+
const scheduleReloadIfDdl = (changedPath) => {
|
|
227
|
+
// Filter to DDL extensions so unrelated file changes do not trigger regeneration.
|
|
228
|
+
const extension = node_path_1.default.extname(changedPath).toLowerCase();
|
|
229
|
+
if (!extensionSet.has(extension)) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
scheduleReload(changedPath);
|
|
233
|
+
};
|
|
234
|
+
const executeReload = async (changedPath) => {
|
|
235
|
+
const relativePath = changedPath ? node_path_1.default.relative(cwd, changedPath) : 'unknown';
|
|
236
|
+
console.log(`[watch] DDL changed: ${relativePath}`);
|
|
237
|
+
try {
|
|
238
|
+
await (0, ztdConfig_1.runGenerateZtdConfig)(options);
|
|
239
|
+
writeZtdLayoutFile(layoutOut, layoutConfig);
|
|
240
|
+
console.log(`[watch] Updated: ${options.out}`);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
console.error(`[watch] Failed to regenerate ${options.out}: ${error instanceof Error ? error.message : String(error)}`);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
watcher.on('add', scheduleReloadIfDdl);
|
|
247
|
+
watcher.on('change', scheduleReloadIfDdl);
|
|
248
|
+
watcher.on('unlink', scheduleReloadIfDdl);
|
|
249
|
+
await new Promise((resolve) => {
|
|
250
|
+
const stop = async () => {
|
|
251
|
+
console.log('[watch] Shutting down ztd-config watcher...');
|
|
252
|
+
watcher.off('add', scheduleReload);
|
|
253
|
+
watcher.off('change', scheduleReload);
|
|
254
|
+
watcher.off('unlink', scheduleReload);
|
|
255
|
+
if (debounceTimer) {
|
|
256
|
+
clearTimeout(debounceTimer);
|
|
257
|
+
debounceTimer = null;
|
|
258
|
+
}
|
|
259
|
+
await watcher.close();
|
|
260
|
+
process.off('SIGINT', stop);
|
|
261
|
+
resolve();
|
|
262
|
+
};
|
|
263
|
+
process.once('SIGINT', () => {
|
|
264
|
+
void stop();
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=ztdConfigCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ztdConfigCommand.js","sourceRoot":"","sources":["../../src/commands/ztdConfigCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.buildProgram = buildProgram;
|
|
5
|
+
exports.main = main;
|
|
6
|
+
const commander_1 = require("commander");
|
|
7
|
+
const agents_1 = require("./commands/agents");
|
|
8
|
+
const checkContract_1 = require("./commands/checkContract");
|
|
9
|
+
const describe_1 = require("./commands/describe");
|
|
10
|
+
const ddl_1 = require("./commands/ddl");
|
|
11
|
+
const init_1 = require("./commands/init");
|
|
12
|
+
const lint_1 = require("./commands/lint");
|
|
13
|
+
const modelGen_1 = require("./commands/modelGen");
|
|
14
|
+
const perf_1 = require("./commands/perf");
|
|
15
|
+
const query_1 = require("./commands/query");
|
|
16
|
+
const testEvidence_1 = require("./commands/testEvidence");
|
|
17
|
+
const ztdConfigCommand_1 = require("./commands/ztdConfigCommand");
|
|
18
|
+
const agentCli_1 = require("./utils/agentCli");
|
|
19
|
+
const telemetry_1 = require("./utils/telemetry");
|
|
20
|
+
function getCommandPath(command) {
|
|
21
|
+
var _a;
|
|
22
|
+
const segments = [];
|
|
23
|
+
let current = command;
|
|
24
|
+
while (current) {
|
|
25
|
+
const name = current.name();
|
|
26
|
+
if (name && name !== 'ztd') {
|
|
27
|
+
segments.unshift(name);
|
|
28
|
+
}
|
|
29
|
+
current = (_a = current.parent) !== null && _a !== void 0 ? _a : null;
|
|
30
|
+
}
|
|
31
|
+
return segments.join(' ');
|
|
32
|
+
}
|
|
33
|
+
function buildProgram() {
|
|
34
|
+
const program = new commander_1.Command();
|
|
35
|
+
program.name('ztd').description('Zero Table Dependency scaffolding and DDL helpers');
|
|
36
|
+
program.option('--output <format>', 'Global output format (text|json)', 'text');
|
|
37
|
+
program.option('--telemetry', 'Enable internal telemetry events');
|
|
38
|
+
program.option('--telemetry-export <mode>', 'Telemetry export mode (console|debug|file|otlp)');
|
|
39
|
+
program.option('--telemetry-file <path>', 'Write JSONL telemetry to a file when telemetry export mode is file');
|
|
40
|
+
program.option('--telemetry-endpoint <url>', 'OTLP/HTTP traces endpoint when telemetry export mode is otlp');
|
|
41
|
+
program.hook('preAction', (_rootCommand, actionCommand) => {
|
|
42
|
+
var _a;
|
|
43
|
+
const options = actionCommand.optsWithGlobals();
|
|
44
|
+
(0, agentCli_1.setAgentOutputFormat)(options.output);
|
|
45
|
+
// Preserve env-based opt-in when CLI flags were not provided explicitly.
|
|
46
|
+
const telemetryOptionSource = actionCommand.getOptionValueSource('telemetry');
|
|
47
|
+
const telemetryExportSource = actionCommand.getOptionValueSource('telemetryExport');
|
|
48
|
+
const telemetryFileSource = actionCommand.getOptionValueSource('telemetryFile');
|
|
49
|
+
const telemetryEndpointSource = actionCommand.getOptionValueSource('telemetryEndpoint');
|
|
50
|
+
(0, telemetry_1.configureTelemetry)({
|
|
51
|
+
enabled: telemetryOptionSource === 'default' ? undefined : options.telemetry,
|
|
52
|
+
exportMode: telemetryExportSource === 'default' ? undefined : options.telemetryExport,
|
|
53
|
+
filePath: telemetryFileSource === 'default' ? undefined : options.telemetryFile,
|
|
54
|
+
otlpEndpoint: telemetryEndpointSource === 'default' ? undefined : options.telemetryEndpoint,
|
|
55
|
+
});
|
|
56
|
+
const commandPath = getCommandPath(actionCommand);
|
|
57
|
+
(0, telemetry_1.beginCommandSpan)(commandPath, {
|
|
58
|
+
outputFormat: (_a = options.output) !== null && _a !== void 0 ? _a : 'text',
|
|
59
|
+
telemetryEnabled: telemetryOptionSource === 'default'
|
|
60
|
+
? undefined
|
|
61
|
+
: Boolean(options.telemetry),
|
|
62
|
+
});
|
|
63
|
+
(0, telemetry_1.emitDecisionEvent)('command.selected', { command: commandPath });
|
|
64
|
+
});
|
|
65
|
+
program.hook('postAction', (_rootCommand, actionCommand) => {
|
|
66
|
+
(0, telemetry_1.emitDecisionEvent)('command.completed', { command: getCommandPath(actionCommand) });
|
|
67
|
+
(0, telemetry_1.finishCommandSpan)('ok');
|
|
68
|
+
});
|
|
69
|
+
(0, init_1.registerInitCommand)(program);
|
|
70
|
+
(0, agents_1.registerAgentsCommand)(program);
|
|
71
|
+
(0, lint_1.registerLintCommand)(program);
|
|
72
|
+
(0, modelGen_1.registerModelGenCommand)(program);
|
|
73
|
+
(0, perf_1.registerPerfCommands)(program);
|
|
74
|
+
(0, query_1.registerQueryCommands)(program);
|
|
75
|
+
(0, checkContract_1.registerCheckContractCommand)(program);
|
|
76
|
+
(0, testEvidence_1.registerTestEvidenceCommand)(program);
|
|
77
|
+
(0, ztdConfigCommand_1.registerZtdConfigCommand)(program);
|
|
78
|
+
(0, ddl_1.registerDdlCommands)(program);
|
|
79
|
+
(0, describe_1.registerDescribeCommand)(program);
|
|
80
|
+
program.addHelpText('after', `
|
|
81
|
+
Getting started:
|
|
82
|
+
$ ztd init Create a new ZTD project (interactive)
|
|
83
|
+
$ ztd init --yes Create a new ZTD project (non-interactive, demo + Zod defaults)
|
|
84
|
+
$ ztd init --yes --force Allow non-interactive overwrite of scaffold-owned files
|
|
85
|
+
$ ztd agents install Materialize visible AGENTS.md files on demand
|
|
86
|
+
$ ztd ztd-config Generate TestRowMap types from DDL
|
|
87
|
+
$ ztd lint <path> Lint SQL files against the schema
|
|
88
|
+
$ ztd perf init Scaffold the opt-in perf sandbox
|
|
89
|
+
$ ztd perf run --query src/sql/report.sql --dry-run
|
|
90
|
+
$ ztd --telemetry --telemetry-export file --telemetry-file tmp/telemetry/perf-run.jsonl perf run --query src/sql/report.sql --dry-run
|
|
91
|
+
$ ztd query uses table public.users
|
|
92
|
+
$ ztd query uses column public.users.email --format json
|
|
93
|
+
$ ztd --telemetry --telemetry-export debug query uses table public.users
|
|
94
|
+
|
|
95
|
+
Common workflow:
|
|
96
|
+
1. ztd init Scaffold the project
|
|
97
|
+
2. ztd ztd-config Generate test types from DDL
|
|
98
|
+
3. vitest run Run tests
|
|
99
|
+
|
|
100
|
+
After schema changes:
|
|
101
|
+
1. Edit ztd/ddl/*.sql (or inspect an explicit target with ztd ddl pull --url <target>)
|
|
102
|
+
2. ztd ztd-config Regenerate types
|
|
103
|
+
3. vitest run Verify tests still pass
|
|
104
|
+
|
|
105
|
+
Documentation: https://github.com/mk3008/rawsql-ts`);
|
|
106
|
+
return program;
|
|
107
|
+
}
|
|
108
|
+
async function main(argv = process.argv) {
|
|
109
|
+
const program = buildProgram();
|
|
110
|
+
await program.parseAsync(argv);
|
|
111
|
+
await (0, telemetry_1.flushTelemetry)();
|
|
112
|
+
}
|
|
113
|
+
async function handleFatalError(error) {
|
|
114
|
+
// Keep a terminal root exception alongside child span failures so exporters can correlate
|
|
115
|
+
// the failing phase with the overall command outcome without inferring it from child spans.
|
|
116
|
+
(0, telemetry_1.recordException)(error, { scope: 'command-root' });
|
|
117
|
+
(0, telemetry_1.finishCommandSpan)('error');
|
|
118
|
+
await (0, telemetry_1.flushTelemetry)();
|
|
119
|
+
console.error(error instanceof Error ? error.message : error);
|
|
120
|
+
if (error instanceof checkContract_1.CheckContractRuntimeError || error instanceof testEvidence_1.TestEvidenceRuntimeError) {
|
|
121
|
+
process.exit(2);
|
|
122
|
+
}
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
if (require.main === module) {
|
|
126
|
+
void main().catch(handleFatalError);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|