camouf 0.1.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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +346 -0
  3. package/dist/cli/commands/analyze.d.ts +8 -0
  4. package/dist/cli/commands/analyze.d.ts.map +1 -0
  5. package/dist/cli/commands/analyze.js +81 -0
  6. package/dist/cli/commands/analyze.js.map +1 -0
  7. package/dist/cli/commands/init.d.ts +9 -0
  8. package/dist/cli/commands/init.d.ts.map +1 -0
  9. package/dist/cli/commands/init.js +104 -0
  10. package/dist/cli/commands/init.js.map +1 -0
  11. package/dist/cli/commands/report.d.ts +8 -0
  12. package/dist/cli/commands/report.d.ts.map +1 -0
  13. package/dist/cli/commands/report.js +63 -0
  14. package/dist/cli/commands/report.js.map +1 -0
  15. package/dist/cli/commands/validate.d.ts +9 -0
  16. package/dist/cli/commands/validate.d.ts.map +1 -0
  17. package/dist/cli/commands/validate.js +87 -0
  18. package/dist/cli/commands/validate.js.map +1 -0
  19. package/dist/cli/commands/watch.d.ts +9 -0
  20. package/dist/cli/commands/watch.d.ts.map +1 -0
  21. package/dist/cli/commands/watch.js +93 -0
  22. package/dist/cli/commands/watch.js.map +1 -0
  23. package/dist/cli/index.d.ts +9 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +48 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/version.d.ts +16 -0
  28. package/dist/cli/version.d.ts.map +1 -0
  29. package/dist/cli/version.js +16 -0
  30. package/dist/cli/version.js.map +1 -0
  31. package/dist/core/analyzer/architecture-visualizer.d.ts +25 -0
  32. package/dist/core/analyzer/architecture-visualizer.d.ts.map +1 -0
  33. package/dist/core/analyzer/architecture-visualizer.js +333 -0
  34. package/dist/core/analyzer/architecture-visualizer.js.map +1 -0
  35. package/dist/core/analyzer/dependency-analyzer.d.ts +49 -0
  36. package/dist/core/analyzer/dependency-analyzer.d.ts.map +1 -0
  37. package/dist/core/analyzer/dependency-analyzer.js +242 -0
  38. package/dist/core/analyzer/dependency-analyzer.js.map +1 -0
  39. package/dist/core/config/config-schema.d.ts +280 -0
  40. package/dist/core/config/config-schema.d.ts.map +1 -0
  41. package/dist/core/config/config-schema.js +199 -0
  42. package/dist/core/config/config-schema.js.map +1 -0
  43. package/dist/core/config/configuration-manager.d.ts +82 -0
  44. package/dist/core/config/configuration-manager.d.ts.map +1 -0
  45. package/dist/core/config/configuration-manager.js +306 -0
  46. package/dist/core/config/configuration-manager.js.map +1 -0
  47. package/dist/core/logger.d.ts +27 -0
  48. package/dist/core/logger.d.ts.map +1 -0
  49. package/dist/core/logger.js +86 -0
  50. package/dist/core/logger.js.map +1 -0
  51. package/dist/core/parsers/go-parser.d.ts +16 -0
  52. package/dist/core/parsers/go-parser.d.ts.map +1 -0
  53. package/dist/core/parsers/go-parser.js +117 -0
  54. package/dist/core/parsers/go-parser.js.map +1 -0
  55. package/dist/core/parsers/java-parser.d.ts +22 -0
  56. package/dist/core/parsers/java-parser.d.ts.map +1 -0
  57. package/dist/core/parsers/java-parser.js +114 -0
  58. package/dist/core/parsers/java-parser.js.map +1 -0
  59. package/dist/core/parsers/javascript-parser.d.ts +14 -0
  60. package/dist/core/parsers/javascript-parser.d.ts.map +1 -0
  61. package/dist/core/parsers/javascript-parser.js +19 -0
  62. package/dist/core/parsers/javascript-parser.js.map +1 -0
  63. package/dist/core/parsers/parser-registry.d.ts +45 -0
  64. package/dist/core/parsers/parser-registry.d.ts.map +1 -0
  65. package/dist/core/parsers/parser-registry.js +121 -0
  66. package/dist/core/parsers/parser-registry.js.map +1 -0
  67. package/dist/core/parsers/parser.interface.d.ts +49 -0
  68. package/dist/core/parsers/parser.interface.d.ts.map +1 -0
  69. package/dist/core/parsers/parser.interface.js +7 -0
  70. package/dist/core/parsers/parser.interface.js.map +1 -0
  71. package/dist/core/parsers/python-parser.d.ts +22 -0
  72. package/dist/core/parsers/python-parser.d.ts.map +1 -0
  73. package/dist/core/parsers/python-parser.js +136 -0
  74. package/dist/core/parsers/python-parser.js.map +1 -0
  75. package/dist/core/parsers/rust-parser.d.ts +16 -0
  76. package/dist/core/parsers/rust-parser.d.ts.map +1 -0
  77. package/dist/core/parsers/rust-parser.js +176 -0
  78. package/dist/core/parsers/rust-parser.js.map +1 -0
  79. package/dist/core/parsers/typescript-parser.d.ts +29 -0
  80. package/dist/core/parsers/typescript-parser.d.ts.map +1 -0
  81. package/dist/core/parsers/typescript-parser.js +251 -0
  82. package/dist/core/parsers/typescript-parser.js.map +1 -0
  83. package/dist/core/reporter/report-generator.d.ts +31 -0
  84. package/dist/core/reporter/report-generator.d.ts.map +1 -0
  85. package/dist/core/reporter/report-generator.js +417 -0
  86. package/dist/core/reporter/report-generator.js.map +1 -0
  87. package/dist/core/reporter/violation-reporter.d.ts +62 -0
  88. package/dist/core/reporter/violation-reporter.d.ts.map +1 -0
  89. package/dist/core/reporter/violation-reporter.js +265 -0
  90. package/dist/core/reporter/violation-reporter.js.map +1 -0
  91. package/dist/core/rules/builtin/api-versioning.rule.d.ts +28 -0
  92. package/dist/core/rules/builtin/api-versioning.rule.d.ts.map +1 -0
  93. package/dist/core/rules/builtin/api-versioning.rule.js +103 -0
  94. package/dist/core/rules/builtin/api-versioning.rule.js.map +1 -0
  95. package/dist/core/rules/builtin/circular-dependencies.rule.d.ts +26 -0
  96. package/dist/core/rules/builtin/circular-dependencies.rule.d.ts.map +1 -0
  97. package/dist/core/rules/builtin/circular-dependencies.rule.js +99 -0
  98. package/dist/core/rules/builtin/circular-dependencies.rule.js.map +1 -0
  99. package/dist/core/rules/builtin/data-flow-integrity.rule.d.ts +27 -0
  100. package/dist/core/rules/builtin/data-flow-integrity.rule.d.ts.map +1 -0
  101. package/dist/core/rules/builtin/data-flow-integrity.rule.js +111 -0
  102. package/dist/core/rules/builtin/data-flow-integrity.rule.js.map +1 -0
  103. package/dist/core/rules/builtin/ddd-boundaries.rule.d.ts +31 -0
  104. package/dist/core/rules/builtin/ddd-boundaries.rule.d.ts.map +1 -0
  105. package/dist/core/rules/builtin/ddd-boundaries.rule.js +141 -0
  106. package/dist/core/rules/builtin/ddd-boundaries.rule.js.map +1 -0
  107. package/dist/core/rules/builtin/distributed-transactions.rule.d.ts +27 -0
  108. package/dist/core/rules/builtin/distributed-transactions.rule.d.ts.map +1 -0
  109. package/dist/core/rules/builtin/distributed-transactions.rule.js +134 -0
  110. package/dist/core/rules/builtin/distributed-transactions.rule.js.map +1 -0
  111. package/dist/core/rules/builtin/index.d.ts +16 -0
  112. package/dist/core/rules/builtin/index.d.ts.map +1 -0
  113. package/dist/core/rules/builtin/index.js +16 -0
  114. package/dist/core/rules/builtin/index.js.map +1 -0
  115. package/dist/core/rules/builtin/layer-dependencies.rule.d.ts +30 -0
  116. package/dist/core/rules/builtin/layer-dependencies.rule.d.ts.map +1 -0
  117. package/dist/core/rules/builtin/layer-dependencies.rule.js +102 -0
  118. package/dist/core/rules/builtin/layer-dependencies.rule.js.map +1 -0
  119. package/dist/core/rules/builtin/performance-antipatterns.rule.d.ts +29 -0
  120. package/dist/core/rules/builtin/performance-antipatterns.rule.d.ts.map +1 -0
  121. package/dist/core/rules/builtin/performance-antipatterns.rule.js +148 -0
  122. package/dist/core/rules/builtin/performance-antipatterns.rule.js.map +1 -0
  123. package/dist/core/rules/builtin/resilience-patterns.rule.d.ts +29 -0
  124. package/dist/core/rules/builtin/resilience-patterns.rule.d.ts.map +1 -0
  125. package/dist/core/rules/builtin/resilience-patterns.rule.js +123 -0
  126. package/dist/core/rules/builtin/resilience-patterns.rule.js.map +1 -0
  127. package/dist/core/rules/builtin/security-context.rule.d.ts +32 -0
  128. package/dist/core/rules/builtin/security-context.rule.d.ts.map +1 -0
  129. package/dist/core/rules/builtin/security-context.rule.js +145 -0
  130. package/dist/core/rules/builtin/security-context.rule.js.map +1 -0
  131. package/dist/core/rules/builtin/type-safety.rule.d.ts +32 -0
  132. package/dist/core/rules/builtin/type-safety.rule.d.ts.map +1 -0
  133. package/dist/core/rules/builtin/type-safety.rule.js +175 -0
  134. package/dist/core/rules/builtin/type-safety.rule.js.map +1 -0
  135. package/dist/core/rules/rule-engine.d.ts +72 -0
  136. package/dist/core/rules/rule-engine.d.ts.map +1 -0
  137. package/dist/core/rules/rule-engine.js +225 -0
  138. package/dist/core/rules/rule-engine.js.map +1 -0
  139. package/dist/core/rules/rule.interface.d.ts +169 -0
  140. package/dist/core/rules/rule.interface.d.ts.map +1 -0
  141. package/dist/core/rules/rule.interface.js +38 -0
  142. package/dist/core/rules/rule.interface.js.map +1 -0
  143. package/dist/core/scanner/project-detector.d.ts +51 -0
  144. package/dist/core/scanner/project-detector.d.ts.map +1 -0
  145. package/dist/core/scanner/project-detector.js +310 -0
  146. package/dist/core/scanner/project-detector.js.map +1 -0
  147. package/dist/core/scanner/project-scanner.d.ts +101 -0
  148. package/dist/core/scanner/project-scanner.d.ts.map +1 -0
  149. package/dist/core/scanner/project-scanner.js +321 -0
  150. package/dist/core/scanner/project-scanner.js.map +1 -0
  151. package/dist/core/watcher/file-watcher.d.ts +48 -0
  152. package/dist/core/watcher/file-watcher.d.ts.map +1 -0
  153. package/dist/core/watcher/file-watcher.js +124 -0
  154. package/dist/core/watcher/file-watcher.js.map +1 -0
  155. package/dist/types/config.types.d.ts +163 -0
  156. package/dist/types/config.types.d.ts.map +1 -0
  157. package/dist/types/config.types.js +36 -0
  158. package/dist/types/config.types.js.map +1 -0
  159. package/dist/types/core.types.d.ts +247 -0
  160. package/dist/types/core.types.d.ts.map +1 -0
  161. package/dist/types/core.types.js +7 -0
  162. package/dist/types/core.types.js.map +1 -0
  163. package/dist/types/index.d.ts +7 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +7 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/package.json +90 -0
