@rawsql-ts/ztd-cli 0.20.0 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/LICENSE +21 -0
  2. package/dist/commands/agents.d.ts +2 -0
  3. package/dist/commands/agents.js +68 -0
  4. package/dist/commands/agents.js.map +1 -0
  5. package/dist/commands/checkContract.d.ts +46 -0
  6. package/dist/commands/checkContract.js +359 -0
  7. package/dist/commands/checkContract.js.map +1 -0
  8. package/dist/commands/connectionOptions.d.ts +12 -0
  9. package/dist/commands/connectionOptions.js +22 -0
  10. package/dist/commands/connectionOptions.js.map +1 -0
  11. package/dist/commands/ddl.d.ts +7 -0
  12. package/dist/commands/ddl.js +145 -0
  13. package/dist/commands/ddl.js.map +1 -0
  14. package/dist/commands/describe.d.ts +23 -0
  15. package/dist/commands/describe.js +399 -0
  16. package/dist/commands/describe.js.map +1 -0
  17. package/dist/commands/diff.d.ts +24 -0
  18. package/dist/commands/diff.js +73 -0
  19. package/dist/commands/diff.js.map +1 -0
  20. package/dist/commands/genEntities.d.ts +14 -0
  21. package/dist/commands/genEntities.js +58 -0
  22. package/dist/commands/genEntities.js.map +1 -0
  23. package/dist/commands/init.d.ts +104 -0
  24. package/dist/commands/init.js +1480 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/lint.d.ts +89 -0
  27. package/dist/commands/lint.js +501 -0
  28. package/dist/commands/lint.js.map +1 -0
  29. package/dist/commands/modelGen.d.ts +60 -0
  30. package/dist/commands/modelGen.js +572 -0
  31. package/dist/commands/modelGen.js.map +1 -0
  32. package/dist/commands/options.d.ts +9 -0
  33. package/dist/commands/options.js +48 -0
  34. package/dist/commands/options.js.map +1 -0
  35. package/dist/commands/perf.d.ts +9 -0
  36. package/dist/commands/perf.js +374 -0
  37. package/dist/commands/perf.js.map +1 -0
  38. package/dist/commands/pull.d.ts +21 -0
  39. package/dist/commands/pull.js +115 -0
  40. package/dist/commands/pull.js.map +1 -0
  41. package/dist/commands/query.d.ts +9 -0
  42. package/dist/commands/query.js +377 -0
  43. package/dist/commands/query.js.map +1 -0
  44. package/dist/commands/testEvidence.d.ts +237 -0
  45. package/dist/commands/testEvidence.js +1220 -0
  46. package/dist/commands/testEvidence.js.map +1 -0
  47. package/dist/commands/ztdConfig.d.ts +30 -0
  48. package/dist/commands/ztdConfig.js +224 -0
  49. package/dist/commands/ztdConfig.js.map +1 -0
  50. package/dist/commands/ztdConfigCommand.d.ts +18 -0
  51. package/dist/commands/ztdConfigCommand.js +268 -0
  52. package/dist/commands/ztdConfigCommand.js.map +1 -0
  53. package/dist/index.d.ts +4 -0
  54. package/dist/index.js +127 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/perf/benchmark.d.ts +277 -0
  57. package/dist/perf/benchmark.js +2186 -0
  58. package/dist/perf/benchmark.js.map +1 -0
  59. package/dist/perf/sandbox.d.ts +73 -0
  60. package/dist/perf/sandbox.js +492 -0
  61. package/dist/perf/sandbox.js.map +1 -0
  62. package/dist/query/analysis.d.ts +20 -0
  63. package/dist/query/analysis.js +192 -0
  64. package/dist/query/analysis.js.map +1 -0
  65. package/dist/query/analyzeColumnUsage.d.ts +10 -0
  66. package/dist/query/analyzeColumnUsage.js +451 -0
  67. package/dist/query/analyzeColumnUsage.js.map +1 -0
  68. package/dist/query/analyzeTableUsage.d.ts +10 -0
  69. package/dist/query/analyzeTableUsage.js +318 -0
  70. package/dist/query/analyzeTableUsage.js.map +1 -0
  71. package/dist/query/execute.d.ts +40 -0
  72. package/dist/query/execute.js +784 -0
  73. package/dist/query/execute.js.map +1 -0
  74. package/dist/query/format.d.ts +1 -0
  75. package/dist/query/format.js +9 -0
  76. package/dist/query/format.js.map +1 -0
  77. package/dist/query/lint.d.ts +29 -0
  78. package/dist/query/lint.js +340 -0
  79. package/dist/query/lint.js.map +1 -0
  80. package/dist/query/location.d.ts +18 -0
  81. package/dist/query/location.js +204 -0
  82. package/dist/query/location.js.map +1 -0
  83. package/dist/query/patch.d.ts +21 -0
  84. package/dist/query/patch.js +151 -0
  85. package/dist/query/patch.js.map +1 -0
  86. package/dist/query/planner.d.ts +31 -0
  87. package/dist/query/planner.js +134 -0
  88. package/dist/query/planner.js.map +1 -0
  89. package/dist/query/report.d.ts +7 -0
  90. package/dist/query/report.js +19 -0
  91. package/dist/query/report.js.map +1 -0
  92. package/dist/query/scalarFilterAnalysis.d.ts +6 -0
  93. package/dist/query/scalarFilterAnalysis.js +212 -0
  94. package/dist/query/scalarFilterAnalysis.js.map +1 -0
  95. package/dist/query/slice.d.ts +17 -0
  96. package/dist/query/slice.js +204 -0
  97. package/dist/query/slice.js.map +1 -0
  98. package/dist/query/structure.d.ts +24 -0
  99. package/dist/query/structure.js +135 -0
  100. package/dist/query/structure.js.map +1 -0
  101. package/dist/query/targets.d.ts +2 -0
  102. package/dist/query/targets.js +6 -0
  103. package/dist/query/targets.js.map +1 -0
  104. package/dist/query/types.d.ts +97 -0
  105. package/dist/query/types.js +3 -0
  106. package/dist/query/types.js.map +1 -0
  107. package/dist/specs/sql/activeOrders.catalog.d.ts +12 -0
  108. package/dist/specs/sql/activeOrders.catalog.js +36 -0
  109. package/dist/specs/sql/activeOrders.catalog.js.map +1 -0
  110. package/dist/specs/sql/usersList.catalog.d.ts +8 -0
  111. package/dist/specs/sql/usersList.catalog.js +14 -0
  112. package/dist/specs/sql/usersList.catalog.js.map +1 -0
  113. package/dist/specs/sqlCatalogDefinition.d.ts +20 -0
  114. package/dist/specs/sqlCatalogDefinition.js +10 -0
  115. package/dist/specs/sqlCatalogDefinition.js.map +1 -0
  116. package/dist/utils/agentCli.d.ts +23 -0
  117. package/dist/utils/agentCli.js +84 -0
  118. package/dist/utils/agentCli.js.map +1 -0
  119. package/dist/utils/agentSafety.d.ts +4 -0
  120. package/dist/utils/agentSafety.js +50 -0
  121. package/dist/utils/agentSafety.js.map +1 -0
  122. package/dist/utils/agents.d.ts +31 -0
  123. package/dist/utils/agents.js +362 -0
  124. package/dist/utils/agents.js.map +1 -0
  125. package/dist/utils/collectSqlFiles.d.ts +9 -0
  126. package/dist/utils/collectSqlFiles.js +58 -0
  127. package/dist/utils/collectSqlFiles.js.map +1 -0
  128. package/dist/utils/connectionSummary.d.ts +3 -0
  129. package/dist/utils/connectionSummary.js +29 -0
  130. package/dist/utils/connectionSummary.js.map +1 -0
  131. package/dist/utils/dbConnection.d.ts +31 -0
  132. package/dist/utils/dbConnection.js +151 -0
  133. package/dist/utils/dbConnection.js.map +1 -0
  134. package/dist/utils/fs.d.ts +1 -0
  135. package/dist/utils/fs.js +12 -0
  136. package/dist/utils/fs.js.map +1 -0
  137. package/dist/utils/modelGenBinder.d.ts +8 -0
  138. package/dist/utils/modelGenBinder.js +31 -0
  139. package/dist/utils/modelGenBinder.js.map +1 -0
  140. package/dist/utils/modelGenRender.d.ts +29 -0
  141. package/dist/utils/modelGenRender.js +158 -0
  142. package/dist/utils/modelGenRender.js.map +1 -0
  143. package/dist/utils/modelGenScanner.d.ts +24 -0
  144. package/dist/utils/modelGenScanner.js +196 -0
  145. package/dist/utils/modelGenScanner.js.map +1 -0
  146. package/dist/utils/modelProbe.d.ts +14 -0
  147. package/dist/utils/modelProbe.js +121 -0
  148. package/dist/utils/modelProbe.js.map +1 -0
  149. package/dist/utils/normalizePulledSchema.d.ts +12 -0
  150. package/dist/utils/normalizePulledSchema.js +213 -0
  151. package/dist/utils/normalizePulledSchema.js.map +1 -0
  152. package/dist/utils/optionalDependencies.d.ts +43 -0
  153. package/dist/utils/optionalDependencies.js +134 -0
  154. package/dist/utils/optionalDependencies.js.map +1 -0
  155. package/dist/utils/pgDump.d.ts +12 -0
  156. package/dist/utils/pgDump.js +58 -0
  157. package/dist/utils/pgDump.js.map +1 -0
  158. package/dist/utils/queryFingerprint.d.ts +14 -0
  159. package/dist/utils/queryFingerprint.js +34 -0
  160. package/dist/utils/queryFingerprint.js.map +1 -0
  161. package/dist/utils/sqlCatalogDiscovery.d.ts +44 -0
  162. package/dist/utils/sqlCatalogDiscovery.js +166 -0
  163. package/dist/utils/sqlCatalogDiscovery.js.map +1 -0
  164. package/dist/utils/sqlCatalogStatements.d.ts +20 -0
  165. package/dist/utils/sqlCatalogStatements.js +23 -0
  166. package/dist/utils/sqlCatalogStatements.js.map +1 -0
  167. package/dist/utils/sqlLintHelpers.d.ts +18 -0
  168. package/dist/utils/sqlLintHelpers.js +270 -0
  169. package/dist/utils/sqlLintHelpers.js.map +1 -0
  170. package/dist/utils/telemetry.d.ts +71 -0
  171. package/dist/utils/telemetry.js +597 -0
  172. package/dist/utils/telemetry.js.map +1 -0
  173. package/dist/utils/typeMapper.d.ts +4 -0
  174. package/dist/utils/typeMapper.js +79 -0
  175. package/dist/utils/typeMapper.js.map +1 -0
  176. package/dist/utils/ztdProjectConfig.d.ts +41 -0
  177. package/dist/utils/ztdProjectConfig.js +182 -0
  178. package/dist/utils/ztdProjectConfig.js.map +1 -0
  179. package/package.json +19 -20
