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.
- package/LICENSE +21 -0
- package/README.md +362 -0
- package/configs/hhra-compat.json +168 -0
- package/dist/analyzers/analyzerUtils.d.ts +69 -0
- package/dist/analyzers/analyzerUtils.d.ts.map +1 -0
- package/dist/analyzers/analyzerUtils.js +188 -0
- package/dist/analyzers/analyzerUtils.js.map +1 -0
- package/dist/analyzers/dataAccessAnalyzer.d.ts +46 -0
- package/dist/analyzers/dataAccessAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/dataAccessAnalyzer.js +448 -0
- package/dist/analyzers/dataAccessAnalyzer.js.map +1 -0
- package/dist/analyzers/dryAnalyzer.d.ts +30 -0
- package/dist/analyzers/dryAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/dryAnalyzer.js +537 -0
- package/dist/analyzers/dryAnalyzer.js.map +1 -0
- package/dist/analyzers/solidAnalyzer.d.ts +23 -0
- package/dist/analyzers/solidAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/solidAnalyzer.js +355 -0
- package/dist/analyzers/solidAnalyzer.js.map +1 -0
- package/dist/auditRunner.d.ts +20 -0
- package/dist/auditRunner.d.ts.map +1 -0
- package/dist/auditRunner.js +214 -0
- package/dist/auditRunner.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +38 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/configLoader.d.ts +19 -0
- package/dist/config/configLoader.d.ts.map +1 -0
- package/dist/config/configLoader.js +124 -0
- package/dist/config/configLoader.js.map +1 -0
- package/dist/config/defaults.d.ts +69 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +142 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-standalone.d.ts +3 -0
- package/dist/mcp-standalone.d.ts.map +1 -0
- package/dist/mcp-standalone.js +171 -0
- package/dist/mcp-standalone.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +340 -0
- package/dist/mcp.js.map +1 -0
- package/dist/reporting/csvReportGenerator.d.ts +29 -0
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -0
- package/dist/reporting/csvReportGenerator.js +182 -0
- package/dist/reporting/csvReportGenerator.js.map +1 -0
- package/dist/reporting/htmlReportGenerator.d.ts +18 -0
- package/dist/reporting/htmlReportGenerator.d.ts.map +1 -0
- package/dist/reporting/htmlReportGenerator.js +352 -0
- package/dist/reporting/htmlReportGenerator.js.map +1 -0
- package/dist/reporting/jsonReportGenerator.d.ts +23 -0
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -0
- package/dist/reporting/jsonReportGenerator.js +103 -0
- package/dist/reporting/jsonReportGenerator.js.map +1 -0
- package/dist/reporting/reportGenerator.d.ts +21 -0
- package/dist/reporting/reportGenerator.d.ts.map +1 -0
- package/dist/reporting/reportGenerator.js +53 -0
- package/dist/reporting/reportGenerator.js.map +1 -0
- package/dist/types.d.ts +246 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/astParser.d.ts +71 -0
- package/dist/utils/astParser.d.ts.map +1 -0
- package/dist/utils/astParser.js +244 -0
- package/dist/utils/astParser.js.map +1 -0
- package/dist/utils/astUtils.d.ts +89 -0
- package/dist/utils/astUtils.d.ts.map +1 -0
- package/dist/utils/astUtils.js +289 -0
- package/dist/utils/astUtils.js.map +1 -0
- package/dist/utils/fileDiscovery.d.ts +58 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -0
- package/dist/utils/fileDiscovery.js +203 -0
- package/dist/utils/fileDiscovery.js.map +1 -0
- package/examples/.auditrc.example.json +61 -0
- package/examples/.auditrc.json +201 -0
- package/examples/nextjs.auditrc.json +65 -0
- package/examples/node-api.auditrc.json +82 -0
- package/examples/react.auditrc.json +59 -0
- 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
|
+
'&': '&',
|
|
341
|
+
'<': '<',
|
|
342
|
+
'>': '>',
|
|
343
|
+
'"': '"',
|
|
344
|
+
"'": '''
|
|
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":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAmB,EACnB,MAAyB;IAEzB,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,OAAO,CAAC;IACvC,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAE7D,OAAO;;;;;iCAKwB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE;aACnE,GAAG;;;;;;8CAM8B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;;;UAG/E,sBAAsB,CAAC,MAAM,CAAC;UAC9B,yBAAyB,CAAC,MAAM,CAAC;UACjC,uBAAuB,CAAC,MAAM,CAAC;;;QAGjC,CAAC;AACT,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,MAAmB;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE3B,OAAO;;;;;sBAKa,OAAO,CAAC,cAAc;;;;sBAItB,OAAO,CAAC,QAAQ;;;;sBAIhB,OAAO,CAAC,WAAW;;;;sBAInB,OAAO,CAAC,eAAe;;;;;UAKnC,iCAAiC,CAAC,OAAO,CAAC,oBAAoB,CAAC;eAC1D,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,iCAAiC,CAAC,oBAA4C;IACrF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;SACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEf,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,OAAO;;;;cAIK,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;;qDAEC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;8CAChE,KAAK;;0CAET,QAAQ;;aAErC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;WAEZ,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,MAAmB;IACpD,MAAM,aAAa,GAA4C,EAAE,CAAC;IAElE,KAAK,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QAChF,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;YAClD,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,gBAAgB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnD,MAAM,aAAa,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACjE,OAAO,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,OAAO;;;;cAIK,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;eAE3E,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,SAA2C;IACxE,OAAO;iCACwB,SAAS,CAAC,QAAQ;;2CAER,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;2CAChC,SAAS,CAAC,QAAQ;sCACvB,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;;;iCAGhE,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC;cAChD,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,8DAA8D,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;cACxI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;;WAE3G,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,MAAmB;IAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE5B,OAAO;;;;;kBAKS,QAAQ,CAAC,aAAa;;;kBAGtB,QAAQ,CAAC,aAAa;;;kBAGtB,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;eAEnC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAuB;IAC5C,MAAM,MAAM,GAAG;QACb,KAAK,EAAE;YACL,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,SAAS;SACtB;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,SAAS;SACtB;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO;;;4BAGmB,MAAM,CAAC,EAAE;iBACpB,MAAM,CAAC,IAAI;;;;;;;;;;;;;mCAaO,MAAM,CAAC,MAAM;;;;;;;;;;;iBAW/B,MAAM,CAAC,IAAI;;;;;;;;;;;;sBAYN,MAAM,CAAC,MAAM;;;;4BAIP,MAAM,CAAC,MAAM;;;;;;;;;;;;;;mDAcU,MAAM,CAAC,QAAQ;kDAChB,MAAM,CAAC,OAAO;qDACX,MAAM,CAAC,UAAU;;;sBAGhD,MAAM,CAAC,MAAM;4BACP,MAAM,CAAC,MAAM;;;;;;wDAMe,MAAM,CAAC,QAAQ;uDAChB,MAAM,CAAC,OAAO;0DACX,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;sBAkBrD,MAAM,CAAC,QAAQ;iBACpB,MAAM,CAAC,QAAQ;;;;sBAIV,MAAM,CAAC,UAAU;iBACtB,MAAM,CAAC,UAAU;;;;;;;;;;;sBAWZ,MAAM,CAAC,EAAE;4BACH,MAAM,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;sBAsBnB,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,WAAW,GAA2B;QAC1C,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,OAAO;KACb,CAAC;IAEF,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,iCAAiC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,kBAAkB;CAC7B,CAAC"}
|
|
@@ -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"}
|