@@ -0,0 +1,417 @@
1
+ /**
2
+ * Report Generator
3
+ *
4
+ * Generates comprehensive HTML/PDF reports of architecture analysis.
5
+ */
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ import { Logger } from '../logger.js';
9
+ export class ReportGenerator {
10
+ config;
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ async generate(options) {
15
+ // Ensure output directory exists
16
+ await fs.mkdir(options.outputPath, { recursive: true });
17
+ switch (options.format) {
18
+ case 'html':
19
+ await this.generateHtmlReport(options);
20
+ break;
21
+ case 'json':
22
+ await this.generateJsonReport(options);
23
+ break;
24
+ case 'markdown':
25
+ await this.generateMarkdownReport(options);
26
+ break;
27
+ case 'pdf':
28
+ // PDF generation would require additional dependencies
29
+ Logger.warn('PDF generation is not yet implemented. Generating HTML instead.');
30
+ await this.generateHtmlReport(options);
31
+ break;
32
+ }
33
+ }
34
+ async generateHtmlReport(options) {
35
+ const { graph, violations } = options;
36
+ const summary = this.calculateSummary(graph, violations);
37
+ const violationsByRule = this.groupViolationsByRule(violations);
38
+ const violationsByFile = this.groupViolationsByFile(violations);
39
+ const html = `
40
+ <!DOCTYPE html>
41
+ <html lang="en">
42
+ <head>
43
+ <meta charset="UTF-8">
44
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
45
+ <title>Camouf Architecture Report - ${this.config.name || 'Project'}</title>
46
+ <style>
47
+ :root {
48
+ --color-bg: #1a1a2e;
49
+ --color-surface: #16213e;
50
+ --color-primary: #0f3460;
51
+ --color-accent: #e94560;
52
+ --color-text: #eee;
53
+ --color-text-secondary: #aaa;
54
+ --color-success: #4ecca3;
55
+ --color-warning: #ffc107;
56
+ --color-error: #e94560;
57
+ --color-info: #17a2b8;
58
+ }
59
+
60
+ * { box-sizing: border-box; margin: 0; padding: 0; }
61
+
62
+ body {
63
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
64
+ background: var(--color-bg);
65
+ color: var(--color-text);
66
+ line-height: 1.6;
67
+ }
68
+
69
+ .container { max-width: 1400px; margin: 0 auto; padding: 2rem; }
70
+
71
+ header {
72
+ background: var(--color-surface);
73
+ padding: 2rem;
74
+ border-radius: 12px;
75
+ margin-bottom: 2rem;
76
+ }
77
+
78
+ h1 { font-size: 2rem; margin-bottom: 0.5rem; }
79
+ h2 { font-size: 1.5rem; margin-bottom: 1rem; color: var(--color-accent); }
80
+ h3 { font-size: 1.2rem; margin-bottom: 0.75rem; }
81
+
82
+ .subtitle { color: var(--color-text-secondary); }
83
+
84
+ .stats {
85
+ display: grid;
86
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
87
+ gap: 1rem;
88
+ margin: 2rem 0;
89
+ }
90
+
91
+ .stat-card {
92
+ background: var(--color-primary);
93
+ padding: 1.5rem;
94
+ border-radius: 8px;
95
+ text-align: center;
96
+ }
97
+
98
+ .stat-value {
99
+ font-size: 2.5rem;
100
+ font-weight: bold;
101
+ color: var(--color-accent);
102
+ }
103
+
104
+ .stat-label {
105
+ color: var(--color-text-secondary);
106
+ font-size: 0.9rem;
107
+ }
108
+
109
+ .card {
110
+ background: var(--color-surface);
111
+ border-radius: 12px;
112
+ padding: 1.5rem;
113
+ margin-bottom: 1.5rem;
114
+ }
115
+
116
+ .violation-list {
117
+ list-style: none;
118
+ }
119
+
120
+ .violation-item {
121
+ background: var(--color-primary);
122
+ padding: 1rem;
123
+ border-radius: 8px;
124
+ margin-bottom: 0.75rem;
125
+ border-left: 4px solid;
126
+ }
127
+
128
+ .violation-item.error { border-color: var(--color-error); }
129
+ .violation-item.warning { border-color: var(--color-warning); }
130
+ .violation-item.info { border-color: var(--color-info); }
131
+
132
+ .violation-message { font-weight: 500; margin-bottom: 0.5rem; }
133
+
134
+ .violation-meta {
135
+ font-size: 0.85rem;
136
+ color: var(--color-text-secondary);
137
+ }
138
+
139
+ .badge {
140
+ display: inline-block;
141
+ padding: 0.25rem 0.5rem;
142
+ border-radius: 4px;
143
+ font-size: 0.75rem;
144
+ font-weight: 600;
145
+ text-transform: uppercase;
146
+ }
147
+
148
+ .badge-error { background: var(--color-error); }
149
+ .badge-warning { background: var(--color-warning); color: #000; }
150
+ .badge-info { background: var(--color-info); }
151
+ .badge-success { background: var(--color-success); color: #000; }
152
+
153
+ .file-path {
154
+ font-family: 'Fira Code', monospace;
155
+ font-size: 0.85rem;
156
+ color: var(--color-text-secondary);
157
+ }
158
+
159
+ table {
160
+ width: 100%;
161
+ border-collapse: collapse;
162
+ }
163
+
164
+ th, td {
165
+ padding: 0.75rem;
166
+ text-align: left;
167
+ border-bottom: 1px solid var(--color-primary);
168
+ }
169
+
170
+ th {
171
+ background: var(--color-primary);
172
+ font-weight: 600;
173
+ }
174
+
175
+ .progress-bar {
176
+ background: var(--color-primary);
177
+ border-radius: 4px;
178
+ height: 8px;
179
+ overflow: hidden;
180
+ }
181
+
182
+ .progress-fill {
183
+ height: 100%;
184
+ background: var(--color-success);
185
+ transition: width 0.3s ease;
186
+ }
187
+
188
+ footer {
189
+ text-align: center;
190
+ padding: 2rem;
191
+ color: var(--color-text-secondary);
192
+ font-size: 0.85rem;
193
+ }
194
+ </style>
195
+ </head>
196
+ <body>
197
+ <div class="container">
198
+ <header>
199
+ <h1>🏗️ Architecture Report</h1>
200
+ <p class="subtitle">${this.config.name || 'Project'} • Generated on ${new Date().toLocaleString()}</p>
201
+ </header>
202
+
203
+ <div class="stats">
204
+ <div class="stat-card">
205
+ <div class="stat-value">${summary.totalFiles}</div>
206
+ <div class="stat-label">Files Analyzed</div>
207
+ </div>
208
+ <div class="stat-card">
209
+ <div class="stat-value">${summary.totalDependencies}</div>
210
+ <div class="stat-label">Dependencies</div>
211
+ </div>
212
+ <div class="stat-card">
213
+ <div class="stat-value">${violations.length}</div>
214
+ <div class="stat-label">Violations</div>
215
+ </div>
216
+ <div class="stat-card">
217
+ <div class="stat-value">${summary.healthScore}%</div>
218
+ <div class="stat-label">Health Score</div>
219
+ </div>
220
+ </div>
221
+
222
+ <div class="card">
223
+ <h2>📊 Violations by Severity</h2>
224
+ <table>
225
+ <thead>
226
+ <tr>
227
+ <th>Severity</th>
228
+ <th>Count</th>
229
+ <th>Percentage</th>
230
+ </tr>
231
+ </thead>
232
+ <tbody>
233
+ <tr>
234
+ <td><span class="badge badge-error">Error</span></td>
235
+ <td>${summary.errors}</td>
236
+ <td>${violations.length ? ((summary.errors / violations.length) * 100).toFixed(1) : 0}%</td>
237
+ </tr>
238
+ <tr>
239
+ <td><span class="badge badge-warning">Warning</span></td>
240
+ <td>${summary.warnings}</td>
241
+ <td>${violations.length ? ((summary.warnings / violations.length) * 100).toFixed(1) : 0}%</td>
242
+ </tr>
243
+ <tr>
244
+ <td><span class="badge badge-info">Info</span></td>
245
+ <td>${summary.info}</td>
246
+ <td>${violations.length ? ((summary.info / violations.length) * 100).toFixed(1) : 0}%</td>
247
+ </tr>
248
+ </tbody>
249
+ </table>
250
+ </div>
251
+
252
+ <div class="card">
253
+ <h2>📁 Violations by Rule</h2>
254
+ ${Array.from(violationsByRule.entries()).map(([rule, ruleViolations]) => `
255
+ <h3>${rule} (${ruleViolations.length})</h3>
256
+ <ul class="violation-list">
257
+ ${ruleViolations.slice(0, 10).map(v => `
258
+ <li class="violation-item ${v.severity}">
259
+ <div class="violation-message">${this.escapeHtml(v.message)}</div>
260
+ <div class="violation-meta">
261
+ <span class="file-path">${this.escapeHtml(v.file)}${v.line ? `:${v.line}` : ''}</span>
262
+ </div>
263
+ </li>
264
+ `).join('')}
265
+ ${ruleViolations.length > 10 ? `<li class="violation-item info">... and ${ruleViolations.length - 10} more</li>` : ''}
266
+ </ul>
267
+ `).join('')}
268
+ </div>
269
+
270
+ <div class="card">
271
+ <h2>📂 Most Affected Files</h2>
272
+ <table>
273
+ <thead>
274
+ <tr>
275
+ <th>File</th>
276
+ <th>Violations</th>
277
+ <th>Severity</th>
278
+ </tr>
279
+ </thead>
280
+ <tbody>
281
+ ${Array.from(violationsByFile.entries())
282
+ .sort((a, b) => b[1].length - a[1].length)
283
+ .slice(0, 10)
284
+ .map(([file, fileViolations]) => {
285
+ const maxSeverity = fileViolations.some(v => v.severity === 'error') ? 'error' :
286
+ fileViolations.some(v => v.severity === 'warning') ? 'warning' : 'info';
287
+ return `
288
+ <tr>
289
+ <td class="file-path">${this.escapeHtml(file)}</td>
290
+ <td>${fileViolations.length}</td>
291
+ <td><span class="badge badge-${maxSeverity}">${maxSeverity}</span></td>
292
+ </tr>
293
+ `;
294
+ }).join('')}
295
+ </tbody>
296
+ </table>
297
+ </div>
298
+
299
+ <footer>
300
+ <p>Generated by <strong>Camouf</strong> • Architecture Monitoring Tool</p>
301
+ </footer>
302
+ </div>
303
+ </body>
304
+ </html>
305
+ `.trim();
306
+ await fs.writeFile(path.join(options.outputPath, 'index.html'), html);
307
+ Logger.debug(`HTML report written to ${options.outputPath}/index.html`);
308
+ }
309
+ async generateJsonReport(options) {
310
+ const { graph, violations } = options;
311
+ const report = {
312
+ metadata: {
313
+ projectName: this.config.name,
314
+ generatedAt: new Date().toISOString(),
315
+ camoufVersion: '0.1.0',
316
+ },
317
+ summary: this.calculateSummary(graph, violations),
318
+ violations: violations.map(v => ({
319
+ ruleId: v.ruleId,
320
+ ruleName: v.ruleName,
321
+ severity: v.severity,
322
+ message: v.message,
323
+ file: v.file,
324
+ line: v.line,
325
+ column: v.column,
326
+ suggestion: v.suggestion,
327
+ })),
328
+ files: graph.nodes().map(nodeId => {
329
+ const node = graph.node(nodeId);
330
+ return {
331
+ path: node?.data.relativePath,
332
+ language: node?.data.language,
333
+ layer: node?.data.layer,
334
+ dependencies: (graph.outEdges(nodeId) || []).length,
335
+ dependents: (graph.inEdges(nodeId) || []).length,
336
+ };
337
+ }),
338
+ };
339
+ await fs.writeFile(path.join(options.outputPath, 'report.json'), JSON.stringify(report, null, 2));
340
+ }
341
+ async generateMarkdownReport(options) {
342
+ const { graph, violations } = options;
343
+ const summary = this.calculateSummary(graph, violations);
344
+ const violationsByRule = this.groupViolationsByRule(violations);
345
+ let md = `# 🏗️ Architecture Report\n\n`;
346
+ md += `**Project:** ${this.config.name || 'Project'} \n`;
347
+ md += `**Generated:** ${new Date().toLocaleString()} \n\n`;
348
+ md += `## 📊 Summary\n\n`;
349
+ md += `| Metric | Value |\n|--------|-------|\n`;
350
+ md += `| Files Analyzed | ${summary.totalFiles} |\n`;
351
+ md += `| Total Dependencies | ${summary.totalDependencies} |\n`;
352
+ md += `| Violations | ${violations.length} |\n`;
353
+ md += `| Health Score | ${summary.healthScore}% |\n\n`;
354
+ md += `## ⚠️ Violations\n\n`;
355
+ md += `| Severity | Count |\n|----------|-------|\n`;
356
+ md += `| 🔴 Errors | ${summary.errors} |\n`;
357
+ md += `| 🟡 Warnings | ${summary.warnings} |\n`;
358
+ md += `| 🔵 Info | ${summary.info} |\n\n`;
359
+ for (const [rule, ruleViolations] of violationsByRule) {
360
+ md += `### ${rule}\n\n`;
361
+ for (const v of ruleViolations.slice(0, 10)) {
362
+ const severity = v.severity === 'error' ? '🔴' : v.severity === 'warning' ? '🟡' : '🔵';
363
+ md += `- ${severity} ${v.message}\n`;
364
+ md += ` - File: \`${v.file}${v.line ? `:${v.line}` : ''}\`\n`;
365
+ if (v.suggestion) {
366
+ md += ` - 💡 ${v.suggestion}\n`;
367
+ }
368
+ }
369
+ if (ruleViolations.length > 10) {
370
+ md += `\n*... and ${ruleViolations.length - 10} more*\n`;
371
+ }
372
+ md += '\n';
373
+ }
374
+ await fs.writeFile(path.join(options.outputPath, 'report.md'), md);
375
+ }
376
+ calculateSummary(graph, violations) {
377
+ const totalFiles = graph.nodeCount();
378
+ const totalDependencies = graph.edgeCount();
379
+ const errors = violations.filter(v => v.severity === 'error').length;
380
+ const warnings = violations.filter(v => v.severity === 'warning').length;
381
+ const info = violations.filter(v => v.severity === 'info').length;
382
+ // Calculate health score (simple formula)
383
+ const maxScore = 100;
384
+ const errorPenalty = errors * 10;
385
+ const warningPenalty = warnings * 3;
386
+ const infoPenalty = info * 1;
387
+ const healthScore = Math.max(0, maxScore - errorPenalty - warningPenalty - infoPenalty);
388
+ return { totalFiles, totalDependencies, errors, warnings, info, healthScore };
389
+ }
390
+ groupViolationsByRule(violations) {
391
+ const grouped = new Map();
392
+ for (const v of violations) {
393
+ const existing = grouped.get(v.ruleName) || [];
394
+ existing.push(v);
395
+ grouped.set(v.ruleName, existing);
396
+ }
397
+ return grouped;
398
+ }
399
+ groupViolationsByFile(violations) {
400
+ const grouped = new Map();
401
+ for (const v of violations) {
402
+ const existing = grouped.get(v.file) || [];
403
+ existing.push(v);
404
+ grouped.set(v.file, existing);
405
+ }
406
+ return grouped;
407
+ }
408
+ escapeHtml(text) {
409
+ return text
410
+ .replace(/&/g, '&amp;')
411
+ .replace(/</g, '&lt;')
412
+ .replace(/>/g, '&gt;')
413
+ .replace(/"/g, '&quot;')
414
+ .replace(/'/g, '&#039;');
415
+ }
416
+ }
417
+ //# sourceMappingURL=report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../../src/core/reporter/report-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Violation Reporter
3
+ *
4
+ * Handles reporting of violations to console and other outputs.
5
+ */
6
+ import { CamoufConfig } from '../../types/config.types.js';
7
+ import { Violation } from '../../types/core.types.js';
8
+ interface ReporterOptions {
9
+ format?: 'text' | 'json' | 'sarif';
10
+ outputPath?: string;
11
+ }
12
+ interface ViolationSummary {
13
+ total: number;
14
+ errors: number;
15
+ warnings: number;
16
+ info: number;
17
+ }
18
+ export declare class ViolationReporter {
19
+ private config;
20
+ private violations;
21
+ private summary;
22
+ constructor(config: CamoufConfig);
23
+ /**
24
+ * Report violations from initial scan
25
+ */
26
+ reportInitial(violations: Violation[]): void;
27
+ /**
28
+ * Report violations from incremental analysis
29
+ */
30
+ reportIncremental(filePath: string, violations: Violation[]): void;
31
+ /**
32
+ * Generate a report in the specified format
33
+ */
34
+ generateReport(violations: Violation[], options: ReporterOptions): string;
35
+ /**
36
+ * Get current summary
37
+ */
38
+ getSummary(): ViolationSummary;
39
+ /**
40
+ * Get all current violations
41
+ */
42
+ getViolations(): Violation[];
43
+ /**
44
+ * Clear all violations
45
+ */
46
+ clear(): void;
47
+ private updateSummary;
48
+ private groupByFile;
49
+ private printFileHeader;
50
+ private printViolation;
51
+ private printSummary;
52
+ private getSeverityIcon;
53
+ private getSeverityColor;
54
+ private getRelativePath;
55
+ private generateTextReport;
56
+ private generateJsonReport;
57
+ private generateSarifReport;
58
+ private getUniqueRules;
59
+ private sarifLevel;
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=violation-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"violation-reporter.d.ts","sourceRoot":"","sources":["../../../src/core/reporter/violation-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAqB,MAAM,2BAA2B,CAAC;AAGzE,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,OAAO,CAAmE;gBAEtE,MAAM,EAAE,YAAY;IAIhC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IA2B5C;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAsBlE;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAWzE;;OAEG;IACH,UAAU,IAAI,gBAAgB;IAI9B;;OAEG;IACH,aAAa,IAAI,SAAS,EAAE;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,mBAAmB;IAwC3B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,UAAU;CAUnB"}