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,171 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
5
+ import { spawn } from 'child_process';
6
+ import path from 'node:path';
7
+ import chalk from 'chalk';
8
+ const tools = [
9
+ {
10
+ name: 'audit_run',
11
+ description: 'Run a comprehensive code audit on the specified codebase',
12
+ parameters: [
13
+ {
14
+ name: 'path',
15
+ type: 'string',
16
+ required: false,
17
+ description: 'The directory path to audit (defaults to current directory)',
18
+ default: process.cwd(),
19
+ },
20
+ ],
21
+ },
22
+ {
23
+ name: 'audit_check_health',
24
+ description: 'Quick health check of a codebase',
25
+ parameters: [
26
+ {
27
+ name: 'path',
28
+ type: 'string',
29
+ required: false,
30
+ description: 'The directory path to check',
31
+ default: process.cwd(),
32
+ },
33
+ ],
34
+ },
35
+ ];
36
+ async function runCliCommand(args) {
37
+ return new Promise((resolve, reject) => {
38
+ const cliPath = path.join(path.dirname(new URL(import.meta.url).pathname), 'cli.js');
39
+ const child = spawn('node', [cliPath, ...args], {
40
+ cwd: process.cwd(),
41
+ env: process.env,
42
+ });
43
+ let stdout = '';
44
+ let stderr = '';
45
+ child.stdout.on('data', (data) => {
46
+ stdout += data.toString();
47
+ });
48
+ child.stderr.on('data', (data) => {
49
+ stderr += data.toString();
50
+ });
51
+ child.on('error', (error) => {
52
+ reject(error);
53
+ });
54
+ child.on('close', (code) => {
55
+ if (code !== 0) {
56
+ reject(new Error(`Command failed with exit code ${code}: ${stderr}`));
57
+ }
58
+ else {
59
+ try {
60
+ // Try to parse as JSON first
61
+ const result = JSON.parse(stdout);
62
+ resolve(result);
63
+ }
64
+ catch {
65
+ // If not JSON, return as text
66
+ resolve({ output: stdout, stderr });
67
+ }
68
+ }
69
+ });
70
+ });
71
+ }
72
+ async function startMcpServer() {
73
+ const server = new Server({
74
+ name: 'code-auditor',
75
+ version: '0.1.0',
76
+ }, {
77
+ capabilities: {
78
+ tools: {},
79
+ },
80
+ });
81
+ // Handle tool listing
82
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
83
+ return {
84
+ tools: tools.map(tool => ({
85
+ name: tool.name,
86
+ description: tool.description,
87
+ inputSchema: {
88
+ type: 'object',
89
+ properties: tool.parameters.reduce((acc, param) => {
90
+ acc[param.name] = {
91
+ type: param.type,
92
+ description: param.description,
93
+ ...(param.default !== undefined && { default: param.default }),
94
+ ...(param.enum && { enum: param.enum }),
95
+ };
96
+ return acc;
97
+ }, {}),
98
+ required: tool.parameters.filter(p => p.required).map(p => p.name),
99
+ },
100
+ })),
101
+ };
102
+ });
103
+ // Handle tool execution
104
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
105
+ const { name, arguments: args } = request.params;
106
+ try {
107
+ let result;
108
+ switch (name) {
109
+ case 'audit_run': {
110
+ const auditPath = args.path || process.cwd();
111
+ result = await runCliCommand(['--json', '--path', auditPath]);
112
+ break;
113
+ }
114
+ case 'audit_check_health': {
115
+ const auditPath = args.path || process.cwd();
116
+ // Run a quick audit and calculate health score
117
+ const auditResult = await runCliCommand(['--json', '--path', auditPath, '--quick']);
118
+ // Simple health calculation
119
+ const violations = auditResult.violations || [];
120
+ const critical = violations.filter((v) => v.severity === 'critical').length;
121
+ const warnings = violations.filter((v) => v.severity === 'warning').length;
122
+ const healthScore = Math.max(0, 100 - (critical * 10) - (warnings * 2));
123
+ result = {
124
+ healthScore,
125
+ status: healthScore >= 70 ? 'healthy' : 'needs-attention',
126
+ metrics: {
127
+ totalViolations: violations.length,
128
+ criticalViolations: critical,
129
+ warningViolations: warnings,
130
+ },
131
+ };
132
+ break;
133
+ }
134
+ default:
135
+ throw new Error(`Unknown tool: ${name}`);
136
+ }
137
+ return {
138
+ content: [
139
+ {
140
+ type: 'text',
141
+ text: JSON.stringify(result, null, 2),
142
+ },
143
+ ],
144
+ };
145
+ }
146
+ catch (error) {
147
+ return {
148
+ content: [
149
+ {
150
+ type: 'text',
151
+ text: JSON.stringify({
152
+ error: error instanceof Error ? error.message : 'Unknown error',
153
+ tool: name,
154
+ }),
155
+ },
156
+ ],
157
+ isError: true,
158
+ };
159
+ }
160
+ });
161
+ const transport = new StdioServerTransport();
162
+ await server.connect(transport);
163
+ console.error(chalk.green('✓ Code Auditor MCP Server started (standalone mode)'));
164
+ console.error(chalk.gray('Listening on stdio...'));
165
+ }
166
+ // Start server
167
+ startMcpServer().catch(error => {
168
+ console.error(chalk.red('Failed to start MCP server:'), error);
169
+ process.exit(1);
170
+ });
171
+ //# sourceMappingURL=mcp-standalone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-standalone.js","sourceRoot":"","sources":["../src/mcp-standalone.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":""}
package/dist/mcp.js ADDED
@@ -0,0 +1,340 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
5
+ import { createAuditRunner } from './auditRunner.js';
6
+ import path from 'node:path';
7
+ import fs from 'node:fs/promises';
8
+ import chalk from 'chalk';
9
+ const tools = [
10
+ {
11
+ name: 'audit_run',
12
+ description: 'Run a comprehensive code audit on the specified codebase',
13
+ parameters: [
14
+ {
15
+ name: 'path',
16
+ type: 'string',
17
+ required: false,
18
+ description: 'The directory path to audit (defaults to current directory)',
19
+ default: process.cwd(),
20
+ },
21
+ {
22
+ name: 'enabledAnalyzers',
23
+ type: 'array',
24
+ required: false,
25
+ description: 'List of analyzers to run (solid, dry, security, component, data-access)',
26
+ default: ['solid', 'dry', 'security'],
27
+ },
28
+ {
29
+ name: 'minSeverity',
30
+ type: 'string',
31
+ required: false,
32
+ description: 'Minimum severity level to report',
33
+ default: 'warning',
34
+ enum: ['info', 'warning', 'critical'],
35
+ },
36
+ ],
37
+ },
38
+ {
39
+ name: 'audit_analyze_file',
40
+ description: 'Analyze a specific file for code quality issues',
41
+ parameters: [
42
+ {
43
+ name: 'filePath',
44
+ type: 'string',
45
+ required: true,
46
+ description: 'The file path to analyze',
47
+ },
48
+ {
49
+ name: 'analyzers',
50
+ type: 'array',
51
+ required: false,
52
+ description: 'Specific analyzers to run on this file',
53
+ default: ['solid', 'dry', 'security'],
54
+ },
55
+ ],
56
+ },
57
+ {
58
+ name: 'audit_check_health',
59
+ description: 'Quick health check of a codebase with key metrics',
60
+ parameters: [
61
+ {
62
+ name: 'path',
63
+ type: 'string',
64
+ required: false,
65
+ description: 'The directory path to check',
66
+ default: process.cwd(),
67
+ },
68
+ {
69
+ name: 'threshold',
70
+ type: 'number',
71
+ required: false,
72
+ description: 'Health score threshold (0-100) for pass/fail',
73
+ default: 70,
74
+ },
75
+ ],
76
+ },
77
+ {
78
+ name: 'audit_list_analyzers',
79
+ description: 'List all available code analyzers and their capabilities',
80
+ parameters: [],
81
+ },
82
+ ];
83
+ async function startMcpServer() {
84
+ const server = new Server({
85
+ name: 'code-auditor',
86
+ version: '0.1.0',
87
+ }, {
88
+ capabilities: {
89
+ tools: {},
90
+ },
91
+ });
92
+ // Handle tool listing
93
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
94
+ return {
95
+ tools: tools.map(tool => ({
96
+ name: tool.name,
97
+ description: tool.description,
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: tool.parameters.reduce((acc, param) => {
101
+ acc[param.name] = {
102
+ type: param.type,
103
+ description: param.description,
104
+ ...(param.default !== undefined && { default: param.default }),
105
+ ...(param.enum && { enum: param.enum }),
106
+ };
107
+ return acc;
108
+ }, {}),
109
+ required: tool.parameters.filter(p => p.required).map(p => p.name),
110
+ },
111
+ })),
112
+ };
113
+ });
114
+ // Handle tool execution
115
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
116
+ const { name, arguments: args } = request.params;
117
+ try {
118
+ let result;
119
+ switch (name) {
120
+ case 'audit_run': {
121
+ const auditPath = path.resolve(args.path || process.cwd());
122
+ const options = {
123
+ projectRoot: auditPath,
124
+ enabledAnalyzers: args.enabledAnalyzers || ['solid', 'dry', 'security'],
125
+ minSeverity: (args.minSeverity || 'warning'),
126
+ verbose: false,
127
+ };
128
+ const runner = createAuditRunner(options);
129
+ const auditResult = await runner.run();
130
+ // Format for MCP
131
+ result = {
132
+ summary: {
133
+ totalViolations: auditResult.summary.totalViolations,
134
+ criticalIssues: auditResult.summary.criticalIssues,
135
+ warnings: auditResult.summary.warnings,
136
+ suggestions: auditResult.summary.suggestions,
137
+ filesAnalyzed: auditResult.metadata.filesAnalyzed,
138
+ executionTime: auditResult.metadata.auditDuration,
139
+ healthScore: calculateHealthScore(auditResult),
140
+ },
141
+ violations: getAllViolations(auditResult).slice(0, 100), // Limit to first 100
142
+ recommendations: auditResult.recommendations,
143
+ };
144
+ break;
145
+ }
146
+ case 'audit_analyze_file': {
147
+ const absolutePath = path.resolve(args.filePath);
148
+ await fs.access(absolutePath); // Check file exists
149
+ const options = {
150
+ projectRoot: path.dirname(absolutePath),
151
+ enabledAnalyzers: args.analyzers || ['solid', 'dry', 'security'],
152
+ includePaths: [absolutePath],
153
+ verbose: false,
154
+ };
155
+ const runner = createAuditRunner(options);
156
+ const auditResult = await runner.run();
157
+ const fileViolations = getAllViolations(auditResult).filter(v => v.file === absolutePath);
158
+ result = {
159
+ file: absolutePath,
160
+ violations: fileViolations,
161
+ summary: {
162
+ total: fileViolations.length,
163
+ bySeverity: fileViolations
164
+ .reduce((acc, v) => {
165
+ acc[v.severity] = (acc[v.severity] || 0) + 1;
166
+ return acc;
167
+ }, {}),
168
+ },
169
+ };
170
+ break;
171
+ }
172
+ case 'audit_check_health': {
173
+ const auditPath = path.resolve(args.path || process.cwd());
174
+ const threshold = args.threshold || 70;
175
+ const runner = createAuditRunner({
176
+ projectRoot: auditPath,
177
+ enabledAnalyzers: ['solid', 'dry', 'security'],
178
+ minSeverity: 'warning',
179
+ verbose: false,
180
+ });
181
+ const auditResult = await runner.run();
182
+ const healthScore = calculateHealthScore(auditResult);
183
+ result = {
184
+ healthScore,
185
+ threshold,
186
+ passed: healthScore >= threshold,
187
+ status: healthScore >= threshold ? 'healthy' : 'needs-attention',
188
+ metrics: {
189
+ filesAnalyzed: auditResult.metadata.filesAnalyzed,
190
+ totalViolations: auditResult.summary.totalViolations,
191
+ criticalViolations: auditResult.summary.criticalIssues,
192
+ warningViolations: auditResult.summary.warnings,
193
+ },
194
+ recommendation: getHealthRecommendation(healthScore, auditResult),
195
+ };
196
+ break;
197
+ }
198
+ case 'audit_list_analyzers': {
199
+ result = {
200
+ analyzers: [
201
+ {
202
+ id: 'solid',
203
+ name: 'SOLID Analyzer',
204
+ description: 'Checks adherence to SOLID principles',
205
+ checks: [
206
+ 'Single Responsibility violations',
207
+ 'Open/Closed violations',
208
+ 'Liskov Substitution issues',
209
+ 'Interface Segregation problems',
210
+ 'Dependency Inversion violations',
211
+ ],
212
+ },
213
+ {
214
+ id: 'dry',
215
+ name: 'DRY Analyzer',
216
+ description: 'Identifies code duplication',
217
+ checks: [
218
+ 'Exact code duplicates',
219
+ 'Similar code patterns',
220
+ 'Duplicate imports',
221
+ 'Repeated string literals',
222
+ ],
223
+ },
224
+ {
225
+ id: 'security',
226
+ name: 'Security Analyzer',
227
+ description: 'Verifies security patterns',
228
+ checks: [
229
+ 'Missing authentication',
230
+ 'Authorization issues',
231
+ 'SQL injection risks',
232
+ 'Unvalidated inputs',
233
+ ],
234
+ },
235
+ {
236
+ id: 'component',
237
+ name: 'Component Analyzer',
238
+ description: 'Analyzes UI components',
239
+ checks: [
240
+ 'Missing error boundaries',
241
+ 'Complex render methods',
242
+ 'Deep nesting',
243
+ 'Performance issues',
244
+ ],
245
+ },
246
+ {
247
+ id: 'data-access',
248
+ name: 'Data Access Analyzer',
249
+ description: 'Reviews database patterns',
250
+ checks: [
251
+ 'N+1 queries',
252
+ 'Missing transactions',
253
+ 'Direct DB access in UI',
254
+ 'Performance issues',
255
+ ],
256
+ },
257
+ ],
258
+ };
259
+ break;
260
+ }
261
+ default:
262
+ throw new Error(`Unknown tool: ${name}`);
263
+ }
264
+ return {
265
+ content: [
266
+ {
267
+ type: 'text',
268
+ text: JSON.stringify(result, null, 2),
269
+ },
270
+ ],
271
+ };
272
+ }
273
+ catch (error) {
274
+ return {
275
+ content: [
276
+ {
277
+ type: 'text',
278
+ text: JSON.stringify({
279
+ error: error instanceof Error ? error.message : 'Unknown error',
280
+ tool: name,
281
+ }),
282
+ },
283
+ ],
284
+ isError: true,
285
+ };
286
+ }
287
+ });
288
+ const transport = new StdioServerTransport();
289
+ await server.connect(transport);
290
+ console.error(chalk.green('✓ Code Auditor MCP Server started'));
291
+ console.error(chalk.gray('Listening on stdio...'));
292
+ }
293
+ function getAllViolations(result) {
294
+ const violations = [];
295
+ for (const [analyzerName, analyzerResult] of Object.entries(result.analyzerResults)) {
296
+ for (const violation of analyzerResult.violations) {
297
+ violations.push({
298
+ ...violation,
299
+ analyzer: analyzerName,
300
+ });
301
+ }
302
+ }
303
+ return violations;
304
+ }
305
+ function calculateHealthScore(result) {
306
+ let score = 100;
307
+ const critical = result.summary.criticalIssues;
308
+ const warning = result.summary.warnings;
309
+ score -= critical * 10;
310
+ score -= warning * 2;
311
+ return Math.max(0, Math.min(100, score));
312
+ }
313
+ function generateRecommendations(result) {
314
+ const recommendations = [];
315
+ if (result.summary.criticalIssues > 0) {
316
+ recommendations.push({
317
+ priority: 'high',
318
+ title: 'Fix critical violations immediately',
319
+ description: `${result.summary.criticalIssues} critical issues require immediate attention`,
320
+ });
321
+ }
322
+ // Add more recommendation logic based on patterns
323
+ return recommendations;
324
+ }
325
+ function getHealthRecommendation(score, result) {
326
+ if (score >= 90)
327
+ return 'Excellent code health!';
328
+ if (score >= 70)
329
+ return 'Good code health with room for improvement';
330
+ if (result.summary.criticalIssues > 0) {
331
+ return `Fix ${result.summary.criticalIssues} critical violations first`;
332
+ }
333
+ return 'Code health needs attention - run detailed audit';
334
+ }
335
+ // Start server
336
+ startMcpServer().catch(error => {
337
+ console.error(chalk.red('Failed to start MCP server:'), error);
338
+ process.exit(1);
339
+ });
340
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * CSV Report Generator (Functional)
3
+ * Generates CSV formatted audit reports
4
+ */
5
+ import { AuditResult, Violation } from '../types.js';
6
+ export interface CSVReportConfig {
7
+ delimiter?: string;
8
+ includeHeaders?: boolean;
9
+ columns?: string[];
10
+ customColumns?: Record<string, (violation: Violation & {
11
+ analyzer: string;
12
+ }) => string>;
13
+ }
14
+ /**
15
+ * Generate a CSV report from audit results
16
+ */
17
+ export declare function generateCSVReport(result: AuditResult, config?: CSVReportConfig): string;
18
+ /**
19
+ * Generate a summary CSV report
20
+ */
21
+ export declare function generateSummaryCSVReport(result: AuditResult, config?: CSVReportConfig): string;
22
+ /**
23
+ * Generate a pivot table style CSV report
24
+ */
25
+ export declare function generatePivotCSVReport(result: AuditResult): string;
26
+ export declare const CSVReportGenerator: {
27
+ generate: typeof generateCSVReport;
28
+ };
29
+ //# sourceMappingURL=csvReportGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csvReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/csvReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,CAAC;CACzF;AAiBD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,eAAe,GACvB,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,eAAe,GACvB,MAAM,CAiCR;AAmGD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAsBlE;AAGD,eAAO,MAAM,kBAAkB;;CAE9B,CAAC"}