@rawsql-ts/ztd-cli 0.17.0 → 0.19.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 (242) hide show
  1. package/README.md +532 -366
  2. package/package.json +26 -15
  3. package/templates/.editorconfig +16 -16
  4. package/templates/.prettierignore +2 -2
  5. package/templates/.prettierrc +24 -24
  6. package/templates/AGENTS.md +30 -52
  7. package/templates/CONTEXT.md +11 -0
  8. package/templates/CONTEXT.webapi.md +11 -0
  9. package/templates/DESIGN.md +17 -0
  10. package/templates/DEV_NOTES.md +14 -0
  11. package/templates/PROMPT_DOGFOOD.webapi.md +49 -0
  12. package/templates/README.md +46 -14
  13. package/templates/README.webapi.md +38 -0
  14. package/templates/scripts/local-source-guard.mjs +189 -0
  15. package/templates/src/AGENTS.md +26 -26
  16. package/templates/src/application/AGENTS.md +15 -0
  17. package/templates/src/application/README.md +6 -0
  18. package/templates/src/catalog/AGENTS.md +28 -37
  19. package/templates/src/catalog/runtime/AGENTS.md +28 -75
  20. package/templates/src/catalog/runtime/_coercions.local-source.ts +30 -0
  21. package/templates/src/catalog/runtime/_coercions.ts +30 -1
  22. package/templates/src/catalog/runtime/_smoke.runtime.ts +21 -21
  23. package/templates/src/catalog/specs/AGENTS.md +41 -48
  24. package/templates/src/catalog/specs/_smoke.spec.arktype.ts +21 -21
  25. package/templates/src/catalog/specs/_smoke.spec.zod.ts +20 -20
  26. package/templates/src/db/sql-client-adapters.ts +32 -0
  27. package/templates/src/db/sql-client.ts +24 -24
  28. package/templates/src/domain/AGENTS.md +15 -0
  29. package/templates/src/domain/README.md +6 -0
  30. package/templates/src/infrastructure/AGENTS.md +14 -0
  31. package/templates/src/infrastructure/README.md +6 -0
  32. package/templates/src/infrastructure/db/AGENTS.md +14 -0
  33. package/templates/src/infrastructure/db/sql-client-adapters.ts +34 -0
  34. package/templates/{dist/ztd-cli/templates/src → src/infrastructure}/db/sql-client.ts +3 -3
  35. package/templates/src/infrastructure/persistence/AGENTS.md +18 -0
  36. package/templates/src/infrastructure/persistence/README.md +8 -0
  37. package/templates/src/infrastructure/persistence/repositories/AGENTS.md +17 -0
  38. package/templates/src/infrastructure/persistence/repositories/tables/AGENTS.md +20 -0
  39. package/templates/src/infrastructure/persistence/repositories/tables/README.md +5 -0
  40. package/templates/src/infrastructure/persistence/repositories/views/AGENTS.md +16 -0
  41. package/templates/src/infrastructure/persistence/repositories/views/README.md +5 -0
  42. package/templates/src/infrastructure/telemetry/AGENTS.md +14 -0
  43. package/templates/src/infrastructure/telemetry/consoleRepositoryTelemetry.ts +66 -0
  44. package/templates/src/infrastructure/telemetry/repositoryTelemetry.ts +26 -0
  45. package/templates/src/infrastructure/telemetry/types.ts +48 -0
  46. package/templates/src/jobs/AGENTS.md +25 -26
  47. package/templates/src/jobs/README.md +2 -2
  48. package/templates/src/local/sql-contract.ts +1 -0
  49. package/templates/src/presentation/AGENTS.md +15 -0
  50. package/templates/src/presentation/http/AGENTS.md +15 -0
  51. package/templates/src/presentation/http/README.md +6 -0
  52. package/templates/src/repositories/AGENTS.md +30 -118
  53. package/templates/src/repositories/tables/AGENTS.md +29 -94
  54. package/templates/src/repositories/tables/README.md +5 -3
  55. package/templates/src/repositories/views/AGENTS.md +25 -25
  56. package/templates/src/repositories/views/README.md +5 -3
  57. package/templates/src/sql/AGENTS.md +30 -77
  58. package/templates/src/sql/README.md +5 -5
  59. package/templates/tests/AGENTS.md +29 -62
  60. package/templates/tests/generated/AGENTS.md +23 -16
  61. package/templates/tests/smoke.test.ts +25 -5
  62. package/templates/tests/smoke.validation.test.ts +34 -34
  63. package/templates/tests/support/AGENTS.md +24 -26
  64. package/templates/tests/support/global-setup.ts +15 -15
  65. package/templates/tests/support/testkit-client.ts +14 -14
  66. package/templates/tests/support/testkit-client.webapi.ts +14 -0
  67. package/templates/tests/ztd-layout.generated.ts +6 -6
  68. package/templates/tsconfig.json +15 -15
  69. package/templates/vitest.config.ts +13 -13
  70. package/templates/ztd/AGENTS.md +23 -18
  71. package/templates/ztd/README.md +5 -5
  72. package/templates/ztd/ddl/AGENTS.md +26 -34
  73. package/templates/ztd/ddl/demo.sql +74 -74
  74. package/LICENSE +0 -21
  75. package/dist/commands/ddl.d.ts +0 -7
  76. package/dist/commands/ddl.js +0 -118
  77. package/dist/commands/ddl.js.map +0 -1
  78. package/dist/commands/diff.d.ts +0 -10
  79. package/dist/commands/diff.js +0 -38
  80. package/dist/commands/diff.js.map +0 -1
  81. package/dist/commands/genEntities.d.ts +0 -6
  82. package/dist/commands/genEntities.js +0 -50
  83. package/dist/commands/genEntities.js.map +0 -1
  84. package/dist/commands/init.d.ts +0 -79
  85. package/dist/commands/init.js +0 -1083
  86. package/dist/commands/init.js.map +0 -1
  87. package/dist/commands/lint.d.ts +0 -59
  88. package/dist/commands/lint.js +0 -358
  89. package/dist/commands/lint.js.map +0 -1
  90. package/dist/commands/options.d.ts +0 -9
  91. package/dist/commands/options.js +0 -48
  92. package/dist/commands/options.js.map +0 -1
  93. package/dist/commands/pull.d.ts +0 -10
  94. package/dist/commands/pull.js +0 -105
  95. package/dist/commands/pull.js.map +0 -1
  96. package/dist/commands/ztdConfig.d.ts +0 -23
  97. package/dist/commands/ztdConfig.js +0 -216
  98. package/dist/commands/ztdConfig.js.map +0 -1
  99. package/dist/commands/ztdConfigCommand.d.ts +0 -5
  100. package/dist/commands/ztdConfigCommand.js +0 -157
  101. package/dist/commands/ztdConfigCommand.js.map +0 -1
  102. package/dist/index.d.ts +0 -2
  103. package/dist/index.js +0 -22
  104. package/dist/index.js.map +0 -1
  105. package/dist/utils/agents.d.ts +0 -1
  106. package/dist/utils/agents.js +0 -48
  107. package/dist/utils/agents.js.map +0 -1
  108. package/dist/utils/collectSqlFiles.d.ts +0 -9
  109. package/dist/utils/collectSqlFiles.js +0 -58
  110. package/dist/utils/collectSqlFiles.js.map +0 -1
  111. package/dist/utils/connectionSummary.d.ts +0 -3
  112. package/dist/utils/connectionSummary.js +0 -29
  113. package/dist/utils/connectionSummary.js.map +0 -1
  114. package/dist/utils/dbConnection.d.ts +0 -29
  115. package/dist/utils/dbConnection.js +0 -210
  116. package/dist/utils/dbConnection.js.map +0 -1
  117. package/dist/utils/fs.d.ts +0 -1
  118. package/dist/utils/fs.js +0 -12
  119. package/dist/utils/fs.js.map +0 -1
  120. package/dist/utils/normalizePulledSchema.d.ts +0 -12
  121. package/dist/utils/normalizePulledSchema.js +0 -213
  122. package/dist/utils/normalizePulledSchema.js.map +0 -1
  123. package/dist/utils/optionalDependencies.d.ts +0 -35
  124. package/dist/utils/optionalDependencies.js +0 -96
  125. package/dist/utils/optionalDependencies.js.map +0 -1
  126. package/dist/utils/pgDump.d.ts +0 -11
  127. package/dist/utils/pgDump.js +0 -55
  128. package/dist/utils/pgDump.js.map +0 -1
  129. package/dist/utils/sqlLintHelpers.d.ts +0 -18
  130. package/dist/utils/sqlLintHelpers.js +0 -270
  131. package/dist/utils/sqlLintHelpers.js.map +0 -1
  132. package/dist/utils/typeMapper.d.ts +0 -4
  133. package/dist/utils/typeMapper.js +0 -76
  134. package/dist/utils/typeMapper.js.map +0 -1
  135. package/dist/utils/ztdProjectConfig.d.ts +0 -40
  136. package/dist/utils/ztdProjectConfig.js +0 -167
  137. package/dist/utils/ztdProjectConfig.js.map +0 -1
  138. package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.d.ts +0 -38
  139. package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.js +0 -117
  140. package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.js.map +0 -1
  141. package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.d.ts +0 -4
  142. package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.js +0 -71
  143. package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.js.map +0 -1
  144. package/templates/dist/drivers/pg-testkit/src/index.d.ts +0 -5
  145. package/templates/dist/drivers/pg-testkit/src/index.js +0 -11
  146. package/templates/dist/drivers/pg-testkit/src/index.js.map +0 -1
  147. package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.d.ts +0 -3
  148. package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.js +0 -79
  149. package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.js.map +0 -1
  150. package/templates/dist/drivers/pg-testkit/src/types.d.ts +0 -69
  151. package/templates/dist/drivers/pg-testkit/src/types.js +0 -3
  152. package/templates/dist/drivers/pg-testkit/src/types.js.map +0 -1
  153. package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.d.ts +0 -15
  154. package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.js +0 -34
  155. package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.js.map +0 -1
  156. package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.d.ts +0 -12
  157. package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.js +0 -53
  158. package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.js.map +0 -1
  159. package/templates/dist/mapper-core/src/index.d.ts +0 -160
  160. package/templates/dist/mapper-core/src/index.js +0 -637
  161. package/templates/dist/mapper-core/src/index.js.map +0 -1
  162. package/templates/dist/testkit-core/src/errors/index.d.ts +0 -49
  163. package/templates/dist/testkit-core/src/errors/index.js +0 -111
  164. package/templates/dist/testkit-core/src/errors/index.js.map +0 -1
  165. package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.d.ts +0 -5
  166. package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.js +0 -29
  167. package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.js.map +0 -1
  168. package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.d.ts +0 -37
  169. package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.js +0 -182
  170. package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.js.map +0 -1
  171. package/templates/dist/testkit-core/src/fixtures/FixtureProvider.d.ts +0 -20
  172. package/templates/dist/testkit-core/src/fixtures/FixtureProvider.js +0 -121
  173. package/templates/dist/testkit-core/src/fixtures/FixtureProvider.js.map +0 -1
  174. package/templates/dist/testkit-core/src/fixtures/FixtureStore.d.ts +0 -51
  175. package/templates/dist/testkit-core/src/fixtures/FixtureStore.js +0 -199
  176. package/templates/dist/testkit-core/src/fixtures/FixtureStore.js.map +0 -1
  177. package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.d.ts +0 -10
  178. package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.js +0 -28
  179. package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.js.map +0 -1
  180. package/templates/dist/testkit-core/src/fixtures/TableNameResolver.d.ts +0 -18
  181. package/templates/dist/testkit-core/src/fixtures/TableNameResolver.js +0 -80
  182. package/templates/dist/testkit-core/src/fixtures/TableNameResolver.js.map +0 -1
  183. package/templates/dist/testkit-core/src/fixtures/ddlLint.d.ts +0 -59
  184. package/templates/dist/testkit-core/src/fixtures/ddlLint.js +0 -489
  185. package/templates/dist/testkit-core/src/fixtures/ddlLint.js.map +0 -1
  186. package/templates/dist/testkit-core/src/fixtures/naming.d.ts +0 -1
  187. package/templates/dist/testkit-core/src/fixtures/naming.js +0 -6
  188. package/templates/dist/testkit-core/src/fixtures/naming.js.map +0 -1
  189. package/templates/dist/testkit-core/src/index.d.ts +0 -17
  190. package/templates/dist/testkit-core/src/index.js +0 -47
  191. package/templates/dist/testkit-core/src/index.js.map +0 -1
  192. package/templates/dist/testkit-core/src/logger/NoopLogger.d.ts +0 -8
  193. package/templates/dist/testkit-core/src/logger/NoopLogger.js +0 -16
  194. package/templates/dist/testkit-core/src/logger/NoopLogger.js.map +0 -1
  195. package/templates/dist/testkit-core/src/provider/TestkitProvider.d.ts +0 -57
  196. package/templates/dist/testkit-core/src/provider/TestkitProvider.js +0 -149
  197. package/templates/dist/testkit-core/src/provider/TestkitProvider.js.map +0 -1
  198. package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.d.ts +0 -43
  199. package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.js +0 -473
  200. package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.js.map +0 -1
  201. package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.d.ts +0 -9
  202. package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.js +0 -38
  203. package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.js.map +0 -1
  204. package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.d.ts +0 -42
  205. package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.js +0 -298
  206. package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.js.map +0 -1
  207. package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.d.ts +0 -12
  208. package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.js +0 -63
  209. package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.js.map +0 -1
  210. package/templates/dist/testkit-core/src/types/index.d.ts +0 -69
  211. package/templates/dist/testkit-core/src/types/index.js +0 -3
  212. package/templates/dist/testkit-core/src/types/index.js.map +0 -1
  213. package/templates/dist/testkit-core/src/utils/queryHelpers.d.ts +0 -28
  214. package/templates/dist/testkit-core/src/utils/queryHelpers.js +0 -81
  215. package/templates/dist/testkit-core/src/utils/queryHelpers.js.map +0 -1
  216. package/templates/dist/writer-core/src/index.d.ts +0 -34
  217. package/templates/dist/writer-core/src/index.js +0 -115
  218. package/templates/dist/writer-core/src/index.js.map +0 -1
  219. package/templates/dist/ztd-cli/templates/src/db/sql-client.d.ts +0 -20
  220. package/templates/dist/ztd-cli/templates/src/db/sql-client.js +0 -3
  221. package/templates/dist/ztd-cli/templates/src/db/sql-client.js.map +0 -1
  222. package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.d.ts +0 -36
  223. package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.js +0 -85
  224. package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.js.map +0 -1
  225. package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.d.ts +0 -20
  226. package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.js +0 -33
  227. package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.js.map +0 -1
  228. package/templates/dist/ztd-cli/templates/tests/support/global-setup.d.ts +0 -10
  229. package/templates/dist/ztd-cli/templates/tests/support/global-setup.js +0 -29
  230. package/templates/dist/ztd-cli/templates/tests/support/global-setup.js.map +0 -1
  231. package/templates/dist/ztd-cli/templates/tests/support/testkit-client.d.ts +0 -66
  232. package/templates/dist/ztd-cli/templates/tests/support/testkit-client.js +0 -552
  233. package/templates/dist/ztd-cli/templates/tests/support/testkit-client.js.map +0 -1
  234. package/templates/dist/ztd-cli/templates/tests/user-profiles.test.d.ts +0 -1
  235. package/templates/dist/ztd-cli/templates/tests/user-profiles.test.js +0 -82
  236. package/templates/dist/ztd-cli/templates/tests/user-profiles.test.js.map +0 -1
  237. package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.d.ts +0 -1
  238. package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.js +0 -29
  239. package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.js.map +0 -1
  240. package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.d.ts +0 -7
  241. package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.js +0 -10
  242. package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.js.map +0 -1