@@ -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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"}
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ export declare function buildProgram(): Command;
4
+ export declare function main(argv?: string[]): Promise<void>;
package/dist/index.js ADDED
@@ -0,0 +1,127 @@
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 agents install Materialize visible AGENTS.md files on demand
85
+ $ ztd ztd-config Generate TestRowMap types from DDL
86
+ $ ztd lint <path> Lint SQL files against the schema
87
+ $ ztd perf init Scaffold the opt-in perf sandbox
88
+ $ ztd perf run --query src/sql/report.sql --dry-run
89
+ $ ztd --telemetry --telemetry-export file --telemetry-file tmp/telemetry/perf-run.jsonl perf run --query src/sql/report.sql --dry-run
90
+ $ ztd query uses table public.users
91
+ $ ztd query uses column public.users.email --format json
92
+ $ ztd --telemetry --telemetry-export debug query uses table public.users
93
+
94
+ Common workflow:
95
+ 1. ztd init Scaffold the project
96
+ 2. ztd ztd-config Generate test types from DDL
97
+ 3. vitest run Run tests
98
+
99
+ After schema changes:
100
+ 1. Edit ztd/ddl/*.sql (or inspect an explicit target with ztd ddl pull --url <target>)
101
+ 2. ztd ztd-config Regenerate types
102
+ 3. vitest run Verify tests still pass
103
+
104
+ Documentation: https://github.com/mk3008/rawsql-ts`);
105
+ return program;
106
+ }
107
+ async function main(argv = process.argv) {
108
+ const program = buildProgram();
109
+ await program.parseAsync(argv);
110
+ await (0, telemetry_1.flushTelemetry)();
111
+ }
112
+ async function handleFatalError(error) {
113
+ // Keep a terminal root exception alongside child span failures so exporters can correlate
114
+ // the failing phase with the overall command outcome without inferring it from child spans.
115
+ (0, telemetry_1.recordException)(error, { scope: 'command-root' });
116
+ (0, telemetry_1.finishCommandSpan)('error');
117
+ await (0, telemetry_1.flushTelemetry)();
118
+ console.error(error instanceof Error ? error.message : error);
119
+ if (error instanceof checkContract_1.CheckContractRuntimeError || error instanceof testEvidence_1.TestEvidenceRuntimeError) {
120
+ process.exit(2);
121
+ }
122
+ process.exit(1);
123
+ }
124
+ if (require.main === module) {
125
+ void main().catch(handleFatalError);
126
+ }
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}