@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,298 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectFixtureRewriter = void 0;
4
- const rawsql_ts_1 = require("rawsql-ts");
5
- const errors_1 = require("../errors");
6
- const FixtureStore_1 = require("../fixtures/FixtureStore");
7
- const naming_1 = require("../fixtures/naming");
8
- const NoopLogger_1 = require("../logger/NoopLogger");
9
- const SqliteValuesBuilder_1 = require("../sql/SqliteValuesBuilder");
10
- const SelectAnalyzer_1 = require("./SelectAnalyzer");
11
- const DEFAULT_FORMATTER_OPTIONS = {
12
- preset: 'sqlite',
13
- newline: ' ',
14
- withClauseStyle: 'full-oneline',
15
- exportComment: 'top-header-only',
16
- };
17
- /**
18
- * Rewrites SELECT statements by injecting fixture CTEs so tests can run without physical tables.
19
- */
20
- class SelectFixtureRewriter {
21
- constructor(options = {}) {
22
- var _a, _b, _c, _d, _e, _f;
23
- this.analyzer = new SelectAnalyzer_1.SelectAnalyzer();
24
- this.fixtureStore = new FixtureStore_1.FixtureStore((_a = options.fixtures) !== null && _a !== void 0 ? _a : [], options.schema, options.tableNameResolver);
25
- this.logger = (0, NoopLogger_1.createLogger)(options.logger);
26
- this.missingFixtureStrategy = (_b = options.missingFixtureStrategy) !== null && _b !== void 0 ? _b : 'error';
27
- const passthrough = (_c = options.passthroughTables) !== null && _c !== void 0 ? _c : [];
28
- this.wildcardPassthrough = passthrough.includes('*');
29
- this.passthrough = new Set(passthrough.filter((value) => value !== '*').map((value) => (0, naming_1.normalizeIdentifier)(value)));
30
- this.formatterOptions = {
31
- ...DEFAULT_FORMATTER_OPTIONS,
32
- ...((_d = options.formatterOptions) !== null && _d !== void 0 ? _d : {}),
33
- };
34
- this.cteConflictBehavior = (_e = options.cteConflictBehavior) !== null && _e !== void 0 ? _e : 'error';
35
- this.analyzerFailureBehavior = (_f = options.analyzerFailureBehavior) !== null && _f !== void 0 ? _f : 'error';
36
- }
37
- /**
38
- * Rewrites the provided SQL text, applying fixtures and formatting the final query.
39
- * @param sql - Original SQL that may include multiple statements.
40
- * @param context - Optional rewrite customization hooks.
41
- */
42
- rewrite(sql, context) {
43
- try {
44
- // Split multi-statement SQL and handle each query independently so fixtures are injected per statement.
45
- const queries = (0, rawsql_ts_1.splitQueries)(sql);
46
- const meaningfulQueries = queries.getNonEmpty();
47
- if (meaningfulQueries.length <= 1) {
48
- return this.rewriteSingleQuery(sql, context);
49
- }
50
- const fixturesApplied = new Set();
51
- const rewrittenSegments = [];
52
- for (const query of meaningfulQueries) {
53
- const result = this.rewriteSingleQuery(query.sql, context);
54
- result.fixturesApplied.forEach((fixture) => {
55
- if (!fixturesApplied.has(fixture)) {
56
- fixturesApplied.add(fixture);
57
- }
58
- });
59
- rewrittenSegments.push(this.ensureTerminated(result.sql));
60
- }
61
- return {
62
- sql: rewrittenSegments.join(' ').trim(),
63
- fixturesApplied: [...fixturesApplied],
64
- };
65
- }
66
- catch (error) {
67
- if (error instanceof errors_1.MissingFixtureError ||
68
- error instanceof errors_1.SchemaValidationError ||
69
- error instanceof errors_1.QueryRewriteError) {
70
- throw error;
71
- }
72
- throw new errors_1.QueryRewriteError('Failed to rewrite SELECT statement.', error);
73
- }
74
- }
75
- rewriteSingleQuery(sql, context) {
76
- var _a, _b, _c;
77
- const fixtureMap = this.fixtureStore.withOverrides(context === null || context === void 0 ? void 0 : context.fixtures);
78
- const analyzerFailureBehavior = this.resolveAnalyzerFailureBehavior(context);
79
- let analysis = null;
80
- let analyzerError = null;
81
- try {
82
- analysis = this.analyzer.analyze(sql);
83
- }
84
- catch (error) {
85
- analyzerError = error;
86
- // Preserve the root cause for diagnostics while deferring the final decision to the configured fallback strategy.
87
- (_b = (_a = this.logger).debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Falling back to raw WITH merge due to analyzer failure.', {
88
- error: error instanceof Error ? error.message : String(error),
89
- });
90
- }
91
- if (!analysis) {
92
- if (this.isDclStatement(sql)) {
93
- // DCL statements remain untouched because fixture injection would corrupt their syntax.
94
- return { sql, fixturesApplied: [] };
95
- }
96
- if (analyzerFailureBehavior === 'skip') {
97
- // Allow callers to opt out of rewrites when analyzer support is missing.
98
- return { sql, fixturesApplied: [] };
99
- }
100
- if (analyzerFailureBehavior === 'error') {
101
- const cause = analyzerError instanceof Error ? analyzerError : undefined;
102
- throw new errors_1.QueryRewriteError('Analyzer failed to process SQL statement; provide a SELECT query or set analyzerFailureBehavior to "inject".', cause);
103
- }
104
- }
105
- const existingCteNames = analysis ? new Set(analysis.cteNames) : undefined;
106
- const targetTables = analysis ? [...new Set(analysis.tableNames)] : [...fixtureMap.keys()];
107
- const cteDefinitions = [];
108
- const scheduledFixtures = new Set();
109
- const fixturesApplied = [];
110
- for (const table of targetTables) {
111
- if (this.isPassthrough(table)) {
112
- continue;
113
- }
114
- const fixture = fixtureMap.get(table);
115
- const isQueryDefinedCte = (_c = existingCteNames === null || existingCteNames === void 0 ? void 0 : existingCteNames.has(table)) !== null && _c !== void 0 ? _c : false;
116
- if (!fixture) {
117
- if (isQueryDefinedCte) {
118
- // Reference points to a CTE defined inside the query, so no fixture is required.
119
- continue;
120
- }
121
- // Surface actionable diagnostics when a referenced table does not have a fixture.
122
- const columnDescriptor = this.fixtureStore.describeColumns(table);
123
- const schemaColumns = columnDescriptor === null || columnDescriptor === void 0 ? void 0 : columnDescriptor.columns.map((column) => ({
124
- name: column.name,
125
- typeName: column.typeName,
126
- }));
127
- this.handleMissingFixture(table, sql, schemaColumns, columnDescriptor === null || columnDescriptor === void 0 ? void 0 : columnDescriptor.source);
128
- continue;
129
- }
130
- cteDefinitions.push(SqliteValuesBuilder_1.SqliteValuesBuilder.buildCTE(fixture));
131
- scheduledFixtures.add(table);
132
- if (!fixturesApplied.includes(fixture.name)) {
133
- fixturesApplied.push(fixture.name);
134
- }
135
- }
136
- if (existingCteNames) {
137
- for (const cteName of existingCteNames) {
138
- if (scheduledFixtures.has(cteName)) {
139
- continue;
140
- }
141
- const fixture = fixtureMap.get(cteName);
142
- if (!fixture) {
143
- continue;
144
- }
145
- cteDefinitions.push(SqliteValuesBuilder_1.SqliteValuesBuilder.buildCTE(fixture));
146
- scheduledFixtures.add(cteName);
147
- if (!fixturesApplied.includes(fixture.name)) {
148
- fixturesApplied.push(fixture.name);
149
- }
150
- }
151
- }
152
- if (cteDefinitions.length === 0) {
153
- return { sql, fixturesApplied };
154
- }
155
- const rewritten = this.mergeWithClause(sql, cteDefinitions, context, Boolean(analysis), existingCteNames);
156
- return {
157
- sql: rewritten,
158
- fixturesApplied,
159
- };
160
- }
161
- resolveAnalyzerFailureBehavior(context) {
162
- var _a;
163
- return (_a = context === null || context === void 0 ? void 0 : context.analyzerFailureBehavior) !== null && _a !== void 0 ? _a : this.analyzerFailureBehavior;
164
- }
165
- /**
166
- * Skips statements that are clearly DCL (Data Control Language).
167
- * In theory, this should be detected via AST analysis,
168
- * but since DCL is outside the supported syntax scope of this library,
169
- * we use a lightweight prefix check as a simple safeguard.
170
- *
171
- * @param {string} sql - The SQL text to inspect.
172
- * @returns {boolean} True if the statement appears to be a DCL statement; otherwise, false.
173
- */
174
- isDclStatement(sql) {
175
- const normalized = sql.trim().toLowerCase();
176
- if (!normalized) {
177
- return false;
178
- }
179
- return /^(set|reset|grant|revoke)\b/.test(normalized);
180
- }
181
- isPassthrough(tableName) {
182
- if (this.wildcardPassthrough) {
183
- return true;
184
- }
185
- return this.passthrough.has(tableName);
186
- }
187
- handleMissingFixture(table, sql, schemaColumns, schemaSource) {
188
- var _a, _b;
189
- if (this.missingFixtureStrategy === 'error') {
190
- throw new errors_1.MissingFixtureError({
191
- tableName: table,
192
- sql,
193
- strategy: this.missingFixtureStrategy,
194
- schemaColumns,
195
- schemaSource,
196
- });
197
- }
198
- if (this.missingFixtureStrategy === 'warn') {
199
- (_b = (_a = this.logger).warn) === null || _b === void 0 ? void 0 : _b.call(_a, 'Missing fixture falls back to passthrough table access.', { table });
200
- }
201
- }
202
- mergeWithClause(sql, cteDefinitions, context, preferAst, conflictingCteNames) {
203
- var _a, _b;
204
- if (cteDefinitions.length === 0) {
205
- return sql;
206
- }
207
- if (preferAst) {
208
- try {
209
- return this.mergeWithClauseAst(sql, cteDefinitions, context, conflictingCteNames);
210
- }
211
- catch (error) {
212
- if (error instanceof errors_1.QueryRewriteError) {
213
- throw error;
214
- }
215
- // Analyzer succeeded but the final formatting failed; fall back to regex merge.
216
- (_b = (_a = this.logger).debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'AST-based WITH merge failed, using regex fallback.', {
217
- error: error instanceof Error ? error.message : String(error),
218
- });
219
- }
220
- }
221
- return this.mergeWithClauseFallback(sql, cteDefinitions);
222
- }
223
- mergeWithClauseAst(sql, cteDefinitions, context, conflictingCteNames) {
224
- var _a;
225
- const parsedQuery = rawsql_ts_1.SelectQueryParser.parse(sql);
226
- const simpleQuery = parsedQuery.toSimpleQuery();
227
- const fixtureNames = [];
228
- for (const cte of cteDefinitions) {
229
- fixtureNames.push(cte.name);
230
- const normalizedName = cte.name.toLowerCase();
231
- const conflicts = (_a = conflictingCteNames === null || conflictingCteNames === void 0 ? void 0 : conflictingCteNames.has(normalizedName)) !== null && _a !== void 0 ? _a : false;
232
- if (conflicts) {
233
- if (this.cteConflictBehavior === 'override') {
234
- // Replace user-defined definition so fixtures always win when requested.
235
- simpleQuery.replaceCTE(cte.name, cte.query);
236
- }
237
- else {
238
- throw new errors_1.QueryRewriteError(`Fixture CTE "${cte.name}" conflicts with query-defined CTE.`);
239
- }
240
- }
241
- else {
242
- simpleQuery.addCTE(cte.name, cte.query);
243
- }
244
- }
245
- this.promoteFixtureCtes(simpleQuery, fixtureNames);
246
- const formatter = this.createFormatter(context);
247
- const { formattedSql } = formatter.format(simpleQuery);
248
- return formattedSql;
249
- }
250
- mergeWithClauseFallback(sql, cteDefinitions) {
251
- const fixtureSql = cteDefinitions.map((cte) => cte.inlineSql).join(', ');
252
- const withPattern = /^(\s*WITH\s+(?:RECURSIVE\s+)?)/i;
253
- const match = sql.match(withPattern);
254
- if (match) {
255
- const prefix = match[0];
256
- const remainder = sql.slice(prefix.length);
257
- const separator = remainder.trimStart().length > 0 ? ', ' : ' ';
258
- return `${prefix}${fixtureSql}${separator}${remainder}`;
259
- }
260
- return `WITH ${fixtureSql} ${sql}`.trim();
261
- }
262
- promoteFixtureCtes(query, fixtureNames) {
263
- if (!query.withClause || fixtureNames.length === 0) {
264
- return;
265
- }
266
- // Preserve requested CTE ordering so fixture definitions always appear before user CTEs.
267
- const fixtureOrder = new Map();
268
- fixtureNames.forEach((name, index) => fixtureOrder.set(name, index));
269
- const fixtureTables = new Array(fixtureNames.length);
270
- const userTables = [];
271
- for (const table of query.withClause.tables) {
272
- const alias = table.aliasExpression.table.name;
273
- const order = fixtureOrder.get(alias);
274
- if (order === undefined) {
275
- userTables.push(table);
276
- continue;
277
- }
278
- fixtureTables[order] = table;
279
- }
280
- query.withClause.tables = fixtureTables
281
- .filter((table) => Boolean(table))
282
- .concat(userTables);
283
- }
284
- ensureTerminated(sql) {
285
- const trimmed = sql.trim();
286
- if (trimmed.endsWith(';')) {
287
- return trimmed;
288
- }
289
- return `${trimmed};`;
290
- }
291
- createFormatter(context) {
292
- const override = context === null || context === void 0 ? void 0 : context.formatterOptions;
293
- const options = override ? { ...this.formatterOptions, ...override } : this.formatterOptions;
294
- return new rawsql_ts_1.SqlFormatter(options);
295
- }
296
- }
297
- exports.SelectFixtureRewriter = SelectFixtureRewriter;
298
- //# sourceMappingURL=SelectFixtureRewriter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectFixtureRewriter.js","sourceRoot":"","sources":["../../../../../../testkit-core/src/rewriter/SelectFixtureRewriter.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { SelectQuery } from 'rawsql-ts';
2
- import type { NormalizedFixture } from '../fixtures/FixtureStore';
3
- export interface FixtureCteDefinition {
4
- name: string;
5
- query: SelectQuery;
6
- inlineSql: string;
7
- }
8
- export declare class SqliteValuesBuilder {
9
- static buildCTE(fixture: NormalizedFixture): FixtureCteDefinition;
10
- private static buildSelectStatement;
11
- private static wrapAsCte;
12
- }
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SqliteValuesBuilder = void 0;
4
- const rawsql_ts_1 = require("rawsql-ts");
5
- const quoteIdentifier = (value) => {
6
- return `"${value.replace(/"/g, '""')}"`;
7
- };
8
- const formatLiteral = (value) => {
9
- if (value === null) {
10
- return 'NULL';
11
- }
12
- if (typeof value === 'number' || typeof value === 'bigint') {
13
- return value.toString();
14
- }
15
- if (value instanceof Buffer) {
16
- return `X'${value.toString('hex')}'`;
17
- }
18
- if (typeof value === 'string') {
19
- return `'${value.replace(/'/g, "''")}'`;
20
- }
21
- const coerced = String(value);
22
- return `'${coerced.replace(/'/g, "''")}'`;
23
- };
24
- class SqliteValuesBuilder {
25
- static buildCTE(fixture) {
26
- const selectSql = this.buildSelectStatement(fixture);
27
- const inlineSql = this.wrapAsCte(fixture.name, selectSql);
28
- const query = rawsql_ts_1.SelectQueryParser.parse(selectSql);
29
- return {
30
- name: fixture.name,
31
- query,
32
- inlineSql,
33
- };
34
- }
35
- static buildSelectStatement(fixture) {
36
- const projectRow = (row) => {
37
- return ('SELECT ' +
38
- fixture.columns
39
- .map((column, index) => {
40
- var _a;
41
- const literal = formatLiteral((_a = row[index]) !== null && _a !== void 0 ? _a : null);
42
- return `CAST(${literal} AS ${column.affinity}) AS ${quoteIdentifier(column.name)}`;
43
- })
44
- .join(', '));
45
- };
46
- if (fixture.rows.length === 0) {
47
- return `${projectRow(fixture.columns.map(() => null))} WHERE 1 = 0`;
48
- }
49
- if (fixture.rows.length === 1) {
50
- return projectRow(fixture.rows[0]);
51
- }
52
- return fixture.rows.map(projectRow).join('\nUNION ALL\n');
53
- }
54
- static wrapAsCte(name, selectSql) {
55
- const indented = selectSql
56
- .split('\n')
57
- .map((line) => ` ${line}`)
58
- .join('\n');
59
- return `${quoteIdentifier(name)} AS (\n${indented}\n)`;
60
- }
61
- }
62
- exports.SqliteValuesBuilder = SqliteValuesBuilder;
63
- //# sourceMappingURL=SqliteValuesBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqliteValuesBuilder.js","sourceRoot":"","sources":["../../../../../../testkit-core/src/sql/SqliteValuesBuilder.ts"],"names":[],"mappings":"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"}
@@ -1,69 +0,0 @@
1
- import type { FixtureTableDefinition, SqlFormatterOptions, TableDefinitionModel, TableDefinitionRegistry } from 'rawsql-ts';
2
- export type { TableDefinitionModel } from 'rawsql-ts';
3
- import type { TableNameResolver } from '../fixtures/TableNameResolver';
4
- import type { ColumnAffinity } from '../fixtures/ColumnAffinity';
5
- /**
6
- * Declared column type tokens for schema metadata. Accepts raw DDL type names
7
- * and precomputed affinity values for compatibility.
8
- */
9
- export type SchemaColumnType = string | ColumnAffinity;
10
- /**
11
- * Minimal schema metadata used by fixtures when no full table model is
12
- * available.
13
- */
14
- export interface TableSchemaDefinition {
15
- columns: Record<string, SchemaColumnType>;
16
- }
17
- export interface SchemaRegistry {
18
- getTable(name: string): TableSchemaDefinition | TableDefinitionModel | undefined;
19
- }
20
- export interface FixtureRow {
21
- [column: string]: unknown;
22
- }
23
- export interface TableRowsFixture {
24
- tableName: string;
25
- rows: FixtureRow[];
26
- }
27
- export interface TableFixture extends TableRowsFixture {
28
- schema?: TableSchemaDefinition | TableDefinitionModel;
29
- }
30
- export type MissingFixtureStrategy = 'error' | 'passthrough' | 'warn';
31
- export type AnalyzerFailureBehavior = 'error' | 'skip' | 'inject';
32
- export interface TestkitLogger {
33
- debug?(message: string, meta?: Record<string, unknown>): void;
34
- info?(message: string, meta?: Record<string, unknown>): void;
35
- warn?(message: string, meta?: Record<string, unknown>): void;
36
- error?(message: string, meta?: Record<string, unknown>): void;
37
- }
38
- export interface SelectRewriteResult {
39
- sql: string;
40
- fixturesApplied: string[];
41
- sourceCommand?: string | null;
42
- isCountWrapper?: boolean;
43
- }
44
- export interface SelectRewriterOptions {
45
- fixtures?: TableFixture[];
46
- schema?: SchemaRegistry;
47
- missingFixtureStrategy?: MissingFixtureStrategy;
48
- passthroughTables?: string[];
49
- logger?: TestkitLogger;
50
- formatterOptions?: SqlFormatterOptions;
51
- cteConflictBehavior?: 'error' | 'override';
52
- analyzerFailureBehavior?: AnalyzerFailureBehavior;
53
- tableNameResolver?: TableNameResolver;
54
- }
55
- export interface SelectRewriteContext {
56
- fixtures?: TableFixture[];
57
- formatterOptions?: SqlFormatterOptions;
58
- analyzerFailureBehavior?: AnalyzerFailureBehavior;
59
- }
60
- /** Represents the resolved state returned by a fixture provider. */
61
- export interface FixtureSnapshot {
62
- fixtureTables: FixtureTableDefinition[];
63
- tableDefinitions: TableDefinitionRegistry;
64
- fixturesApplied: string[];
65
- }
66
- /** Responsible for resolving fixture overrides and exposing the latest snapshot. */
67
- export interface FixtureResolver {
68
- resolve(overrides?: TableRowsFixture[]): FixtureSnapshot;
69
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../testkit-core/src/types/index.ts"],"names":[],"mappings":""}
@@ -1,28 +0,0 @@
1
- type PrimitiveRow = Record<string, unknown> | unknown[];
2
- /**
3
- * Describes the minimal piece of a QueryResult needed for count-wrapper normalization.
4
- */
5
- export interface CountableResult<Row extends PrimitiveRow = PrimitiveRow> {
6
- command?: string | null;
7
- rowCount?: number | null;
8
- fields?: {
9
- name: string;
10
- }[] | null;
11
- rows: Row[];
12
- }
13
- /**
14
- * Extracts the numeric value from a SELECT COUNT(*) row emitted by the rewriter.
15
- */
16
- export declare const extractCountValue: <T extends CountableResult>(result: T) => number | null;
17
- /**
18
- * Rewrites a count-wrapper response back into the originating CRUD command shape.
19
- */
20
- export declare const applyCountWrapper: <T extends CountableResult>(result: T, sourceCommand: string | null, isCountWrapper: boolean) => T;
21
- /**
22
- * Reindexes `$N` placeholders so newly injected bindings remain contiguous.
23
- */
24
- export declare const alignRewrittenParameters: (sql: string, params?: unknown[]) => {
25
- sql: string;
26
- params?: unknown[];
27
- };
28
- export {};
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.alignRewrittenParameters = exports.applyCountWrapper = exports.extractCountValue = void 0;
4
- const CRUD_COMMANDS = new Set(['insert', 'update', 'delete', 'merge']);
5
- /**
6
- * Extracts the numeric value from a SELECT COUNT(*) row emitted by the rewriter.
7
- */
8
- const extractCountValue = (result) => {
9
- var _a, _b;
10
- // Only consider SELECT results that expose a single `count` column.
11
- if (((_a = result.command) !== null && _a !== void 0 ? _a : '').toLowerCase() !== 'select') {
12
- return null;
13
- }
14
- const [field] = (_b = result.fields) !== null && _b !== void 0 ? _b : [];
15
- if (!field || field.name !== 'count' || result.rows.length !== 1) {
16
- return null;
17
- }
18
- const row = result.rows[0];
19
- const value = Array.isArray(row) ?
20
- row[0] :
21
- row[field.name];
22
- const numericCount = typeof value === 'string' ? Number(value) : Number(value !== null && value !== void 0 ? value : 0);
23
- return Number.isNaN(numericCount) ? null : numericCount;
24
- };
25
- exports.extractCountValue = extractCountValue;
26
- /**
27
- * Rewrites a count-wrapper response back into the originating CRUD command shape.
28
- */
29
- const applyCountWrapper = (result, sourceCommand, isCountWrapper) => {
30
- var _a;
31
- // Skip normalization when the rewrite did not produce a SELECT-based count wrapper.
32
- if (!isCountWrapper) {
33
- return result;
34
- }
35
- // Map the stored command back to lowercase CRUD names that pg clients expect.
36
- const commandName = (_a = sourceCommand === null || sourceCommand === void 0 ? void 0 : sourceCommand.toLowerCase()) !== null && _a !== void 0 ? _a : null;
37
- if (!commandName || !CRUD_COMMANDS.has(commandName)) {
38
- return result;
39
- }
40
- // Rely on the synthetic COUNT result to update rowCount/command for consumers.
41
- const countValue = (0, exports.extractCountValue)(result);
42
- if (countValue === null) {
43
- return result;
44
- }
45
- return {
46
- ...result,
47
- rowCount: countValue,
48
- command: commandName,
49
- };
50
- };
51
- exports.applyCountWrapper = applyCountWrapper;
52
- /**
53
- * Reindexes `$N` placeholders so newly injected bindings remain contiguous.
54
- */
55
- const alignRewrittenParameters = (sql, params) => {
56
- if (!params || params.length === 0) {
57
- return { sql, params };
58
- }
59
- // Capture every rewritten placeholder index so we can renumber them from 1..N.
60
- const matches = Array.from(sql.matchAll(/\$(\d+)/g));
61
- if (matches.length === 0) {
62
- return { sql, params: [] };
63
- }
64
- // Assign contiguous placeholder numbers in the order they appear.
65
- const placeholderSet = new Map();
66
- const orderedIndexes = [...new Set(matches.map((match) => Number(match[1])))].sort((a, b) => a - b);
67
- orderedIndexes.forEach((index, idx) => {
68
- placeholderSet.set(index, idx + 1);
69
- });
70
- // Replace the SQL text so higher-numbered placeholders cascade down to the new indexes.
71
- const alignedSql = [...placeholderSet.entries()]
72
- .sort((a, b) => b[0] - a[0])
73
- .reduce((acc, [original, mapped]) => acc.split(`$${original}`).join(`$${mapped}`), sql);
74
- // Reorder the parameter array to match the renumbered placeholders.
75
- const alignedValues = [...placeholderSet.entries()]
76
- .sort((a, b) => a[1] - b[1])
77
- .map(([original]) => params[original - 1]);
78
- return { sql: alignedSql, params: alignedValues };
79
- };
80
- exports.alignRewrittenParameters = alignRewrittenParameters;
81
- //# sourceMappingURL=queryHelpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryHelpers.js","sourceRoot":"","sources":["../../../../../../testkit-core/src/utils/queryHelpers.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /** Primitive values that can be serialized as SQL parameters. */
2
- export type ParamValue = string | number | boolean | null | bigint | Date | Uint8Array;
3
- /** Values keyed by column that may include undefined entries which are dropped. */
4
- export type RecordValues = Record<string, ParamValue | undefined>;
5
- /** Key columns used for equality-only WHERE clauses in update/remove helpers. */
6
- export type Key = Record<string, ParamValue>;
7
- /** Optional writer-core flags; use allowUnsafeIdentifiers when skipping ASCII checks. */
8
- export type WriterCoreOptions = {
9
- allowUnsafeIdentifiers?: boolean;
10
- };
11
- /**
12
- * Build an INSERT statement that keeps SQL visible and drops undefined fields.
13
- * @param options – Pass `allowUnsafeIdentifiers` when you knowingly use Unicode names.
14
- */
15
- export declare const insert: (table: string, values: RecordValues, options?: WriterCoreOptions) => {
16
- sql: string;
17
- params: ParamValue[];
18
- };
19
- /**
20
- * Build an UPDATE statement that reuses parameterized placeholders and guards empty sets.
21
- * @param options – Pass `allowUnsafeIdentifiers` when you knowingly use Unicode names.
22
- */
23
- export declare const update: (table: string, values: RecordValues, where: Key, options?: WriterCoreOptions) => {
24
- sql: string;
25
- params: ParamValue[];
26
- };
27
- /**
28
- * Build a DELETE statement that only emits equality-only WHERE clauses.
29
- * @param options – Pass `allowUnsafeIdentifiers` when you knowingly use Unicode names.
30
- */
31
- export declare const remove: (table: string, where: Key, options?: WriterCoreOptions) => {
32
- sql: string;
33
- params: ParamValue[];
34
- };