@@ -1,473 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResultSelectRewriter = void 0;
4
- const rawsql_ts_1 = require("rawsql-ts");
5
- const rawsql_ts_2 = require("rawsql-ts");
6
- const rawsql_ts_3 = require("rawsql-ts");
7
- /** Rewrites CRUD/SELECT statements into fixture-backed SELECTs while ignoring unsupported DDL. */
8
- class ResultSelectRewriter {
9
- constructor(fixtures, missingFixtureStrategy = 'error', formatterOptions, tableNameResolver) {
10
- this.fixtures = fixtures;
11
- this.missingFixtureStrategy = missingFixtureStrategy;
12
- this.tableNameResolver = tableNameResolver;
13
- this.visitedComponents = new WeakSet();
14
- this.formatter = new rawsql_ts_1.SqlFormatter({
15
- preset: 'postgres',
16
- newline: ' ',
17
- withClauseStyle: 'full-oneline',
18
- ...(formatterOptions !== null && formatterOptions !== void 0 ? formatterOptions : {}),
19
- });
20
- }
21
- rewrite(sql, scopedFixtures) {
22
- const inputs = this.prepareInputs(scopedFixtures);
23
- const normalized = this.normalizeParameters(sql);
24
- const parsedStatements = this.parseStatements(normalized.sql);
25
- const rewrittenStatements = [];
26
- let sourceCommand = null;
27
- let isCountWrapper = false;
28
- for (const statement of parsedStatements) {
29
- const converted = this.convertStatement(statement, inputs);
30
- if (!converted.sql) {
31
- continue;
32
- }
33
- // Capture metadata from the first rewritten statement to normalize the final result.
34
- if (!sourceCommand && converted.sourceCommand) {
35
- sourceCommand = converted.sourceCommand;
36
- isCountWrapper = converted.isCountWrapper;
37
- }
38
- rewrittenStatements.push(converted.sql);
39
- }
40
- if (rewrittenStatements.length === 0) {
41
- return { sql: '', fixturesApplied: [], sourceCommand: null, isCountWrapper: false };
42
- }
43
- return {
44
- sql: this.restoreParameters(rewrittenStatements.join('; '), normalized.placeholders),
45
- fixturesApplied: inputs.fixturesApplied,
46
- sourceCommand,
47
- isCountWrapper,
48
- };
49
- }
50
- prepareInputs(scopedFixtures) {
51
- const snapshot = this.fixtures.resolve(scopedFixtures);
52
- return {
53
- fixtureTables: snapshot.fixtureTables,
54
- tableDefinitions: snapshot.tableDefinitions,
55
- fixturesApplied: snapshot.fixturesApplied,
56
- };
57
- }
58
- parseStatements(sql) {
59
- // Accept multiple statements so tests can exercise sequential CRUD flows in one call.
60
- return rawsql_ts_1.SqlParser.parseMany(sql, { skipEmptyStatements: true });
61
- }
62
- convertStatement(statement, inputs) {
63
- this.visitedComponents = new WeakSet();
64
- // Convert CRUD + SELECT into result-bearing SELECT statements while ignoring unsupported DDL.
65
- const converted = this.convertToResultSelect(statement, inputs);
66
- if (!converted.sql) {
67
- return { sql: null, sourceCommand: null, isCountWrapper: false };
68
- }
69
- this.rewriteSchemaQualifiers(converted.sql, inputs.fixtureTables);
70
- const formattedSql = this.formatter.format(converted.sql).formattedSql.trim();
71
- return { sql: formattedSql, sourceCommand: converted.sourceCommand, isCountWrapper: converted.isCountWrapper };
72
- }
73
- convertToResultSelect(statement, inputs) {
74
- const options = {
75
- fixtureTables: inputs.fixtureTables,
76
- tableDefinitions: inputs.tableDefinitions,
77
- missingFixtureStrategy: this.missingFixtureStrategy,
78
- };
79
- if (statement instanceof rawsql_ts_1.InsertQuery) {
80
- return {
81
- sql: rawsql_ts_1.InsertResultSelectConverter.toSelectQuery(statement, options),
82
- sourceCommand: 'insert',
83
- isCountWrapper: !statement.returningClause,
84
- };
85
- }
86
- if (statement instanceof rawsql_ts_1.UpdateQuery) {
87
- return {
88
- sql: rawsql_ts_1.UpdateResultSelectConverter.toSelectQuery(statement, options),
89
- sourceCommand: 'update',
90
- isCountWrapper: !statement.returningClause,
91
- };
92
- }
93
- if (statement instanceof rawsql_ts_1.DeleteQuery) {
94
- return {
95
- sql: rawsql_ts_1.DeleteResultSelectConverter.toSelectQuery(statement, options),
96
- sourceCommand: 'delete',
97
- isCountWrapper: !statement.returningClause,
98
- };
99
- }
100
- if (statement instanceof rawsql_ts_1.MergeQuery) {
101
- return {
102
- sql: rawsql_ts_1.MergeResultSelectConverter.toSelectQuery(statement, options),
103
- sourceCommand: 'merge',
104
- isCountWrapper: true,
105
- };
106
- }
107
- if (statement instanceof rawsql_ts_1.SimpleSelectQuery) {
108
- return {
109
- sql: this.injectFixtures(statement, inputs.fixtureTables),
110
- sourceCommand: 'select',
111
- isCountWrapper: false,
112
- };
113
- }
114
- if (statement instanceof rawsql_ts_1.BinarySelectQuery || statement instanceof rawsql_ts_1.ValuesQuery) {
115
- // Normalize complex select shapes into a simple query so fixture CTEs can be prefixed consistently.
116
- const simple = rawsql_ts_1.QueryBuilder.buildSimpleQuery(statement);
117
- return {
118
- sql: this.injectFixtures(simple, inputs.fixtureTables),
119
- sourceCommand: 'select',
120
- isCountWrapper: false,
121
- };
122
- }
123
- if (statement instanceof rawsql_ts_1.CreateTableQuery) {
124
- if (statement.isTemporary && statement.asSelectQuery) {
125
- // Preserve allowed CREATE TEMP ... AS SELECT statements by injecting fixtures into the inner query.
126
- const innerSimple = statement.asSelectQuery instanceof rawsql_ts_1.SimpleSelectQuery
127
- ? statement.asSelectQuery
128
- : rawsql_ts_1.QueryBuilder.buildSimpleQuery(statement.asSelectQuery);
129
- statement.asSelectQuery = this.injectFixtures(innerSimple, inputs.fixtureTables);
130
- return { sql: statement, sourceCommand: 'create', isCountWrapper: false };
131
- }
132
- return { sql: null, sourceCommand: null, isCountWrapper: false };
133
- }
134
- return { sql: null, sourceCommand: null, isCountWrapper: false };
135
- }
136
- injectFixtures(select, fixtures) {
137
- const targetedFixtures = this.filterFixturesForQuery(select, fixtures);
138
- if (targetedFixtures.length === 0) {
139
- return select;
140
- }
141
- const ctes = rawsql_ts_2.FixtureCteBuilder.buildFixtures(targetedFixtures);
142
- this.applyFixtureAliases(ctes, targetedFixtures);
143
- if (!select.withClause) {
144
- select.appendWith(ctes);
145
- return select;
146
- }
147
- select.withClause.tables = [...ctes, ...select.withClause.tables];
148
- return select;
149
- }
150
- applyFixtureAliases(ctes, fixtures) {
151
- const aliasMap = this.buildFixtureAliasMap(fixtures);
152
- for (const cte of ctes) {
153
- const alias = aliasMap.get(this.getPrimaryKey(cte.aliasExpression.table.name));
154
- if (!alias) {
155
- continue;
156
- }
157
- // Replace the CTE alias with the sanitized fixture alias to prevent schema-qualified names from escaping the WITH clause.
158
- cte.aliasExpression.table = new rawsql_ts_1.IdentifierString(alias);
159
- }
160
- }
161
- buildFixtureAliasMap(fixtures) {
162
- const aliasMap = new Map();
163
- for (const fixture of fixtures) {
164
- aliasMap.set(this.getPrimaryKey(fixture.tableName), this.buildFixtureAlias(fixture.tableName));
165
- }
166
- return aliasMap;
167
- }
168
- buildFixtureAlias(tableName) {
169
- // Use normalized names and replace dots with underscores so the alias remains a single identifier without schema separators.
170
- return (0, rawsql_ts_1.normalizeTableName)(tableName).replace(/\./g, '_');
171
- }
172
- filterFixturesForQuery(query, fixtures) {
173
- if (fixtures.length === 0) {
174
- return [];
175
- }
176
- const referenced = this.collectReferencedTableKeys(query);
177
- return fixtures.filter((fixture) => this.getLookupCandidates(fixture.tableName).some((variant) => referenced.has(variant)));
178
- }
179
- // Capture every canonical key referenced by the query so fixtures can be matched even when schemas differ.
180
- collectReferencedTableKeys(query) {
181
- const collector = new rawsql_ts_3.TableSourceCollector(false);
182
- const referenced = new Set();
183
- for (const source of collector.collect(query)) {
184
- for (const candidate of this.getLookupCandidates(source.getSourceName())) {
185
- referenced.add(candidate);
186
- }
187
- }
188
- return referenced;
189
- }
190
- // Provide all candidate keys to consult when looking up tables in maps or registries.
191
- getLookupCandidates(tableName) {
192
- if (!this.tableNameResolver) {
193
- return [(0, rawsql_ts_1.normalizeTableName)(tableName)];
194
- }
195
- return this.tableNameResolver.buildLookupCandidates(tableName);
196
- }
197
- // Return the preferred canonical key to use for alias mapping and rewriting.
198
- getPrimaryKey(tableName) {
199
- if (!this.tableNameResolver) {
200
- return (0, rawsql_ts_1.normalizeTableName)(tableName);
201
- }
202
- return this.tableNameResolver.resolve(tableName);
203
- }
204
- normalizeParameters(sql) {
205
- const placeholders = new Map();
206
- const normalized = sql.replace(/\$(\d+)/g, (_match, index) => {
207
- const token = `__rawsqlts_param_${index}__`;
208
- placeholders.set(`'${token}'`, `$${index}`);
209
- return `'${token}'`;
210
- });
211
- return { sql: normalized, placeholders };
212
- }
213
- restoreParameters(sql, placeholders) {
214
- let restored = sql;
215
- for (const [token, original] of placeholders.entries()) {
216
- // replaceAll is not available in the configured TS lib target; use split/join for compatibility.
217
- restored = restored.split(token).join(original);
218
- }
219
- return restored;
220
- }
221
- rewriteSchemaQualifiers(component, fixtures) {
222
- const fixtureAliasMap = this.buildFixtureAliasMap(fixtures);
223
- if (fixtureAliasMap.size === 0) {
224
- return;
225
- }
226
- // Collect every table occurrence so self-joins rewrite each source.
227
- const collector = new rawsql_ts_3.TableSourceCollector(false, false);
228
- for (const source of collector.collect(component)) {
229
- const referencedName = this.getPrimaryKey(source.getSourceName());
230
- const alias = fixtureAliasMap.get(referencedName);
231
- if (!alias) {
232
- continue;
233
- }
234
- // Update table references so the rewritten SQL always uses the fixture alias rather than the physical schema-qualified table.
235
- source.qualifiedName.namespaces = null;
236
- source.qualifiedName.name = new rawsql_ts_1.IdentifierString(alias);
237
- }
238
- const columnQuery = component instanceof rawsql_ts_1.SimpleSelectQuery
239
- ? component
240
- : component instanceof rawsql_ts_1.BinarySelectQuery
241
- ? component.toSimpleQuery()
242
- : null;
243
- if (!columnQuery) {
244
- return;
245
- }
246
- // Traverse the query tree and reroute every column reference so it targets the fixture alias.
247
- this.rewriteColumnReferencesInQuery(columnQuery, fixtureAliasMap);
248
- }
249
- rewriteColumnReferencesInQuery(query, aliasMap) {
250
- var _a, _b, _c, _d, _e, _f, _g;
251
- if ((_a = query.withClause) === null || _a === void 0 ? void 0 : _a.tables) {
252
- for (const cte of query.withClause.tables) {
253
- const normalized = this.getPrimaryKey(cte.aliasExpression.table.name);
254
- const alias = aliasMap.get(normalized);
255
- if (alias) {
256
- // Align the WITH clause alias with the names used later in the main query.
257
- cte.aliasExpression.table = new rawsql_ts_1.IdentifierString(alias);
258
- }
259
- this.rewriteSqlComponent(cte.query, aliasMap);
260
- }
261
- }
262
- if ((_b = query.selectClause) === null || _b === void 0 ? void 0 : _b.items) {
263
- for (const item of query.selectClause.items) {
264
- this.rewriteValueComponent(item.value, aliasMap);
265
- }
266
- }
267
- if (query.fromClause) {
268
- this.rewriteSourceExpression(query.fromClause.source, aliasMap);
269
- if (query.fromClause.joins) {
270
- for (const join of query.fromClause.joins) {
271
- this.rewriteSourceExpression(join.source, aliasMap);
272
- if (join.condition instanceof rawsql_ts_1.JoinOnClause || join.condition instanceof rawsql_ts_1.JoinUsingClause) {
273
- this.rewriteValueComponent(join.condition.condition, aliasMap);
274
- }
275
- }
276
- }
277
- }
278
- if (query.whereClause) {
279
- this.rewriteValueComponent(query.whereClause.condition, aliasMap);
280
- }
281
- if ((_c = query.groupByClause) === null || _c === void 0 ? void 0 : _c.grouping) {
282
- for (const item of query.groupByClause.grouping) {
283
- this.rewriteValueComponent(item, aliasMap);
284
- }
285
- }
286
- if (query.havingClause) {
287
- this.rewriteValueComponent(query.havingClause.condition, aliasMap);
288
- }
289
- if ((_d = query.orderByClause) === null || _d === void 0 ? void 0 : _d.order) {
290
- for (const item of query.orderByClause.order) {
291
- if (item && typeof item === 'object' && 'value' in item && item.value) {
292
- this.rewriteValueComponent(item.value, aliasMap);
293
- }
294
- else if (item && typeof item === 'object' && 'accept' in item) {
295
- this.rewriteValueComponent(item, aliasMap);
296
- }
297
- }
298
- }
299
- if ((_e = query.windowClause) === null || _e === void 0 ? void 0 : _e.windows) {
300
- for (const window of query.windowClause.windows) {
301
- if (window.expression) {
302
- this.rewriteWindowFrameExpression(window.expression, aliasMap);
303
- }
304
- }
305
- }
306
- if (query.limitClause) {
307
- this.rewriteValueComponent(query.limitClause.value, aliasMap);
308
- }
309
- if (query.offsetClause) {
310
- this.rewriteValueComponent(query.offsetClause.value, aliasMap);
311
- }
312
- if ((_g = (_f = query.fetchClause) === null || _f === void 0 ? void 0 : _f.expression) === null || _g === void 0 ? void 0 : _g.count) {
313
- this.rewriteValueComponent(query.fetchClause.expression.count, aliasMap);
314
- }
315
- }
316
- rewriteSourceExpression(source, aliasMap) {
317
- this.rewriteSourceComponent(source.datasource, aliasMap);
318
- }
319
- rewriteSourceComponent(source, aliasMap) {
320
- if (source instanceof rawsql_ts_1.SubQuerySource) {
321
- this.rewriteSqlComponent(source.query, aliasMap);
322
- }
323
- else if (source instanceof rawsql_ts_1.ParenSource) {
324
- this.rewriteSourceComponent(source.source, aliasMap);
325
- }
326
- else if (source instanceof rawsql_ts_1.FunctionSource && source.argument) {
327
- this.rewriteValueComponent(source.argument, aliasMap);
328
- }
329
- }
330
- rewriteSqlComponent(component, aliasMap) {
331
- if (!component) {
332
- return;
333
- }
334
- if (this.visitedComponents.has(component)) {
335
- return;
336
- }
337
- this.visitedComponents.add(component);
338
- if (component instanceof rawsql_ts_1.SimpleSelectQuery) {
339
- this.rewriteColumnReferencesInQuery(component, aliasMap);
340
- }
341
- else if (component instanceof rawsql_ts_1.BinarySelectQuery) {
342
- this.rewriteColumnReferencesInQuery(component.toSimpleQuery(), aliasMap);
343
- }
344
- else if (component instanceof rawsql_ts_1.ValuesQuery) {
345
- this.rewriteColumnReferencesInQuery(rawsql_ts_1.QueryBuilder.buildSimpleQuery(component), aliasMap);
346
- }
347
- else if (component instanceof rawsql_ts_1.CreateTableQuery && component.asSelectQuery) {
348
- this.rewriteSqlComponent(component.asSelectQuery, aliasMap);
349
- }
350
- }
351
- rewriteValueComponent(value, aliasMap) {
352
- if (!value) {
353
- return;
354
- }
355
- if (value instanceof rawsql_ts_1.ColumnReference) {
356
- this.rewriteColumnReference(value, aliasMap);
357
- return;
358
- }
359
- if (value instanceof rawsql_ts_1.BinaryExpression) {
360
- this.rewriteValueComponent(value.left, aliasMap);
361
- this.rewriteValueComponent(value.right, aliasMap);
362
- return;
363
- }
364
- if (value instanceof rawsql_ts_1.UnaryExpression) {
365
- this.rewriteValueComponent(value.expression, aliasMap);
366
- return;
367
- }
368
- if (value instanceof rawsql_ts_1.FunctionCall) {
369
- if (value.argument) {
370
- this.rewriteValueComponent(value.argument, aliasMap);
371
- }
372
- if (value.over && value.over instanceof rawsql_ts_1.WindowFrameExpression) {
373
- this.rewriteWindowFrameExpression(value.over, aliasMap);
374
- }
375
- return;
376
- }
377
- if (value instanceof rawsql_ts_1.InlineQuery) {
378
- this.rewriteSqlComponent(value.selectQuery, aliasMap);
379
- return;
380
- }
381
- if (value instanceof rawsql_ts_1.ParenExpression) {
382
- this.rewriteValueComponent(value.expression, aliasMap);
383
- return;
384
- }
385
- if (value instanceof rawsql_ts_1.ArrayExpression) {
386
- this.rewriteValueComponent(value.expression, aliasMap);
387
- return;
388
- }
389
- if (value instanceof rawsql_ts_1.ArrayQueryExpression) {
390
- this.rewriteSqlComponent(value.query, aliasMap);
391
- return;
392
- }
393
- if (value instanceof rawsql_ts_1.TupleExpression) {
394
- for (const tupleValue of value.values) {
395
- this.rewriteValueComponent(tupleValue, aliasMap);
396
- }
397
- return;
398
- }
399
- if (value instanceof rawsql_ts_1.ValueList) {
400
- for (const listValue of value.values) {
401
- this.rewriteValueComponent(listValue, aliasMap);
402
- }
403
- return;
404
- }
405
- if (value instanceof rawsql_ts_1.CaseExpression) {
406
- if (value.condition) {
407
- this.rewriteValueComponent(value.condition, aliasMap);
408
- }
409
- this.rewriteSwitchCaseArgument(value.switchCase, aliasMap);
410
- return;
411
- }
412
- if (value instanceof rawsql_ts_1.CaseKeyValuePair) {
413
- this.rewriteValueComponent(value.key, aliasMap);
414
- this.rewriteValueComponent(value.value, aliasMap);
415
- return;
416
- }
417
- if (value instanceof rawsql_ts_1.SwitchCaseArgument) {
418
- this.rewriteSwitchCaseArgument(value, aliasMap);
419
- return;
420
- }
421
- if (value instanceof rawsql_ts_1.BetweenExpression) {
422
- this.rewriteValueComponent(value.expression, aliasMap);
423
- this.rewriteValueComponent(value.lower, aliasMap);
424
- this.rewriteValueComponent(value.upper, aliasMap);
425
- return;
426
- }
427
- if (value instanceof rawsql_ts_1.CastExpression) {
428
- this.rewriteValueComponent(value.input, aliasMap);
429
- this.rewriteValueComponent(value.castType, aliasMap);
430
- return;
431
- }
432
- if (value instanceof rawsql_ts_1.WindowFrameExpression) {
433
- this.rewriteWindowFrameExpression(value, aliasMap);
434
- return;
435
- }
436
- }
437
- rewriteSwitchCaseArgument(argument, aliasMap) {
438
- for (const pair of argument.cases) {
439
- this.rewriteValueComponent(pair.key, aliasMap);
440
- this.rewriteValueComponent(pair.value, aliasMap);
441
- }
442
- if (argument.elseValue) {
443
- this.rewriteValueComponent(argument.elseValue, aliasMap);
444
- }
445
- }
446
- rewriteWindowFrameExpression(expression, aliasMap) {
447
- var _a;
448
- if (expression.partition) {
449
- this.rewriteValueComponent(expression.partition.value, aliasMap);
450
- }
451
- if ((_a = expression.order) === null || _a === void 0 ? void 0 : _a.order) {
452
- for (const orderItem of expression.order.order) {
453
- if (orderItem && typeof orderItem === 'object' && 'value' in orderItem && orderItem.value) {
454
- this.rewriteValueComponent(orderItem.value, aliasMap);
455
- }
456
- }
457
- }
458
- }
459
- rewriteColumnReference(columnRef, aliasMap) {
460
- var _a;
461
- const namespaceKey = ((_a = columnRef.namespaces) !== null && _a !== void 0 ? _a : []).map((namespace) => namespace.name).join('.');
462
- if (!namespaceKey) {
463
- return;
464
- }
465
- const alias = aliasMap.get(this.getPrimaryKey(namespaceKey));
466
- if (!alias) {
467
- return;
468
- }
469
- columnRef.qualifiedName.namespaces = [new rawsql_ts_1.IdentifierString(alias)];
470
- }
471
- }
472
- exports.ResultSelectRewriter = ResultSelectRewriter;
473
- //# sourceMappingURL=ResultSelectRewriter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResultSelectRewriter.js","sourceRoot":"","sources":["../../../../../../testkit-core/src/rewriter/ResultSelectRewriter.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export interface SelectAnalysisResult {
2
- tableNames: string[];
3
- cteNames: string[];
4
- }
5
- export declare class SelectAnalyzer {
6
- analyze(sql: string): SelectAnalysisResult;
7
- private collectTables;
8
- private collectFromComponent;
9
- }
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectAnalyzer = void 0;
4
- const rawsql_ts_1 = require("rawsql-ts");
5
- class SelectAnalyzer {
6
- analyze(sql) {
7
- const parsed = rawsql_ts_1.SelectQueryParser.parse(sql);
8
- const cteCollector = new rawsql_ts_1.CTECollector();
9
- const ctes = cteCollector.collect(parsed);
10
- const cteNames = new Set();
11
- for (const cte of ctes) {
12
- cteNames.add(cte.getSourceAliasName().toLowerCase());
13
- }
14
- const tableNames = this.collectTables(parsed, ctes.map((cte) => cte.query));
15
- return {
16
- tableNames: [...tableNames],
17
- cteNames: [...cteNames],
18
- };
19
- }
20
- collectTables(root, cteQueries) {
21
- const tables = new Set();
22
- this.collectFromComponent(root, tables);
23
- // CTE bodies can be writable statements, so treat them as generic SQL components.
24
- for (const query of cteQueries) {
25
- this.collectFromComponent(query, tables);
26
- }
27
- return tables;
28
- }
29
- collectFromComponent(component, bucket) {
30
- const collector = new rawsql_ts_1.CTETableReferenceCollector();
31
- const tables = collector.collect(component);
32
- for (const table of tables) {
33
- bucket.add(table.getSourceName().toLowerCase());
34
- }
35
- }
36
- }
37
- exports.SelectAnalyzer = SelectAnalyzer;
38
- //# sourceMappingURL=SelectAnalyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectAnalyzer.js","sourceRoot":"","sources":["../../../../../../testkit-core/src/rewriter/SelectAnalyzer.ts"],"names":[],"mappings":";;;AACA,yCAAwF;AAOxF,MAAa,cAAc;IAClB,OAAO,CAAC,GAAW;QACxB,MAAM,MAAM,GAAG,6BAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE5C,MAAM,YAAY,GAAG,IAAI,wBAAY,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5E,OAAO;YACL,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC;YAC3B,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;SACxB,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,IAAiB,EAAE,UAA0B;QACjE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAExC,kFAAkF;QAClF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,oBAAoB,CAAC,SAAuB,EAAE,MAAmB;QACvE,MAAM,SAAS,GAAG,IAAI,sCAA0B,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF;AAtCD,wCAsCC"}
@@ -1,42 +0,0 @@
1
- import type { SelectRewriteContext, SelectRewriteResult, SelectRewriterOptions } from '../types';
2
- /**
3
- * Rewrites SELECT statements by injecting fixture CTEs so tests can run without physical tables.
4
- */
5
- export declare class SelectFixtureRewriter {
6
- private readonly fixtureStore;
7
- private readonly analyzer;
8
- private readonly logger;
9
- private readonly missingFixtureStrategy;
10
- private readonly passthrough;
11
- private readonly wildcardPassthrough;
12
- private readonly formatterOptions;
13
- private readonly cteConflictBehavior;
14
- private readonly analyzerFailureBehavior;
15
- constructor(options?: SelectRewriterOptions);
16
- /**
17
- * Rewrites the provided SQL text, applying fixtures and formatting the final query.
18
- * @param sql - Original SQL that may include multiple statements.
19
- * @param context - Optional rewrite customization hooks.
20
- */
21
- rewrite(sql: string, context?: SelectRewriteContext): SelectRewriteResult;
22
- private rewriteSingleQuery;
23
- private resolveAnalyzerFailureBehavior;
24
- /**
25
- * Skips statements that are clearly DCL (Data Control Language).
26
- * In theory, this should be detected via AST analysis,
27
- * but since DCL is outside the supported syntax scope of this library,
28
- * we use a lightweight prefix check as a simple safeguard.
29
- *
30
- * @param {string} sql - The SQL text to inspect.
31
- * @returns {boolean} True if the statement appears to be a DCL statement; otherwise, false.
32
- */
33
- private isDclStatement;
34
- private isPassthrough;
35
- private handleMissingFixture;
36
- private mergeWithClause;
37
- private mergeWithClauseAst;
38
- private mergeWithClauseFallback;
39
- private promoteFixtureCtes;
40
- private ensureTerminated;
41
- private createFormatter;
42
- }