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 @@
1
+ {"version":3,"file":"dataAccessAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/dataAccessAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * DRY (Don't Repeat Yourself) Analyzer (Functional)
3
+ * Detects code duplication across the entire codebase
4
+ *
5
+ * Uses a code index to efficiently find:
6
+ * - Exact code duplicates
7
+ * - Similar code patterns
8
+ * - Repeated string literals
9
+ * - Duplicate imports
10
+ */
11
+ import { AnalyzerDefinition } from '../types.js';
12
+ /**
13
+ * Configuration for DRY analyzer
14
+ */
15
+ export interface DRYAnalyzerConfig {
16
+ minLineThreshold?: number;
17
+ similarityThreshold?: number;
18
+ excludePatterns?: string[];
19
+ checkImports?: boolean;
20
+ checkStrings?: boolean;
21
+ ignoreComments?: boolean;
22
+ ignoreWhitespace?: boolean;
23
+ debug?: boolean;
24
+ debugLogPath?: string;
25
+ }
26
+ /**
27
+ * DRY Analyzer definition
28
+ */
29
+ export declare const dryAnalyzer: AnalyzerDefinition;
30
+ //# sourceMappingURL=dryAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dryAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/dryAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAEL,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAiDrB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAglBD;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,kBAkEzB,CAAC"}
@@ -0,0 +1,537 @@
1
+ /**
2
+ * DRY (Don't Repeat Yourself) Analyzer (Functional)
3
+ * Detects code duplication across the entire codebase
4
+ *
5
+ * Uses a code index to efficiently find:
6
+ * - Exact code duplicates
7
+ * - Similar code patterns
8
+ * - Repeated string literals
9
+ * - Duplicate imports
10
+ */
11
+ import * as ts from 'typescript';
12
+ import * as crypto from 'crypto';
13
+ import * as fs from 'fs/promises';
14
+ import { parseTypeScriptFile, getNodeText, getLineAndColumn, findNodesByKind, getImports } from './analyzerUtils.js';
15
+ /**
16
+ * Debug logger
17
+ */
18
+ class DebugLogger {
19
+ logs = [];
20
+ enabled;
21
+ constructor(enabled = false) {
22
+ this.enabled = enabled;
23
+ }
24
+ log(message, data) {
25
+ if (!this.enabled)
26
+ return;
27
+ const timestamp = new Date().toISOString();
28
+ const logEntry = `[${timestamp}] ${message}`;
29
+ if (data !== undefined) {
30
+ this.logs.push(`${logEntry}\n${JSON.stringify(data, null, 2)}`);
31
+ }
32
+ else {
33
+ this.logs.push(logEntry);
34
+ }
35
+ // Don't log to console to avoid interfering with MCP protocol
36
+ // console.log(`[DRY] ${message}`, data || '');
37
+ }
38
+ async writeToFile(filePath) {
39
+ if (!this.enabled || this.logs.length === 0)
40
+ return;
41
+ const content = this.logs.join('\n\n');
42
+ await fs.writeFile(filePath, content, 'utf-8');
43
+ // Don't log to console - the file write is sufficient
44
+ }
45
+ getLogs() {
46
+ return this.logs;
47
+ }
48
+ }
49
+ /**
50
+ * Default configuration
51
+ */
52
+ const DEFAULT_CONFIG = {
53
+ minLineThreshold: 5,
54
+ similarityThreshold: 0.85,
55
+ excludePatterns: ['**/*.test.ts', '**/*.spec.ts'],
56
+ checkImports: true,
57
+ checkStrings: true,
58
+ ignoreComments: true,
59
+ ignoreWhitespace: true,
60
+ debug: false,
61
+ debugLogPath: './dry-analyzer-debug.log'
62
+ };
63
+ /**
64
+ * Build a code index from all files
65
+ */
66
+ async function buildCodeIndex(files, config, logger) {
67
+ const index = {
68
+ blocks: [],
69
+ hashMap: new Map(),
70
+ stringLiterals: new Map(),
71
+ imports: new Map()
72
+ };
73
+ logger.log(`Building code index for ${files.length} files`);
74
+ for (const file of files) {
75
+ // Skip excluded patterns
76
+ if (config.excludePatterns?.some(pattern => file.includes(pattern.replace('**/', '').replace('*', '')))) {
77
+ logger.log(`Skipping excluded file: ${file}`);
78
+ continue;
79
+ }
80
+ try {
81
+ const { sourceFile } = await parseTypeScriptFile(file);
82
+ logger.log(`Processing file: ${file}`);
83
+ // Extract code blocks
84
+ const blocks = extractCodeBlocks(sourceFile, file, config, logger);
85
+ logger.log(`Extracted ${blocks.length} code blocks from ${file}`);
86
+ for (const block of blocks) {
87
+ index.blocks.push(block);
88
+ // Add to hash map for O(1) duplicate lookup
89
+ if (!index.hashMap.has(block.hash)) {
90
+ index.hashMap.set(block.hash, []);
91
+ }
92
+ index.hashMap.get(block.hash).push(block);
93
+ }
94
+ // Extract string literals if enabled
95
+ if (config.checkStrings) {
96
+ const stringCount = index.stringLiterals.size;
97
+ extractStringLiterals(sourceFile, file, index.stringLiterals, logger);
98
+ logger.log(`Found ${index.stringLiterals.size - stringCount} new string literals`);
99
+ }
100
+ // Extract imports if enabled
101
+ if (config.checkImports) {
102
+ const importCount = index.imports.size;
103
+ extractImports(sourceFile, file, index.imports, logger);
104
+ logger.log(`Found ${index.imports.size - importCount} new import patterns`);
105
+ }
106
+ }
107
+ catch (error) {
108
+ logger.log(`Error processing ${file}: ${error}`);
109
+ // Don't use console.error to avoid MCP interference
110
+ }
111
+ }
112
+ logger.log('Code index built', {
113
+ totalBlocks: index.blocks.length,
114
+ uniqueHashes: index.hashMap.size,
115
+ stringLiterals: index.stringLiterals.size,
116
+ importPatterns: index.imports.size
117
+ });
118
+ return index;
119
+ }
120
+ /**
121
+ * Extract code blocks from a source file
122
+ */
123
+ function extractCodeBlocks(sourceFile, filePath, config, logger) {
124
+ const blocks = [];
125
+ // Extract functions
126
+ const functions = findNodesByKind(sourceFile, ts.SyntaxKind.FunctionDeclaration);
127
+ for (const func of functions) {
128
+ const block = createCodeBlock(sourceFile, func, filePath, 'function', config);
129
+ if (block && isBlockLargeEnough(block, config)) {
130
+ blocks.push(block);
131
+ }
132
+ }
133
+ // Extract arrow functions
134
+ const arrowFunctions = findNodesByKind(sourceFile, ts.SyntaxKind.ArrowFunction);
135
+ for (const arrow of arrowFunctions) {
136
+ const block = createCodeBlock(sourceFile, arrow, filePath, 'function', config);
137
+ if (block && isBlockLargeEnough(block, config)) {
138
+ blocks.push(block);
139
+ }
140
+ }
141
+ // Extract methods
142
+ const methods = findNodesByKind(sourceFile, ts.SyntaxKind.MethodDeclaration);
143
+ for (const method of methods) {
144
+ const block = createCodeBlock(sourceFile, method, filePath, 'method', config);
145
+ if (block && isBlockLargeEnough(block, config)) {
146
+ blocks.push(block);
147
+ }
148
+ }
149
+ // Extract class declarations
150
+ const classes = findNodesByKind(sourceFile, ts.SyntaxKind.ClassDeclaration);
151
+ for (const cls of classes) {
152
+ const block = createCodeBlock(sourceFile, cls, filePath, 'class', config);
153
+ if (block && isBlockLargeEnough(block, config)) {
154
+ blocks.push(block);
155
+ }
156
+ }
157
+ // Extract block statements (if/else, loops, etc.)
158
+ const blockStatements = findNodesByKind(sourceFile, ts.SyntaxKind.Block);
159
+ for (const blockStmt of blockStatements) {
160
+ // Only consider substantial blocks
161
+ const block = createCodeBlock(sourceFile, blockStmt, filePath, 'block', config);
162
+ if (block && isBlockLargeEnough(block, config)) {
163
+ blocks.push(block);
164
+ }
165
+ }
166
+ return blocks;
167
+ }
168
+ /**
169
+ * Create a code block from a node
170
+ */
171
+ function createCodeBlock(sourceFile, node, filePath, type, config) {
172
+ const text = getNodeText(node, sourceFile);
173
+ const normalizedText = normalizeCode(text, config);
174
+ if (!normalizedText.trim()) {
175
+ return null;
176
+ }
177
+ const { line: startLine } = getLineAndColumn(sourceFile, node.getStart());
178
+ const { line: endLine } = getLineAndColumn(sourceFile, node.getEnd());
179
+ let name;
180
+ if ('name' in node && node.name) {
181
+ const nodeName = node.name;
182
+ if (ts.isIdentifier(nodeName)) {
183
+ name = nodeName.text;
184
+ }
185
+ }
186
+ return {
187
+ file: filePath,
188
+ startLine,
189
+ endLine,
190
+ text,
191
+ normalizedText,
192
+ hash: hashCode(normalizedText),
193
+ type,
194
+ name
195
+ };
196
+ }
197
+ /**
198
+ * Normalize code for comparison
199
+ */
200
+ function normalizeCode(code, config) {
201
+ let normalized = code;
202
+ if (config.ignoreComments) {
203
+ // Remove single-line comments
204
+ normalized = normalized.replace(/\/\/.*$/gm, '');
205
+ // Remove multi-line comments
206
+ normalized = normalized.replace(/\/\*[\s\S]*?\*\//g, '');
207
+ }
208
+ if (config.ignoreWhitespace) {
209
+ // Normalize whitespace
210
+ normalized = normalized.replace(/\s+/g, ' ').trim();
211
+ }
212
+ // Remove variable names to detect similar patterns
213
+ // This is a simple approach - could be improved with proper AST analysis
214
+ normalized = normalized.replace(/\b(?:const|let|var)\s+(\w+)/g, 'VAR $1');
215
+ return normalized;
216
+ }
217
+ /**
218
+ * Hash code for fast comparison
219
+ */
220
+ function hashCode(text) {
221
+ return crypto.createHash('md5').update(text).digest('hex');
222
+ }
223
+ /**
224
+ * Check if a block is large enough to be considered
225
+ */
226
+ function isBlockLargeEnough(block, config) {
227
+ const lineCount = block.endLine - block.startLine + 1;
228
+ return lineCount >= (config.minLineThreshold || 5);
229
+ }
230
+ /**
231
+ * Extract string literals
232
+ */
233
+ function extractStringLiterals(sourceFile, filePath, stringMap, logger) {
234
+ const stringLiterals = findNodesByKind(sourceFile, ts.SyntaxKind.StringLiteral);
235
+ for (const literal of stringLiterals) {
236
+ const text = literal.text;
237
+ // Skip short strings and common ones
238
+ if (text.length < 10 || isCommonString(text)) {
239
+ continue;
240
+ }
241
+ const { line } = getLineAndColumn(sourceFile, literal.getStart());
242
+ if (!stringMap.has(text)) {
243
+ stringMap.set(text, []);
244
+ }
245
+ stringMap.get(text).push({ file: filePath, line });
246
+ }
247
+ }
248
+ /**
249
+ * Check if a string is too common to track
250
+ */
251
+ function isCommonString(str) {
252
+ const common = [
253
+ 'use strict',
254
+ 'default',
255
+ 'exports',
256
+ 'undefined',
257
+ 'null',
258
+ 'true',
259
+ 'false',
260
+ '',
261
+ ' ',
262
+ '\n',
263
+ '\t'
264
+ ];
265
+ return common.includes(str) || /^[\s\d]+$/.test(str);
266
+ }
267
+ /**
268
+ * Extract imports
269
+ */
270
+ function extractImports(sourceFile, filePath, importMap, logger) {
271
+ const imports = getImports(sourceFile);
272
+ for (const imp of imports) {
273
+ const key = `${imp.moduleSpecifier}:${imp.importedNames.sort().join(',')}`;
274
+ if (!importMap.has(key)) {
275
+ importMap.set(key, []);
276
+ }
277
+ importMap.get(key).push({
278
+ file: filePath,
279
+ line: imp.line,
280
+ modules: imp.importedNames
281
+ });
282
+ }
283
+ }
284
+ /**
285
+ * Find duplicates in the code index
286
+ */
287
+ function findDuplicates(index, config, logger) {
288
+ const violations = [];
289
+ // Find exact duplicates
290
+ logger.log(`Checking ${index.hashMap.size} unique hashes for duplicates`);
291
+ for (const [hash, blocks] of index.hashMap) {
292
+ if (blocks.length > 1) {
293
+ logger.log(`Hash ${hash} has ${blocks.length} blocks`);
294
+ // Group by actual code (not just hash) to avoid false positives
295
+ const groups = groupByExactCode(blocks);
296
+ for (const group of groups) {
297
+ if (group.length > 1) {
298
+ logger.log(`Found exact duplicate with ${group.length} instances`, {
299
+ files: group.map(b => ({ file: b.file, line: b.startLine, type: b.type })),
300
+ preview: group[0].text.substring(0, 100) + '...'
301
+ });
302
+ violations.push(createDuplicateViolation(group, 'exact-duplicate'));
303
+ }
304
+ }
305
+ }
306
+ }
307
+ // Find similar code blocks
308
+ const similarViolations = findSimilarBlocks(index.blocks, config, logger);
309
+ violations.push(...similarViolations);
310
+ // Find duplicate strings
311
+ if (config.checkStrings) {
312
+ for (const [str, locations] of index.stringLiterals) {
313
+ if (locations.length > 2) { // More than 2 occurrences
314
+ violations.push(createStringDuplicateViolation(str, locations));
315
+ }
316
+ }
317
+ }
318
+ // Find duplicate imports
319
+ if (config.checkImports) {
320
+ for (const [importKey, locations] of index.imports) {
321
+ if (locations.length > 3) { // More than 3 files with same imports
322
+ violations.push(createImportDuplicateViolation(importKey, locations));
323
+ }
324
+ }
325
+ }
326
+ return violations;
327
+ }
328
+ /**
329
+ * Group blocks by exact code content
330
+ */
331
+ function groupByExactCode(blocks) {
332
+ const groups = new Map();
333
+ for (const block of blocks) {
334
+ const key = block.normalizedText;
335
+ if (!groups.has(key)) {
336
+ groups.set(key, []);
337
+ }
338
+ groups.get(key).push(block);
339
+ }
340
+ return Array.from(groups.values());
341
+ }
342
+ /**
343
+ * Find similar (but not exact) code blocks
344
+ */
345
+ function findSimilarBlocks(blocks, config, logger) {
346
+ const violations = [];
347
+ const threshold = config.similarityThreshold || 0.85;
348
+ const processed = new Set();
349
+ for (let i = 0; i < blocks.length; i++) {
350
+ const block1 = blocks[i];
351
+ const key1 = `${block1.file}:${block1.startLine}`;
352
+ if (processed.has(key1))
353
+ continue;
354
+ const similar = [block1];
355
+ for (let j = i + 1; j < blocks.length; j++) {
356
+ const block2 = blocks[j];
357
+ const key2 = `${block2.file}:${block2.startLine}`;
358
+ if (processed.has(key2))
359
+ continue;
360
+ // Skip if same hash (already handled in exact duplicates)
361
+ if (block1.hash === block2.hash)
362
+ continue;
363
+ const similarity = calculateSimilarity(block1.normalizedText, block2.normalizedText);
364
+ if (similarity >= threshold) {
365
+ similar.push(block2);
366
+ processed.add(key2);
367
+ }
368
+ }
369
+ if (similar.length > 1) {
370
+ violations.push(createDuplicateViolation(similar, 'similar-logic', calculateAverageSimilarity(similar)));
371
+ similar.forEach(b => processed.add(`${b.file}:${b.startLine}`));
372
+ }
373
+ }
374
+ return violations;
375
+ }
376
+ /**
377
+ * Calculate similarity between two strings (0-1)
378
+ */
379
+ function calculateSimilarity(str1, str2) {
380
+ // Simple token-based similarity
381
+ const tokens1 = tokenize(str1);
382
+ const tokens2 = tokenize(str2);
383
+ const set1 = new Set(tokens1);
384
+ const set2 = new Set(tokens2);
385
+ const intersection = new Set([...set1].filter(x => set2.has(x)));
386
+ const union = new Set([...set1, ...set2]);
387
+ // Jaccard similarity
388
+ const jaccard = intersection.size / union.size;
389
+ // Length similarity
390
+ const lengthSim = Math.min(str1.length, str2.length) / Math.max(str1.length, str2.length);
391
+ // Combined similarity
392
+ return (jaccard * 0.7 + lengthSim * 0.3);
393
+ }
394
+ /**
395
+ * Tokenize code for similarity comparison
396
+ */
397
+ function tokenize(code) {
398
+ return code
399
+ .split(/\s+/)
400
+ .filter(token => token.length > 0)
401
+ .map(token => token.toLowerCase());
402
+ }
403
+ /**
404
+ * Calculate average similarity for a group
405
+ */
406
+ function calculateAverageSimilarity(blocks) {
407
+ if (blocks.length < 2)
408
+ return 1;
409
+ let totalSim = 0;
410
+ let count = 0;
411
+ for (let i = 0; i < blocks.length - 1; i++) {
412
+ for (let j = i + 1; j < blocks.length; j++) {
413
+ totalSim += calculateSimilarity(blocks[i].normalizedText, blocks[j].normalizedText);
414
+ count++;
415
+ }
416
+ }
417
+ return totalSim / count;
418
+ }
419
+ /**
420
+ * Create a duplicate violation
421
+ */
422
+ function createDuplicateViolation(blocks, type, similarity) {
423
+ const primary = blocks[0];
424
+ const locations = blocks.map(b => ({ file: b.file, line: b.startLine }));
425
+ const totalLines = blocks.reduce((sum, b) => sum + (b.endLine - b.startLine + 1), 0);
426
+ return {
427
+ analyzer: 'dry',
428
+ file: primary.file,
429
+ line: primary.startLine,
430
+ severity: type === 'exact-duplicate' ? 'warning' : 'suggestion',
431
+ type,
432
+ message: `${type === 'exact-duplicate' ? 'Exact duplicate' : 'Similar'} code found in ${blocks.length} locations`,
433
+ recommendation: `Consider extracting this ${primary.type} into a shared utility function`,
434
+ locations,
435
+ similarity,
436
+ metrics: {
437
+ duplicateLines: totalLines - (primary.endLine - primary.startLine + 1),
438
+ totalLines
439
+ },
440
+ estimatedEffort: 'medium'
441
+ };
442
+ }
443
+ /**
444
+ * Create a string duplicate violation
445
+ */
446
+ function createStringDuplicateViolation(str, locations) {
447
+ return {
448
+ analyzer: 'dry',
449
+ file: locations[0].file,
450
+ line: locations[0].line,
451
+ severity: 'suggestion',
452
+ type: 'exact-duplicate',
453
+ message: `String literal "${str.substring(0, 50)}${str.length > 50 ? '...' : ''}" appears ${locations.length} times`,
454
+ recommendation: 'Consider extracting this string into a named constant',
455
+ locations,
456
+ estimatedEffort: 'small'
457
+ };
458
+ }
459
+ /**
460
+ * Create an import duplicate violation
461
+ */
462
+ function createImportDuplicateViolation(importKey, locations) {
463
+ const [moduleSpec] = importKey.split(':');
464
+ return {
465
+ analyzer: 'dry',
466
+ file: locations[0].file,
467
+ line: locations[0].line,
468
+ severity: 'suggestion',
469
+ type: 'pattern-duplication',
470
+ message: `Same import pattern from "${moduleSpec}" used in ${locations.length} files`,
471
+ recommendation: 'Consider creating a barrel export or shared import module',
472
+ locations: locations.map(l => ({ file: l.file, line: l.line })),
473
+ estimatedEffort: 'small'
474
+ };
475
+ }
476
+ /**
477
+ * DRY Analyzer definition
478
+ */
479
+ export const dryAnalyzer = {
480
+ name: 'dry',
481
+ defaultConfig: DEFAULT_CONFIG,
482
+ analyze: async (files, config, options, progressCallback) => {
483
+ const mergedConfig = { ...DEFAULT_CONFIG, ...config };
484
+ const logger = new DebugLogger(mergedConfig.debug || false);
485
+ logger.log('DRY Analyzer started', {
486
+ filesCount: files.length,
487
+ config: mergedConfig
488
+ });
489
+ // Report initial progress
490
+ if (progressCallback) {
491
+ progressCallback({
492
+ current: 0,
493
+ total: files.length,
494
+ analyzer: 'dry',
495
+ phase: 'indexing'
496
+ });
497
+ }
498
+ // Build code index
499
+ const startTime = Date.now();
500
+ const index = await buildCodeIndex(files, mergedConfig, logger);
501
+ // Report analysis progress
502
+ if (progressCallback) {
503
+ progressCallback({
504
+ current: files.length / 2,
505
+ total: files.length,
506
+ analyzer: 'dry',
507
+ phase: 'analyzing'
508
+ });
509
+ }
510
+ // Find duplicates
511
+ const violations = findDuplicates(index, mergedConfig, logger);
512
+ logger.log('DRY Analysis complete', {
513
+ violationsFound: violations.length,
514
+ executionTime: Date.now() - startTime
515
+ });
516
+ // Write debug log to file
517
+ if (mergedConfig.debug && mergedConfig.debugLogPath) {
518
+ await logger.writeToFile(mergedConfig.debugLogPath);
519
+ }
520
+ // Complete
521
+ if (progressCallback) {
522
+ progressCallback({
523
+ current: files.length,
524
+ total: files.length,
525
+ analyzer: 'dry',
526
+ phase: 'complete'
527
+ });
528
+ }
529
+ return {
530
+ violations,
531
+ filesProcessed: files.length,
532
+ executionTime: Date.now() - startTime,
533
+ analyzerName: 'dry'
534
+ };
535
+ }
536
+ };
537
+ //# sourceMappingURL=dryAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dryAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/dryAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * SOLID Principles Analyzer - Functional Implementation
3
+ * Detects violations of SOLID principles in TypeScript/JavaScript code
4
+ */
5
+ import { AnalyzerDefinition } from '../types.js';
6
+ /**
7
+ * Configuration for SOLID analyzer
8
+ */
9
+ export interface SOLIDAnalyzerConfig {
10
+ maxMethodsPerClass: number;
11
+ maxLinesPerMethod: number;
12
+ maxParametersPerMethod: number;
13
+ maxClassComplexity: number;
14
+ maxInterfaceMembers: number;
15
+ checkDependencyInversion: boolean;
16
+ checkInterfaceSegregation: boolean;
17
+ checkLiskovSubstitution: boolean;
18
+ }
19
+ /**
20
+ * SOLID analyzer definition
21
+ */
22
+ export declare const solidAnalyzer: AnalyzerDefinition;
23
+ //# sourceMappingURL=solidAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/solidAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAa,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAY5D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,OAAO,CAAC;IAClC,yBAAyB,EAAE,OAAO,CAAC;IACnC,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAmZD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,kBAU3B,CAAC"}