code-auditor-mcp 3.4.12 → 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 (245) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/dist/analyzers/__verify_self_probe.d.ts +2 -0
  3. package/dist/analyzers/__verify_self_probe.d.ts.map +1 -0
  4. package/dist/analyzers/__verify_self_probe.js +5 -0
  5. package/dist/analyzers/__verify_self_probe.js.map +1 -0
  6. package/dist/analyzers/analyzerUtils.d.ts +34 -1
  7. package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
  8. package/dist/analyzers/analyzerUtils.js +61 -22
  9. package/dist/analyzers/analyzerUtils.js.map +1 -1
  10. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +18 -23
  11. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  12. package/dist/analyzers/cross-language/APIContractAnalyzer.js +198 -186
  13. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  14. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +78 -55
  15. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  16. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +244 -243
  17. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  18. package/dist/analyzers/cross-language/SchemaValidator.d.ts +27 -37
  19. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  20. package/dist/analyzers/cross-language/SchemaValidator.js +314 -275
  21. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  22. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +17 -46
  23. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  24. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +620 -523
  25. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  26. package/dist/analyzers/documentationAnalyzer.d.ts +7 -2
  27. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  28. package/dist/analyzers/documentationAnalyzer.js +259 -198
  29. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  30. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  31. package/dist/analyzers/invariantsAnalyzer.js +57 -50
  32. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  33. package/dist/analyzers/orm/adapterRegistry.d.ts +10 -0
  34. package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
  35. package/dist/analyzers/orm/adapterRegistry.js +10 -0
  36. package/dist/analyzers/orm/adapterRegistry.js.map +1 -1
  37. package/dist/analyzers/orm/drizzleAdapter.d.ts +22 -0
  38. package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
  39. package/dist/analyzers/orm/drizzleAdapter.js +42 -44
  40. package/dist/analyzers/orm/drizzleAdapter.js.map +1 -1
  41. package/dist/analyzers/orm/prismaAdapter.d.ts +30 -0
  42. package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
  43. package/dist/analyzers/orm/prismaAdapter.js +30 -0
  44. package/dist/analyzers/orm/prismaAdapter.js.map +1 -1
  45. package/dist/analyzers/provenance.d.ts +62 -2
  46. package/dist/analyzers/provenance.d.ts.map +1 -1
  47. package/dist/analyzers/provenance.js +443 -349
  48. package/dist/analyzers/provenance.js.map +1 -1
  49. package/dist/analyzers/reactAnalyzer.d.ts +11 -0
  50. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  51. package/dist/analyzers/reactAnalyzer.js +188 -125
  52. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  53. package/dist/analyzers/ruleRegistry.d.ts +110 -1
  54. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  55. package/dist/analyzers/ruleRegistry.js +1714 -124
  56. package/dist/analyzers/ruleRegistry.js.map +1 -1
  57. package/dist/analyzers/ruleTiming.d.ts +54 -0
  58. package/dist/analyzers/ruleTiming.d.ts.map +1 -0
  59. package/dist/analyzers/ruleTiming.js +71 -0
  60. package/dist/analyzers/ruleTiming.js.map +1 -0
  61. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +13 -0
  62. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  63. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +362 -283
  64. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  65. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +26 -68
  66. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  67. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +430 -391
  68. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  69. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +17 -202
  70. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  71. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +1073 -1121
  72. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  73. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +3 -49
  74. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  75. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +414 -340
  76. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  77. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +48 -5
  78. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  79. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +262 -134
  80. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  81. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +23 -214
  82. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  83. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +139 -1521
  84. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  85. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +78 -79
  86. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  87. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +613 -480
  88. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  89. package/dist/analyzers/universal/schema/codeAnalysis.d.ts +307 -0
  90. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -0
  91. package/dist/analyzers/universal/schema/codeAnalysis.js +965 -0
  92. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -0
  93. package/dist/analyzers/universal/schema/config.d.ts +31 -0
  94. package/dist/analyzers/universal/schema/config.d.ts.map +1 -0
  95. package/dist/analyzers/universal/schema/config.js +57 -0
  96. package/dist/analyzers/universal/schema/config.js.map +1 -0
  97. package/dist/analyzers/universal/schema/discovery.d.ts +167 -0
  98. package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -0
  99. package/dist/analyzers/universal/schema/discovery.js +616 -0
  100. package/dist/analyzers/universal/schema/discovery.js.map +1 -0
  101. package/dist/analyzers/universal/schema/jsonSchema.d.ts +27 -0
  102. package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -0
  103. package/dist/analyzers/universal/schema/jsonSchema.js +368 -0
  104. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -0
  105. package/dist/analyzers/universal/schema/migrations.d.ts +90 -0
  106. package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -0
  107. package/dist/analyzers/universal/schema/migrations.js +238 -0
  108. package/dist/analyzers/universal/schema/migrations.js.map +1 -0
  109. package/dist/analyzers/universal/schema/types.d.ts +131 -0
  110. package/dist/analyzers/universal/schema/types.d.ts.map +1 -0
  111. package/dist/analyzers/universal/schema/types.js +10 -0
  112. package/dist/analyzers/universal/schema/types.js.map +1 -0
  113. package/dist/analyzers/universal/schema/violations.d.ts +44 -0
  114. package/dist/analyzers/universal/schema/violations.d.ts.map +1 -0
  115. package/dist/analyzers/universal/schema/violations.js +54 -0
  116. package/dist/analyzers/universal/schema/violations.js.map +1 -0
  117. package/dist/auditRunner.d.ts.map +1 -1
  118. package/dist/auditRunner.js +89 -13
  119. package/dist/auditRunner.js.map +1 -1
  120. package/dist/cli.js +315 -40
  121. package/dist/cli.js.map +1 -1
  122. package/dist/config/configLoader.d.ts.map +1 -1
  123. package/dist/config/configLoader.js +9 -7
  124. package/dist/config/configLoader.js.map +1 -1
  125. package/dist/config/defaults.d.ts +12 -3
  126. package/dist/config/defaults.d.ts.map +1 -1
  127. package/dist/config/defaults.js +15 -5
  128. package/dist/config/defaults.js.map +1 -1
  129. package/dist/config/effectiveConfig.d.ts +75 -0
  130. package/dist/config/effectiveConfig.d.ts.map +1 -0
  131. package/dist/config/effectiveConfig.js +213 -0
  132. package/dist/config/effectiveConfig.js.map +1 -0
  133. package/dist/config/pathProfiles.d.ts +7 -4
  134. package/dist/config/pathProfiles.d.ts.map +1 -1
  135. package/dist/config/pathProfiles.js +8 -10
  136. package/dist/config/pathProfiles.js.map +1 -1
  137. package/dist/config/thresholdRationales.d.ts +45 -0
  138. package/dist/config/thresholdRationales.d.ts.map +1 -0
  139. package/dist/config/thresholdRationales.js +67 -0
  140. package/dist/config/thresholdRationales.js.map +1 -0
  141. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  142. package/dist/conventions/conventionMiner.js +6 -2
  143. package/dist/conventions/conventionMiner.js.map +1 -1
  144. package/dist/enforcement/diffGate.d.ts +55 -0
  145. package/dist/enforcement/diffGate.d.ts.map +1 -0
  146. package/dist/enforcement/diffGate.js +136 -0
  147. package/dist/enforcement/diffGate.js.map +1 -0
  148. package/dist/enforcement/gate.d.ts +36 -0
  149. package/dist/enforcement/gate.d.ts.map +1 -0
  150. package/dist/enforcement/gate.js +72 -0
  151. package/dist/enforcement/gate.js.map +1 -0
  152. package/dist/enforcement/suppressions.d.ts +41 -0
  153. package/dist/enforcement/suppressions.d.ts.map +1 -0
  154. package/dist/enforcement/suppressions.js +170 -0
  155. package/dist/enforcement/suppressions.js.map +1 -0
  156. package/dist/fingerprint.d.ts.map +1 -1
  157. package/dist/fingerprint.js +4 -1
  158. package/dist/fingerprint.js.map +1 -1
  159. package/dist/invariants/ruleEngine.d.ts +3 -4
  160. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  161. package/dist/invariants/ruleEngine.js +2 -2
  162. package/dist/invariants/ruleEngine.js.map +1 -1
  163. package/dist/languages/LanguageOrchestrator.d.ts +14 -0
  164. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  165. package/dist/languages/LanguageOrchestrator.js +93 -55
  166. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  167. package/dist/languages/LanguageRegistry.d.ts +8 -0
  168. package/dist/languages/LanguageRegistry.d.ts.map +1 -1
  169. package/dist/languages/LanguageRegistry.js +8 -0
  170. package/dist/languages/LanguageRegistry.js.map +1 -1
  171. package/dist/languages/RuntimeManager.d.ts +82 -60
  172. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  173. package/dist/languages/RuntimeManager.js +404 -349
  174. package/dist/languages/RuntimeManager.js.map +1 -1
  175. package/dist/languages/UniversalAnalyzer.d.ts +51 -6
  176. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
  177. package/dist/languages/UniversalAnalyzer.js +127 -88
  178. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  179. package/dist/languages/adapterBridge.d.ts +36 -0
  180. package/dist/languages/adapterBridge.d.ts.map +1 -1
  181. package/dist/languages/adapterBridge.js +89 -35
  182. package/dist/languages/adapterBridge.js.map +1 -1
  183. package/dist/languages/go/GoAdapter.d.ts +66 -23
  184. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  185. package/dist/languages/go/GoAdapter.js +553 -474
  186. package/dist/languages/go/GoAdapter.js.map +1 -1
  187. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +33 -4
  188. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
  189. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +101 -66
  190. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
  191. package/dist/languages/tree-sitter/converter.d.ts +18 -0
  192. package/dist/languages/tree-sitter/converter.d.ts.map +1 -1
  193. package/dist/languages/tree-sitter/converter.js +18 -0
  194. package/dist/languages/tree-sitter/converter.js.map +1 -1
  195. package/dist/languages/tree-sitter/parser.d.ts +39 -2
  196. package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
  197. package/dist/languages/tree-sitter/parser.js +93 -12
  198. package/dist/languages/tree-sitter/parser.js.map +1 -1
  199. package/dist/languages/types.d.ts +67 -2
  200. package/dist/languages/types.d.ts.map +1 -1
  201. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +253 -72
  202. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  203. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +1419 -923
  204. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  205. package/dist/mcp-tools-shared.d.ts.map +1 -1
  206. package/dist/mcp-tools-shared.js.map +1 -1
  207. package/dist/pipeline.d.ts +13 -5
  208. package/dist/pipeline.d.ts.map +1 -1
  209. package/dist/pipeline.js +381 -200
  210. package/dist/pipeline.js.map +1 -1
  211. package/dist/pipelineAdapters.d.ts +3 -8
  212. package/dist/pipelineAdapters.d.ts.map +1 -1
  213. package/dist/pipelineAdapters.js +149 -94
  214. package/dist/pipelineAdapters.js.map +1 -1
  215. package/dist/presets/presets.d.ts +54 -0
  216. package/dist/presets/presets.d.ts.map +1 -0
  217. package/dist/presets/presets.js +181 -0
  218. package/dist/presets/presets.js.map +1 -0
  219. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  220. package/dist/reporting/sarifReportGenerator.js +0 -2
  221. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  222. package/dist/ruleAliases.d.ts +67 -0
  223. package/dist/ruleAliases.d.ts.map +1 -0
  224. package/dist/ruleAliases.js +79 -0
  225. package/dist/ruleAliases.js.map +1 -0
  226. package/dist/styles/cssAstExtractor.d.ts.map +1 -1
  227. package/dist/styles/cssAstExtractor.js +78 -18
  228. package/dist/styles/cssAstExtractor.js.map +1 -1
  229. package/dist/styles/styleIndexer.js +10 -1
  230. package/dist/styles/styleIndexer.js.map +1 -1
  231. package/dist/styles/tailwindConfigLoader.d.ts +8 -6
  232. package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
  233. package/dist/styles/tailwindConfigLoader.js +61 -15
  234. package/dist/styles/tailwindConfigLoader.js.map +1 -1
  235. package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
  236. package/dist/styles/tailwindUtilityExpander.js +13 -1
  237. package/dist/styles/tailwindUtilityExpander.js.map +1 -1
  238. package/dist/types.d.ts +181 -1
  239. package/dist/types.d.ts.map +1 -1
  240. package/dist/types.js +8 -0
  241. package/dist/types.js.map +1 -1
  242. package/package.json +5 -3
  243. package/plugin/hooks/hooks.json +1 -1
  244. package/plugin/scripts/hook-audit.sh +25 -7
  245. package/plugin/skills/code-auditor/SKILL.md +5 -5
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Spec 34 — JSON Schema validation (schema-json Stage 2 visitor + reducer
3
+ * input). Extracted to module-level free functions; the only public entry
4
+ * point is `analyzeJsonSchemas`, consumed by pipelineAdapters.ts via the
5
+ * module surface.
6
+ *
7
+ * Dependency direction is leaf -> parent:
8
+ * jsonSchema.ts --(types, config, violations, pipeline)
9
+ */
10
+ import { DEFAULT_SCHEMA_CONFIG } from './config.js';
11
+ import { emitViolation } from './violations.js';
12
+ import { makeVisitorStatus } from '../../../pipeline.js';
13
+ /**
14
+ * Analyze JSON schemas and validate data files against them.
15
+ *
16
+ * Pipeline-refactored: accepts a list of JSON file paths plus an on-demand
17
+ * parser so parsed objects are transient (one file at a time) rather than
18
+ * retained in memory for the whole Stage 3 reducer run.
19
+ *
20
+ * @param files JSON file paths to validate
21
+ * @param readJson on-demand parser: returns the parsed object, or null when
22
+ * the file failed to parse (invalid JSON) or was absent.
23
+ * @param config Schema analyzer configuration
24
+ * @param analyzerName name reported in the returned AnalyzerResult
25
+ * @returns the aggregate JSON-schema validation result
26
+ */
27
+ export function analyzeJsonSchemas(files, readJson, config, analyzerName = 'schema') {
28
+ const startTime = Date.now();
29
+ const finalConfig = { ...DEFAULT_SCHEMA_CONFIG, ...config };
30
+ if (!finalConfig.validateJsonSchemas) {
31
+ return jsonResult({ violations: [], errors: [], filesProcessed: 0 }, 0, analyzerName);
32
+ }
33
+ const schemaFiles = identifySchemaFiles(files, finalConfig);
34
+ const dataFiles = identifyDataFiles(files, finalConfig);
35
+ const unknownJsonFiles = files.filter(f => !schemaFiles.includes(f) && !dataFiles.includes(f));
36
+ const state = { violations: [], errors: [], filesProcessed: 0 };
37
+ const scan = { files, readJson, config: finalConfig, state };
38
+ const schemas = loadSchemas(schemaFiles, scan);
39
+ if (finalConfig.schemaDataPairs) {
40
+ validatePairedData(schemas, scan);
41
+ }
42
+ else {
43
+ validateDiscoveredData([...dataFiles, ...unknownJsonFiles], unknownJsonFiles, schemas, scan);
44
+ }
45
+ return jsonResult(state, Date.now() - startTime, analyzerName);
46
+ }
47
+ function jsonResult(state, executionTime, analyzerName) {
48
+ return {
49
+ violations: state.violations,
50
+ errors: state.errors,
51
+ status: makeVisitorStatus(state.filesProcessed),
52
+ executionTime,
53
+ analyzerName,
54
+ };
55
+ }
56
+ function loadSchemas(schemaFiles, scan) {
57
+ const schemas = new Map();
58
+ for (const file of schemaFiles) {
59
+ try {
60
+ const schema = scan.readJson(file);
61
+ if (schema === null)
62
+ throw new SyntaxError('JSON parse failed');
63
+ schemas.set(file, schema);
64
+ scan.state.violations.push(...validateJsonSchema(schema, file, scan.config));
65
+ scan.state.filesProcessed++;
66
+ }
67
+ catch (error) {
68
+ if (error instanceof SyntaxError) {
69
+ scan.state.violations.push(emitViolation(file, 'warning', `Invalid JSON: ${error.message}`, 'invalid-json'));
70
+ }
71
+ else {
72
+ scan.state.errors.push({
73
+ file,
74
+ error: error instanceof Error ? error.message : String(error),
75
+ });
76
+ }
77
+ scan.state.filesProcessed++;
78
+ }
79
+ }
80
+ return schemas;
81
+ }
82
+ function validatePairedData(schemas, scan) {
83
+ for (const pair of scan.config.schemaDataPairs) {
84
+ const schema = schemas.get(pair.schema) ?? scan.readJson(pair.schema);
85
+ if (schema) {
86
+ const dataFiles = Array.isArray(pair.data) ? pair.data : [pair.data];
87
+ for (const dataFile of dataFiles) {
88
+ if (scan.files.includes(dataFile)) {
89
+ const parsed = scan.readJson(dataFile);
90
+ if (parsed !== null) {
91
+ const dataViolations = [];
92
+ validateAgainstSchema(parsed, schema, {
93
+ filePath: dataFile,
94
+ config: scan.config,
95
+ violations: dataViolations,
96
+ });
97
+ scan.state.violations.push(...dataViolations);
98
+ }
99
+ else {
100
+ scan.state.violations.push(emitViolation(dataFile, 'warning', 'Invalid JSON in data file', 'invalid-json'));
101
+ }
102
+ scan.state.filesProcessed++;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ function validateDiscoveredData(dataFiles, unknownJsonFiles, schemas, scan) {
109
+ for (const dataFile of dataFiles) {
110
+ const matchedSchema = findMatchingSchema(dataFile, schemas);
111
+ if (matchedSchema) {
112
+ const parsed = scan.readJson(dataFile);
113
+ if (parsed !== null) {
114
+ const dataViolations = [];
115
+ validateAgainstSchema(parsed, matchedSchema, {
116
+ filePath: dataFile,
117
+ config: scan.config,
118
+ violations: dataViolations,
119
+ });
120
+ scan.state.violations.push(...dataViolations);
121
+ }
122
+ }
123
+ else if (unknownJsonFiles.includes(dataFile)) {
124
+ const parsed = scan.readJson(dataFile);
125
+ if (parsed === null) {
126
+ scan.state.violations.push(emitViolation(dataFile, 'warning', 'Invalid JSON: Parse error', 'invalid-json'));
127
+ }
128
+ }
129
+ scan.state.filesProcessed++;
130
+ }
131
+ }
132
+ function validateJsonSchema(schema, filePath, config) {
133
+ const ctx = { filePath, config, violations: [] };
134
+ if (!schema.$schema && config.jsonSchemaVersion) {
135
+ emit(ctx, 'suggestion', 'missing-schema-declaration', 'JSON Schema missing $schema declaration');
136
+ }
137
+ validateSchemaTypes(schema, ctx);
138
+ if (schema.type === 'object' && schema.properties) {
139
+ if (schema.required && Array.isArray(schema.required)) {
140
+ for (const field of schema.required) {
141
+ if (!schema.properties[field]) {
142
+ emit(ctx, 'warning', 'undefined-required-field', `Required field "${field}" not defined in properties`);
143
+ }
144
+ }
145
+ }
146
+ }
147
+ return ctx.violations;
148
+ }
149
+ function validateSchemaTypes(schema, ctx, path = '') {
150
+ if (!schema || typeof schema !== 'object')
151
+ return;
152
+ checkSchemaTypeField(schema, ctx, path);
153
+ checkNumericRangeField(schema, ctx, path);
154
+ if (schema.properties) {
155
+ for (const [key, value] of Object.entries(schema.properties)) {
156
+ validateSchemaTypes(value, ctx, `${path}.${key}`);
157
+ }
158
+ }
159
+ if (schema.items) {
160
+ validateSchemaTypes(schema.items, ctx, `${path}[items]`);
161
+ }
162
+ if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {
163
+ validateSchemaTypes(schema.additionalProperties, ctx, `${path}[additionalProperties]`);
164
+ }
165
+ }
166
+ function checkSchemaTypeField(schema, ctx, path) {
167
+ if (schema.type && ctx.config.allowedJsonTypes) {
168
+ const types = Array.isArray(schema.type) ? schema.type : [schema.type];
169
+ for (const type of types) {
170
+ if (!ctx.config.allowedJsonTypes.includes(type)) {
171
+ emit(ctx, 'warning', 'invalid-type', `Invalid type "${type}" at ${path || 'root'}. Allowed types: ${ctx.config.allowedJsonTypes.join(', ')}`);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ function checkNumericRangeField(schema, ctx, path) {
177
+ if (schema.type === 'integer' || schema.type === 'number') {
178
+ if (schema.minimum !== undefined && schema.maximum !== undefined) {
179
+ if (schema.minimum > schema.maximum) {
180
+ emit(ctx, 'warning', 'invalid-range', `Invalid range at ${path}: minimum (${schema.minimum}) > maximum (${schema.maximum})`);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ function identifySchemaFiles(files, config) {
186
+ if (!config.schemaFilePatterns)
187
+ return [];
188
+ return files.filter(file => {
189
+ const fileName = file.split('/').pop() || '';
190
+ return config.schemaFilePatterns.some(pattern => {
191
+ const regex = new RegExp(pattern.replace('*', '.*'));
192
+ return regex.test(fileName);
193
+ });
194
+ });
195
+ }
196
+ function identifyDataFiles(files, config) {
197
+ if (!config.dataFilePatterns)
198
+ return [];
199
+ return files.filter(file => {
200
+ const fileName = file.split('/').pop() || '';
201
+ return config.dataFilePatterns.some(pattern => {
202
+ const regex = new RegExp(pattern.replace('*', '.*'));
203
+ return regex.test(fileName);
204
+ });
205
+ });
206
+ }
207
+ function findMatchingSchema(dataFile, schemas) {
208
+ const dataFileName = dataFile.split('/').pop() || '';
209
+ const dataBaseName = dataFileName.replace(/\.(data|example|test)\.json$/, '');
210
+ for (const [schemaFile, schema] of schemas) {
211
+ const schemaFileName = schemaFile.split('/').pop() || '';
212
+ const schemaBaseName = schemaFileName.replace(/[.-]?schema\.json$/, '');
213
+ if (dataBaseName === schemaBaseName) {
214
+ return schema;
215
+ }
216
+ }
217
+ if (schemas.size === 1) {
218
+ return schemas.values().next().value;
219
+ }
220
+ return null;
221
+ }
222
+ function validateAgainstSchema(data, schema, ctx, path = '') {
223
+ if (schema.type) {
224
+ const actualType = actualTypeOf(data);
225
+ const allowedTypes = Array.isArray(schema.type) ? schema.type : [schema.type];
226
+ if (!matchesSchemaType(data, actualType, allowedTypes)) {
227
+ emit(ctx, 'warning', 'type-mismatch', `Type mismatch at ${path || 'root'}: expected ${allowedTypes.join(' | ')}, got ${actualType}`);
228
+ return;
229
+ }
230
+ }
231
+ checkStringConstraints(data, schema, ctx, path);
232
+ checkNumberConstraints(data, schema, ctx, path);
233
+ checkArrayConstraints(data, schema, ctx, path);
234
+ checkObjectConstraints(data, schema, ctx, path);
235
+ checkEnumConstraint(data, schema, ctx, path);
236
+ }
237
+ function actualTypeOf(data) {
238
+ if (Array.isArray(data))
239
+ return 'array';
240
+ if (data === null)
241
+ return 'null';
242
+ return typeof data;
243
+ }
244
+ function matchesSchemaType(data, actualType, allowedTypes) {
245
+ return allowedTypes.some((type) => {
246
+ if (type === 'integer') {
247
+ return typeof data === 'number' && Number.isInteger(data);
248
+ }
249
+ return type === actualType;
250
+ });
251
+ }
252
+ function checkStringConstraints(data, schema, ctx, path) {
253
+ if (schema.type !== 'string' || typeof data !== 'string')
254
+ return;
255
+ if (schema.minLength !== undefined && data.length < schema.minLength) {
256
+ emit(ctx, 'warning', 'string-too-short', `String at ${path} too short: ${data.length} < ${schema.minLength}`);
257
+ }
258
+ if (schema.maxLength !== undefined && data.length > schema.maxLength) {
259
+ emit(ctx, 'warning', 'string-too-long', `String at ${path} too long: ${data.length} > ${schema.maxLength}`);
260
+ }
261
+ if (schema.pattern) {
262
+ const regex = new RegExp(schema.pattern);
263
+ if (!regex.test(data)) {
264
+ emit(ctx, 'warning', 'pattern-mismatch', `String at ${path} doesn't match pattern: ${schema.pattern}`);
265
+ }
266
+ }
267
+ if (schema.format) {
268
+ checkFormatConstraint(data, schema.format, ctx, path);
269
+ }
270
+ }
271
+ function checkFormatConstraint(data, format, ctx, path) {
272
+ switch (format) {
273
+ case 'email':
274
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(data)) {
275
+ emit(ctx, 'warning', 'invalid-format', `Invalid email format at ${path}`);
276
+ }
277
+ break;
278
+ case 'uuid':
279
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(data)) {
280
+ emit(ctx, 'warning', 'invalid-format', `Invalid UUID format at ${path}`);
281
+ }
282
+ break;
283
+ }
284
+ }
285
+ function checkNumberConstraints(data, schema, ctx, path) {
286
+ if ((schema.type !== 'number' && schema.type !== 'integer') || typeof data !== 'number')
287
+ return;
288
+ if (schema.minimum !== undefined && data < schema.minimum) {
289
+ emit(ctx, 'warning', 'below-minimum', `Value at ${path} below minimum: ${data} < ${schema.minimum}`);
290
+ }
291
+ if (schema.maximum !== undefined && data > schema.maximum) {
292
+ emit(ctx, 'warning', 'above-maximum', `Value at ${path} above maximum: ${data} > ${schema.maximum}`);
293
+ }
294
+ }
295
+ function checkArrayConstraints(data, schema, ctx, path) {
296
+ if (schema.type !== 'array' || !Array.isArray(data))
297
+ return;
298
+ if (schema.minItems !== undefined && data.length < schema.minItems) {
299
+ emit(ctx, 'warning', 'too-few-items', `Array at ${path} has too few items: ${data.length} < ${schema.minItems}`);
300
+ }
301
+ if (schema.maxItems !== undefined && data.length > schema.maxItems) {
302
+ emit(ctx, 'warning', 'too-many-items', `Array at ${path} has too many items: ${data.length} > ${schema.maxItems}`);
303
+ }
304
+ if (schema.items) {
305
+ data.forEach((item, index) => {
306
+ validateAgainstSchema(item, schema.items, ctx, `${path}[${index}]`);
307
+ });
308
+ }
309
+ }
310
+ function checkObjectConstraints(data, schema, ctx, path) {
311
+ if (schema.type !== 'object' || typeof data !== 'object' || data === null)
312
+ return;
313
+ if (schema.required && Array.isArray(schema.required)) {
314
+ for (const requiredField of schema.required) {
315
+ if (!(requiredField in data)) {
316
+ emit(ctx, 'warning', 'missing-required-field', `Missing required field "${requiredField}" at ${path}`);
317
+ }
318
+ }
319
+ }
320
+ if (schema.properties) {
321
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
322
+ if (key in data) {
323
+ validateAgainstSchema(data[key], propSchema, ctx, path ? `${path}.${key}` : key);
324
+ }
325
+ }
326
+ }
327
+ if (schema.additionalProperties === false || (ctx.config.strictMode && !schema.additionalProperties)) {
328
+ checkUnexpectedProperties(data, schema, ctx, path);
329
+ }
330
+ else if (typeof schema.additionalProperties === 'object') {
331
+ checkAdditionalProperties(data, schema, ctx, path);
332
+ }
333
+ }
334
+ function checkUnexpectedProperties(data, schema, ctx, path) {
335
+ const definedKeys = new Set(Object.keys(schema.properties || {}));
336
+ for (const key of Object.keys(data)) {
337
+ if (!definedKeys.has(key)) {
338
+ emit(ctx, 'warning', 'unexpected-property', `Unexpected property "${key}" at ${path}`);
339
+ }
340
+ }
341
+ }
342
+ function checkAdditionalProperties(data, schema, ctx, path) {
343
+ const definedKeys = new Set(Object.keys(schema.properties || {}));
344
+ for (const [key, value] of Object.entries(data)) {
345
+ if (!definedKeys.has(key)) {
346
+ validateAgainstSchema(value, schema.additionalProperties, ctx, path ? `${path}.${key}` : key);
347
+ }
348
+ }
349
+ }
350
+ function checkEnumConstraint(data, schema, ctx, path) {
351
+ if (schema.enum && Array.isArray(schema.enum)) {
352
+ if (!schema.enum.includes(data)) {
353
+ emit(ctx, 'warning', 'enum-mismatch', `Value at ${path} not in enum: ${JSON.stringify(data)}. Allowed: ${schema.enum.join(', ')}`);
354
+ }
355
+ }
356
+ }
357
+ function emit(ctx, severity, rule, message) {
358
+ ctx.violations.push({
359
+ file: ctx.filePath,
360
+ line: 1,
361
+ column: 1,
362
+ severity,
363
+ message,
364
+ rule,
365
+ analyzer: 'schema',
366
+ });
367
+ }
368
+ //# sourceMappingURL=jsonSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonSchema.js","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/jsonSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
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 type { MigrationOp, ReExport } from './types.js';
9
+ /**
10
+ * Strip SQL identifier delimiters: backticks or double-quotes.
11
+ * @param name
12
+ * @returns
13
+ */
14
+ export declare function stripIdentifier(name: string): string;
15
+ /**
16
+ * Apply pre-extracted DDL operations to a table set in migration order.
17
+ * Strips identifier delimiters (backticks/quotes) and performs the
18
+ * CREATE/DROP/RENAME state transitions. Callable from the schema reducer
19
+ * without re-parsing raw SQL.
20
+ * @param ops
21
+ * @param tables
22
+ */
23
+ export declare function applyMigrationOps(ops: MigrationOp[], tables: Set<string>): void;
24
+ /**
25
+ * Parse a migration SQL source and apply stateful CREATE/DROP/RENAME
26
+ * operations to the given table set in migration order.
27
+ * @param source
28
+ * @param tables
29
+ */
30
+ export declare function processMigrationSource(source: string, tables: Set<string>): void;
31
+ /**
32
+ * Extract ordered DDL operations from migration SQL text. Emitted by the
33
+ * schema-sql visitor instead of raw source so the reducer only retains the
34
+ * extracted state transitions, not the full file text.
35
+ * @param source
36
+ * @returns
37
+ */
38
+ export declare function parseMigrationOps(source: string): MigrationOp[];
39
+ /**
40
+ * Extract `export * from 'x'` and `export { a, b as c } from 'x'` statements
41
+ * from barrel source. Regex-based — matches the analyzer's existing
42
+ * migration/ORM discovery idiom and avoids a tree-sitter round-trip per barrel.
43
+ * Local re-exports without a `from` clause are not re-exports and are skipped.
44
+ * @param source
45
+ * @returns
46
+ */
47
+ export declare function extractReExports(source: string): ReExport[];
48
+ /**
49
+ * Resolve a relative module specifier to a file on disk, trying common source
50
+ * extensions and index files. Returns the resolved path (absolute or relative
51
+ * to the importing file's directory) or null when the file cannot be found.
52
+ *
53
+ * @param fromFile The importing file (its directory is the resolution base).
54
+ * @param specifier The relative module specifier to resolve.
55
+ * @returns The resolved file path, or null when not found.
56
+ */
57
+ export declare function resolveBarrelModulePath(fromFile: string, specifier: string): string | null;
58
+ /**
59
+ * Default barrel reader — resolves the specifier relative to `fromFile` on disk.
60
+ *
61
+ * @param fromFile The importing file (its directory is the resolution base).
62
+ * @param specifier The relative module specifier to read.
63
+ * @returns The resolved file's source text, or null when unreadable.
64
+ */
65
+ export declare function readModuleFromDisk(fromFile: string, specifier: string): string | null;
66
+ /**
67
+ * Detect whether an SQL file contains any DDL statement without materializing
68
+ * the whole file. Streams in 1 MB chunks, carrying a small tail across chunk
69
+ * boundaries so a marker split at "CREATE TA/BLE" is still caught. Used by the
70
+ * schema-sql visitor for oversized orphans yielded with empty source by stage 1.
71
+ * @param filePath
72
+ * @returns
73
+ */
74
+ export declare function sqlFileHasDdl(filePath: string): Promise<boolean>;
75
+ /**
76
+ * Extract migration ops from an SQL file, honoring stage-1 streaming: when
77
+ * `sourceCode` is empty the file was too large to materialize, so DDL presence
78
+ * is detected by streaming; only a real oversized migration is read in full
79
+ * (rare). Returns a `skipped` flag so the pipeline can surface the skip in
80
+ * coverage without emitting a violation.
81
+ * @param filePath
82
+ * @param sourceCode
83
+ * @returns
84
+ */
85
+ export declare function extractMigrationOpsFromFile(filePath: string, sourceCode: string): Promise<{
86
+ ops: MigrationOp[];
87
+ skipped: boolean;
88
+ bytes: number;
89
+ }>;
90
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAW/E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAClB,IAAI,CAEN;AAUD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAe/D;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CA4B3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoB1F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQrF;AAKD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBtE;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBlE"}