code-auditor-mcp 1.21.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 (149) 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/schemaAnalyzerCompat.d.ts +20 -0
  58. package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +1 -0
  59. package/dist/analyzers/schemaAnalyzerCompat.js +69 -0
  60. package/dist/analyzers/schemaAnalyzerCompat.js.map +1 -0
  61. package/dist/analyzers/solidAnalyzerCompat.d.ts +20 -0
  62. package/dist/analyzers/solidAnalyzerCompat.d.ts.map +1 -0
  63. package/dist/analyzers/solidAnalyzerCompat.js +78 -0
  64. package/dist/analyzers/solidAnalyzerCompat.js.map +1 -0
  65. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +71 -0
  66. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -0
  67. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +276 -0
  68. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -0
  69. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +82 -0
  70. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -0
  71. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +489 -0
  72. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -0
  73. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +48 -0
  74. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -0
  75. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +175 -0
  76. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -0
  77. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +64 -0
  78. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  79. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +286 -0
  80. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -0
  81. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +119 -0
  82. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -0
  83. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +812 -0
  84. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -0
  85. package/dist/auditRunner.d.ts.map +1 -1
  86. package/dist/auditRunner.js +20 -8
  87. package/dist/auditRunner.js.map +1 -1
  88. package/dist/codeIndexDB-enhanced.d.ts +80 -0
  89. package/dist/codeIndexDB-enhanced.d.ts.map +1 -0
  90. package/dist/codeIndexDB-enhanced.js +488 -0
  91. package/dist/codeIndexDB-enhanced.js.map +1 -0
  92. package/dist/codeIndexDb.js +2 -2
  93. package/dist/codeIndexDb.js.map +1 -1
  94. package/dist/config/defaults.js +1 -1
  95. package/dist/config/defaults.js.map +1 -1
  96. package/dist/languages/LanguageOrchestrator.d.ts +181 -0
  97. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -0
  98. package/dist/languages/LanguageOrchestrator.js +365 -0
  99. package/dist/languages/LanguageOrchestrator.js.map +1 -0
  100. package/dist/languages/LanguageRegistry.d.ts +43 -0
  101. package/dist/languages/LanguageRegistry.d.ts.map +1 -0
  102. package/dist/languages/LanguageRegistry.js +86 -0
  103. package/dist/languages/LanguageRegistry.js.map +1 -0
  104. package/dist/languages/RuntimeManager.d.ts +181 -0
  105. package/dist/languages/RuntimeManager.d.ts.map +1 -0
  106. package/dist/languages/RuntimeManager.js +841 -0
  107. package/dist/languages/RuntimeManager.js.map +1 -0
  108. package/dist/languages/UniversalAnalyzer.d.ts +37 -0
  109. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -0
  110. package/dist/languages/UniversalAnalyzer.js +101 -0
  111. package/dist/languages/UniversalAnalyzer.js.map +1 -0
  112. package/dist/languages/go/GoAdapter.d.ts +57 -0
  113. package/dist/languages/go/GoAdapter.d.ts.map +1 -0
  114. package/dist/languages/go/GoAdapter.js +360 -0
  115. package/dist/languages/go/GoAdapter.js.map +1 -0
  116. package/dist/languages/index.d.ts +13 -0
  117. package/dist/languages/index.d.ts.map +1 -0
  118. package/dist/languages/index.js +23 -0
  119. package/dist/languages/index.js.map +1 -0
  120. package/dist/languages/types.d.ts +182 -0
  121. package/dist/languages/types.d.ts.map +1 -0
  122. package/dist/languages/types.js +5 -0
  123. package/dist/languages/types.js.map +1 -0
  124. package/dist/languages/typescript/TypeScriptAdapter.d.ts +108 -0
  125. package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +1 -0
  126. package/dist/languages/typescript/TypeScriptAdapter.js +567 -0
  127. package/dist/languages/typescript/TypeScriptAdapter.js.map +1 -0
  128. package/dist/languages/typescript/test-extraction.d.ts +2 -0
  129. package/dist/languages/typescript/test-extraction.d.ts.map +1 -0
  130. package/dist/languages/typescript/test-extraction.js +36 -0
  131. package/dist/languages/typescript/test-extraction.js.map +1 -0
  132. package/dist/mcp-tools-shared.d.ts +3 -0
  133. package/dist/mcp-tools-shared.d.ts.map +1 -1
  134. package/dist/mcp-tools-shared.js +123 -2
  135. package/dist/mcp-tools-shared.js.map +1 -1
  136. package/dist/mcp.js +3 -0
  137. package/dist/mcp.js.map +1 -1
  138. package/dist/types/crossLanguage.d.ts +267 -0
  139. package/dist/types/crossLanguage.d.ts.map +1 -0
  140. package/dist/types/crossLanguage.js +6 -0
  141. package/dist/types/crossLanguage.js.map +1 -0
  142. package/dist/types.d.ts +1 -0
  143. package/dist/types.d.ts.map +1 -1
  144. package/dist/types.js.map +1 -1
  145. package/dist/utils/fileDiscovery.d.ts +6 -0
  146. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  147. package/dist/utils/fileDiscovery.js +12 -1
  148. package/dist/utils/fileDiscovery.js.map +1 -1
  149. package/package.json +19 -20
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Compatibility layer for Data Access Analyzer
3
+ * Ensures the new universal analyzer produces similar results to the legacy one
4
+ */
5
+ import type { AnalyzerFunction } from '../types.js';
6
+ /**
7
+ * Legacy-compatible data access analyzer function
8
+ * This wraps the new UniversalDataAccessAnalyzer to maintain API compatibility
9
+ */
10
+ export declare const analyzeDataAccess: AnalyzerFunction;
11
+ /**
12
+ * Analyzer definition for registration
13
+ */
14
+ export declare const dataAccessAnalyzer: {
15
+ name: string;
16
+ description: string;
17
+ category: string;
18
+ analyze: AnalyzerFunction;
19
+ };
20
+ //# sourceMappingURL=dataAccessAnalyzerCompat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataAccessAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/dataAccessAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAqC/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Compatibility layer for Data Access Analyzer
3
+ * Ensures the new universal analyzer produces similar results to the legacy one
4
+ */
5
+ import { UniversalDataAccessAnalyzer } from './universal/UniversalDataAccessAnalyzer.js';
6
+ import { initializeLanguages } from '../languages/index.js';
7
+ // Initialize language system on module load
8
+ initializeLanguages();
9
+ /**
10
+ * Legacy-compatible data access analyzer function
11
+ * This wraps the new UniversalDataAccessAnalyzer to maintain API compatibility
12
+ */
13
+ export const analyzeDataAccess = async (files, config = {}, options = {}, progressCallback) => {
14
+ const analyzer = new UniversalDataAccessAnalyzer();
15
+ // Map legacy config to universal config, only including defined values
16
+ const universalConfig = {};
17
+ if (config.databases !== undefined)
18
+ universalConfig.databases = config.databases;
19
+ if (config.organizationPatterns !== undefined)
20
+ universalConfig.organizationPatterns = config.organizationPatterns;
21
+ if (config.tablePatterns !== undefined)
22
+ universalConfig.tablePatterns = config.tablePatterns;
23
+ if (config.performanceThresholds !== undefined)
24
+ universalConfig.performanceThresholds = config.performanceThresholds;
25
+ if (config.securityPatterns !== undefined)
26
+ universalConfig.securityPatterns = config.securityPatterns;
27
+ if (config.checkOrgFilters !== undefined)
28
+ universalConfig.checkOrgFilters = config.checkOrgFilters;
29
+ if (config.checkSQLInjection !== undefined)
30
+ universalConfig.checkSQLInjection = config.checkSQLInjection;
31
+ if (config.checkPerformance !== undefined)
32
+ universalConfig.checkPerformance = config.checkPerformance;
33
+ // Call the universal analyzer
34
+ const result = await analyzer.analyze(files, universalConfig, {
35
+ progressCallback: progressCallback ? (progress) => {
36
+ progressCallback({
37
+ current: Math.floor(progress * 100),
38
+ total: 100,
39
+ analyzer: 'data-access',
40
+ phase: 'analyzing'
41
+ });
42
+ } : undefined,
43
+ ...options
44
+ });
45
+ // Transform result to include data access patterns
46
+ // Note: The universal analyzer focuses on violations, while the legacy one
47
+ // also returned DataAccessPattern objects. For now, we'll just return violations.
48
+ return result;
49
+ };
50
+ /**
51
+ * Analyzer definition for registration
52
+ */
53
+ export const dataAccessAnalyzer = {
54
+ name: 'data-access',
55
+ description: 'Analyzes database access patterns and data layer interactions',
56
+ category: 'security',
57
+ analyze: analyzeDataAccess
58
+ };
59
+ //# sourceMappingURL=dataAccessAnalyzerCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataAccessAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/dataAccessAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4CAA4C;AAC5C,mBAAmB,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqB,KAAK,EACtD,KAAe,EACf,SAAc,EAAE,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,2BAA2B,EAAE,CAAC;IAEnD,uEAAuE;IACvE,MAAM,eAAe,GAAQ,EAAE,CAAC;IAEhC,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,eAAe,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACjF,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS;QAAE,eAAe,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAClH,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;QAAE,eAAe,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC7F,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS;QAAE,eAAe,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACrH,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;QAAE,eAAe,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACtG,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;QAAE,eAAe,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IACnG,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS;QAAE,eAAe,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACzG,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;QAAE,eAAe,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAEtG,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE;QAC5D,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAgB,EAAE,EAAE;YACxD,gBAAgB,CAAC;gBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACnC,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,aAAa;gBACvB,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,CAAC,SAAS;QACb,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,mDAAmD;IACnD,2EAA2E;IAC3E,kFAAkF;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,+DAA+D;IAC5E,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,iBAAiB;CAC3B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Compatibility layer for DocumentationAnalyzer
3
+ * Ensures the new universal analyzer produces identical results to the legacy one
4
+ */
5
+ import type { AnalyzerFunction } from '../types.js';
6
+ /**
7
+ * Legacy-compatible documentation analyzer function
8
+ * This wraps the new UniversalDocumentationAnalyzer to maintain API compatibility
9
+ */
10
+ export declare const analyzeDocumentation: AnalyzerFunction;
11
+ /**
12
+ * Analyzer definition for registration
13
+ */
14
+ export declare const documentationAnalyzer: {
15
+ name: string;
16
+ description: string;
17
+ category: string;
18
+ analyze: AnalyzerFunction;
19
+ };
20
+ //# sourceMappingURL=documentationAnalyzerCompat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentationAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/documentationAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAqClC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;CAKjC,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Compatibility layer for DocumentationAnalyzer
3
+ * Ensures the new universal analyzer produces identical results to the legacy one
4
+ */
5
+ import { UniversalDocumentationAnalyzer } from './universal/UniversalDocumentationAnalyzer.js';
6
+ import { initializeLanguages } from '../languages/index.js';
7
+ // Initialize language system on module load
8
+ initializeLanguages();
9
+ /**
10
+ * Legacy-compatible documentation analyzer function
11
+ * This wraps the new UniversalDocumentationAnalyzer to maintain API compatibility
12
+ */
13
+ export const analyzeDocumentation = async (files, config = {}, options = {}, progressCallback) => {
14
+ console.log('[DEBUG] DocumentationAnalyzerCompat called with files:', files);
15
+ console.log('[DEBUG] DocumentationAnalyzerCompat config:', config);
16
+ const analyzer = new UniversalDocumentationAnalyzer();
17
+ // Convert legacy config format if needed
18
+ const universalConfig = {
19
+ requireFunctionDocs: config.requireFunctionDocs ?? true,
20
+ requireClassDocs: config.requireComponentDocs ?? true, // Map component → class
21
+ requireFileDocs: config.requireFileDocs ?? true,
22
+ requireParamDocs: config.requireParamDocs ?? true,
23
+ requireReturnDocs: config.requireReturnDocs ?? true,
24
+ minDescriptionLength: config.minDescriptionLength ?? 10,
25
+ checkExportedOnly: config.checkExportedOnly ?? false,
26
+ exemptPatterns: config.exemptPatterns ?? ['test', 'spec', '\\.d\\.ts$', 'mock', 'fixture']
27
+ };
28
+ // Call the universal analyzer
29
+ const result = await analyzer.analyze(files, universalConfig, {
30
+ progressCallback: progressCallback ? (progress) => {
31
+ progressCallback({
32
+ current: Math.floor(progress * 100),
33
+ total: 100,
34
+ analyzer: 'documentation',
35
+ phase: 'analyzing'
36
+ });
37
+ } : undefined,
38
+ ...options
39
+ });
40
+ // The result format should be identical, but we can add any necessary transformations here
41
+ return result;
42
+ };
43
+ /**
44
+ * Analyzer definition for registration
45
+ */
46
+ export const documentationAnalyzer = {
47
+ name: 'documentation',
48
+ description: 'Analyzes documentation quality across the codebase',
49
+ category: 'documentation',
50
+ analyze: analyzeDocumentation
51
+ };
52
+ //# sourceMappingURL=documentationAnalyzerCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentationAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/documentationAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4CAA4C;AAC5C,mBAAmB,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAqB,KAAK,EACzD,KAAe,EACf,SAAc,EAAE,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,EAAE;IACF,OAAO,CAAC,GAAG,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,8BAA8B,EAAE,CAAC;IAEtD,yCAAyC;IACzC,MAAM,eAAe,GAAG;QACtB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI;QACvD,gBAAgB,EAAE,MAAM,CAAC,oBAAoB,IAAI,IAAI,EAAG,wBAAwB;QAChF,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;QAC/C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;QACjD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;QACnD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,EAAE;QACvD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;QACpD,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC;KAC3F,CAAC;IAEF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE;QAC5D,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAgB,EAAE,EAAE;YACxD,gBAAgB,CAAC;gBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACnC,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,eAAe;gBACzB,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,CAAC,SAAS;QACb,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,2FAA2F;IAC3F,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,oDAAoD;IACjE,QAAQ,EAAE,eAAe;IACzB,OAAO,EAAE,oBAAoB;CAC9B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Compatibility layer for DRY Analyzer
3
+ * Ensures the new universal analyzer produces identical results to the legacy one
4
+ */
5
+ import type { AnalyzerFunction } from '../types.js';
6
+ /**
7
+ * Legacy-compatible DRY analyzer function
8
+ * This wraps the new UniversalDRYAnalyzer to maintain API compatibility
9
+ */
10
+ export declare const analyzeDRY: AnalyzerFunction;
11
+ /**
12
+ * Analyzer definition for registration
13
+ */
14
+ export declare const dryAnalyzer: {
15
+ name: string;
16
+ description: string;
17
+ category: string;
18
+ analyze: AnalyzerFunction;
19
+ };
20
+ //# sourceMappingURL=dryAnalyzerCompat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dryAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/dryAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,gBA6BxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Compatibility layer for DRY Analyzer
3
+ * Ensures the new universal analyzer produces identical results to the legacy one
4
+ */
5
+ import { UniversalDRYAnalyzer } from './universal/UniversalDRYAnalyzer.js';
6
+ import { initializeLanguages } from '../languages/index.js';
7
+ // Initialize language system on module load
8
+ initializeLanguages();
9
+ /**
10
+ * Legacy-compatible DRY analyzer function
11
+ * This wraps the new UniversalDRYAnalyzer to maintain API compatibility
12
+ */
13
+ export const analyzeDRY = async (files, config = {}, options = {}, progressCallback) => {
14
+ const analyzer = new UniversalDRYAnalyzer();
15
+ // The config format should be mostly compatible
16
+ const universalConfig = {
17
+ ...config,
18
+ // Map any legacy config fields if needed
19
+ };
20
+ // Call the universal analyzer
21
+ const result = await analyzer.analyze(files, universalConfig, {
22
+ progressCallback: progressCallback ? (progress) => {
23
+ progressCallback({
24
+ current: Math.floor(progress * 100),
25
+ total: 100,
26
+ analyzer: 'dry',
27
+ phase: 'analyzing'
28
+ });
29
+ } : undefined,
30
+ ...options
31
+ });
32
+ // The result format should be identical, but we can add any necessary transformations here
33
+ return result;
34
+ };
35
+ /**
36
+ * Analyzer definition for registration
37
+ */
38
+ export const dryAnalyzer = {
39
+ name: 'dry',
40
+ description: 'Detects code duplication across the codebase',
41
+ category: 'maintainability',
42
+ analyze: analyzeDRY
43
+ };
44
+ //# sourceMappingURL=dryAnalyzerCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dryAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/dryAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4CAA4C;AAC5C,mBAAmB,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAqB,KAAK,EAC/C,KAAe,EACf,SAAc,EAAE,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE5C,gDAAgD;IAChD,MAAM,eAAe,GAAG;QACtB,GAAG,MAAM;QACT,yCAAyC;KAC1C,CAAC;IAEF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE;QAC5D,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAgB,EAAE,EAAE;YACxD,gBAAgB,CAAC;gBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACnC,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,CAAC,SAAS;QACb,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,2FAA2F;IAC3F,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,8CAA8C;IAC3D,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,UAAU;CACpB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Compatibility layer for Schema Analyzer
3
+ * Ensures the new universal analyzer produces similar results to the legacy one
4
+ */
5
+ import type { AnalyzerFunction } from '../types.js';
6
+ /**
7
+ * Legacy-compatible schema analyzer function
8
+ * This wraps the new UniversalSchemaAnalyzer to maintain API compatibility
9
+ */
10
+ export declare const analyzeSchema: AnalyzerFunction;
11
+ /**
12
+ * Analyzer definition for registration
13
+ */
14
+ export declare const schemaAnalyzer: {
15
+ name: string;
16
+ description: string;
17
+ category: string;
18
+ analyze: AnalyzerFunction;
19
+ };
20
+ //# sourceMappingURL=schemaAnalyzerCompat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/schemaAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQpD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,gBAyD3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAK1B,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Compatibility layer for Schema Analyzer
3
+ * Ensures the new universal analyzer produces similar results to the legacy one
4
+ */
5
+ import { UniversalSchemaAnalyzer } from './universal/UniversalSchemaAnalyzer.js';
6
+ import { initializeLanguages } from '../languages/index.js';
7
+ import { CodeIndexDB } from '../codeIndexDB.js';
8
+ // Initialize language system on module load
9
+ initializeLanguages();
10
+ /**
11
+ * Legacy-compatible schema analyzer function
12
+ * This wraps the new UniversalSchemaAnalyzer to maintain API compatibility
13
+ */
14
+ export const analyzeSchema = async (files, config = {}, options = {}, progressCallback) => {
15
+ const analyzer = new UniversalSchemaAnalyzer();
16
+ // Get loaded schemas from database if available
17
+ let schemas = [];
18
+ try {
19
+ const db = CodeIndexDB.getInstance();
20
+ await db.initialize();
21
+ const loadedSchemas = await db.getAllSchemas();
22
+ // Convert database schemas to universal format
23
+ schemas = loadedSchemas.map(({ schema }) => ({
24
+ name: schema.name,
25
+ tables: schema.databases.flatMap(db => db.tables.map(table => ({
26
+ name: table.name,
27
+ columns: table.columns || []
28
+ })))
29
+ }));
30
+ }
31
+ catch (error) {
32
+ // If database isn't available, continue without schemas
33
+ console.warn('Schema database not available:', error);
34
+ }
35
+ // Map legacy config to universal config
36
+ const universalConfig = {
37
+ enableTableUsageTracking: config.enableTableUsageTracking ?? true,
38
+ checkMissingReferences: config.checkMissingReferences ?? true,
39
+ checkNamingConventions: config.checkNamingConventions ?? true,
40
+ detectUnusedTables: config.detectUnusedTables ?? false,
41
+ validateQueryPatterns: config.validateQueryPatterns ?? true,
42
+ maxQueriesPerFunction: config.maxQueriesPerFunction ?? 5,
43
+ requiredSchemas: config.requiredSchemas ?? [],
44
+ schemas // Pass loaded schemas
45
+ };
46
+ // Call the universal analyzer
47
+ const result = await analyzer.analyze(files, universalConfig);
48
+ // Transform violations to match legacy format
49
+ const transformedViolations = result.violations.map(v => ({
50
+ ...v,
51
+ schemaType: v.rule,
52
+ details: v.message,
53
+ analyzer: 'schema'
54
+ }));
55
+ return {
56
+ ...result,
57
+ violations: transformedViolations
58
+ };
59
+ };
60
+ /**
61
+ * Analyzer definition for registration
62
+ */
63
+ export const schemaAnalyzer = {
64
+ name: 'schema',
65
+ description: 'Analyzes code against database schemas',
66
+ category: 'database',
67
+ analyze: analyzeSchema
68
+ };
69
+ //# sourceMappingURL=schemaAnalyzerCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/schemaAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,4CAA4C;AAC5C,mBAAmB,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAqB,KAAK,EAClD,KAAe,EACf,SAAc,EAAE,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAE/C,gDAAgD;IAChD,IAAI,OAAO,GAAU,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC;QAE/C,+CAA+C;QAC/C,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CACpC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;aAC7B,CAAC,CAAC,CACJ;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wDAAwD;QACxD,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,wCAAwC;IACxC,MAAM,eAAe,GAAG;QACtB,wBAAwB,EAAE,MAAM,CAAC,wBAAwB,IAAI,IAAI;QACjE,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,IAAI;QAC7D,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,IAAI;QAC7D,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;QACtD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,IAAI;QAC3D,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE;QAC7C,OAAO,CAAC,sBAAsB;KAC/B,CAAC;IAEF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAE9D,8CAA8C;IAC9C,MAAM,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxD,GAAG,CAAC;QACJ,UAAU,EAAE,CAAC,CAAC,IAAI;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,qBAAqB;KAClC,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,wCAAwC;IACrD,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,aAAa;CACvB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Compatibility layer for SOLID Analyzer
3
+ * Ensures the new universal analyzer produces similar results to the legacy one
4
+ */
5
+ import type { AnalyzerFunction } from '../types.js';
6
+ /**
7
+ * Legacy-compatible SOLID analyzer function
8
+ * This wraps the new UniversalSOLIDAnalyzer to maintain API compatibility
9
+ */
10
+ export declare const analyzeSOLID: AnalyzerFunction;
11
+ /**
12
+ * Analyzer definition for registration
13
+ */
14
+ export declare const solidAnalyzer: {
15
+ name: string;
16
+ description: string;
17
+ category: string;
18
+ analyze: AnalyzerFunction;
19
+ };
20
+ //# sourceMappingURL=solidAnalyzerCompat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidAnalyzerCompat.d.ts","sourceRoot":"","sources":["../../src/analyzers/solidAnalyzerCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,gBAuD1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;CAKzB,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Compatibility layer for SOLID Analyzer
3
+ * Ensures the new universal analyzer produces similar results to the legacy one
4
+ */
5
+ import { UniversalSOLIDAnalyzer } from './universal/UniversalSOLIDAnalyzer.js';
6
+ import { initializeLanguages } from '../languages/index.js';
7
+ // Initialize language system on module load
8
+ initializeLanguages();
9
+ /**
10
+ * Legacy-compatible SOLID analyzer function
11
+ * This wraps the new UniversalSOLIDAnalyzer to maintain API compatibility
12
+ */
13
+ export const analyzeSOLID = async (files, config = {}, options = {}, progressCallback) => {
14
+ console.error('[DEBUG] SOLID compat layer called with files:', files);
15
+ console.error('[DEBUG] SOLID compat layer config:', config);
16
+ const analyzer = new UniversalSOLIDAnalyzer();
17
+ // Map legacy config to universal config, only override defined values
18
+ const universalConfig = {
19
+ skipTestFiles: true
20
+ };
21
+ // Only set properties that are explicitly provided to avoid overriding defaults with undefined
22
+ if (config.maxMethodsPerClass !== undefined)
23
+ universalConfig.maxMethodsPerClass = config.maxMethodsPerClass;
24
+ if (config.maxLinesPerMethod !== undefined)
25
+ universalConfig.maxLinesPerMethod = config.maxLinesPerMethod;
26
+ if (config.maxParametersPerMethod !== undefined)
27
+ universalConfig.maxParametersPerMethod = config.maxParametersPerMethod;
28
+ if (config.maxClassComplexity !== undefined)
29
+ universalConfig.maxClassComplexity = config.maxClassComplexity;
30
+ if (config.maxInterfaceMembers !== undefined)
31
+ universalConfig.maxInterfaceMembers = config.maxInterfaceMembers;
32
+ if (config.checkDependencyInversion !== undefined)
33
+ universalConfig.checkDependencyInversion = config.checkDependencyInversion;
34
+ if (config.checkInterfaceSegregation !== undefined)
35
+ universalConfig.checkInterfaceSegregation = config.checkInterfaceSegregation;
36
+ if (config.checkLiskovSubstitution !== undefined)
37
+ universalConfig.checkLiskovSubstitution = config.checkLiskovSubstitution;
38
+ console.error('[DEBUG] SOLID compat: Universal config:', universalConfig);
39
+ // Call the universal analyzer
40
+ console.error('[DEBUG] SOLID compat: About to call analyzer.analyze()');
41
+ try {
42
+ const result = await analyzer.analyze(files, universalConfig, {
43
+ progressCallback: progressCallback ? (progress) => {
44
+ progressCallback({
45
+ current: Math.floor(progress * 100),
46
+ total: 100,
47
+ analyzer: 'solid',
48
+ phase: 'analyzing'
49
+ });
50
+ } : undefined,
51
+ ...options
52
+ });
53
+ console.error('[DEBUG] SOLID compat: analyzer.analyze() completed, violations:', result.violations.length);
54
+ return {
55
+ ...result,
56
+ violations: result.violations.map(v => ({
57
+ ...v,
58
+ principle: v.rule,
59
+ analyzer: 'solid',
60
+ rule: v.rule
61
+ }))
62
+ };
63
+ }
64
+ catch (error) {
65
+ console.error('[DEBUG] SOLID compat: ERROR in analyzer.analyze():', error);
66
+ throw error;
67
+ }
68
+ };
69
+ /**
70
+ * Analyzer definition for registration
71
+ */
72
+ export const solidAnalyzer = {
73
+ name: 'solid',
74
+ description: 'Detects violations of SOLID principles',
75
+ category: 'architecture',
76
+ analyze: analyzeSOLID
77
+ };
78
+ //# sourceMappingURL=solidAnalyzerCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidAnalyzerCompat.js","sourceRoot":"","sources":["../../src/analyzers/solidAnalyzerCompat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Universal DRY (Don't Repeat Yourself) Analyzer
3
+ * Works across multiple programming languages using the adapter pattern
4
+ */
5
+ import { UniversalAnalyzer } from '../../languages/UniversalAnalyzer.js';
6
+ import type { Violation } from '../../types.js';
7
+ import type { AST, LanguageAdapter } from '../../languages/types.js';
8
+ /**
9
+ * Configuration for DRY analyzer
10
+ */
11
+ export interface DRYAnalyzerConfig {
12
+ minLineThreshold?: number;
13
+ similarityThreshold?: number;
14
+ excludePatterns?: string[];
15
+ checkImports?: boolean;
16
+ checkStrings?: boolean;
17
+ ignoreComments?: boolean;
18
+ ignoreWhitespace?: boolean;
19
+ }
20
+ export declare const DEFAULT_DRY_CONFIG: DRYAnalyzerConfig;
21
+ export declare class UniversalDRYAnalyzer extends UniversalAnalyzer {
22
+ readonly name = "dry";
23
+ readonly description = "Detects code duplication across the codebase";
24
+ readonly category = "maintainability";
25
+ protected analyzeAST(ast: AST, adapter: LanguageAdapter, config: DRYAnalyzerConfig, sourceCode: string): Promise<Violation[]>;
26
+ /**
27
+ * Extract code blocks from AST
28
+ */
29
+ private extractCodeBlocks;
30
+ /**
31
+ * Create a code block from an AST node
32
+ */
33
+ private createCodeBlock;
34
+ /**
35
+ * Normalize code for comparison
36
+ */
37
+ private normalizeCode;
38
+ /**
39
+ * Hash code for comparison
40
+ */
41
+ private hashCode;
42
+ /**
43
+ * Count lines in text
44
+ */
45
+ private countLines;
46
+ /**
47
+ * Check if block is large enough to be considered
48
+ */
49
+ private isBlockLargeEnough;
50
+ /**
51
+ * Build local index for duplicate detection
52
+ */
53
+ private buildLocalIndex;
54
+ /**
55
+ * Check for duplicate string literals
56
+ */
57
+ private checkDuplicateStrings;
58
+ /**
59
+ * Check for duplicate imports
60
+ */
61
+ private checkDuplicateImports;
62
+ /**
63
+ * Helper methods
64
+ */
65
+ private isExcluded;
66
+ private findNodeByLocation;
67
+ private walkAST;
68
+ private isSignificantBlock;
69
+ private isStringLiteral;
70
+ }
71
+ //# sourceMappingURL=UniversalDRYAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniversalDRYAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/universal/UniversalDRYAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,eAAe,EAAW,MAAM,0BAA0B,CAAC;AAG9E;;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;CAC5B;AAED,eAAO,MAAM,kBAAkB,EAAE,iBAQhC,CAAC;AAoBF,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,WAAW,kDAAkD;IACtE,QAAQ,CAAC,QAAQ,qBAAqB;cAEtB,UAAU,CACxB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC;IAuDvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiFzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,eAAe;CAGxB"}