@rawsql-ts/ztd-cli 0.13.0

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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +178 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/commands/ddl.d.ts +7 -0
  5. package/dist/commands/ddl.js +118 -0
  6. package/dist/commands/ddl.js.map +1 -0
  7. package/dist/commands/diff.d.ts +10 -0
  8. package/dist/commands/diff.js +38 -0
  9. package/dist/commands/diff.js.map +1 -0
  10. package/dist/commands/genConfigCommand.d.ts +2 -0
  11. package/dist/commands/genConfigCommand.js +36 -0
  12. package/dist/commands/genConfigCommand.js.map +1 -0
  13. package/dist/commands/genEntities.d.ts +6 -0
  14. package/dist/commands/genEntities.js +50 -0
  15. package/dist/commands/genEntities.js.map +1 -0
  16. package/dist/commands/init.d.ts +34 -0
  17. package/dist/commands/init.js +467 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/options.d.ts +9 -0
  20. package/dist/commands/options.js +48 -0
  21. package/dist/commands/options.js.map +1 -0
  22. package/dist/commands/pull.d.ts +10 -0
  23. package/dist/commands/pull.js +105 -0
  24. package/dist/commands/pull.js.map +1 -0
  25. package/dist/commands/ztdConfig.d.ts +22 -0
  26. package/dist/commands/ztdConfig.js +190 -0
  27. package/dist/commands/ztdConfig.js.map +1 -0
  28. package/dist/commands/ztdConfigCommand.d.ts +5 -0
  29. package/dist/commands/ztdConfigCommand.js +146 -0
  30. package/dist/commands/ztdConfigCommand.js.map +1 -0
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.js +20 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/utils/agents.d.ts +1 -0
  35. package/dist/utils/agents.js +31 -0
  36. package/dist/utils/agents.js.map +1 -0
  37. package/dist/utils/collectSqlFiles.d.ts +9 -0
  38. package/dist/utils/collectSqlFiles.js +58 -0
  39. package/dist/utils/collectSqlFiles.js.map +1 -0
  40. package/dist/utils/connectionSummary.d.ts +3 -0
  41. package/dist/utils/connectionSummary.js +29 -0
  42. package/dist/utils/connectionSummary.js.map +1 -0
  43. package/dist/utils/dbConnection.d.ts +29 -0
  44. package/dist/utils/dbConnection.js +210 -0
  45. package/dist/utils/dbConnection.js.map +1 -0
  46. package/dist/utils/fs.d.ts +1 -0
  47. package/dist/utils/fs.js +12 -0
  48. package/dist/utils/fs.js.map +1 -0
  49. package/dist/utils/normalizePulledSchema.d.ts +12 -0
  50. package/dist/utils/normalizePulledSchema.js +201 -0
  51. package/dist/utils/normalizePulledSchema.js.map +1 -0
  52. package/dist/utils/pgDump.d.ts +11 -0
  53. package/dist/utils/pgDump.js +55 -0
  54. package/dist/utils/pgDump.js.map +1 -0
  55. package/dist/utils/sqliteAffinity.d.ts +5 -0
  56. package/dist/utils/sqliteAffinity.js +39 -0
  57. package/dist/utils/sqliteAffinity.js.map +1 -0
  58. package/dist/utils/typeMapper.d.ts +4 -0
  59. package/dist/utils/typeMapper.js +76 -0
  60. package/dist/utils/typeMapper.js.map +1 -0
  61. package/dist/utils/ztdProjectConfig.d.ts +37 -0
  62. package/dist/utils/ztdProjectConfig.js +161 -0
  63. package/dist/utils/ztdProjectConfig.js.map +1 -0
  64. package/package.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/commands/options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { DbConnectionContext } from '../utils/dbConnection';
