code-auditor-mcp 1.0.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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +362 -0
  3. package/configs/hhra-compat.json +168 -0
  4. package/dist/analyzers/analyzerUtils.d.ts +69 -0
  5. package/dist/analyzers/analyzerUtils.d.ts.map +1 -0
  6. package/dist/analyzers/analyzerUtils.js +188 -0
  7. package/dist/analyzers/analyzerUtils.js.map +1 -0
  8. package/dist/analyzers/dataAccessAnalyzer.d.ts +46 -0
  9. package/dist/analyzers/dataAccessAnalyzer.d.ts.map +1 -0
  10. package/dist/analyzers/dataAccessAnalyzer.js +448 -0
  11. package/dist/analyzers/dataAccessAnalyzer.js.map +1 -0
  12. package/dist/analyzers/dryAnalyzer.d.ts +30 -0
  13. package/dist/analyzers/dryAnalyzer.d.ts.map +1 -0
  14. package/dist/analyzers/dryAnalyzer.js +537 -0
  15. package/dist/analyzers/dryAnalyzer.js.map +1 -0
  16. package/dist/analyzers/solidAnalyzer.d.ts +23 -0
  17. package/dist/analyzers/solidAnalyzer.d.ts.map +1 -0
  18. package/dist/analyzers/solidAnalyzer.js +355 -0
  19. package/dist/analyzers/solidAnalyzer.js.map +1 -0
  20. package/dist/auditRunner.d.ts +20 -0
  21. package/dist/auditRunner.d.ts.map +1 -0
  22. package/dist/auditRunner.js +214 -0
  23. package/dist/auditRunner.js.map +1 -0
  24. package/dist/cli.d.ts +6 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +38 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/config/configLoader.d.ts +19 -0
  29. package/dist/config/configLoader.d.ts.map +1 -0
  30. package/dist/config/configLoader.js +124 -0
  31. package/dist/config/configLoader.js.map +1 -0
  32. package/dist/config/defaults.d.ts +69 -0
  33. package/dist/config/defaults.d.ts.map +1 -0
  34. package/dist/config/defaults.js +142 -0
  35. package/dist/config/defaults.js.map +1 -0
  36. package/dist/index.d.ts +44 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +66 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/mcp-standalone.d.ts +3 -0
  41. package/dist/mcp-standalone.d.ts.map +1 -0
  42. package/dist/mcp-standalone.js +171 -0
  43. package/dist/mcp-standalone.js.map +1 -0
  44. package/dist/mcp.d.ts +3 -0
  45. package/dist/mcp.d.ts.map +1 -0
  46. package/dist/mcp.js +340 -0
  47. package/dist/mcp.js.map +1 -0
  48. package/dist/reporting/csvReportGenerator.d.ts +29 -0
  49. package/dist/reporting/csvReportGenerator.d.ts.map +1 -0
  50. package/dist/reporting/csvReportGenerator.js +182 -0
  51. package/dist/reporting/csvReportGenerator.js.map +1 -0
  52. package/dist/reporting/htmlReportGenerator.d.ts +18 -0
  53. package/dist/reporting/htmlReportGenerator.d.ts.map +1 -0
  54. package/dist/reporting/htmlReportGenerator.js +352 -0
  55. package/dist/reporting/htmlReportGenerator.js.map +1 -0
  56. package/dist/reporting/jsonReportGenerator.d.ts +23 -0
  57. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -0
  58. package/dist/reporting/jsonReportGenerator.js +103 -0
  59. package/dist/reporting/jsonReportGenerator.js.map +1 -0
  60. package/dist/reporting/reportGenerator.d.ts +21 -0
  61. package/dist/reporting/reportGenerator.d.ts.map +1 -0
  62. package/dist/reporting/reportGenerator.js +53 -0
  63. package/dist/reporting/reportGenerator.js.map +1 -0
  64. package/dist/types.d.ts +246 -0
  65. package/dist/types.d.ts.map +1 -0
  66. package/dist/types.js +6 -0
  67. package/dist/types.js.map +1 -0
  68. package/dist/utils/astParser.d.ts +71 -0
  69. package/dist/utils/astParser.d.ts.map +1 -0
  70. package/dist/utils/astParser.js +244 -0
  71. package/dist/utils/astParser.js.map +1 -0
  72. package/dist/utils/astUtils.d.ts +89 -0
  73. package/dist/utils/astUtils.d.ts.map +1 -0
  74. package/dist/utils/astUtils.js +289 -0
  75. package/dist/utils/astUtils.js.map +1 -0
  76. package/dist/utils/fileDiscovery.d.ts +58 -0
  77. package/dist/utils/fileDiscovery.d.ts.map +1 -0
  78. package/dist/utils/fileDiscovery.js +203 -0
  79. package/dist/utils/fileDiscovery.js.map +1 -0
  80. package/examples/.auditrc.example.json +61 -0
  81. package/examples/.auditrc.json +201 -0
  82. package/examples/nextjs.auditrc.json +65 -0
  83. package/examples/node-api.auditrc.json +82 -0
  84. package/examples/react.auditrc.json +59 -0
  85. package/package.json +62 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * CSV Report Generator (Functional)
