code-auditor-mcp 3.4.11 → 3.4.13

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 (254) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +119 -1
  3. package/dist/analyzers/__verify_self_probe.d.ts +2 -0
  4. package/dist/analyzers/__verify_self_probe.d.ts.map +1 -0
  5. package/dist/analyzers/__verify_self_probe.js +5 -0
  6. package/dist/analyzers/__verify_self_probe.js.map +1 -0
  7. package/dist/analyzers/analyzerUtils.d.ts +34 -1
  8. package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
  9. package/dist/analyzers/analyzerUtils.js +61 -22
  10. package/dist/analyzers/analyzerUtils.js.map +1 -1
  11. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +18 -23
  12. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  13. package/dist/analyzers/cross-language/APIContractAnalyzer.js +198 -186
  14. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  15. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +78 -55
  16. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  17. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +244 -243
  18. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  19. package/dist/analyzers/cross-language/SchemaValidator.d.ts +27 -37
  20. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  21. package/dist/analyzers/cross-language/SchemaValidator.js +314 -275
  22. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  23. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +17 -46
  24. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  25. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +620 -523
  26. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  27. package/dist/analyzers/documentationAnalyzer.d.ts +7 -2
  28. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  29. package/dist/analyzers/documentationAnalyzer.js +259 -198
  30. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  31. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  32. package/dist/analyzers/invariantsAnalyzer.js +59 -46
  33. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  34. package/dist/analyzers/orm/adapterRegistry.d.ts +10 -0
  35. package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
  36. package/dist/analyzers/orm/adapterRegistry.js +10 -0
  37. package/dist/analyzers/orm/adapterRegistry.js.map +1 -1
  38. package/dist/analyzers/orm/drizzleAdapter.d.ts +22 -0
  39. package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
  40. package/dist/analyzers/orm/drizzleAdapter.js +42 -44
  41. package/dist/analyzers/orm/drizzleAdapter.js.map +1 -1
  42. package/dist/analyzers/orm/prismaAdapter.d.ts +30 -0
  43. package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
  44. package/dist/analyzers/orm/prismaAdapter.js +30 -0
  45. package/dist/analyzers/orm/prismaAdapter.js.map +1 -1
  46. package/dist/analyzers/provenance.d.ts +72 -2
  47. package/dist/analyzers/provenance.d.ts.map +1 -1
  48. package/dist/analyzers/provenance.js +462 -338
  49. package/dist/analyzers/provenance.js.map +1 -1
  50. package/dist/analyzers/reactAnalyzer.d.ts +11 -0
  51. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  52. package/dist/analyzers/reactAnalyzer.js +188 -125
  53. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  54. package/dist/analyzers/ruleRegistry.d.ts +118 -1
  55. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  56. package/dist/analyzers/ruleRegistry.js +1717 -104
  57. package/dist/analyzers/ruleRegistry.js.map +1 -1
  58. package/dist/analyzers/ruleTiming.d.ts +54 -0
  59. package/dist/analyzers/ruleTiming.d.ts.map +1 -0
  60. package/dist/analyzers/ruleTiming.js +71 -0
  61. package/dist/analyzers/ruleTiming.js.map +1 -0
  62. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +13 -0
  63. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  64. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +362 -283
  65. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  66. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +26 -68
  67. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  68. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +430 -391
  69. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  70. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +24 -186
  71. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  72. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +1081 -1061
  73. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  74. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +3 -49
  75. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  76. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +414 -340
  77. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  78. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +48 -5
  79. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  80. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +262 -134
  81. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  82. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +23 -212
  83. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  84. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +139 -1518
  85. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  86. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +78 -79
  87. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  88. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +613 -472
  89. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  90. package/dist/analyzers/universal/schema/codeAnalysis.d.ts +307 -0
  91. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -0
  92. package/dist/analyzers/universal/schema/codeAnalysis.js +965 -0
  93. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -0
  94. package/dist/analyzers/universal/schema/config.d.ts +31 -0
  95. package/dist/analyzers/universal/schema/config.d.ts.map +1 -0
  96. package/dist/analyzers/universal/schema/config.js +57 -0
  97. package/dist/analyzers/universal/schema/config.js.map +1 -0
  98. package/dist/analyzers/universal/schema/discovery.d.ts +167 -0
  99. package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -0
  100. package/dist/analyzers/universal/schema/discovery.js +616 -0
  101. package/dist/analyzers/universal/schema/discovery.js.map +1 -0
  102. package/dist/analyzers/universal/schema/jsonSchema.d.ts +27 -0
  103. package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -0
  104. package/dist/analyzers/universal/schema/jsonSchema.js +368 -0
  105. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -0
  106. package/dist/analyzers/universal/schema/migrations.d.ts +90 -0
  107. package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -0
  108. package/dist/analyzers/universal/schema/migrations.js +238 -0
  109. package/dist/analyzers/universal/schema/migrations.js.map +1 -0
  110. package/dist/analyzers/universal/schema/types.d.ts +131 -0
  111. package/dist/analyzers/universal/schema/types.d.ts.map +1 -0
  112. package/dist/analyzers/universal/schema/types.js +10 -0
  113. package/dist/analyzers/universal/schema/types.js.map +1 -0
  114. package/dist/analyzers/universal/schema/violations.d.ts +44 -0
  115. package/dist/analyzers/universal/schema/violations.d.ts.map +1 -0
  116. package/dist/analyzers/universal/schema/violations.js +54 -0
  117. package/dist/analyzers/universal/schema/violations.js.map +1 -0
  118. package/dist/auditRunner.d.ts.map +1 -1
  119. package/dist/auditRunner.js +101 -39
  120. package/dist/auditRunner.js.map +1 -1
  121. package/dist/cli.js +348 -40
  122. package/dist/cli.js.map +1 -1
  123. package/dist/config/configLoader.d.ts.map +1 -1
  124. package/dist/config/configLoader.js +9 -7
  125. package/dist/config/configLoader.js.map +1 -1
  126. package/dist/config/defaults.d.ts +12 -3
  127. package/dist/config/defaults.d.ts.map +1 -1
  128. package/dist/config/defaults.js +15 -5
  129. package/dist/config/defaults.js.map +1 -1
  130. package/dist/config/effectiveConfig.d.ts +75 -0
  131. package/dist/config/effectiveConfig.d.ts.map +1 -0
  132. package/dist/config/effectiveConfig.js +213 -0
  133. package/dist/config/effectiveConfig.js.map +1 -0
  134. package/dist/config/pathProfiles.d.ts +7 -4
  135. package/dist/config/pathProfiles.d.ts.map +1 -1
  136. package/dist/config/pathProfiles.js +8 -10
  137. package/dist/config/pathProfiles.js.map +1 -1
  138. package/dist/config/thresholdRationales.d.ts +45 -0
  139. package/dist/config/thresholdRationales.d.ts.map +1 -0
  140. package/dist/config/thresholdRationales.js +67 -0
  141. package/dist/config/thresholdRationales.js.map +1 -0
  142. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  143. package/dist/conventions/conventionMiner.js +6 -2
  144. package/dist/conventions/conventionMiner.js.map +1 -1
  145. package/dist/enforcement/diffGate.d.ts +55 -0
  146. package/dist/enforcement/diffGate.d.ts.map +1 -0
  147. package/dist/enforcement/diffGate.js +136 -0
  148. package/dist/enforcement/diffGate.js.map +1 -0
  149. package/dist/enforcement/gate.d.ts +36 -0
  150. package/dist/enforcement/gate.d.ts.map +1 -0
  151. package/dist/enforcement/gate.js +72 -0
  152. package/dist/enforcement/gate.js.map +1 -0
  153. package/dist/enforcement/suppressions.d.ts +41 -0
  154. package/dist/enforcement/suppressions.d.ts.map +1 -0
  155. package/dist/enforcement/suppressions.js +170 -0
  156. package/dist/enforcement/suppressions.js.map +1 -0
  157. package/dist/fingerprint.d.ts.map +1 -1
  158. package/dist/fingerprint.js +4 -1
  159. package/dist/fingerprint.js.map +1 -1
  160. package/dist/grammars/tree-sitter-scss.wasm +0 -0
  161. package/dist/invariants/ruleEngine.d.ts +3 -4
  162. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  163. package/dist/invariants/ruleEngine.js +2 -2
  164. package/dist/invariants/ruleEngine.js.map +1 -1
  165. package/dist/languages/LanguageOrchestrator.d.ts +14 -0
  166. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  167. package/dist/languages/LanguageOrchestrator.js +93 -55
  168. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  169. package/dist/languages/LanguageRegistry.d.ts +8 -0
  170. package/dist/languages/LanguageRegistry.d.ts.map +1 -1
  171. package/dist/languages/LanguageRegistry.js +8 -0
  172. package/dist/languages/LanguageRegistry.js.map +1 -1
  173. package/dist/languages/RuntimeManager.d.ts +82 -60
  174. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  175. package/dist/languages/RuntimeManager.js +404 -349
  176. package/dist/languages/RuntimeManager.js.map +1 -1
  177. package/dist/languages/UniversalAnalyzer.d.ts +51 -6
  178. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
  179. package/dist/languages/UniversalAnalyzer.js +127 -88
  180. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  181. package/dist/languages/adapterBridge.d.ts +36 -0
  182. package/dist/languages/adapterBridge.d.ts.map +1 -1
  183. package/dist/languages/adapterBridge.js +89 -35
  184. package/dist/languages/adapterBridge.js.map +1 -1
  185. package/dist/languages/go/GoAdapter.d.ts +66 -23
  186. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  187. package/dist/languages/go/GoAdapter.js +553 -474
  188. package/dist/languages/go/GoAdapter.js.map +1 -1
  189. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +38 -9
  190. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
  191. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +111 -74
  192. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
  193. package/dist/languages/tree-sitter/converter.d.ts +18 -0
  194. package/dist/languages/tree-sitter/converter.d.ts.map +1 -1
  195. package/dist/languages/tree-sitter/converter.js +18 -0
  196. package/dist/languages/tree-sitter/converter.js.map +1 -1
  197. package/dist/languages/tree-sitter/parser.d.ts +39 -2
  198. package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
  199. package/dist/languages/tree-sitter/parser.js +95 -12
  200. package/dist/languages/tree-sitter/parser.js.map +1 -1
  201. package/dist/languages/types.d.ts +67 -2
  202. package/dist/languages/types.d.ts.map +1 -1
  203. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +253 -62
  204. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  205. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +1461 -791
  206. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  207. package/dist/mcp-tools/whitelistTools.d.ts +1 -1
  208. package/dist/mcp-tools-shared.d.ts.map +1 -1
  209. package/dist/mcp-tools-shared.js +1 -0
  210. package/dist/mcp-tools-shared.js.map +1 -1
  211. package/dist/mcpAuditJobs.d.ts.map +1 -1
  212. package/dist/mcpAuditJobs.js +1 -0
  213. package/dist/mcpAuditJobs.js.map +1 -1
  214. package/dist/pipeline.d.ts +30 -1
  215. package/dist/pipeline.d.ts.map +1 -1
  216. package/dist/pipeline.js +527 -203
  217. package/dist/pipeline.js.map +1 -1
  218. package/dist/pipelineAdapters.d.ts +5 -12
  219. package/dist/pipelineAdapters.d.ts.map +1 -1
  220. package/dist/pipelineAdapters.js +175 -100
  221. package/dist/pipelineAdapters.js.map +1 -1
  222. package/dist/presets/presets.d.ts +54 -0
  223. package/dist/presets/presets.d.ts.map +1 -0
  224. package/dist/presets/presets.js +181 -0
  225. package/dist/presets/presets.js.map +1 -0
  226. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  227. package/dist/reporting/sarifReportGenerator.js +0 -2
  228. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  229. package/dist/ruleAliases.d.ts +67 -0
  230. package/dist/ruleAliases.d.ts.map +1 -0
  231. package/dist/ruleAliases.js +79 -0
  232. package/dist/ruleAliases.js.map +1 -0
  233. package/dist/styles/cssAstExtractor.d.ts +20 -5
  234. package/dist/styles/cssAstExtractor.d.ts.map +1 -1
  235. package/dist/styles/cssAstExtractor.js +247 -9
  236. package/dist/styles/cssAstExtractor.js.map +1 -1
  237. package/dist/styles/styleIndexer.js +13 -4
  238. package/dist/styles/styleIndexer.js.map +1 -1
  239. package/dist/styles/tailwindConfigLoader.d.ts +8 -6
  240. package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
  241. package/dist/styles/tailwindConfigLoader.js +61 -15
  242. package/dist/styles/tailwindConfigLoader.js.map +1 -1
  243. package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
  244. package/dist/styles/tailwindUtilityExpander.js +13 -1
  245. package/dist/styles/tailwindUtilityExpander.js.map +1 -1
  246. package/dist/types.d.ts +201 -1
  247. package/dist/types.d.ts.map +1 -1
  248. package/dist/types.js +8 -0
  249. package/dist/types.js.map +1 -1
  250. package/package.json +7 -4
  251. package/plugin/.claude-plugin/plugin.json +1 -1
  252. package/plugin/hooks/hooks.json +1 -1
  253. package/plugin/scripts/hook-audit.sh +25 -7
  254. package/plugin/skills/code-auditor/SKILL.md +5 -5
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Migration/DDL replay + one-hop barrel re-export resolution.
3
+ *
4
+ * Spec 33 item 15 — extracted from UniversalSchemaAnalyzer.ts so the DDL
5
+ * state machine, barrel reader, and streaming DDL-presence detection are
6
+ * importable and testable independently of the analyzer class.
7
+ */
8
+ import fs from 'fs/promises';
9
+ import { readFileSync, statSync } from 'node:fs';
10
+ import path from 'path';
11
+ import { MAX_ORPHAN_SOURCE_BYTES } from '../../../types.js';
12
+ /**
13
+ * Strip SQL identifier delimiters: backticks or double-quotes.
14
+ * @param name
15
+ * @returns
16
+ */
17
+ export function stripIdentifier(name) {
18
+ if ((name.startsWith('`') && name.endsWith('`')) ||
19
+ (name.startsWith('"') && name.endsWith('"'))) {
20
+ return name.slice(1, -1);
21
+ }
22
+ return name;
23
+ }
24
+ /**
25
+ * Apply pre-extracted DDL operations to a table set in migration order.
26
+ * Strips identifier delimiters (backticks/quotes) and performs the
27
+ * CREATE/DROP/RENAME state transitions. Callable from the schema reducer
28
+ * without re-parsing raw SQL.
29
+ * @param ops
30
+ * @param tables
31
+ */
32
+ export function applyMigrationOps(ops, tables) {
33
+ for (const { op, table, newTable } of ops) {
34
+ if (op === 'CREATE') {
35
+ tables.add(stripIdentifier(table));
36
+ }
37
+ else if (op === 'DROP') {
38
+ tables.delete(stripIdentifier(table));
39
+ }
40
+ else {
41
+ tables.delete(stripIdentifier(table));
42
+ tables.add(stripIdentifier(newTable));
43
+ }
44
+ }
45
+ }
46
+ /**
47
+ * Parse a migration SQL source and apply stateful CREATE/DROP/RENAME
48
+ * operations to the given table set in migration order.
49
+ * @param source
50
+ * @param tables
51
+ */
52
+ export function processMigrationSource(source, tables) {
53
+ applyMigrationOps(parseMigrationOps(source), tables);
54
+ }
55
+ /**
56
+ * The DDL state-machine regex shared by the standalone analyze() path and the
57
+ * pipeline's schema-sql visitor. Single ordered pass — applies CREATE/DROP/
58
+ * RENAME in statement order within each migration file (fixes the rename-replay
59
+ * bug where CREATE after RENAME in the same file was silently dropped).
60
+ */
61
+ const DDL_RE = /(CREATE)\s+(?:VIRTUAL\s+)?TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?(`[^`]+`|"[^"]+"|\w+)|(DROP)\s+TABLE\s+(?:IF\s+EXISTS\s+)?(`[^`]+`|"[^"]+"|\w+)|(ALTER)\s+TABLE\s+(`[^`]+`|"[^"]+"|\w+)\s+RENAME\s+TO\s+(`[^`]+`|"[^"]+"|\w+)/gi;
62
+ /**
63
+ * Extract ordered DDL operations from migration SQL text. Emitted by the
64
+ * schema-sql visitor instead of raw source so the reducer only retains the
65
+ * extracted state transitions, not the full file text.
66
+ * @param source
67
+ * @returns
68
+ */
69
+ export function parseMigrationOps(source) {
70
+ const ops = [];
71
+ let match;
72
+ DDL_RE.lastIndex = 0;
73
+ while ((match = DDL_RE.exec(source)) !== null) {
74
+ const op = match[1] || match[3] || match[5];
75
+ if (op === 'CREATE') {
76
+ ops.push({ op: 'CREATE', table: match[2] });
77
+ }
78
+ else if (op === 'DROP') {
79
+ ops.push({ op: 'DROP', table: match[4] });
80
+ }
81
+ else if (op === 'ALTER') {
82
+ ops.push({ op: 'RENAME', table: match[6], newTable: match[7] });
83
+ }
84
+ }
85
+ return ops;
86
+ }
87
+ // ── One-hop barrel re-export resolution (Spec 33 item 9) ─────────────────────
88
+ /**
89
+ * Extract `export * from 'x'` and `export { a, b as c } from 'x'` statements
90
+ * from barrel source. Regex-based — matches the analyzer's existing
91
+ * migration/ORM discovery idiom and avoids a tree-sitter round-trip per barrel.
92
+ * Local re-exports without a `from` clause are not re-exports and are skipped.
93
+ * @param source
94
+ * @returns
95
+ */
96
+ export function extractReExports(source) {
97
+ const results = [];
98
+ const starRe = /export\s*\*\s*from\s*(['"])([^'"]+)\1/g;
99
+ let m;
100
+ while ((m = starRe.exec(source)) !== null) {
101
+ results.push({ source: m[2], star: true, renamed: new Map() });
102
+ }
103
+ const namedRe = /export\s*\{([^}]*)\}\s*from\s*(['"])([^'"]+)\2/g;
104
+ while ((m = namedRe.exec(source)) !== null) {
105
+ const renamed = new Map();
106
+ for (const raw of m[1].split(',')) {
107
+ const spec = raw.trim();
108
+ if (!spec)
109
+ continue;
110
+ const asMatch = /^(\w+)\s+as\s+(\w+)$/.exec(spec);
111
+ if (asMatch) {
112
+ // `export { original as local } from 'x'`
113
+ renamed.set(asMatch[2], asMatch[1]);
114
+ }
115
+ else {
116
+ const name = /^(\w+)$/.exec(spec);
117
+ if (name)
118
+ renamed.set(name[1], name[1]);
119
+ }
120
+ }
121
+ results.push({ source: m[3], star: false, renamed });
122
+ }
123
+ return results;
124
+ }
125
+ /**
126
+ * Resolve a relative module specifier to a file on disk, trying common source
127
+ * extensions and index files. Returns the resolved path (absolute or relative
128
+ * to the importing file's directory) or null when the file cannot be found.
129
+ *
130
+ * @param fromFile The importing file (its directory is the resolution base).
131
+ * @param specifier The relative module specifier to resolve.
132
+ * @returns The resolved file path, or null when not found.
133
+ */
134
+ export function resolveBarrelModulePath(fromFile, specifier) {
135
+ const fromDir = path.dirname(fromFile);
136
+ const base = path.resolve(fromDir, specifier);
137
+ const candidates = [
138
+ base,
139
+ ...['.ts', '.tsx', '.js', '.jsx'].map(ext => base + ext),
140
+ ...['.ts', '.tsx', '.js', '.jsx'].map(ext => path.join(base, 'index' + ext)),
141
+ ];
142
+ for (const candidate of candidates) {
143
+ try {
144
+ // Cheap existence check without throwing on directory candidates.
145
+ const stat = statSync(candidate);
146
+ if (stat.isFile())
147
+ return candidate;
148
+ }
149
+ catch {
150
+ // continue
151
+ }
152
+ }
153
+ return null;
154
+ }
155
+ /**
156
+ * Default barrel reader — resolves the specifier relative to `fromFile` on disk.
157
+ *
158
+ * @param fromFile The importing file (its directory is the resolution base).
159
+ * @param specifier The relative module specifier to read.
160
+ * @returns The resolved file's source text, or null when unreadable.
161
+ */
162
+ export function readModuleFromDisk(fromFile, specifier) {
163
+ const resolved = resolveBarrelModulePath(fromFile, specifier);
164
+ if (!resolved)
165
+ return null;
166
+ try {
167
+ return readFileSync(resolved, 'utf-8');
168
+ }
169
+ catch {
170
+ return null;
171
+ }
172
+ }
173
+ /** Lightweight DDL presence marker — detection only, no capture groups. */
174
+ const DDL_PRESENCE_RE = /(?:CREATE|DROP|ALTER)\s+(?:VIRTUAL\s+)?TABLE/i;
175
+ /**
176
+ * Detect whether an SQL file contains any DDL statement without materializing
177
+ * the whole file. Streams in 1 MB chunks, carrying a small tail across chunk
178
+ * boundaries so a marker split at "CREATE TA/BLE" is still caught. Used by the
179
+ * schema-sql visitor for oversized orphans yielded with empty source by stage 1.
180
+ * @param filePath
181
+ * @returns
182
+ */
183
+ export async function sqlFileHasDdl(filePath) {
184
+ const CHUNK = 1024 * 1024; // 1 MB
185
+ const CARRY = 32; // "ALTER VIRTUAL TABLE IF NOT EXISTS" — enough to bridge a boundary
186
+ const handle = await fs.open(filePath, 'r');
187
+ try {
188
+ const buffer = Buffer.alloc(CHUNK);
189
+ let carry = '';
190
+ let pos = 0;
191
+ for (;;) {
192
+ const { bytesRead } = await handle.read(buffer, 0, CHUNK, pos);
193
+ if (bytesRead === 0)
194
+ break;
195
+ const text = carry + buffer.toString('utf8', 0, bytesRead);
196
+ if (DDL_PRESENCE_RE.test(text))
197
+ return true;
198
+ carry = text.slice(-CARRY);
199
+ pos += bytesRead;
200
+ }
201
+ return false;
202
+ }
203
+ finally {
204
+ await handle.close();
205
+ }
206
+ }
207
+ /**
208
+ * Extract migration ops from an SQL file, honoring stage-1 streaming: when
209
+ * `sourceCode` is empty the file was too large to materialize, so DDL presence
210
+ * is detected by streaming; only a real oversized migration is read in full
211
+ * (rare). Returns a `skipped` flag so the pipeline can surface the skip in
212
+ * coverage without emitting a violation.
213
+ * @param filePath
214
+ * @param sourceCode
215
+ * @returns
216
+ */
217
+ export async function extractMigrationOpsFromFile(filePath, sourceCode) {
218
+ if (sourceCode !== '') {
219
+ return { ops: parseMigrationOps(sourceCode), skipped: false, bytes: Buffer.byteLength(sourceCode) };
220
+ }
221
+ let size = 0;
222
+ try {
223
+ size = (await fs.stat(filePath)).size;
224
+ }
225
+ catch {
226
+ size = 0;
227
+ }
228
+ if (size <= MAX_ORPHAN_SOURCE_BYTES) {
229
+ // Empty or small file whose read produced an empty string — nothing to do.
230
+ return { ops: [], skipped: false, bytes: size };
231
+ }
232
+ if (!(await sqlFileHasDdl(filePath))) {
233
+ return { ops: [], skipped: true, bytes: size };
234
+ }
235
+ const full = await fs.readFile(filePath, 'utf-8');
236
+ return { ops: parseMigrationOps(full), skipped: false, bytes: size };
237
+ }
238
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/migrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Shared types for the schema analyzer family.
3
+ *
4
+ * Split out of UniversalSchemaAnalyzer.ts (Spec 33 item 15) so the
5
+ * migration/DDL, discovery, table-analysis, and JSON-schema modules can each
6
+ * import what they need without dragging in the whole analyzer — and without
7
+ * creating a circular import through the class.
8
+ */
9
+ import type { AST, LanguageAdapter } from '../../../languages/types.js';
10
+ /**
11
+ * Configuration for Schema analyzer
12
+ */
13
+ export interface SchemaAnalyzerConfig {
14
+ enableTableUsageTracking?: boolean;
15
+ checkMissingReferences?: boolean;
16
+ checkNamingConventions?: boolean;
17
+ detectUnusedTables?: boolean;
18
+ validateQueryPatterns?: boolean;
19
+ maxQueriesPerFunction?: number;
20
+ requiredSchemas?: string[];
21
+ schemas?: Array<{
22
+ name: string;
23
+ tables: Array<{
24
+ name: string;
25
+ columns: Array<{
26
+ name: string;
27
+ type: string;
28
+ }>;
29
+ }>;
30
+ }>;
31
+ validateJsonSchemas?: boolean;
32
+ jsonSchemaVersion?: 'draft-04' | 'draft-06' | 'draft-07' | '2019-09' | '2020-12';
33
+ allowedJsonTypes?: string[];
34
+ schemaFilePatterns?: string[];
35
+ dataFilePatterns?: string[];
36
+ schemaDataPairs?: Array<{
37
+ schema: string;
38
+ data: string | string[];
39
+ }>;
40
+ strictMode?: boolean;
41
+ allowAdditionalProperties?: boolean;
42
+ sqlTagNames?: string[];
43
+ dbReceiverNames?: string[];
44
+ dbCallMethods?: string[];
45
+ dbBindingNames?: string[];
46
+ dbWrapperNames?: string[];
47
+ fileGateGlobs?: string[];
48
+ schemaFiles?: string[];
49
+ /** Spec 29: Declarative table-source registry for Tier 2 ORM detection */
50
+ tableSources?: TableSourceEntry[];
51
+ }
52
+ export interface TableReference {
53
+ table: string;
54
+ type: 'select' | 'insert' | 'update' | 'delete' | 'create' | 'reference';
55
+ location: {
56
+ line: number;
57
+ column: number;
58
+ };
59
+ context: string;
60
+ }
61
+ /**
62
+ * Registry entry for declarative table-source detection.
63
+ * Adding an ORM becomes a config entry, not code.
64
+ */
65
+ export interface TableSourceEntry {
66
+ /** Type discriminator for the match shape */
67
+ kind: 'callee' | 'decorator';
68
+ /** The function/method/decorator name to match */
69
+ name: string;
70
+ /** Which argument (0-indexed) holds the table name as a string literal */
71
+ arg: number;
72
+ /** Human-readable description for provenance display */
73
+ description?: string;
74
+ /**
75
+ * Optional: required module path. When set, the call/decorator is only
76
+ * considered if the identifier originates from an import matching this
77
+ * specifier. Example: 'knex' prevents matching a local function also
78
+ * named createTable.
79
+ */
80
+ module?: string;
81
+ }
82
+ /**
83
+ * Per-table origin record — tracks which tier and source file contributed
84
+ * a table to the catalog.
85
+ */
86
+ export interface TableProvenance {
87
+ table: string;
88
+ tier: 'sql-migration' | 'orm-registry' | 'prisma-model' | 'external-config';
89
+ sourceFile?: string;
90
+ description?: string;
91
+ }
92
+ /**
93
+ * A complete catalog entry: one table name with all its known sources.
94
+ */
95
+ export interface TableCatalogEntry {
96
+ table: string;
97
+ sources: TableProvenance[];
98
+ }
99
+ /**
100
+ * Resolution context threaded through the registry table extractors. Bundling
101
+ * the AST + adapter + source + file-path + module-reader tuple keeps the
102
+ * extractor signatures at three positional parameters (target + context +
103
+ * accumulator) instead of six.
104
+ *
105
+ * `importMap` is populated by `extractTablesFromRegistry` before dispatch —
106
+ * callers build the context without it.
107
+ */
108
+ export interface RegistryExtractionContext {
109
+ ast: AST;
110
+ adapter: LanguageAdapter;
111
+ sourceCode: string;
112
+ filePath: string;
113
+ importMap?: Map<string, Map<string, string>>;
114
+ readModule?: (fromFile: string, specifier: string) => string | null;
115
+ }
116
+ /** A single DDL state transition parsed from migration SQL. */
117
+ export type MigrationOp = {
118
+ op: 'CREATE' | 'DROP' | 'RENAME';
119
+ table: string;
120
+ newTable?: string;
121
+ };
122
+ /** A single re-export statement from a barrel file. */
123
+ export interface ReExport {
124
+ /** The module the statement re-exports from. */
125
+ source: string;
126
+ /** True for `export * from 'x'` (every name maps to itself). */
127
+ star: boolean;
128
+ /** For named re-exports: local export name → original package name. */
129
+ renamed: Map<string, string>;
130
+ }
131
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Shared types for the schema analyzer family.
3
+ *
4
+ * Split out of UniversalSchemaAnalyzer.ts (Spec 33 item 15) so the
5
+ * migration/DDL, discovery, table-analysis, and JSON-schema modules can each
6
+ * import what they need without dragging in the whole analyzer — and without
7
+ * creating a circular import through the class.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Schema violation builders — module-level equivalents of the base
3
+ * UniversalAnalyzer.createViolation with `analyzer: 'schema'` hardcoded, so
4
+ * extracted free functions (Spec 34) can construct violations without a `this`
5
+ * reference back through the analyzer class.
6
+ */
7
+ import type { Violation } from '../../../types.js';
8
+ /**
9
+ * Bundled classification for a schema violation — `severity`, `rule`, and an
10
+ * optional `symbol` travel together so `createSchemaViolation` stays a 4-arg
11
+ * call rather than a 6-arg one.
12
+ */
13
+ export interface SchemaViolationClassification {
14
+ severity: 'critical' | 'warning' | 'suggestion';
15
+ rule: string;
16
+ symbol?: string;
17
+ }
18
+ /**
19
+ * Module-level equivalent of `UniversalAnalyzer.createViolation`. `rule`
20
+ * identity is preserved exactly; `location` and optional `symbol` are kept,
21
+ * while `analyzer` is hardcoded to `'schema'` instead of `this.name`.
22
+ *
23
+ * @param file The file the violation occurred in.
24
+ * @param location The 1-based line/column of the violation.
25
+ * @param message The human-readable violation message.
26
+ * @param classification Bundled severity/rule/symbol classification.
27
+ * @returns A schema analyzer violation.
28
+ */
29
+ export declare function createSchemaViolation(file: string, location: {
30
+ line: number;
31
+ column: number;
32
+ }, message: string, classification: SchemaViolationClassification): Violation;
33
+ /**
34
+ * Single-line JSON validation violation — hardcoded `line: 1` / `column: 1`
35
+ * (JSON files have no AST positions). Used by the JSON-schema helpers.
36
+ *
37
+ * @param file The JSON file the violation occurred in.
38
+ * @param severity The violation severity.
39
+ * @param message The human-readable violation message.
40
+ * @param rule The rule identifier.
41
+ * @returns A schema analyzer violation anchored at 1:1.
42
+ */
43
+ export declare function emitViolation(file: string, severity: Violation['severity'], message: string, rule: string): Violation;
44
+ //# sourceMappingURL=violations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"violations.d.ts","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/violations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC1C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,6BAA6B,GAC5C,SAAS,CAcX;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,EAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,SAAS,CAUX"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Schema violation builders — module-level equivalents of the base
3
+ * UniversalAnalyzer.createViolation with `analyzer: 'schema'` hardcoded, so
4
+ * extracted free functions (Spec 34) can construct violations without a `this`
5
+ * reference back through the analyzer class.
6
+ */
7
+ /**
8
+ * Module-level equivalent of `UniversalAnalyzer.createViolation`. `rule`
9
+ * identity is preserved exactly; `location` and optional `symbol` are kept,
10
+ * while `analyzer` is hardcoded to `'schema'` instead of `this.name`.
11
+ *
12
+ * @param file The file the violation occurred in.
13
+ * @param location The 1-based line/column of the violation.
14
+ * @param message The human-readable violation message.
15
+ * @param classification Bundled severity/rule/symbol classification.
16
+ * @returns A schema analyzer violation.
17
+ */
18
+ export function createSchemaViolation(file, location, message, classification) {
19
+ const v = {
20
+ file,
21
+ line: location.line,
22
+ column: location.column,
23
+ severity: classification.severity,
24
+ message,
25
+ rule: classification.rule,
26
+ analyzer: 'schema'
27
+ };
28
+ if (classification.symbol) {
29
+ v.functionName = classification.symbol;
30
+ }
31
+ return v;
32
+ }
33
+ /**
34
+ * Single-line JSON validation violation — hardcoded `line: 1` / `column: 1`
35
+ * (JSON files have no AST positions). Used by the JSON-schema helpers.
36
+ *
37
+ * @param file The JSON file the violation occurred in.
38
+ * @param severity The violation severity.
39
+ * @param message The human-readable violation message.
40
+ * @param rule The rule identifier.
41
+ * @returns A schema analyzer violation anchored at 1:1.
42
+ */
43
+ export function emitViolation(file, severity, message, rule) {
44
+ return {
45
+ file,
46
+ line: 1,
47
+ column: 1,
48
+ severity,
49
+ message,
50
+ rule,
51
+ analyzer: 'schema',
52
+ };
53
+ }
54
+ //# sourceMappingURL=violations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"violations.js","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/violations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,QAA0C,EAC1C,OAAe,EACf,cAA6C;IAE7C,MAAM,CAAC,GAAc;QACnB,IAAI;QACJ,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,cAAc,CAAC,QAAQ;QACjC,OAAO;QACP,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,QAAQ,EAAE,QAAQ;KACnB,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC,CAAC,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;IACzC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,QAA+B,EAC/B,OAAe,EACf,IAAY;IAEZ,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,QAAQ,EAAE,QAAQ;KACnB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"auditRunner.d.ts","sourceRoot":"","sources":["../src/auditRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EAOf,MAAM,YAAY,CAAC;AAyDpB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB;oCAiBnB,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAAC;uBAQjD,kBAAkB,KAAG,OAAO,CAAC,WAAW,CAAC;6BAk3B1B,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;EAS7F;AA6RD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC/C,UAAU,CAAC,EAAE,MAAM,GAClB,iBAAiB,EAAE,CA0CrB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAGjF;AAED,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"auditRunner.d.ts","sourceRoot":"","sources":["../src/auditRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EASf,MAAM,YAAY,CAAC;AA4DpB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB;oCAiBnB,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAAC;uBAQjD,kBAAkB,KAAG,OAAO,CAAC,WAAW,CAAC;6BA29B1B,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;EAS7F;AAyQD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC/C,UAAU,CAAC,EAAE,MAAM,GAClB,iBAAiB,EAAE,CA0CrB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAGjF;AAED,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}