2
+ export interface PullSchemaOptions {
3
+ url: string;
4
+ out: string;
5
+ pgDumpPath?: string;
6
+ schemas?: string[];
7
+ tables?: string[];
8
+ connectionContext?: DbConnectionContext;
9
+ }
10
+ export declare function runPullSchema(options: PullSchemaOptions): void;
@@ -0,0 +1,105 @@
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.runPullSchema = runPullSchema;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const pgDump_1 = require("../utils/pgDump");
10
+ const fs_1 = require("../utils/fs");
11
+ const normalizePulledSchema_1 = require("../utils/normalizePulledSchema");
12
+ function runPullSchema(options) {
13
+ var _a, _b;
14
+ // Canonicalize CLI filters before invoking pg_dump so later steps can rely on consistent casing.
15
+ const schemaFilters = ((_a = options.schemas) !== null && _a !== void 0 ? _a : []).map((value) => normalizeSchemaName(value));
16
+ const tableFilters = ((_b = options.tables) !== null && _b !== void 0 ? _b : []).map((value) => parseTableSpecifier(value));
17
+ // Build the schema set that should survive the normalization pass.
18
+ const allowedSchemas = buildAllowedSchemas(schemaFilters, tableFilters);
19
+ // Invoke pg_dump once with the normalized filters so only the desired objects are exported.
20
+ const ddlSql = (0, pgDump_1.runPgDump)({
21
+ url: options.url,
22
+ pgDumpPath: options.pgDumpPath,
23
+ extraArgs: buildPgDumpArguments(schemaFilters, tableFilters),
24
+ connectionContext: options.connectionContext
25
+ });
26
+ // Normalize and bucket the pg_dump output while respecting the requested schema set.
27
+ const normalizedMap = (0, normalizePulledSchema_1.normalizePulledSchema)(ddlSql, {
28
+ allowedSchemas: allowedSchemas.size ? allowedSchemas : undefined
29
+ });
30
+ if (normalizedMap.size === 0) {
31
+ // Help callers realize their filters may have excluded everything from the dump.
32
+ const filterHints = [];
33
+ if (schemaFilters.length) {
34
+ filterHints.push(`--schema ${schemaFilters.join(', ')}`);
35
+ }
36
+ if (tableFilters.length) {
37
+ filterHints.push(`--table ${tableFilters.map((table) => table.original).join(', ')}`);
38
+ }
39
+ const hint = filterHints.length ? ` Filters applied: ${filterHints.join('; ')}.` : '';
40
+ throw new Error(`The dump did not contain any supported DDL statements.${hint} Verify the schema/table filters match your database.`);
41
+ }
42
+ const outDir = node_path_1.default.resolve(options.out);
43
+ (0, fs_1.ensureDirectory)(outDir);
44
+ // Remove the legacy schema.sql snapshot only when it is still present.
45
+ const legacySchemaFile = node_path_1.default.join(outDir, 'schema.sql');
46
+ if ((0, node_fs_1.existsSync)(legacySchemaFile)) {
47
+ (0, node_fs_1.rmSync)(legacySchemaFile, { force: true });
48
+ }
49
+ const schemasDir = node_path_1.default.join(outDir, 'schemas');
50
+ if ((0, node_fs_1.existsSync)(schemasDir)) {
51
+ (0, node_fs_1.rmSync)(schemasDir, { recursive: true, force: true });
52
+ }
53
+ // Persist each schema snapshot directly under the DDL directory for easier discovery.
54
+ for (const [schema, statements] of normalizedMap) {
55
+ const filePath = node_path_1.default.join(outDir, `${sanitizeSchemaFileName(schema)}.sql`);
56
+ (0, node_fs_1.writeFileSync)(filePath, buildSchemaFile(statements), 'utf8');
57
+ console.log(`Wrote normalized schema for ${schema} at ${filePath}`);
58
+ }
59
+ }
60
+ function buildPgDumpArguments(schemaFilters, tableFilters) {
61
+ // Allow callers to target specific schemas or tables when invoking pg_dump.
62
+ const args = [];
63
+ for (const schema of schemaFilters) {
64
+ args.push('--schema', schema);
65
+ }
66
+ for (const table of tableFilters) {
67
+ args.push('--table', table.original);
68
+ }
69
+ return args;
70
+ }
71
+ function buildAllowedSchemas(schemaFilters, tableFilters) {
72
+ // Combine the schemas referenced via filters so the normalizer can limit output.
73
+ const combined = new Set(schemaFilters);
74
+ for (const table of tableFilters) {
75
+ combined.add(table.schema);
76
+ }
77
+ return combined;
78
+ }
79
+ function buildSchemaFile(statements) {
80
+ // Join the sorted statements with blank lines so the file stays readable.
81
+ const body = statements.map((statement) => statement.sql).join('\n\n');
82
+ return `${body}\n`;
83
+ }
84
+ function sanitizeSchemaFileName(schema) {
85
+ const sanitized = schema.replace(/[^a-z0-9_-]/g, '_').replace(/^_+|_+$/g, '');
86
+ // Fall back to a safe default when all characters were stripped away.
87
+ return sanitized || 'schema';
88
+ }
89
+ function normalizeSchemaName(value) {
90
+ // Trim, unquote, and lowercase schema names to keep filter comparison predictable.
91
+ return value.trim().replace(/^"|"$/g, '').toLowerCase();
92
+ }
93
+ function parseTableSpecifier(value) {
94
+ var _a, _b;
95
+ const trimmed = value.trim();
96
+ const qualifiedPattern = /^\s*(?:"([^"]+)"|([^".\s]+))\.(?:"([^"]+)"|([^".\s]+))\s*$/;
97
+ const match = trimmed.match(qualifiedPattern);
98
+ // Resolve the schema portion, falling back to public when the specifier is unqualified.
99
+ const schema = match ? (_b = (_a = match[1]) !== null && _a !== void 0 ? _a : match[2]) !== null && _b !== void 0 ? _b : 'public' : 'public';
100
+ return {
101
+ schema: normalizeSchemaName(schema),
102
+ original: trimmed
103
+ };
104
+ }
105
+ //# sourceMappingURL=pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { TableNameResolver } from '@rawsql-ts/testkit-core';
2
+ import { SqlSource } from '../utils/collectSqlFiles';
3
+ export interface ZtdConfigGenerationOptions {
4
+ directories: string[];
5
+ extensions: string[];
6
+ out: string;
7
+ defaultSchema?: string;
8
+ searchPath?: string[];
9
+ }
10
+ export interface ColumnMetadata {
11
+ name: string;
12
+ typeName?: string;
13
+ isNullable: boolean;
14
+ }
15
+ export interface TableMetadata {
16
+ name: string;
17
+ testRowInterfaceName: string;
18
+ columns: ColumnMetadata[];
19
+ }
20
+ export declare function runGenerateZtdConfig(options: ZtdConfigGenerationOptions): void;
21
+ export declare function snapshotTableMetadata(sources: SqlSource[], resolver?: TableNameResolver): TableMetadata[];
22
+ export declare function renderZtdConfigFile(tables: TableMetadata[]): string;
@@ -0,0 +1,190 @@
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.runGenerateZtdConfig = runGenerateZtdConfig;
7
+ exports.snapshotTableMetadata = snapshotTableMetadata;
8
+ exports.renderZtdConfigFile = renderZtdConfigFile;
9
+ const node_fs_1 = require("node:fs");
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const rawsql_ts_1 = require("rawsql-ts");
12
+ const testkit_core_1 = require("@rawsql-ts/testkit-core");
13
+ const collectSqlFiles_1 = require("../utils/collectSqlFiles");
14
+ const typeMapper_1 = require("../utils/typeMapper");
15
+ const fs_1 = require("../utils/fs");
16
+ function runGenerateZtdConfig(options) {
17
+ const sources = (0, collectSqlFiles_1.collectSqlFiles)(options.directories, options.extensions);
18
+ if (sources.length === 0) {
19
+ throw new Error(`No SQL files were discovered under ${options.directories.join(', ')}`);
20
+ }
21
+ // Build a resolver that honors the configured schema/search path so the generated rows stay canonical.
22
+ const resolver = new testkit_core_1.TableNameResolver({
23
+ defaultSchema: options.defaultSchema,
24
+ searchPath: options.searchPath
25
+ });
26
+ const tables = snapshotTableMetadata(sources, resolver);
27
+ if (tables.length === 0) {
28
+ throw new Error('The provided DDL sources did not contain any CREATE TABLE statements.');
29
+ }
30
+ const output = renderZtdConfigFile(tables);
31
+ (0, fs_1.ensureDirectory)(node_path_1.default.dirname(options.out));
32
+ (0, node_fs_1.writeFileSync)(options.out, output, 'utf8');
33
+ console.log(`Generated ${tables.length} ZTD test rows at ${options.out}`);
34
+ }
35
+ function snapshotTableMetadata(sources, resolver) {
36
+ var _a;
37
+ const registry = new Map();
38
+ // Track tables by their SQL name so each definition is emitted only once.
39
+ for (const source of sources) {
40
+ // Split multi-statement files so each CREATE TABLE can be processed independently.
41
+ const batch = rawsql_ts_1.MultiQuerySplitter.split(source.sql);
42
+ for (const query of batch.queries) {
43
+ if (query.isEmpty) {
44
+ continue;
45
+ }
46
+ let ast;
47
+ try {
48
+ const parsed = rawsql_ts_1.SqlParser.parse(query.sql);
49
+ if (parsed instanceof rawsql_ts_1.CreateTableQuery) {
50
+ ast = parsed;
51
+ }
52
+ }
53
+ catch (_error) {
54
+ continue;
55
+ }
56
+ if (!ast) {
57
+ continue;
58
+ }
59
+ const definition = (0, rawsql_ts_1.createTableDefinitionFromCreateTableQuery)(ast);
60
+ // Normalize table names so the generated config mirrors resolver expectations.
61
+ const canonicalName = (_a = resolver === null || resolver === void 0 ? void 0 : resolver.resolve(definition.name)) !== null && _a !== void 0 ? _a : definition.name;
62
+ if (registry.has(canonicalName)) {
63
+ continue;
64
+ }
65
+ // Match column metadata by name so AST-driven nullability honors both DDL and constraints.
66
+ const columns = ast.columns.map((column) => {
67
+ const columnMeta = definition.columns.find((candidate) => candidate.name === column.name.name);
68
+ if (!columnMeta) {
69
+ throw new Error(`Missing metadata for ${column.name.name} in ${definition.name}`);
70
+ }
71
+ const constraintKinds = new Set(column.constraints.map((constraint) => constraint.kind));
72
+ const hasNotNull = constraintKinds.has('not-null') || constraintKinds.has('primary-key');
73
+ return {
74
+ name: column.name.name,
75
+ typeName: columnMeta.typeName,
76
+ isNullable: !hasNotNull
77
+ };
78
+ });
79
+ registry.set(canonicalName, {
80
+ name: canonicalName,
81
+ testRowInterfaceName: buildTestRowInterfaceName(canonicalName),
82
+ columns
83
+ });
84
+ }
85
+ }
86
+ return Array.from(registry.values()).sort((a, b) => a.name.localeCompare(b.name));
87
+ }
88
+ function buildTestRowInterfaceName(tableName) {
89
+ var _a;
90
+ // Preserve schema and table segments when Pascal-casing to keep names unique.
91
+ const namespaceParts = tableName.split('.');
92
+ const pascalize = (segment) => segment
93
+ .split(/[^A-Za-z0-9]+/)
94
+ .filter(Boolean)
95
+ .map((token) => {
96
+ const lower = token.toLowerCase();
97
+ return lower.charAt(0).toUpperCase() + lower.slice(1);
98
+ })
99
+ .join('');
100
+ const pascalSegments = namespaceParts.map((segment) => pascalize(segment)).filter(Boolean);
101
+ const combined = pascalSegments.join('');
102
+ const normalized = combined.replace(/^[0-9]+/, '');
103
+ // Guarantee the interface name starts with a letter or underscore.
104
+ const prefix = /^[A-Za-z_]/.test((_a = normalized.charAt(0)) !== null && _a !== void 0 ? _a : '') ? normalized : `_${normalized}`;
105
+ return `${prefix || 'Table'}TestRow`;
106
+ }
107
+ function renderZtdConfigFile(tables) {
108
+ const header = [
109
+ '// GENERATED FILE. DO NOT EDIT.',
110
+ '// ZTD TEST ROW MAP',
111
+ '// This file is synchronized with DDL using ztd-config.',
112
+ '',
113
+ "import type { FixtureRow, TableFixture, TableSchemaDefinition } from '@rawsql-ts/testkit-core';",
114
+ ''
115
+ ].join('\n');
116
+ const entries = tables
117
+ .map((table) => ` '${table.name}': ${table.testRowInterfaceName};`)
118
+ .join('\n');
119
+ // Build each table interface while preserving the column order from the DDL.
120
+ const definitions = tables
121
+ .map((table) => {
122
+ const fields = table.columns
123
+ .map((column) => {
124
+ const baseType = (0, typeMapper_1.mapSqlTypeToTs)(column.typeName, `${table.name}.${column.name}`);
125
+ const tsType = column.isNullable ? `${baseType} | null` : baseType;
126
+ return ` ${column.name}: ${tsType};`;
127
+ })
128
+ .join('\n');
129
+ return `export interface ${table.testRowInterfaceName} extends FixtureRow {\n${fields}\n}`;
130
+ })
131
+ .join('\n\n');
132
+ // Assemble a schema map that mirrors TestRowMap so tests can reuse canonical affinity metadata.
133
+ const schemaEntries = tables
134
+ .map((table) => {
135
+ const columnDefinitions = table.columns
136
+ .map((column) => {
137
+ var _a;
138
+ const typeLiteral = JSON.stringify((_a = column.typeName) !== null && _a !== void 0 ? _a : '');
139
+ return ` ${column.name}: ${typeLiteral},`;
140
+ })
141
+ .join('\n');
142
+ return ` '${table.name}': {\n columns: {\n${columnDefinitions}\n }\n },`;
143
+ })
144
+ .join('\n');
145
+ const footer = [
146
+ '',
147
+ 'export type TestRow<K extends keyof TestRowMap> = TestRowMap[K];',
148
+ 'export type ZtdRowShapes = TestRowMap;',
149
+ 'export type ZtdTableName = keyof TestRowMap;',
150
+ '',
151
+ 'export type ZtdTableSchemas = Record<ZtdTableName, TableSchemaDefinition>;',
152
+ '',
153
+ 'export const tableSchemas: ZtdTableSchemas = {',
154
+ `${schemaEntries}`,
155
+ '};',
156
+ '',
157
+ 'export function tableSchema<K extends ZtdTableName>(tableName: K): TableSchemaDefinition {',
158
+ ' return tableSchemas[tableName];',
159
+ '}',
160
+ '',
161
+ 'export type ZtdTableFixture<K extends ZtdTableName> = TableFixture & {',
162
+ ' tableName: K;',
163
+ ' rows: ZtdRowShapes[K][];',
164
+ ' schema: TableSchemaDefinition;',
165
+ '};',
166
+ '',
167
+ 'export interface ZtdConfig {',
168
+ ' tables: ZtdTableName[];',
169
+ '}',
170
+ '',
171
+ 'export function tableFixture<K extends ZtdTableName>(',
172
+ ' tableName: K,',
173
+ ' rows: ZtdRowShapes[K][],',
174
+ ' schema?: TableSchemaDefinition',
175
+ '): TableFixture {',
176
+ ' return { tableName, rows, schema };',
177
+ '}',
178
+ '',
179
+ 'export function tableFixtureWithSchema<K extends ZtdTableName>(',
180
+ ' tableName: K,',
181
+ ' rows: ZtdRowShapes[K][]',
182
+ '): ZtdTableFixture<K> {',
183
+ ' // Always pair fixture rows with the canonical schema generated from DDL.',
184
+ ' return { tableName, rows, schema: tableSchemas[tableName] };',
185
+ '}',
186
+ ''
187
+ ].join('\n');
188
+ return `${header}export interface TestRowMap {\n${entries}\n}\n\n${definitions}\n${footer}`;
189
+ }
190
+ //# sourceMappingURL=ztdConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ztdConfig.js","sourceRoot":"","sources":["../../src/commands/ztdConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Registers the `ztd-config` CLI command, which generates the canonical ZTD TestRowMap from DDL sources.
4
+ */
5
+ export declare function registerZtdConfigCommand(program: Command): void;
@@ -0,0 +1,146 @@
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
+ const chokidar_1 = __importDefault(require("chokidar"));
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const options_1 = require("./options");
11
+ const ztdProjectConfig_1 = require("../utils/ztdProjectConfig");
12
+ const ztdConfig_1 = require("./ztdConfig");
13
+ const fs_1 = require("../utils/fs");
14
+ const WATCH_DEBOUNCE_MS = 150;
15
+ function renderZtdLayoutGeneratedFile(config) {
16
+ // Derive the canonical ztd root directory from the configured DDL path.
17
+ const ddlDir = config.ddlDir.replace(/\\/g, '/');
18
+ const ztdRootDir = node_path_1.default.posix.dirname(ddlDir);
19
+ // Keep default sibling directories deterministic for downstream tooling.
20
+ const enumsDir = node_path_1.default.posix.join(ztdRootDir, 'enums');
21
+ const domainSpecsDir = node_path_1.default.posix.join(ztdRootDir, 'domain-specs');
22
+ return [
23
+ '// GENERATED FILE. DO NOT EDIT.',
24
+ '',
25
+ 'export default {',
26
+ ` ztdRootDir: ${JSON.stringify(ztdRootDir)},`,
27
+ ` ddlDir: ${JSON.stringify(ddlDir)},`,
28
+ ` enumsDir: ${JSON.stringify(enumsDir)},`,
29
+ ` domainSpecsDir: ${JSON.stringify(domainSpecsDir)},`,
30
+ '};',
31
+ ''
32
+ ].join('\n');
33
+ }
34
+ function writeZtdLayoutFile(layoutFilePath, config) {
35
+ // Ensure the generated folder exists before emitting the layout snapshot.
36
+ (0, fs_1.ensureDirectory)(node_path_1.default.dirname(layoutFilePath));
37
+ (0, node_fs_1.writeFileSync)(layoutFilePath, renderZtdLayoutGeneratedFile(config), 'utf8');
38
+ }
39
+ /**
40
+ * Registers the `ztd-config` CLI command, which generates the canonical ZTD TestRowMap from DDL sources.
41
+ */
42
+ function registerZtdConfigCommand(program) {
43
+ program
44
+ .command('ztd-config')
45
+ .description('Generate the canonical ZTD TestRowMap from DDL sources')
46
+ .option('--ddl-dir <directory>', 'DDL directory to scan (repeatable)', options_1.collectDirectories, [])
47
+ .option('--extensions <list>', 'Comma-separated extensions to include', options_1.parseExtensions, options_1.DEFAULT_EXTENSIONS)
48
+ .option('--out <file>', 'Destination TypeScript file for generated config')
49
+ .option('--default-schema <schema>', 'Override ddl.defaultSchema stored in ztd.config.json')
50
+ .option('--search-path <list>', 'Comma-separated schema search path entries', options_1.parseCsvList)
51
+ .option('--watch', 'Watch DDL files and regenerate when schema changes', false)
52
+ .action(async (options) => {
53
+ var _a, _b, _c;
54
+ const projectConfig = (0, ztdProjectConfig_1.loadZtdProjectConfig)();
55
+ const directories = (0, options_1.normalizeDirectoryList)(options.ddlDir, (_a = projectConfig.ddlDir) !== null && _a !== void 0 ? _a : options_1.DEFAULT_DDL_DIRECTORY);
56
+ const extensions = (0, options_1.resolveExtensions)(options.extensions, options_1.DEFAULT_EXTENSIONS);
57
+ 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');
58
+ const output = (_c = options.out) !== null && _c !== void 0 ? _c : defaultOut;
59
+ const layoutOut = node_path_1.default.join(node_path_1.default.dirname(output), 'ztd-layout.generated.ts');
60
+ const ddlOverrides = { ...projectConfig.ddl };
61
+ let shouldUpdateConfig = false;
62
+ if (options.defaultSchema) {
63
+ ddlOverrides.defaultSchema = options.defaultSchema;
64
+ shouldUpdateConfig = true;
65
+ }
66
+ if (options.searchPath && options.searchPath.length > 0) {
67
+ ddlOverrides.searchPath = options.searchPath;
68
+ shouldUpdateConfig = true;
69
+ }
70
+ if (shouldUpdateConfig) {
71
+ (0, ztdProjectConfig_1.writeZtdProjectConfig)(process.cwd(), { ddl: ddlOverrides });
72
+ console.log('[notice] ztd.config.json ddl schema settings updated.');
73
+ }
74
+ const generationOptions = {
75
+ directories,
76
+ extensions,
77
+ out: output,
78
+ defaultSchema: ddlOverrides.defaultSchema,
79
+ searchPath: ddlOverrides.searchPath
80
+ };
81
+ await (0, ztdConfig_1.runGenerateZtdConfig)(generationOptions);
82
+ const layoutConfig = { ...projectConfig, ddl: ddlOverrides };
83
+ writeZtdLayoutFile(layoutOut, layoutConfig);
84
+ if (options.watch) {
85
+ console.log(`[watch] Initial generation complete: ${generationOptions.out}`);
86
+ await watchZtdConfig(generationOptions, layoutOut, layoutConfig);
87
+ }
88
+ });
89
+ }
90
+ async function watchZtdConfig(options, layoutOut, layoutConfig) {
91
+ const cwd = process.cwd();
92
+ const patterns = options.directories.flatMap((dir) => options.extensions.map((extension) => node_path_1.default.join(dir, '**', `*${extension}`)));
93
+ // Only the configured output file (`options.out`) is overwritten while watching DDL changes.
94
+ const watcher = chokidar_1.default.watch(patterns, {
95
+ ignoreInitial: true,
96
+ awaitWriteFinish: { stabilityThreshold: 80, pollInterval: 20 }
97
+ });
98
+ console.log('[watch] Watching DDL files for changes (Ctrl+C to stop)...');
99
+ let debounceTimer = null;
100
+ let scheduledPath = null;
101
+ const scheduleReload = (changedPath) => {
102
+ scheduledPath = changedPath;
103
+ if (debounceTimer) {
104
+ clearTimeout(debounceTimer);
105
+ }
106
+ debounceTimer = setTimeout(() => {
107
+ debounceTimer = null;
108
+ void executeReload(scheduledPath);
109
+ scheduledPath = null;
110
+ }, WATCH_DEBOUNCE_MS);
111
+ };
112
+ const executeReload = async (changedPath) => {
113
+ const relativePath = changedPath ? node_path_1.default.relative(cwd, changedPath) : 'unknown';
114
+ console.log(`[watch] DDL changed: ${relativePath}`);
115
+ try {
116
+ await (0, ztdConfig_1.runGenerateZtdConfig)(options);
117
+ writeZtdLayoutFile(layoutOut, layoutConfig);
118
+ console.log(`[watch] Updated: ${options.out}`);
119
+ }
120
+ catch (error) {
121
+ console.error(`[watch] Failed to regenerate ${options.out}: ${error instanceof Error ? error.message : String(error)}`);
122
+ }
123
+ };
124
+ watcher.on('add', scheduleReload);
125
+ watcher.on('change', scheduleReload);
126
+ watcher.on('unlink', scheduleReload);
127
+ await new Promise((resolve) => {
128
+ const stop = async () => {
129
+ console.log('[watch] Shutting down ztd-config watcher...');
130
+ watcher.off('add', scheduleReload);
131
+ watcher.off('change', scheduleReload);
132
+ watcher.off('unlink', scheduleReload);
133
+ if (debounceTimer) {
134
+ clearTimeout(debounceTimer);
135
+ debounceTimer = null;
136
+ }
137
+ await watcher.close();
138
+ process.off('SIGINT', stop);
139
+ resolve();
140
+ };
141
+ process.once('SIGINT', () => {
142
+ void stop();
143
+ });
144
+ });
145
+ }
146
+ //# 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,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const ddl_1 = require("./commands/ddl");
6
+ const init_1 = require("./commands/init");
7
+ const ztdConfigCommand_1 = require("./commands/ztdConfigCommand");
8
+ async function main() {
9
+ const program = new commander_1.Command();
10
+ program.name('ztd').description('Zero Table Dependency scaffolding and DDL helpers');
11
+ (0, init_1.registerInitCommand)(program);
12
+ (0, ztdConfigCommand_1.registerZtdConfigCommand)(program);
13
+ (0, ddl_1.registerDdlCommands)(program);
14
+ await program.parseAsync(process.argv);
15
+ }
16
+ main().catch((error) => {
17
+ console.error(error instanceof Error ? error.message : error);
18
+ process.exit(1);
19
+ });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,wCAAqD;AACrD,0CAAsD;AACtD,kEAAuE;AAEvE,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,mDAAmD,CAAC,CAAC;IAErF,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;IAC7B,IAAA,2CAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,yBAAmB,EAAC,OAAO,CAAC,CAAC;IAE7B,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function copyAgentsTemplate(projectRoot: string): string | null;
@@ -0,0 +1,31 @@
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.copyAgentsTemplate = copyAgentsTemplate;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const fs_1 = require("./fs");
10
+ const TEMPLATE_NAME = 'AGENTS.md';
11
+ const TARGET_FILES = ['AGENTS.md', 'AGENTS_ztd.md'];
12
+ function copyAgentsTemplate(projectRoot) {
13
+ // Use the shared template bundle so generated AGENTS.md matches the distributable templates directory.
14
+ const templatePath = node_path_1.default.resolve(__dirname, '..', '..', 'templates', TEMPLATE_NAME);
15
+ if (!(0, node_fs_1.existsSync)(templatePath)) {
16
+ return null;
17
+ }
18
+ const contents = (0, node_fs_1.readFileSync)(templatePath, 'utf8');
19
+ // Try to materialize the template without overwriting any pre-existing AGENTS guidance.
20
+ for (const fileName of TARGET_FILES) {
21
+ const targetPath = node_path_1.default.join(projectRoot, fileName);
22
+ if ((0, node_fs_1.existsSync)(targetPath)) {
23
+ continue;
24
+ }
25
+ (0, fs_1.ensureDirectory)(node_path_1.default.dirname(targetPath));
26
+ (0, node_fs_1.writeFileSync)(targetPath, contents, 'utf8');
27
+ return targetPath;
28
+ }
29
+ return null;
30
+ }
31
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/utils/agents.ts"],"names":[],"mappings":";;;;;AAOA,gDAsBC;AA7BD,qCAAkE;AAClE,0DAA6B;AAC7B,6BAAuC;AAEvC,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAEpD,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,uGAAuG;IACvG,MAAM,YAAY,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IACrF,IAAI,CAAC,IAAA,oBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAEpD,wFAAwF;IACxF,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,IAAA,oBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,IAAA,oBAAe,EAAC,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1C,IAAA,uBAAa,EAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface SqlSource {
2
+ path: string;
3
+ sql: string;
4
+ }
5
+ /**
6
+ * Scans the supplied directories (recursively) for SQL files matching the configured extensions and aggregates their contents.
7
+ * @returns Sorted list of `SqlSource` records containing workspace-relative paths and SQL text for each discovered file.
8
+ */
9
+ export declare function collectSqlFiles(directories: string[], extensions: string[]): SqlSource[];