3
+ * Generates CSV formatted audit reports
4
+ */
5
+ /**
6
+ * Default columns for CSV export
7
+ */
8
+ const DEFAULT_COLUMNS = [
9
+ 'analyzer',
10
+ 'file',
11
+ 'line',
12
+ 'column',
13
+ 'severity',
14
+ 'type',
15
+ 'message',
16
+ 'recommendation',
17
+ 'estimatedEffort'
18
+ ];
19
+ /**
20
+ * Generate a CSV report from audit results
21
+ */
22
+ export function generateCSVReport(result, config) {
23
+ const delimiter = config?.delimiter || ',';
24
+ const includeHeaders = config?.includeHeaders ?? true;
25
+ const columns = config?.columns || DEFAULT_COLUMNS;
26
+ // Collect all violations with analyzer info
27
+ const allViolations = collectAllViolations(result);
28
+ // Generate CSV lines
29
+ const lines = [];
30
+ if (includeHeaders) {
31
+ lines.push(generateHeaderRow(columns, delimiter));
32
+ }
33
+ for (const violation of allViolations) {
34
+ lines.push(generateDataRow(violation, columns, delimiter, config?.customColumns));
35
+ }
36
+ return lines.join('\n');
37
+ }
38
+ /**
39
+ * Generate a summary CSV report
40
+ */
41
+ export function generateSummaryCSVReport(result, config) {
42
+ const delimiter = config?.delimiter || ',';
43
+ const lines = [];
44
+ // Summary section
45
+ lines.push('Summary');
46
+ lines.push(`Total Violations${delimiter}${result.summary.totalViolations}`);
47
+ lines.push(`Critical Issues${delimiter}${result.summary.criticalIssues}`);
48
+ lines.push(`Warnings${delimiter}${result.summary.warnings}`);
49
+ lines.push(`Suggestions${delimiter}${result.summary.suggestions}`);
50
+ lines.push('');
51
+ // Violations by category
52
+ lines.push('Violations by Category');
53
+ lines.push(`Category${delimiter}Count`);
54
+ for (const [category, count] of Object.entries(result.summary.violationsByCategory)) {
55
+ lines.push(`${escapeCSVValue(category, delimiter)}${delimiter}${count}`);
56
+ }
57
+ lines.push('');
58
+ // Analyzer summary
59
+ lines.push('Analyzer Summary');
60
+ lines.push(`Analyzer${delimiter}Violations${delimiter}Files Processed${delimiter}Execution Time (ms)`);
61
+ for (const [analyzer, data] of Object.entries(result.analyzerResults)) {
62
+ lines.push([
63
+ escapeCSVValue(analyzer, delimiter),
64
+ data.violations.length,
65
+ data.filesProcessed,
66
+ data.executionTime
67
+ ].join(delimiter));
68
+ }
69
+ return lines.join('\n');
70
+ }
71
+ /**
72
+ * Collect all violations from analyzer results
73
+ */
74
+ function collectAllViolations(result) {
75
+ const violations = [];
76
+ for (const [analyzer, analyzerResult] of Object.entries(result.analyzerResults)) {
77
+ for (const violation of analyzerResult.violations) {
78
+ violations.push({
79
+ ...violation,
80
+ analyzer
81
+ });
82
+ }
83
+ }
84
+ // Sort by severity and file
85
+ return violations.sort((a, b) => {
86
+ const severityOrder = { critical: 3, warning: 2, suggestion: 1 };
87
+ const severityDiff = severityOrder[b.severity] - severityOrder[a.severity];
88
+ if (severityDiff !== 0)
89
+ return severityDiff;
90
+ return a.file.localeCompare(b.file);
91
+ });
92
+ }
93
+ /**
94
+ * Generate CSV header row
95
+ */
96
+ function generateHeaderRow(columns, delimiter) {
97
+ return columns.map(col => escapeCSVValue(col, delimiter)).join(delimiter);
98
+ }
99
+ /**
100
+ * Generate CSV data row
101
+ */
102
+ function generateDataRow(violation, columns, delimiter, customColumns) {
103
+ return columns.map(column => {
104
+ // Check for custom column handler
105
+ if (customColumns && customColumns[column]) {
106
+ return escapeCSVValue(customColumns[column](violation), delimiter);
107
+ }
108
+ // Default column handlers
109
+ let value = '';
110
+ switch (column) {
111
+ case 'analyzer':
112
+ value = violation.analyzer;
113
+ break;
114
+ case 'file':
115
+ value = violation.file;
116
+ break;
117
+ case 'line':
118
+ value = violation.line?.toString() || '';
119
+ break;
120
+ case 'column':
121
+ value = violation.column?.toString() || '';
122
+ break;
123
+ case 'severity':
124
+ value = violation.severity;
125
+ break;
126
+ case 'type':
127
+ value = violation.type || '';
128
+ break;
129
+ case 'message':
130
+ value = violation.message;
131
+ break;
132
+ case 'recommendation':
133
+ value = violation.recommendation || '';
134
+ break;
135
+ case 'estimatedEffort':
136
+ value = violation.estimatedEffort || '';
137
+ break;
138
+ default:
139
+ // Try to access custom property
140
+ value = violation[column]?.toString() || '';
141
+ }
142
+ return escapeCSVValue(value, delimiter);
143
+ }).join(delimiter);
144
+ }
145
+ /**
146
+ * Escape CSV value to handle special characters
147
+ */
148
+ function escapeCSVValue(value, delimiter) {
149
+ if (value.includes(delimiter) || value.includes('"') || value.includes('\n') || value.includes('\r')) {
150
+ // Escape quotes by doubling them
151
+ const escaped = value.replace(/"/g, '""');
152
+ return `"${escaped}"`;
153
+ }
154
+ return value;
155
+ }
156
+ /**
157
+ * Generate a pivot table style CSV report
158
+ */
159
+ export function generatePivotCSVReport(result) {
160
+ const pivot = {};
161
+ // Build pivot data: file -> severity -> count
162
+ for (const [, analyzerResult] of Object.entries(result.analyzerResults)) {
163
+ for (const violation of analyzerResult.violations) {
164
+ if (!pivot[violation.file]) {
165
+ pivot[violation.file] = { critical: 0, warning: 0, suggestion: 0 };
166
+ }
167
+ pivot[violation.file][violation.severity]++;
168
+ }
169
+ }
170
+ // Generate CSV
171
+ const lines = ['File,Critical,Warning,Suggestion,Total'];
172
+ for (const [file, severities] of Object.entries(pivot)) {
173
+ const total = severities.critical + severities.warning + severities.suggestion;
174
+ lines.push(`${escapeCSVValue(file, ',')},${severities.critical},${severities.warning},${severities.suggestion},${total}`);
175
+ }
176
+ return lines.join('\n');
177
+ }
178
+ // Backwards compatibility export
179
+ export const CSVReportGenerator = {
180
+ generate: generateCSVReport
181
+ };
182
+ //# sourceMappingURL=csvReportGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csvReportGenerator.js","sourceRoot":"","sources":["../../src/reporting/csvReportGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * HTML Report Generator (Functional)
3
+ * Generates HTML formatted audit reports
4
+ */
5
+ import { AuditResult } from '../types.js';
6
+ export interface HTMLReportConfig {
7
+ theme?: 'light' | 'dark';
8
+ includeCharts?: boolean;
9
+ customCSS?: string;
10
+ }
11
+ /**
12
+ * Generate an HTML report from audit results
13
+ */
14
+ export declare function generateHTMLReport(result: AuditResult, config?: HTMLReportConfig): string;
15
+ export declare const HTMLReportGenerator: {
16
+ generate: typeof generateHTMLReport;
17
+ };
18
+ //# sourceMappingURL=htmlReportGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/htmlReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,CAyBR;AA8UD,eAAO,MAAM,mBAAmB;;CAE/B,CAAC"}
@@ -0,0 +1,352 @@
1
+ /**
2
+ * HTML Report Generator (Functional)
3
+ * Generates HTML formatted audit reports
4
+ */
5
+ /**
6
+ * Generate an HTML report from audit results
7
+ */
8
+ export function generateHTMLReport(result, config) {
9
+ const theme = config?.theme || 'light';
10
+ const css = getDefaultCSS(theme) + (config?.customCSS || '');
11
+ return `<!DOCTYPE html>
12
+ <html lang="en">
13
+ <head>
14
+ <meta charset="UTF-8">
15
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
16
+ <title>Code Audit Report - ${new Date(result.timestamp).toLocaleDateString()}</title>
17
+ <style>${css}</style>
18
+ </head>
19
+ <body>
20
+ <div class="container">
21
+ <header>
22
+ <h1>Code Audit Report</h1>
23
+ <p class="timestamp">Generated: ${new Date(result.timestamp).toLocaleString()}</p>
24
+ </header>
25
+
26
+ ${generateSummarySection(result)}
27
+ ${generateViolationsSection(result)}
28
+ ${generateMetadataSection(result)}
29
+ </div>
30
+ </body>
31
+ </html>`;
32
+ }
33
+ /**
34
+ * Generate the summary section
35
+ */
36
+ function generateSummarySection(result) {
37
+ const { summary } = result;
38
+ return `
39
+ <section class="summary">
40
+ <h2>Summary</h2>
41
+ <div class="stats-grid">
42
+ <div class="stat-card critical">
43
+ <h3>${summary.criticalIssues}</h3>
44
+ <p>Critical Issues</p>
45
+ </div>
46
+ <div class="stat-card warning">
47
+ <h3>${summary.warnings}</h3>
48
+ <p>Warnings</p>
49
+ </div>
50
+ <div class="stat-card suggestion">
51
+ <h3>${summary.suggestions}</h3>
52
+ <p>Suggestions</p>
53
+ </div>
54
+ <div class="stat-card total">
55
+ <h3>${summary.totalViolations}</h3>
56
+ <p>Total Violations</p>
57
+ </div>
58
+ </div>
59
+
60
+ ${generateViolationsByCategoryChart(summary.violationsByCategory)}
61
+ </section>`;
62
+ }
63
+ /**
64
+ * Generate violations by category chart
65
+ */
66
+ function generateViolationsByCategoryChart(violationsByCategory) {
67
+ const categories = Object.entries(violationsByCategory)
68
+ .sort(([, a], [, b]) => b - a)
69
+ .slice(0, 5);
70
+ if (categories.length === 0)
71
+ return '';
72
+ return `
73
+ <div class="category-chart">
74
+ <h3>Top Violation Categories</h3>
75
+ <div class="chart-bars">
76
+ ${categories.map(([category, count]) => `
77
+ <div class="chart-bar">
78
+ <div class="bar" style="width: ${(count / Math.max(...categories.map(([, c]) => c))) * 100}%">
79
+ <span class="count">${count}</span>
80
+ </div>
81
+ <span class="label">${category}</span>
82
+ </div>
83
+ `).join('')}
84
+ </div>
85
+ </div>`;
86
+ }
87
+ /**
88
+ * Generate the violations section
89
+ */
90
+ function generateViolationsSection(result) {
91
+ const allViolations = [];
92
+ for (const [analyzer, analyzerResult] of Object.entries(result.analyzerResults)) {
93
+ for (const violation of analyzerResult.violations) {
94
+ allViolations.push({ ...violation, analyzer });
95
+ }
96
+ }
97
+ // Sort by severity
98
+ const sortedViolations = allViolations.sort((a, b) => {
99
+ const severityOrder = { critical: 3, warning: 2, suggestion: 1 };
100
+ return severityOrder[b.severity] - severityOrder[a.severity];
101
+ });
102
+ return `
103
+ <section class="violations">
104
+ <h2>Violations</h2>
105
+ <div class="violations-list">
106
+ ${sortedViolations.map(violation => generateViolationCard(violation)).join('')}
107
+ </div>
108
+ </section>`;
109
+ }
110
+ /**
111
+ * Generate a violation card
112
+ */
113
+ function generateViolationCard(violation) {
114
+ return `
115
+ <div class="violation-card ${violation.severity}">
116
+ <div class="violation-header">
117
+ <span class="severity-badge">${violation.severity.toUpperCase()}</span>
118
+ <span class="analyzer-badge">${violation.analyzer}</span>
119
+ <span class="file-path">${violation.file}${violation.line ? `:${violation.line}` : ''}</span>
120
+ </div>
121
+ <div class="violation-body">
122
+ <p class="message">${escapeHtml(violation.message)}</p>
123
+ ${violation.recommendation ? `<p class="recommendation"><strong>Recommendation:</strong> ${escapeHtml(violation.recommendation)}</p>` : ''}
124
+ ${violation.snippet ? `<pre class="code-snippet"><code>${escapeHtml(violation.snippet)}</code></pre>` : ''}
125
+ </div>
126
+ </div>`;
127
+ }
128
+ /**
129
+ * Generate the metadata section
130
+ */
131
+ function generateMetadataSection(result) {
132
+ const { metadata } = result;
133
+ return `
134
+ <section class="metadata">
135
+ <h2>Audit Metadata</h2>
136
+ <dl>
137
+ <dt>Duration</dt>
138
+ <dd>${metadata.auditDuration}ms</dd>
139
+
140
+ <dt>Files Analyzed</dt>
141
+ <dd>${metadata.filesAnalyzed}</dd>
142
+
143
+ <dt>Analyzers Run</dt>
144
+ <dd>${metadata.analyzersRun.join(', ')}</dd>
145
+ </dl>
146
+ </section>`;
147
+ }
148
+ /**
149
+ * Get default CSS for the theme
150
+ */
151
+ function getDefaultCSS(theme) {
152
+ const themes = {
153
+ light: {
154
+ bg: '#ffffff',
155
+ text: '#333333',
156
+ border: '#e0e0e0',
157
+ cardBg: '#f5f5f5',
158
+ critical: '#d32f2f',
159
+ warning: '#f57c00',
160
+ suggestion: '#1976d2'
161
+ },
162
+ dark: {
163
+ bg: '#1e1e1e',
164
+ text: '#ffffff',
165
+ border: '#333333',
166
+ cardBg: '#2d2d2d',
167
+ critical: '#f44336',
168
+ warning: '#ff9800',
169
+ suggestion: '#2196f3'
170
+ }
171
+ };
172
+ const colors = themes[theme];
173
+ return `
174
+ body {
175
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
176
+ background-color: ${colors.bg};
177
+ color: ${colors.text};
178
+ line-height: 1.6;
179
+ margin: 0;
180
+ padding: 0;
181
+ }
182
+
183
+ .container {
184
+ max-width: 1200px;
185
+ margin: 0 auto;
186
+ padding: 2rem;
187
+ }
188
+
189
+ header {
190
+ border-bottom: 2px solid ${colors.border};
191
+ padding-bottom: 1rem;
192
+ margin-bottom: 2rem;
193
+ }
194
+
195
+ h1 {
196
+ margin: 0;
197
+ font-size: 2.5rem;
198
+ }
199
+
200
+ .timestamp {
201
+ color: ${colors.text}80;
202
+ margin: 0.5rem 0 0;
203
+ }
204
+
205
+ .stats-grid {
206
+ display: grid;
207
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
208
+ gap: 1rem;
209
+ margin: 1rem 0;
210
+ }
211
+
212
+ .stat-card {
213
+ background: ${colors.cardBg};
214
+ padding: 1.5rem;
215
+ border-radius: 8px;
216
+ text-align: center;
217
+ border: 1px solid ${colors.border};
218
+ }
219
+
220
+ .stat-card h3 {
221
+ margin: 0;
222
+ font-size: 2rem;
223
+ }
224
+
225
+ .stat-card p {
226
+ margin: 0.5rem 0 0;
227
+ font-size: 0.9rem;
228
+ opacity: 0.8;
229
+ }
230
+
231
+ .stat-card.critical { border-left: 4px solid ${colors.critical}; }
232
+ .stat-card.warning { border-left: 4px solid ${colors.warning}; }
233
+ .stat-card.suggestion { border-left: 4px solid ${colors.suggestion}; }
234
+
235
+ .violation-card {
236
+ background: ${colors.cardBg};
237
+ border: 1px solid ${colors.border};
238
+ border-radius: 8px;
239
+ padding: 1rem;
240
+ margin-bottom: 1rem;
241
+ }
242
+
243
+ .violation-card.critical { border-left: 4px solid ${colors.critical}; }
244
+ .violation-card.warning { border-left: 4px solid ${colors.warning}; }
245
+ .violation-card.suggestion { border-left: 4px solid ${colors.suggestion}; }
246
+
247
+ .violation-header {
248
+ display: flex;
249
+ align-items: center;
250
+ gap: 0.5rem;
251
+ margin-bottom: 0.5rem;
252
+ flex-wrap: wrap;
253
+ }
254
+
255
+ .severity-badge, .analyzer-badge {
256
+ padding: 0.25rem 0.5rem;
257
+ border-radius: 4px;
258
+ font-size: 0.75rem;
259
+ font-weight: bold;
260
+ }
261
+
262
+ .severity-badge {
263
+ background: ${colors.critical}20;
264
+ color: ${colors.critical};
265
+ }
266
+
267
+ .analyzer-badge {
268
+ background: ${colors.suggestion}20;
269
+ color: ${colors.suggestion};
270
+ }
271
+
272
+ .file-path {
273
+ font-family: monospace;
274
+ font-size: 0.875rem;
275
+ opacity: 0.8;
276
+ margin-left: auto;
277
+ }
278
+
279
+ .code-snippet {
280
+ background: ${colors.bg};
281
+ border: 1px solid ${colors.border};
282
+ border-radius: 4px;
283
+ padding: 1rem;
284
+ overflow-x: auto;
285
+ margin-top: 0.5rem;
286
+ }
287
+
288
+ .category-chart {
289
+ margin-top: 2rem;
290
+ }
291
+
292
+ .chart-bars {
293
+ margin-top: 1rem;
294
+ }
295
+
296
+ .chart-bar {
297
+ display: flex;
298
+ align-items: center;
299
+ margin-bottom: 0.5rem;
300
+ }
301
+
302
+ .bar {
303
+ background: ${colors.suggestion};
304
+ height: 24px;
305
+ border-radius: 4px;
306
+ display: flex;
307
+ align-items: center;
308
+ justify-content: flex-end;
309
+ padding-right: 0.5rem;
310
+ margin-right: 0.5rem;
311
+ min-width: 50px;
312
+ }
313
+
314
+ .bar .count {
315
+ color: white;
316
+ font-size: 0.875rem;
317
+ font-weight: bold;
318
+ }
319
+
320
+ dl {
321
+ display: grid;
322
+ grid-template-columns: max-content 1fr;
323
+ gap: 0.5rem 1rem;
324
+ }
325
+
326
+ dt {
327
+ font-weight: bold;
328
+ }
329
+
330
+ dd {
331
+ margin: 0;
332
+ }
333
+ `;
334
+ }
335
+ /**
336
+ * Escape HTML special characters
337
+ */
338
+ function escapeHtml(str) {
339
+ const htmlEscapes = {
340
+ '&': '&amp;',
341
+ '<': '&lt;',
342
+ '>': '&gt;',
343
+ '"': '&quot;',
344
+ "'": '&#39;'
345
+ };
346
+ return str.replace(/[&<>"']/g, char => htmlEscapes[char]);
347
+ }
348
+ // Backwards compatibility export
349
+ export const HTMLReportGenerator = {
350
+ generate: generateHTMLReport
351
+ };
352
+ //# sourceMappingURL=htmlReportGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlReportGenerator.js","sourceRoot":"","sources":["../../src/reporting/htmlReportGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * JSON Report Generator (Functional)
3
+ * Generates JSON formatted audit reports
4
+ */
5
+ import { AuditResult } from '../types.js';
6
+ export interface JSONReportConfig {
7
+ pretty?: boolean;
8
+ includeMetadata?: boolean;
9
+ includeRecommendations?: boolean;
10
+ customFields?: Record<string, any>;
11
+ }
12
+ /**
13
+ * Generate a JSON report from audit results
14
+ */
15
+ export declare function generateJSONReport(result: AuditResult, config?: JSONReportConfig): string;
16
+ /**
17
+ * Generate a compact JSON report (minimal size)
18
+ */
19
+ export declare function generateCompactJSONReport(result: AuditResult): string;
20
+ export declare const JSONReportGenerator: {
21
+ generate: typeof generateJSONReport;
22
+ };
23
+ //# sourceMappingURL=jsonReportGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/jsonReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,CAYR;AA4ED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAqBrE;AAGD,eAAO,MAAM,mBAAmB;;CAE/B,CAAC"}