code-auditor-mcp 1.20.0 → 2.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 (180) hide show
  1. package/dist/adapters/GoAdapter.d.ts +53 -0
  2. package/dist/adapters/GoAdapter.d.ts.map +1 -0
  3. package/dist/adapters/GoAdapter.js +602 -0
  4. package/dist/adapters/GoAdapter.js.map +1 -0
  5. package/dist/adapters/GoConfig.d.ts +35 -0
  6. package/dist/adapters/GoConfig.d.ts.map +1 -0
  7. package/dist/adapters/GoConfig.js +155 -0
  8. package/dist/adapters/GoConfig.js.map +1 -0
  9. package/dist/adapters/LanguageAdapter.d.ts +135 -0
  10. package/dist/adapters/LanguageAdapter.d.ts.map +1 -0
  11. package/dist/adapters/LanguageAdapter.js +47 -0
  12. package/dist/adapters/LanguageAdapter.js.map +1 -0
  13. package/dist/adapters/TypeScriptAdapter.d.ts +43 -0
  14. package/dist/adapters/TypeScriptAdapter.d.ts.map +1 -0
  15. package/dist/adapters/TypeScriptAdapter.js +386 -0
  16. package/dist/adapters/TypeScriptAdapter.js.map +1 -0
  17. package/dist/adapters/UniversalAnalyzer.d.ts +42 -0
  18. package/dist/adapters/UniversalAnalyzer.d.ts.map +1 -0
  19. package/dist/adapters/UniversalAnalyzer.js +103 -0
  20. package/dist/adapters/UniversalAnalyzer.js.map +1 -0
  21. package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +48 -0
  22. package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  23. package/dist/adapters/UniversalSOLIDAnalyzer.js +178 -0
  24. package/dist/adapters/UniversalSOLIDAnalyzer.js.map +1 -0
  25. package/dist/adapters/solidAnalyzerCompat.d.ts +21 -0
  26. package/dist/adapters/solidAnalyzerCompat.d.ts.map +1 -0
  27. package/dist/adapters/solidAnalyzerCompat.js +78 -0
  28. package/dist/adapters/solidAnalyzerCompat.js.map +1 -0
  29. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +103 -0
  30. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -0
  31. package/dist/analyzers/cross-language/APIContractAnalyzer.js +425 -0
  32. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -0
  33. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +117 -0
  34. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -0
  35. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +618 -0
  36. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -0
  37. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +129 -0
  38. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -0
  39. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +473 -0
  40. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -0
  41. package/dist/analyzers/cross-language/SchemaValidator.d.ts +126 -0
  42. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -0
  43. package/dist/analyzers/cross-language/SchemaValidator.js +522 -0
  44. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -0
  45. package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +20 -0
  46. package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +1 -0
  47. package/dist/analyzers/dataAccessAnalyzerCompat.js +59 -0
  48. package/dist/analyzers/dataAccessAnalyzerCompat.js.map +1 -0
  49. package/dist/analyzers/documentationAnalyzerCompat.d.ts +20 -0
  50. package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +1 -0
  51. package/dist/analyzers/documentationAnalyzerCompat.js +52 -0
  52. package/dist/analyzers/documentationAnalyzerCompat.js.map +1 -0
  53. package/dist/analyzers/dryAnalyzerCompat.d.ts +20 -0
  54. package/dist/analyzers/dryAnalyzerCompat.d.ts.map +1 -0
  55. package/dist/analyzers/dryAnalyzerCompat.js +44 -0
  56. package/dist/analyzers/dryAnalyzerCompat.js.map +1 -0
  57. package/dist/analyzers/schemaAnalyzer.d.ts +21 -0
  58. package/dist/analyzers/schemaAnalyzer.d.ts.map +1 -0
  59. package/dist/analyzers/schemaAnalyzer.js +405 -0
  60. package/dist/analyzers/schemaAnalyzer.js.map +1 -0
  61. package/dist/analyzers/schemaAnalyzerCompat.d.ts +20 -0
  62. package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +1 -0
  63. package/dist/analyzers/schemaAnalyzerCompat.js +69 -0
  64. package/dist/analyzers/schemaAnalyzerCompat.js.map +1 -0
  65. package/dist/analyzers/solidAnalyzerCompat.d.ts +20 -0
  66. package/dist/analyzers/solidAnalyzerCompat.d.ts.map +1 -0
  67. package/dist/analyzers/solidAnalyzerCompat.js +78 -0
  68. package/dist/analyzers/solidAnalyzerCompat.js.map +1 -0
  69. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +71 -0
  70. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -0
  71. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +276 -0
  72. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -0
  73. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +82 -0
  74. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -0
  75. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +489 -0
  76. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -0
  77. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +48 -0
  78. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -0
  79. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +175 -0
  80. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -0
  81. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +64 -0
  82. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  83. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +286 -0
  84. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -0
  85. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +119 -0
  86. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -0
  87. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +812 -0
  88. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -0
  89. package/dist/auditRunner.d.ts.map +1 -1
  90. package/dist/auditRunner.js +23 -7
  91. package/dist/auditRunner.js.map +1 -1
  92. package/dist/codeIndexDB-enhanced.d.ts +80 -0
  93. package/dist/codeIndexDB-enhanced.d.ts.map +1 -0
  94. package/dist/codeIndexDB-enhanced.js +488 -0
  95. package/dist/codeIndexDB-enhanced.js.map +1 -0
  96. package/dist/codeIndexDb.d.ts +70 -1
  97. package/dist/codeIndexDb.d.ts.map +1 -1
  98. package/dist/codeIndexDb.js +199 -2
  99. package/dist/codeIndexDb.js.map +1 -1
  100. package/dist/config/defaults.js +1 -1
  101. package/dist/config/defaults.js.map +1 -1
  102. package/dist/languages/LanguageOrchestrator.d.ts +181 -0
  103. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -0
  104. package/dist/languages/LanguageOrchestrator.js +365 -0
  105. package/dist/languages/LanguageOrchestrator.js.map +1 -0
  106. package/dist/languages/LanguageRegistry.d.ts +43 -0
  107. package/dist/languages/LanguageRegistry.d.ts.map +1 -0
  108. package/dist/languages/LanguageRegistry.js +86 -0
  109. package/dist/languages/LanguageRegistry.js.map +1 -0
  110. package/dist/languages/RuntimeManager.d.ts +181 -0
  111. package/dist/languages/RuntimeManager.d.ts.map +1 -0
  112. package/dist/languages/RuntimeManager.js +841 -0
  113. package/dist/languages/RuntimeManager.js.map +1 -0
  114. package/dist/languages/UniversalAnalyzer.d.ts +37 -0
  115. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -0
  116. package/dist/languages/UniversalAnalyzer.js +101 -0
  117. package/dist/languages/UniversalAnalyzer.js.map +1 -0
  118. package/dist/languages/go/GoAdapter.d.ts +57 -0
  119. package/dist/languages/go/GoAdapter.d.ts.map +1 -0
  120. package/dist/languages/go/GoAdapter.js +360 -0
  121. package/dist/languages/go/GoAdapter.js.map +1 -0
  122. package/dist/languages/index.d.ts +13 -0
  123. package/dist/languages/index.d.ts.map +1 -0
  124. package/dist/languages/index.js +23 -0
  125. package/dist/languages/index.js.map +1 -0
  126. package/dist/languages/types.d.ts +182 -0
  127. package/dist/languages/types.d.ts.map +1 -0
  128. package/dist/languages/types.js +5 -0
  129. package/dist/languages/types.js.map +1 -0
  130. package/dist/languages/typescript/TypeScriptAdapter.d.ts +108 -0
  131. package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +1 -0
  132. package/dist/languages/typescript/TypeScriptAdapter.js +567 -0
  133. package/dist/languages/typescript/TypeScriptAdapter.js.map +1 -0
  134. package/dist/languages/typescript/test-extraction.d.ts +2 -0
  135. package/dist/languages/typescript/test-extraction.d.ts.map +1 -0
  136. package/dist/languages/typescript/test-extraction.js +36 -0
  137. package/dist/languages/typescript/test-extraction.js.map +1 -0
  138. package/dist/mcp-hybrid.d.ts +10 -0
  139. package/dist/mcp-hybrid.d.ts.map +1 -0
  140. package/dist/mcp-hybrid.js +41 -0
  141. package/dist/mcp-hybrid.js.map +1 -0
  142. package/dist/mcp-index.d.ts +11 -0
  143. package/dist/mcp-index.d.ts.map +1 -0
  144. package/dist/mcp-index.js +101 -0
  145. package/dist/mcp-index.js.map +1 -0
  146. package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
  147. package/dist/mcp-tools/workflowGuide.js +67 -10
  148. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  149. package/dist/mcp-tools-shared.d.ts +49 -0
  150. package/dist/mcp-tools-shared.d.ts.map +1 -0
  151. package/dist/mcp-tools-shared.js +1282 -0
  152. package/dist/mcp-tools-shared.js.map +1 -0
  153. package/dist/mcp-ui-server.d.ts +27 -0
  154. package/dist/mcp-ui-server.d.ts.map +1 -0
  155. package/dist/mcp-ui-server.js +484 -0
  156. package/dist/mcp-ui-server.js.map +1 -0
  157. package/dist/mcp-ui-simple.d.ts +27 -0
  158. package/dist/mcp-ui-simple.d.ts.map +1 -0
  159. package/dist/mcp-ui-simple.js +425 -0
  160. package/dist/mcp-ui-simple.js.map +1 -0
  161. package/dist/mcp.js +7 -4
  162. package/dist/mcp.js.map +1 -1
  163. package/dist/services/SchemaParser.d.ts +89 -0
  164. package/dist/services/SchemaParser.d.ts.map +1 -0
  165. package/dist/services/SchemaParser.js +434 -0
  166. package/dist/services/SchemaParser.js.map +1 -0
  167. package/dist/types/crossLanguage.d.ts +267 -0
  168. package/dist/types/crossLanguage.d.ts.map +1 -0
  169. package/dist/types/crossLanguage.js +6 -0
  170. package/dist/types/crossLanguage.js.map +1 -0
  171. package/dist/types.d.ts +128 -0
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/types.js.map +1 -1
  174. package/dist/utils/fileDiscovery.d.ts +6 -0
  175. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  176. package/dist/utils/fileDiscovery.js +12 -1
  177. package/dist/utils/fileDiscovery.js.map +1 -1
  178. package/examples/schema-example.json +364 -0
  179. package/examples/schema-example.yaml +137 -0
  180. package/package.json +10 -3
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Universal SOLID Analyzer
3
+ *
4
+ * Implements SOLID principle analysis using the language adapter pattern.
5
+ * This analyzer works across multiple languages by using the abstraction layer.
6
+ */
7
+ import { UniversalAnalyzer } from './UniversalAnalyzer.js';
8
+ const DEFAULT_CONFIG = {
9
+ maxMethodsPerClass: 15,
10
+ maxLinesPerMethod: 50,
11
+ maxParametersPerMethod: 4,
12
+ maxClassComplexity: 50,
13
+ maxInterfaceMembers: 10,
14
+ checkDependencyInversion: true,
15
+ checkInterfaceSegregation: true,
16
+ checkLiskovSubstitution: true,
17
+ srp: {
18
+ maxResponsibilities: 3,
19
+ maxLinesPerFunction: 50,
20
+ maxParametersPerFunction: 4
21
+ },
22
+ ocp: {
23
+ checkForDirectModification: true
24
+ },
25
+ lsp: {
26
+ checkForExceptions: true
27
+ },
28
+ isp: {
29
+ maxMethodsPerInterface: 10
30
+ },
31
+ dip: {
32
+ checkForConcreteClasses: true
33
+ }
34
+ };
35
+ export class UniversalSOLIDAnalyzer extends UniversalAnalyzer {
36
+ name = 'solid';
37
+ description = 'Analyzes code for SOLID principle violations across multiple languages';
38
+ async analyzeAST(ast, adapter, config) {
39
+ console.error(`[DEBUG] SOLID: analyzeAST called for: ${ast.filePath}`);
40
+ const solidConfig = { ...DEFAULT_CONFIG, ...config };
41
+ const violations = [];
42
+ // For Go files, check if pre-computed violations are available from the Go analyzer
43
+ if (adapter.name === 'go' && ast.root.raw?.violations) {
44
+ console.error(`[DEBUG] SOLID: Using pre-computed Go violations for ${ast.filePath}`);
45
+ console.error(`[DEBUG] SOLID: Found ${ast.root.raw.violations.length} pre-computed violations`);
46
+ // Convert Go violations to our format
47
+ const goViolations = ast.root.raw.violations.map((gv) => ({
48
+ file: ast.filePath,
49
+ line: gv.Line,
50
+ column: 1, // Go analyzer doesn't provide column info
51
+ severity: gv.Severity.toLowerCase(),
52
+ message: gv.Message,
53
+ rule: gv.Category || 'solid',
54
+ analyzer: 'solid',
55
+ metadata: gv.Details
56
+ }));
57
+ violations.push(...goViolations);
58
+ console.error(`[DEBUG] SOLID: Converted ${goViolations.length} Go violations`);
59
+ return violations;
60
+ }
61
+ // For other languages (TypeScript, JavaScript), do traditional analysis
62
+ console.error(`[DEBUG] SOLID: Performing traditional analysis for ${adapter.name} file: ${ast.filePath}`);
63
+ // Extract language-agnostic entities
64
+ const functions = adapter.extractFunctions(ast);
65
+ const classes = adapter.extractClasses(ast);
66
+ console.error(`[DEBUG] SOLID: Found ${functions.length} functions and ${classes.length} classes in ${ast.filePath}`);
67
+ // Analyze Single Responsibility Principle
68
+ violations.push(...this.analyzeSRP(functions, classes, solidConfig, ast.filePath));
69
+ // Analyze Open/Closed Principle
70
+ violations.push(...this.analyzeOCP(classes, solidConfig, ast.filePath));
71
+ // Analyze Interface Segregation Principle
72
+ violations.push(...this.analyzeISP(ast, adapter, solidConfig));
73
+ // Analyze Dependency Inversion Principle
74
+ violations.push(...this.analyzeDIP(classes, solidConfig, ast.filePath));
75
+ console.error(`[DEBUG] SOLID: Analysis complete for ${ast.filePath}, found ${violations.length} violations`);
76
+ return violations;
77
+ }
78
+ analyzeSRP(functions, classes, config, filePath) {
79
+ const violations = [];
80
+ // Check functions for too many responsibilities
81
+ for (const func of functions) {
82
+ // Check function length
83
+ if (this.countFunctionLines(func) > config.srp.maxLinesPerFunction) {
84
+ violations.push(this.createViolation(filePath, func.location.start.line, func.location.start.column, `Function "${func.name}" has ${this.countFunctionLines(func)} lines, exceeding the maximum of ${config.srp.maxLinesPerFunction}. Consider breaking it down.`, 'warning', 'single-responsibility', { principle: 'single-responsibility' }));
85
+ }
86
+ // Check parameter count
87
+ if (func.parameters.length > config.srp.maxParametersPerFunction) {
88
+ violations.push(this.createViolation(filePath, func.location.start.line, func.location.start.column, `Function "${func.name}" has ${func.parameters.length} parameters, exceeding the maximum of ${config.srp.maxParametersPerFunction}. Consider using an options object.`, 'warning', 'single-responsibility', { principle: 'single-responsibility' }));
89
+ }
90
+ }
91
+ // Check classes for too many responsibilities
92
+ for (const cls of classes) {
93
+ // Check method count
94
+ if (cls.methods.length > config.maxMethodsPerClass) {
95
+ violations.push(this.createViolation(filePath, cls.location.start.line, cls.location.start.column, `Class "${cls.name}" has ${cls.methods.length} methods, exceeding the maximum of ${config.maxMethodsPerClass}. Consider splitting responsibilities.`, 'warning', 'single-responsibility', { principle: 'single-responsibility' }));
96
+ }
97
+ // Check class complexity (simplified calculation)
98
+ const complexity = this.calculateClassComplexity(cls);
99
+ if (complexity > config.maxClassComplexity) {
100
+ violations.push(this.createViolation(filePath, cls.location.start.line, cls.location.start.column, `Class "${cls.name}" has a complexity of ${complexity}, exceeding the maximum of ${config.maxClassComplexity}. Consider refactoring.`, 'critical', 'single-responsibility', { principle: 'single-responsibility' }));
101
+ }
102
+ }
103
+ return violations;
104
+ }
105
+ analyzeOCP(classes, config, filePath) {
106
+ const violations = [];
107
+ if (!config.ocp.checkForDirectModification) {
108
+ return violations;
109
+ }
110
+ // Check for classes that appear to be frequently modified
111
+ // This is a simplified heuristic - in practice you'd analyze git history
112
+ for (const cls of classes) {
113
+ // Look for classes with many conditional branches or switch statements
114
+ // This suggests the class needs modification for new functionality
115
+ const methodCount = cls.methods.length;
116
+ const hasComplexMethods = cls.methods.some(method => this.countFunctionLines(method) > config.maxLinesPerMethod);
117
+ if (methodCount > config.maxMethodsPerClass && hasComplexMethods) {
118
+ violations.push(this.createViolation(filePath, cls.location.start.line, cls.location.start.column, `Class "${cls.name}" appears to be frequently modified. Consider using composition or inheritance for extension.`, 'warning', 'open-closed', { principle: 'open-closed' }));
119
+ }
120
+ }
121
+ return violations;
122
+ }
123
+ analyzeISP(ast, adapter, config) {
124
+ const violations = [];
125
+ if (!config.checkInterfaceSegregation) {
126
+ return violations;
127
+ }
128
+ // Find interface-like structures in the AST
129
+ const interfaces = adapter.findNodes(ast, {
130
+ custom: (node) => adapter.isInterface(node)
131
+ });
132
+ for (const interfaceNode of interfaces) {
133
+ const children = adapter.getChildren(interfaceNode);
134
+ const methods = children.filter(child => adapter.isFunction(child));
135
+ if (methods.length > config.isp.maxMethodsPerInterface) {
136
+ const location = this.getSourceLocation(adapter, interfaceNode);
137
+ const name = adapter.getNodeName(interfaceNode) || '<anonymous>';
138
+ violations.push(this.createViolation(ast.filePath, location.line, location.column, `Interface "${name}" has ${methods.length} methods, exceeding the maximum of ${config.isp.maxMethodsPerInterface}. Consider splitting into smaller interfaces.`, 'warning', 'interface-segregation', { principle: 'interface-segregation' }));
139
+ }
140
+ }
141
+ return violations;
142
+ }
143
+ analyzeDIP(classes, config, filePath) {
144
+ const violations = [];
145
+ if (!config.checkDependencyInversion) {
146
+ return violations;
147
+ }
148
+ // Check for classes that directly instantiate dependencies
149
+ // This is a simplified check - in practice you'd analyze constructor patterns
150
+ for (const cls of classes) {
151
+ // Look for classes with many concrete dependencies (simplified heuristic)
152
+ if (cls.methods.length > 0) {
153
+ const hasConstructor = cls.methods.some(method => method.name === 'constructor' || method.name === cls.name);
154
+ if (hasConstructor) {
155
+ // In practice, you'd analyze the constructor to see if it's directly
156
+ // instantiating dependencies instead of accepting them as parameters
157
+ violations.push(this.createViolation(filePath, cls.location.start.line, cls.location.start.column, `Class "${cls.name}" directly instantiates dependencies. Consider dependency injection.`, 'warning', 'dependency-inversion', { principle: 'dependency-inversion' }));
158
+ }
159
+ }
160
+ }
161
+ return violations;
162
+ }
163
+ countFunctionLines(func) {
164
+ // Simplified line counting - in practice you'd analyze the actual function body
165
+ return func.location.end.line - func.location.start.line + 1;
166
+ }
167
+ calculateClassComplexity(cls) {
168
+ // Simplified complexity calculation
169
+ let complexity = cls.methods.length * 2; // Base complexity for methods
170
+ complexity += cls.properties.length; // Add property count
171
+ // Add complexity for method parameter counts
172
+ for (const method of cls.methods) {
173
+ complexity += method.parameters.length;
174
+ }
175
+ return complexity;
176
+ }
177
+ }
178
+ //# sourceMappingURL=UniversalSOLIDAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniversalSOLIDAnalyzer.js","sourceRoot":"","sources":["../../src/adapters/UniversalSOLIDAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SOLID Analyzer Compatibility Layer
3
+ *
4
+ * This bridges the new Universal Analyzer system with the existing audit infrastructure.
5
+ * It allows gradual migration without breaking existing functionality.
6
+ */
7
+ import { AnalyzerDefinition, AnalyzerResult } from '../types.js';
8
+ /**
9
+ * Compatibility wrapper that makes the Universal SOLID analyzer work with existing infrastructure
10
+ */
11
+ export declare class SOLIDAnalyzerCompat implements AnalyzerDefinition {
12
+ name: string;
13
+ description: string;
14
+ private universalAnalyzer;
15
+ private initialized;
16
+ constructor();
17
+ private initializeAdapters;
18
+ analyze(files: string[], config?: any, options?: any): Promise<AnalyzerResult>;
19
+ }
20
+ export declare function createSOLIDAnalyzer(): AnalyzerDefinition;
21
+ //# sourceMappingURL=solidAnalyzerCompat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/adapters/solidAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAM5E;;GAEG;AACH,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,IAAI,SAAW;IACf,WAAW,SAA2D;IAEtE,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,WAAW,CAAS;;YAOd,kBAAkB;IAiC1B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;CA0BrF;AAGD,wBAAgB,mBAAmB,IAAI,kBAAkB,CAExD"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * SOLID Analyzer Compatibility Layer
3
+ *
4
+ * This bridges the new Universal Analyzer system with the existing audit infrastructure.
5
+ * It allows gradual migration without breaking existing functionality.
6
+ */
7
+ import { UniversalSOLIDAnalyzer } from './UniversalSOLIDAnalyzer.js';
8
+ import { TypeScriptAdapter } from './TypeScriptAdapter.js';
9
+ import { LanguageRegistry } from './LanguageAdapter.js';
10
+ import { createGoAdapter, getGoConfigFromEnv } from './GoConfig.js';
11
+ /**
12
+ * Compatibility wrapper that makes the Universal SOLID analyzer work with existing infrastructure
13
+ */
14
+ export class SOLIDAnalyzerCompat {
15
+ name = 'solid';
16
+ description = 'SOLID principles analyzer with multi-language support';
17
+ universalAnalyzer;
18
+ initialized = false;
19
+ constructor() {
20
+ this.universalAnalyzer = new UniversalSOLIDAnalyzer();
21
+ // Note: initializeAdapters() is now async and called in analyze()
22
+ }
23
+ async initializeAdapters() {
24
+ if (this.initialized)
25
+ return;
26
+ console.error('[DEBUG] SOLID compat layer: Initializing language adapters...');
27
+ const registry = LanguageRegistry.getInstance();
28
+ // Register TypeScript adapter (always available)
29
+ const tsAdapter = new TypeScriptAdapter();
30
+ registry.register(tsAdapter);
31
+ console.error('[DEBUG] SOLID compat layer: TypeScript adapter registered');
32
+ // Conditionally register Go adapter
33
+ const goEnvConfig = getGoConfigFromEnv();
34
+ if (goEnvConfig.disabled) {
35
+ console.error('[DEBUG] SOLID compat layer: Go support disabled via environment variable');
36
+ }
37
+ else {
38
+ console.error('[DEBUG] SOLID compat layer: Detecting Go configuration...');
39
+ const goAdapter = await createGoAdapter(goEnvConfig.customPath);
40
+ if (goAdapter) {
41
+ registry.register(goAdapter);
42
+ console.error('[DEBUG] SOLID compat layer: Go adapter registered successfully');
43
+ }
44
+ else {
45
+ console.error('[DEBUG] SOLID compat layer: Go adapter not available - continuing with TypeScript-only support');
46
+ }
47
+ }
48
+ this.initialized = true;
49
+ console.error('[DEBUG] SOLID compat layer: Language adapters initialization complete');
50
+ }
51
+ async analyze(files, config, options) {
52
+ console.error('[DEBUG] SOLID compat layer called with files:', files.map(f => f.substring(f.lastIndexOf('/') + 1)));
53
+ console.error('[DEBUG] SOLID compat layer: File extensions in input:', files.map(f => f.substring(f.lastIndexOf('.'))));
54
+ console.error('[DEBUG] SOLID compat layer: Go files count:', files.filter(f => f.endsWith('.go')).length);
55
+ console.error('[DEBUG] SOLID compat layer: Total files count:', files.length);
56
+ // Ensure adapters are initialized before analysis
57
+ await this.initializeAdapters();
58
+ try {
59
+ const result = await this.universalAnalyzer.analyze(files, config, options);
60
+ console.error(`[DEBUG] SOLID compat layer: Universal analyzer returned ${result.violations.length} violations`);
61
+ return result;
62
+ }
63
+ catch (error) {
64
+ console.error('[DEBUG] SOLID compat layer: Error in universal analyzer:', error);
65
+ // Return empty result on error to prevent breaking the audit
66
+ return {
67
+ violations: [],
68
+ filesProcessed: 0,
69
+ executionTime: 0
70
+ };
71
+ }
72
+ }
73
+ }
74
+ // Export a function that creates the compat analyzer (matches existing pattern)
75
+ export function createSOLIDAnalyzer() {
76
+ return new SOLIDAnalyzerCompat();
77
+ }
78
+ //# sourceMappingURL=solidAnalyzerCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidAnalyzerCompat.js","sourceRoot":"","sources":["../../src/adapters/solidAnalyzerCompat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * API Contract Analyzer for Cross-Language Validation
3
+ * Detects mismatches between frontend and backend APIs
4
+ */
5
+ import { TypeSchema, ErrorSchema } from '../../types/crossLanguage.js';
6
+ import { Violation } from '../../types.js';
7
+ export interface APIEndpoint {
8
+ id: string;
9
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
10
+ path: string;
11
+ language: string;
12
+ file: string;
13
+ line: number;
14
+ requestSchema?: TypeSchema;
15
+ responseSchema?: TypeSchema;
16
+ errorSchemas?: ErrorSchema[];
17
+ authentication?: string;
18
+ deprecated?: boolean;
19
+ }
20
+ export interface APICall {
21
+ id: string;
22
+ method: string;
23
+ url: string;
24
+ language: string;
25
+ file: string;
26
+ line: number;
27
+ expectedResponseType?: string;
28
+ errorHandling?: string[];
29
+ timeout?: number;
30
+ }
31
+ export interface ContractViolation extends Violation {
32
+ contractType: 'type-mismatch' | 'missing-endpoint' | 'extra-field' | 'missing-field' | 'method-mismatch' | 'auth-mismatch';
33
+ endpoint?: APIEndpoint;
34
+ call?: APICall;
35
+ expectedType?: string;
36
+ actualType?: string;
37
+ missingFields?: string[];
38
+ extraFields?: string[];
39
+ }
40
+ export declare class APIContractAnalyzer {
41
+ private endpoints;
42
+ private calls;
43
+ /**
44
+ * Analyze API contracts and find violations
45
+ */
46
+ analyzeContracts(endpoints: APIEndpoint[], calls: APICall[]): Promise<ContractViolation[]>;
47
+ /**
48
+ * Extract API endpoints from code entities
49
+ */
50
+ static extractEndpoints(entities: any[]): APIEndpoint[];
51
+ /**
52
+ * Extract API calls from code entities
53
+ */
54
+ static extractAPICalls(entities: any[]): APICall[];
55
+ /**
56
+ * Find API calls that don't have matching endpoints
57
+ */
58
+ private findUnmatchedCalls;
59
+ /**
60
+ * Validate matched endpoint-call pairs for compatibility
61
+ */
62
+ private validateMatchedPairs;
63
+ /**
64
+ * Check for usage of deprecated APIs
65
+ */
66
+ private checkDeprecatedUsage;
67
+ /**
68
+ * Validate authentication requirements
69
+ */
70
+ private validateAuthentication;
71
+ /**
72
+ * Find matching endpoint for an API call
73
+ */
74
+ private findMatchingEndpoint;
75
+ /**
76
+ * Check if two API paths match (handling path parameters)
77
+ */
78
+ private pathsMatch;
79
+ /**
80
+ * Validate type compatibility between endpoint and call
81
+ */
82
+ private validateTypeCompatibility;
83
+ /**
84
+ * Check if an API call includes authentication
85
+ */
86
+ private callHasAuthentication;
87
+ private static extractGoEndpoint;
88
+ private static extractTypeScriptEndpoint;
89
+ private static extractPythonEndpoint;
90
+ private static extractTypeScriptAPICall;
91
+ private static extractGoAPICall;
92
+ private static extractMethodFromGo;
93
+ private static extractPathFromGo;
94
+ private static extractMethodFromTypeScript;
95
+ private static extractPathFromTypeScript;
96
+ private static extractMethodFromPython;
97
+ private static extractPathFromPython;
98
+ private static extractCallMethodFromTypeScript;
99
+ private static extractUrlFromTypeScript;
100
+ private static extractCallMethodFromGo;
101
+ private static extractUrlFromGo;
102
+ }
103
+ //# sourceMappingURL=APIContractAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"APIContractAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/cross-language/APIContractAnalyzer.ts"],"names":[],"mappings":"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"}