@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,14 @@
1
+ interface PgMetadataQueryClientLike {
2
+ query<T = unknown>(statement: string, values?: unknown[] | Record<string, unknown>): Promise<{
3
+ rows?: T[];
4
+ fields?: unknown[];
5
+ }>;
6
+ }
7
+ export interface ProbedColumn {
8
+ columnName: string;
9
+ typeName: string;
10
+ tsType: string;
11
+ }
12
+ export declare function probeQueryColumns(client: PgMetadataQueryClientLike, boundSql: string, params: unknown[]): Promise<ProbedColumn[]>;
13
+ export declare function buildProbeSql(boundSql: string): string;
14
+ export {};
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.probeQueryColumns = probeQueryColumns;
4
+ exports.buildProbeSql = buildProbeSql;
5
+ const directTypeMap = new Map([
6
+ ['int2', 'number'],
7
+ ['int4', 'number'],
8
+ ['int8', 'string'],
9
+ ['float4', 'number'],
10
+ ['float8', 'number'],
11
+ ['numeric', 'string'],
12
+ ['decimal', 'string'],
13
+ ['bool', 'boolean'],
14
+ ['text', 'string'],
15
+ ['varchar', 'string'],
16
+ ['bpchar', 'string'],
17
+ ['char', 'string'],
18
+ ['uuid', 'string'],
19
+ ['citext', 'string'],
20
+ ['name', 'string'],
21
+ ['date', 'string'],
22
+ ['timestamp', 'string'],
23
+ ['timestamptz', 'string'],
24
+ ['time', 'string'],
25
+ ['timetz', 'string'],
26
+ ['json', 'any'],
27
+ ['jsonb', 'any'],
28
+ ['bytea', 'Uint8Array']
29
+ ]);
30
+ async function probeQueryColumns(client, boundSql, params) {
31
+ const probeSql = buildProbeSql(boundSql);
32
+ const result = await client.query(probeSql, params);
33
+ const fields = normalizeFields(result.fields);
34
+ if (fields.length === 0) {
35
+ throw new Error('The probe query returned no column metadata.');
36
+ }
37
+ const typeRows = await loadPgTypes(client, fields.map((field) => field.dataTypeID));
38
+ return fields.map((field) => {
39
+ const typeName = resolvePgTypeName(field.dataTypeID, typeRows);
40
+ return {
41
+ columnName: field.name,
42
+ typeName,
43
+ tsType: mapPgTypeToTs(field.dataTypeID, typeRows)
44
+ };
45
+ });
46
+ }
47
+ function buildProbeSql(boundSql) {
48
+ const normalizedSql = boundSql.trim().replace(/(?:;\s*)+$/u, '');
49
+ if (!normalizedSql) {
50
+ throw new Error('The SQL probe source is empty.');
51
+ }
52
+ return `SELECT * FROM (${normalizedSql}) AS _ztd_type_probe LIMIT 0`;
53
+ }
54
+ function normalizeFields(fields) {
55
+ if (!Array.isArray(fields)) {
56
+ return [];
57
+ }
58
+ return fields
59
+ .filter((field) => typeof field === 'object' &&
60
+ field !== null &&
61
+ typeof field.name === 'string' &&
62
+ typeof field.dataTypeID === 'number');
63
+ }
64
+ async function loadPgTypes(client, initialOids) {
65
+ var _a;
66
+ const rows = new Map();
67
+ const pending = new Set(initialOids.filter((oid) => oid > 0));
68
+ while (pending.size > 0) {
69
+ const batch = Array.from(pending);
70
+ pending.clear();
71
+ const result = await client.query(`
72
+ SELECT oid, typname, typtype, typelem, typbasetype
73
+ FROM pg_type
74
+ WHERE oid = ANY($1::oid[])
75
+ `, [batch]);
76
+ for (const row of (_a = result.rows) !== null && _a !== void 0 ? _a : []) {
77
+ rows.set(row.oid, row);
78
+ if (row.typelem && row.typelem > 0 && !rows.has(row.typelem)) {
79
+ pending.add(row.typelem);
80
+ }
81
+ if (row.typbasetype && row.typbasetype > 0 && !rows.has(row.typbasetype)) {
82
+ pending.add(row.typbasetype);
83
+ }
84
+ }
85
+ }
86
+ return rows;
87
+ }
88
+ function resolvePgTypeName(oid, rows) {
89
+ const row = rows.get(oid);
90
+ if (!row) {
91
+ return 'unknown';
92
+ }
93
+ if (row.typtype === 'd' && row.typbasetype > 0) {
94
+ return resolvePgTypeName(row.typbasetype, rows);
95
+ }
96
+ if (row.typelem > 0 && row.typname.startsWith('_')) {
97
+ return `${resolvePgTypeName(row.typelem, rows)}[]`;
98
+ }
99
+ if (row.typtype === 'e') {
100
+ return row.typname;
101
+ }
102
+ return row.typname;
103
+ }
104
+ function mapPgTypeToTs(oid, rows) {
105
+ var _a;
106
+ const row = rows.get(oid);
107
+ if (!row) {
108
+ return 'unknown';
109
+ }
110
+ if (row.typtype === 'd' && row.typbasetype > 0) {
111
+ return mapPgTypeToTs(row.typbasetype, rows);
112
+ }
113
+ if (row.typelem > 0 && row.typname.startsWith('_')) {
114
+ return `${mapPgTypeToTs(row.typelem, rows)}[]`;
115
+ }
116
+ if (row.typtype === 'e') {
117
+ return 'string';
118
+ }
119
+ return (_a = directTypeMap.get(row.typname)) !== null && _a !== void 0 ? _a : 'unknown';
120
+ }
121
+ //# sourceMappingURL=modelProbe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelProbe.js","sourceRoot":"","sources":["../../src/utils/modelProbe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type StatementGroup = 'createSchema' | 'createTable' | 'view' | 'alterTable' | 'sequence' | 'index';
2
+ export interface NormalizedStatement {
3
+ schema: string;
4
+ objectName: string;
5
+ group: StatementGroup;
6
+ sql: string;
7
+ }
8
+ interface NormalizationOptions {
9
+ allowedSchemas?: Set<string>;
10
+ }
11
+ export declare function normalizePulledSchema(rawSql: string, options?: NormalizationOptions): Map<string, NormalizedStatement[]>;
12
+ export {};
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizePulledSchema = normalizePulledSchema;
4
+ const rawsql_ts_1 = require("rawsql-ts");
5
+ const SqlFormatterOptions = {
6
+ keywordCase: 'lower',
7
+ indentSize: 2,
8
+ indentChar: ' ',
9
+ newline: '\n',
10
+ commaBreak: 'after',
11
+ exportComment: 'none'
12
+ };
13
+ const ddlFormatter = new rawsql_ts_1.SqlFormatter(SqlFormatterOptions);
14
+ const groupOrder = {
15
+ createSchema: 0,
16
+ createTable: 1,
17
+ view: 2,
18
+ alterTable: 3,
19
+ sequence: 4,
20
+ index: 5
21
+ };
22
+ function normalizePulledSchema(rawSql, options = {}) {
23
+ var _a;
24
+ const cleanedSql = stripPgDumpNoise(rawSql);
25
+ const queries = rawsql_ts_1.MultiQuerySplitter.split(cleanedSql).queries;
26
+ const schemaMap = new Map();
27
+ // Iterate over each statement to normalize, bucket by schema, and honor any active filters.
28
+ for (const query of queries) {
29
+ const statementText = query.sql.trim();
30
+ if (!statementText || shouldSkipStatement(statementText)) {
31
+ continue;
32
+ }
33
+ const normalized = processStatement(statementText);
34
+ if (!normalized) {
35
+ continue;
36
+ }
37
+ if (options.allowedSchemas && options.allowedSchemas.size > 0 && !options.allowedSchemas.has(normalized.schema)) {
38
+ continue;
39
+ }
40
+ const bucket = (_a = schemaMap.get(normalized.schema)) !== null && _a !== void 0 ? _a : [];
41
+ bucket.push(normalized);
42
+ schemaMap.set(normalized.schema, bucket);
43
+ }
44
+ // Ensure every included schema has a CREATE SCHEMA statement even if pg_dump omitted it.
45
+ for (const [schema, statements] of schemaMap) {
46
+ if (statements.some((entry) => entry.group === 'createSchema')) {
47
+ continue;
48
+ }
49
+ statements.push({
50
+ schema,
51
+ objectName: schema,
52
+ group: 'createSchema',
53
+ sql: finalizeRawStatement(`create schema ${schema}`)
54
+ });
55
+ }
56
+ // Ensure the statements for each schema are returned in a deterministic order.
57
+ for (const statements of schemaMap.values()) {
58
+ statements.sort((a, b) => {
59
+ const primary = groupOrder[a.group] - groupOrder[b.group];
60
+ if (primary !== 0) {
61
+ return primary;
62
+ }
63
+ return a.objectName.localeCompare(b.objectName);
64
+ });
65
+ }
66
+ return schemaMap;
67
+ }
68
+ function stripPgDumpNoise(rawSql) {
69
+ // Remove pg_dump meta commands and standalone comments so the parser only sees SQL statements.
70
+ const normalizedNewlines = rawSql.replace(/\r\n/g, '\n');
71
+ return normalizedNewlines
72
+ .split('\n')
73
+ .filter((line) => {
74
+ const trimmed = line.trim();
75
+ if (!trimmed) {
76
+ return true;
77
+ }
78
+ if (trimmed.startsWith('\\') || trimmed.startsWith('--')) {
79
+ return false;
80
+ }
81
+ return true;
82
+ })
83
+ .join('\n');
84
+ }
85
+ function shouldSkipStatement(statement) {
86
+ // Strip handles comments and meta commands earlier, so skip only runtime statements we still want to ignore.
87
+ const lower = statement.toLowerCase();
88
+ if (lower.startsWith('set ') || lower.startsWith('select ')) {
89
+ return true;
90
+ }
91
+ if (lower.startsWith('comment ') || lower.startsWith('drop ')) {
92
+ return true;
93
+ }
94
+ if (lower.startsWith('create extension') || lower.startsWith('create type')) {
95
+ return true;
96
+ }
97
+ return false;
98
+ }
99
+ function processStatement(statement) {
100
+ const lower = statement.toLowerCase();
101
+ // Route statements by their leading keywords to dedicated handlers.
102
+ if (lower.startsWith('create schema')) {
103
+ return buildCreateSchemaStatement(statement);
104
+ }
105
+ if (lower.startsWith('create view') || lower.startsWith('create or replace view')) {
106
+ return buildViewStatement(statement);
107
+ }
108
+ if (lower.startsWith('create table') || lower.startsWith('create temporary table')) {
109
+ return buildAstStatement(statement, 'createTable', (ast) => ast.tableName);
110
+ }
111
+ if (lower.startsWith('alter table')) {
112
+ return buildAstStatement(statement, 'alterTable', (ast) => ast.table);
113
+ }
114
+ if (lower.startsWith('create index') || lower.startsWith('create unique index')) {
115
+ return buildAstStatement(statement, 'index', (ast) => ast.tableName);
116
+ }
117
+ if (lower.startsWith('create sequence')) {
118
+ return buildAstStatement(statement, 'sequence', (ast) => ast.sequenceName);
119
+ }
120
+ if (lower.startsWith('alter sequence')) {
121
+ return buildAstStatement(statement, 'sequence', (ast) => ast.sequenceName);
122
+ }
123
+ return null;
124
+ }
125
+ function buildCreateSchemaStatement(statement) {
126
+ // SqlParser does not yet support CREATE SCHEMA statements, so fall back to regex parsing.
127
+ const match = statement.match(/create\s+schema\s+(?:if\s+not\s+exists\s+)?(.+?)(?:\s|;|$)/i);
128
+ if (!match) {
129
+ return null;
130
+ }
131
+ const schemaName = normalizeIdentifier(match[1].trim());
132
+ return {
133
+ schema: schemaName,
134
+ objectName: schemaName,
135
+ group: 'createSchema',
136
+ sql: finalizeRawStatement(statement)
137
+ };
138
+ }
139
+ function buildViewStatement(statement) {
140
+ // SqlParser is not able to parse CREATE VIEW statements yet, so use a regex fallback.
141
+ const match = statement.match(/create\s+(?:or\s+replace\s+)?view\s+(.+?)\s+as\b/i);
142
+ if (!match) {
143
+ return null;
144
+ }
145
+ const namePart = match[1].trim().split(/\s*\(/)[0].trim();
146
+ const { schema, object } = splitQualifiedIdentifier(namePart);
147
+ return {
148
+ schema,
149
+ objectName: object,
150
+ group: 'view',
151
+ sql: finalizeRawStatement(statement)
152
+ };
153
+ }
154
+ function buildAstStatement(statement, group, qualifier) {
155
+ try {
156
+ // Parse the statement with rawsql-ts and convert it back to formatted SQL.
157
+ const ast = rawsql_ts_1.SqlParser.parse(statement);
158
+ const qualifierName = qualifier(ast);
159
+ const { schema, object } = extractQualifiedInfo(qualifierName);
160
+ return {
161
+ group,
162
+ schema,
163
+ objectName: object,
164
+ sql: formatAstStatement(ast)
165
+ };
166
+ }
167
+ catch {
168
+ return null;
169
+ }
170
+ }
171
+ function formatAstStatement(component) {
172
+ const { formattedSql } = ddlFormatter.format(component);
173
+ const trimmed = formattedSql.trim();
174
+ return trimmed.endsWith(';') ? trimmed : `${trimmed};`;
175
+ }
176
+ function finalizeRawStatement(statement) {
177
+ const trimmed = statement.trim();
178
+ return trimmed.endsWith(';') ? trimmed : `${trimmed};`;
179
+ }
180
+ function extractQualifiedInfo(name) {
181
+ // Convert the qualified components into lowercase, unquoted tokens for deterministic grouping.
182
+ const schemaValue = name.namespaces && name.namespaces.length > 0 ? name.namespaces[name.namespaces.length - 1] : null;
183
+ const schema = schemaValue ? normalizeIdentifier(schemaValue) : 'public';
184
+ const object = normalizeIdentifier(name.name);
185
+ return { schema, object };
186
+ }
187
+ function normalizeIdentifier(value) {
188
+ const raw = typeof value === 'string' ? value : value instanceof rawsql_ts_1.RawString ? value.value : value.name;
189
+ return raw.replace(/^"|"$/g, '').toLowerCase();
190
+ }
191
+ function splitQualifiedIdentifier(input) {
192
+ var _a, _b;
193
+ const pattern = /^\s*(?:"([^"]+)"|([^".\s]+))(?:\.(?:"([^"]+)"|([^".\s]+)))?\s*$/;
194
+ const match = input.match(pattern);
195
+ let schema = 'public';
196
+ let object = input;
197
+ if (match) {
198
+ const firstPart = (_a = match[1]) !== null && _a !== void 0 ? _a : match[2];
199
+ const secondPart = (_b = match[3]) !== null && _b !== void 0 ? _b : match[4];
200
+ if (secondPart) {
201
+ schema = firstPart !== null && firstPart !== void 0 ? firstPart : 'public';
202
+ object = secondPart;
203
+ }
204
+ else if (firstPart) {
205
+ object = firstPart;
206
+ }
207
+ }
208
+ return {
209
+ schema: normalizeIdentifier(schema),
210
+ object: normalizeIdentifier(object)
211
+ };
212
+ }
213
+ //# sourceMappingURL=normalizePulledSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizePulledSchema.js","sourceRoot":"","sources":["../../src/utils/normalizePulledSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export type TestkitCoreModule = typeof import('@rawsql-ts/testkit-core');
2
+ export interface PgTestkitClientLike {
3
+ query<T = unknown>(statement: string, values?: unknown[] | Record<string, unknown>): Promise<{
4
+ rows?: T[];
5
+ fields?: unknown[];
6
+ }>;
7
+ close(): Promise<unknown>;
8
+ }
9
+ export interface AdapterNodePgModule {
10
+ createPgTestkitClient(options: Record<string, unknown>): PgTestkitClientLike;
11
+ }
12
+ export interface PgClientLike {
13
+ connect(): Promise<unknown>;
14
+ query<T = unknown>(statement: string, values?: unknown[]): Promise<{
15
+ rows?: T[];
16
+ fields?: unknown[];
17
+ }>;
18
+ end(): Promise<unknown>;
19
+ }
20
+ export interface PgModule {
21
+ Client: new (options: {
22
+ connectionString: string;
23
+ connectionTimeoutMillis?: number;
24
+ }) => PgClientLike;
25
+ }
26
+ export interface PostgresContainerLike {
27
+ getConnectionUri(): string;
28
+ stop(): Promise<unknown>;
29
+ }
30
+ export interface PostgresContainerBuilderLike {
31
+ withDatabase(database: string): PostgresContainerBuilderLike;
32
+ withUsername(username: string): PostgresContainerBuilderLike;
33
+ withPassword(password: string): PostgresContainerBuilderLike;
34
+ start(): Promise<PostgresContainerLike>;
35
+ }
36
+ export interface PostgresContainerModule {
37
+ PostgreSqlContainer: new (image?: string) => PostgresContainerBuilderLike;
38
+ }
39
+ export declare function clearOptionalDependencyCache(): void;
40
+ export declare function ensureTestkitCoreModule(): Promise<TestkitCoreModule>;
41
+ export declare function ensureAdapterNodePgModule(): Promise<AdapterNodePgModule>;
42
+ export declare function ensurePgModule(): Promise<PgModule>;
43
+ export declare function ensurePostgresContainerModule(): Promise<PostgresContainerModule>;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.clearOptionalDependencyCache = clearOptionalDependencyCache;
40
+ exports.ensureTestkitCoreModule = ensureTestkitCoreModule;
41
+ exports.ensureAdapterNodePgModule = ensureAdapterNodePgModule;
42
+ exports.ensurePgModule = ensurePgModule;
43
+ exports.ensurePostgresContainerModule = ensurePostgresContainerModule;
44
+ const node_path_1 = __importDefault(require("node:path"));
45
+ const node_fs_1 = require("node:fs");
46
+ const node_module_1 = require("node:module");
47
+ const node_url_1 = require("node:url");
48
+ const moduleCache = new Map();
49
+ const currentDirPath = resolveCurrentDirPath();
50
+ const repositoryRoot = findRepositoryRoot(currentDirPath);
51
+ async function loadOptionalModule(cacheKey, loader, description, installHint) {
52
+ if (moduleCache.has(cacheKey)) {
53
+ return moduleCache.get(cacheKey);
54
+ }
55
+ const moduleLoader = loader()
56
+ .catch((error) => {
57
+ moduleCache.delete(cacheKey);
58
+ const installNote = installHint ? ` Install it via \`${installHint}\`.` : '';
59
+ const original = error instanceof Error ? ` (${error.message})` : '';
60
+ throw new Error(`${description}${installNote}${original}`);
61
+ });
62
+ moduleCache.set(cacheKey, moduleLoader);
63
+ return moduleLoader;
64
+ }
65
+ function clearOptionalDependencyCache() {
66
+ moduleCache.clear();
67
+ }
68
+ function resolveCurrentDirPath() {
69
+ // Evaluate import.meta.url at runtime so this module can still be compiled in CJS-oriented ts-node flows.
70
+ const importMetaUrl = tryGetImportMetaUrl();
71
+ if (importMetaUrl) {
72
+ return node_path_1.default.dirname((0, node_url_1.fileURLToPath)(importMetaUrl));
73
+ }
74
+ if (typeof __dirname === 'string') {
75
+ return __dirname;
76
+ }
77
+ throw new Error('Failed to resolve current module directory for optional dependency loading.');
78
+ }
79
+ function tryGetImportMetaUrl() {
80
+ try {
81
+ return Function('return import.meta.url')();
82
+ }
83
+ catch {
84
+ return undefined;
85
+ }
86
+ }
87
+ function findRepositoryRoot(startDir) {
88
+ let cursor = startDir;
89
+ while (true) {
90
+ // Treat the monorepo root as the first directory containing both workspace marker files.
91
+ const hasWorkspaceFile = (0, node_fs_1.existsSync)(node_path_1.default.join(cursor, 'pnpm-workspace.yaml'));
92
+ const hasPackageJson = (0, node_fs_1.existsSync)(node_path_1.default.join(cursor, 'package.json'));
93
+ if (hasWorkspaceFile && hasPackageJson) {
94
+ return cursor;
95
+ }
96
+ const parentDir = node_path_1.default.dirname(cursor);
97
+ if (parentDir === cursor) {
98
+ throw new Error('Failed to locate repository root while resolving optional dependencies.');
99
+ }
100
+ cursor = parentDir;
101
+ }
102
+ }
103
+ function requireFromWorkspace(specifier) {
104
+ const require = (0, node_module_1.createRequire)(node_path_1.default.join(repositoryRoot, 'package.json'));
105
+ return require(specifier);
106
+ }
107
+ async function loadAdapterNodePgModule() {
108
+ try {
109
+ return requireFromWorkspace('@rawsql-ts/adapter-node-pg');
110
+ }
111
+ catch (error) {
112
+ // Workspace tests can run before adapter build output exists, so use source entrypoint.
113
+ const workspaceAdapterSrc = node_path_1.default.join(repositoryRoot, 'packages/adapters/adapter-node-pg/src/index.ts');
114
+ try {
115
+ return (await Promise.resolve(`${(0, node_url_1.pathToFileURL)(workspaceAdapterSrc).href}`).then(s => __importStar(require(s))));
116
+ }
117
+ catch {
118
+ throw error;
119
+ }
120
+ }
121
+ }
122
+ async function ensureTestkitCoreModule() {
123
+ return loadOptionalModule('@rawsql-ts/testkit-core', () => Promise.resolve().then(() => __importStar(require('@rawsql-ts/testkit-core'))), 'This command requires @rawsql-ts/testkit-core so fixtures and schema metadata are available.', 'pnpm add -D @rawsql-ts/testkit-core');
124
+ }
125
+ async function ensureAdapterNodePgModule() {
126
+ return loadOptionalModule('@rawsql-ts/adapter-node-pg', loadAdapterNodePgModule, 'A database adapter (for example @rawsql-ts/adapter-node-pg) is required to execute the rewritten SQL.', 'pnpm add -D @rawsql-ts/adapter-node-pg');
127
+ }
128
+ async function ensurePgModule() {
129
+ return loadOptionalModule('pg', () => Promise.resolve().then(() => __importStar(require('pg'))), 'The SQL lint command needs a PostgreSQL driver such as pg.', 'pnpm add -D pg');
130
+ }
131
+ async function ensurePostgresContainerModule() {
132
+ return loadOptionalModule('@testcontainers/postgresql', () => Promise.resolve().then(() => __importStar(require('@testcontainers/postgresql'))), 'ztd lint wants to spin up a disposable Postgres container via @testcontainers/postgresql.', 'pnpm add -D @testcontainers/postgresql');
133
+ }
134
+ //# sourceMappingURL=optionalDependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionalDependencies.js","sourceRoot":"","sources":["../../src/utils/optionalDependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { DbConnectionContext } from './dbConnection';
2
+ export interface PgDumpOptions {
3
+ url: string;
4
+ pgDumpPath?: string;
5
+ pgDumpShell?: boolean;
6
+ extraArgs?: string[];
7
+ connectionContext?: DbConnectionContext;
8
+ }
9
+ /**
10
+ * Wraps `pg_dump` in schema-only mode for the given connection URL and returns the captured DDL output.
11
+ */
12
+ export declare function runPgDump(options: PgDumpOptions): string;
@@ -0,0 +1,58 @@
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.runPgDump = runPgDump;
7
+ const node_child_process_1 = require("node:child_process");
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const connectionSummary_1 = require("./connectionSummary");
10
+ /**
11
+ * Wraps `pg_dump` in schema-only mode for the given connection URL and returns the captured DDL output.
12
+ */
13
+ function runPgDump(options) {
14
+ var _a, _b, _c, _d, _e, _f;
15
+ const executable = (_b = (_a = options.pgDumpPath) !== null && _a !== void 0 ? _a : process.env.PG_DUMP_PATH) !== null && _b !== void 0 ? _b : 'pg_dump';
16
+ const useShell = Boolean(options.pgDumpShell);
17
+ const args = [
18
+ '--schema-only',
19
+ '--no-owner',
20
+ '--no-privileges',
21
+ ...((_c = options.extraArgs) !== null && _c !== void 0 ? _c : []),
22
+ '--dbname',
23
+ options.url
24
+ ];
25
+ const result = (0, node_child_process_1.spawnSync)(executable, args, {
26
+ encoding: 'utf8',
27
+ stdio: ['ignore', 'pipe', 'pipe'],
28
+ // Allow wrapper scripts or compound commands such as "docker exec <container> pg_dump".
29
+ shell: useShell
30
+ });
31
+ const connectionNote = (0, connectionSummary_1.describeConnectionContext)(options.connectionContext);
32
+ const extraArgsNote = ((_d = options.extraArgs) === null || _d === void 0 ? void 0 : _d.length) ? ` (extra args: ${options.extraArgs.join(' ')})` : '';
33
+ if (result.error) {
34
+ const windowsHint = node_os_1.default.platform() === 'win32'
35
+ ? ' On Windows, ensure "C:\\Program Files\\PostgreSQL\\<version>\\bin" is on PATH, or pass --pg-dump-shell with a wrapper command such as "docker exec <container> pg_dump".'
36
+ : '';
37
+ if (isExecutableMissing(result.error, (_e = result.stderr) === null || _e === void 0 ? void 0 : _e.toString())) {
38
+ throw new Error(`pg_dump executable not found (${executable}). Install PostgreSQL or pass --pg-dump-path to point at the binary.${windowsHint}`);
39
+ }
40
+ throw new Error(`Failed to launch pg_dump (${executable})${connectionNote}: ${(_f = result.error.message) !== null && _f !== void 0 ? _f : 'Unknown error'}${extraArgsNote}${useShell ? ' (shell mode enabled)' : ''}`);
41
+ }
42
+ if (result.status !== 0 || !result.stdout) {
43
+ const stderr = result.stderr ? result.stderr.toString().trim() : 'Unknown error';
44
+ throw new Error(`pg_dump reported an error${connectionNote}: ${stderr}${extraArgsNote}`);
45
+ }
46
+ return result.stdout;
47
+ }
48
+ function isExecutableMissing(error, stderr) {
49
+ if (error.code === 'ENOENT') {
50
+ return true;
51
+ }
52
+ if (!stderr) {
53
+ return false;
54
+ }
55
+ const normalized = stderr.toLowerCase();
56
+ return normalized.includes('not recognized') || normalized.includes('command not found');
57
+ }
58
+ //# sourceMappingURL=pgDump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pgDump.js","sourceRoot":"","sources":["../../src/utils/pgDump.ts"],"names":[],"mappings":";;;;;AAgBA,8BA6CC;AA7DD,2DAA+C;AAC/C,sDAAyB;AAEzB,2DAAgE;AAUhE;;GAEG;AACH,SAAgB,SAAS,CAAC,OAAsB;;IAC9C,MAAM,UAAU,GAAG,MAAA,MAAA,OAAO,CAAC,UAAU,mCAAI,OAAO,CAAC,GAAG,CAAC,YAAY,mCAAI,SAAS,CAAC;IAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG;QACX,eAAe;QACf,YAAY;QACZ,iBAAiB;QACjB,GAAG,CAAC,MAAA,OAAO,CAAC,SAAS,mCAAI,EAAE,CAAC;QAC5B,UAAU;QACV,OAAO,CAAC,GAAG;KACZ,CAAC;IAEF,MAAM,MAAM,GAAG,IAAA,8BAAS,EAAC,UAAU,EAAE,IAAI,EAAE;QACzC,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,wFAAwF;QACxF,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAA,6CAAyB,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,CAAA,MAAA,OAAO,CAAC,SAAS,0CAAE,MAAM,EAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,WAAW,GACf,iBAAE,CAAC,QAAQ,EAAE,KAAK,OAAO;YACvB,CAAC,CAAC,2KAA2K;YAC7K,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAA,MAAM,CAAC,MAAM,0CAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,iCAAiC,UAAU,uEAAuE,WAAW,EAAE,CAChI,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CACb,6BAA6B,UAAU,IAAI,cAAc,KAAK,MAAA,MAAM,CAAC,KAAK,CAAC,OAAO,mCAAI,eAAe,GAAG,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,CAClK,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,4BAA4B,cAAc,KAAK,MAAM,GAAG,aAAa,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA4B,EAAE,MAAe;IACxE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAC3F,CAAC"}