@oalacea/daemon 0.6.3 → 0.7.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 (289) hide show
  1. package/README.md +268 -58
  2. package/bin/Dockerfile +158 -16
  3. package/dist/cli/cli.d.ts.map +1 -1
  4. package/dist/cli/cli.js +22 -2
  5. package/dist/cli/cli.js.map +1 -1
  6. package/dist/cli/commands/command.types.d.ts +216 -0
  7. package/dist/cli/commands/command.types.d.ts.map +1 -0
  8. package/dist/cli/commands/command.types.js +64 -0
  9. package/dist/cli/commands/command.types.js.map +1 -0
  10. package/dist/cli/commands/history.command.d.ts +91 -0
  11. package/dist/cli/commands/history.command.d.ts.map +1 -0
  12. package/dist/cli/commands/history.command.js +336 -0
  13. package/dist/cli/commands/history.command.js.map +1 -0
  14. package/dist/cli/commands/index.d.ts +14 -3
  15. package/dist/cli/commands/index.d.ts.map +1 -1
  16. package/dist/cli/commands/index.js +7 -0
  17. package/dist/cli/commands/index.js.map +1 -1
  18. package/dist/cli/commands/init.command.d.ts +12 -14
  19. package/dist/cli/commands/init.command.d.ts.map +1 -1
  20. package/dist/cli/commands/init.command.js +278 -144
  21. package/dist/cli/commands/init.command.js.map +1 -1
  22. package/dist/cli/commands/optimize.command.d.ts +110 -0
  23. package/dist/cli/commands/optimize.command.d.ts.map +1 -0
  24. package/dist/cli/commands/optimize.command.js +497 -0
  25. package/dist/cli/commands/optimize.command.js.map +1 -0
  26. package/dist/cli/commands/report.command.d.ts +110 -0
  27. package/dist/cli/commands/report.command.d.ts.map +1 -0
  28. package/dist/cli/commands/report.command.js +532 -0
  29. package/dist/cli/commands/report.command.js.map +1 -0
  30. package/dist/cli/commands/review.command.d.ts +110 -0
  31. package/dist/cli/commands/review.command.d.ts.map +1 -0
  32. package/dist/cli/commands/review.command.js +520 -0
  33. package/dist/cli/commands/review.command.js.map +1 -0
  34. package/dist/cli/commands/score.command.d.ts +47 -0
  35. package/dist/cli/commands/score.command.d.ts.map +1 -0
  36. package/dist/cli/commands/score.command.js +261 -0
  37. package/dist/cli/commands/score.command.js.map +1 -0
  38. package/dist/cli/utils/index.d.ts +10 -0
  39. package/dist/cli/utils/index.d.ts.map +1 -0
  40. package/dist/cli/utils/index.js +10 -0
  41. package/dist/cli/utils/index.js.map +1 -0
  42. package/dist/cli/utils/output.d.ts +192 -0
  43. package/dist/cli/utils/output.d.ts.map +1 -0
  44. package/dist/cli/utils/output.js +411 -0
  45. package/dist/cli/utils/output.js.map +1 -0
  46. package/dist/cli/utils/progress.d.ts +204 -0
  47. package/dist/cli/utils/progress.d.ts.map +1 -0
  48. package/dist/cli/utils/progress.js +396 -0
  49. package/dist/cli/utils/progress.js.map +1 -0
  50. package/dist/core/types/index.d.ts +1 -0
  51. package/dist/core/types/index.d.ts.map +1 -1
  52. package/dist/core/types/project.types.d.ts +3 -3
  53. package/dist/core/types/project.types.d.ts.map +1 -1
  54. package/dist/core/types/scoring.types.d.ts +301 -0
  55. package/dist/core/types/scoring.types.d.ts.map +1 -0
  56. package/dist/core/types/scoring.types.js +8 -0
  57. package/dist/core/types/scoring.types.js.map +1 -0
  58. package/dist/services/detection/framework-detector.d.ts.map +1 -1
  59. package/dist/services/detection/framework-detector.js +74 -5
  60. package/dist/services/detection/framework-detector.js.map +1 -1
  61. package/dist/services/index.d.ts +12 -0
  62. package/dist/services/index.d.ts.map +1 -1
  63. package/dist/services/index.js +14 -0
  64. package/dist/services/index.js.map +1 -1
  65. package/dist/services/optimization/detectors/bug-detector.d.ts +82 -0
  66. package/dist/services/optimization/detectors/bug-detector.d.ts.map +1 -0
  67. package/dist/services/optimization/detectors/bug-detector.js +443 -0
  68. package/dist/services/optimization/detectors/bug-detector.js.map +1 -0
  69. package/dist/services/optimization/detectors/code-smell-detector.d.ts +108 -0
  70. package/dist/services/optimization/detectors/code-smell-detector.d.ts.map +1 -0
  71. package/dist/services/optimization/detectors/code-smell-detector.js +569 -0
  72. package/dist/services/optimization/detectors/code-smell-detector.js.map +1 -0
  73. package/dist/services/optimization/detectors/index.d.ts +7 -0
  74. package/dist/services/optimization/detectors/index.d.ts.map +1 -0
  75. package/dist/services/optimization/detectors/index.js +7 -0
  76. package/dist/services/optimization/detectors/index.js.map +1 -0
  77. package/dist/services/optimization/detectors/perf-detector.d.ts +80 -0
  78. package/dist/services/optimization/detectors/perf-detector.d.ts.map +1 -0
  79. package/dist/services/optimization/detectors/perf-detector.js +451 -0
  80. package/dist/services/optimization/detectors/perf-detector.js.map +1 -0
  81. package/dist/services/optimization/index.d.ts +61 -0
  82. package/dist/services/optimization/index.d.ts.map +1 -0
  83. package/dist/services/optimization/index.js +69 -0
  84. package/dist/services/optimization/index.js.map +1 -0
  85. package/dist/services/optimization/optimization.service.d.ts +65 -0
  86. package/dist/services/optimization/optimization.service.d.ts.map +1 -0
  87. package/dist/services/optimization/optimization.service.js +511 -0
  88. package/dist/services/optimization/optimization.service.js.map +1 -0
  89. package/dist/services/optimization/optimization.types.d.ts +343 -0
  90. package/dist/services/optimization/optimization.types.d.ts.map +1 -0
  91. package/dist/services/optimization/optimization.types.js +8 -0
  92. package/dist/services/optimization/optimization.types.js.map +1 -0
  93. package/dist/services/optimization/optimizers/code-optimizer.d.ts +87 -0
  94. package/dist/services/optimization/optimizers/code-optimizer.d.ts.map +1 -0
  95. package/dist/services/optimization/optimizers/code-optimizer.js +436 -0
  96. package/dist/services/optimization/optimizers/code-optimizer.js.map +1 -0
  97. package/dist/services/optimization/optimizers/index.d.ts +7 -0
  98. package/dist/services/optimization/optimizers/index.d.ts.map +1 -0
  99. package/dist/services/optimization/optimizers/index.js +7 -0
  100. package/dist/services/optimization/optimizers/index.js.map +1 -0
  101. package/dist/services/optimization/optimizers/perf-optimizer.d.ts +64 -0
  102. package/dist/services/optimization/optimizers/perf-optimizer.d.ts.map +1 -0
  103. package/dist/services/optimization/optimizers/perf-optimizer.js +330 -0
  104. package/dist/services/optimization/optimizers/perf-optimizer.js.map +1 -0
  105. package/dist/services/optimization/optimizers/refact-optimizer.d.ts +82 -0
  106. package/dist/services/optimization/optimizers/refact-optimizer.d.ts.map +1 -0
  107. package/dist/services/optimization/optimizers/refact-optimizer.js +354 -0
  108. package/dist/services/optimization/optimizers/refact-optimizer.js.map +1 -0
  109. package/dist/services/optimization/patterns/anti-patterns.d.ts +31 -0
  110. package/dist/services/optimization/patterns/anti-patterns.d.ts.map +1 -0
  111. package/dist/services/optimization/patterns/anti-patterns.js +501 -0
  112. package/dist/services/optimization/patterns/anti-patterns.js.map +1 -0
  113. package/dist/services/optimization/patterns/index.d.ts +5 -0
  114. package/dist/services/optimization/patterns/index.d.ts.map +1 -0
  115. package/dist/services/optimization/patterns/index.js +5 -0
  116. package/dist/services/optimization/patterns/index.js.map +1 -0
  117. package/dist/services/reporting/export/chart.exporter.d.ts +59 -0
  118. package/dist/services/reporting/export/chart.exporter.d.ts.map +1 -0
  119. package/dist/services/reporting/export/chart.exporter.js +350 -0
  120. package/dist/services/reporting/export/chart.exporter.js.map +1 -0
  121. package/dist/services/reporting/export/index.d.ts +9 -0
  122. package/dist/services/reporting/export/index.d.ts.map +1 -0
  123. package/dist/services/reporting/export/index.js +10 -0
  124. package/dist/services/reporting/export/index.js.map +1 -0
  125. package/dist/services/reporting/export/pdf.exporter.d.ts +133 -0
  126. package/dist/services/reporting/export/pdf.exporter.d.ts.map +1 -0
  127. package/dist/services/reporting/export/pdf.exporter.js +270 -0
  128. package/dist/services/reporting/export/pdf.exporter.js.map +1 -0
  129. package/dist/services/reporting/history.service.d.ts +93 -0
  130. package/dist/services/reporting/history.service.d.ts.map +1 -0
  131. package/dist/services/reporting/history.service.js +285 -0
  132. package/dist/services/reporting/history.service.js.map +1 -0
  133. package/dist/services/reporting/index.d.ts +15 -0
  134. package/dist/services/reporting/index.d.ts.map +1 -0
  135. package/dist/services/reporting/index.js +16 -0
  136. package/dist/services/reporting/index.js.map +1 -0
  137. package/dist/services/reporting/report.service.d.ts +102 -0
  138. package/dist/services/reporting/report.service.d.ts.map +1 -0
  139. package/dist/services/reporting/report.service.js +240 -0
  140. package/dist/services/reporting/report.service.js.map +1 -0
  141. package/dist/services/reporting/reporting.types.d.ts +329 -0
  142. package/dist/services/reporting/reporting.types.d.ts.map +1 -0
  143. package/dist/services/reporting/reporting.types.js +8 -0
  144. package/dist/services/reporting/reporting.types.js.map +1 -0
  145. package/dist/services/reporting/templates/html.template.d.ts +81 -0
  146. package/dist/services/reporting/templates/html.template.d.ts.map +1 -0
  147. package/dist/services/reporting/templates/html.template.js +741 -0
  148. package/dist/services/reporting/templates/html.template.js.map +1 -0
  149. package/dist/services/reporting/templates/json.template.d.ts +85 -0
  150. package/dist/services/reporting/templates/json.template.d.ts.map +1 -0
  151. package/dist/services/reporting/templates/json.template.js +308 -0
  152. package/dist/services/reporting/templates/json.template.js.map +1 -0
  153. package/dist/services/reporting/templates/markdown.template.d.ts +69 -0
  154. package/dist/services/reporting/templates/markdown.template.d.ts.map +1 -0
  155. package/dist/services/reporting/templates/markdown.template.js +311 -0
  156. package/dist/services/reporting/templates/markdown.template.js.map +1 -0
  157. package/dist/services/reporting/trend-analyzer.d.ts +73 -0
  158. package/dist/services/reporting/trend-analyzer.d.ts.map +1 -0
  159. package/dist/services/reporting/trend-analyzer.js +291 -0
  160. package/dist/services/reporting/trend-analyzer.js.map +1 -0
  161. package/dist/services/review/analyzers/dependency-analyzer.d.ts +87 -0
  162. package/dist/services/review/analyzers/dependency-analyzer.d.ts.map +1 -0
  163. package/dist/services/review/analyzers/dependency-analyzer.js +458 -0
  164. package/dist/services/review/analyzers/dependency-analyzer.js.map +1 -0
  165. package/dist/services/review/analyzers/index.d.ts +13 -0
  166. package/dist/services/review/analyzers/index.d.ts.map +1 -0
  167. package/dist/services/review/analyzers/index.js +13 -0
  168. package/dist/services/review/analyzers/index.js.map +1 -0
  169. package/dist/services/review/analyzers/nestjs-analyzer.d.ts +210 -0
  170. package/dist/services/review/analyzers/nestjs-analyzer.d.ts.map +1 -0
  171. package/dist/services/review/analyzers/nestjs-analyzer.js +571 -0
  172. package/dist/services/review/analyzers/nestjs-analyzer.js.map +1 -0
  173. package/dist/services/review/analyzers/performance-analyzer.d.ts +91 -0
  174. package/dist/services/review/analyzers/performance-analyzer.d.ts.map +1 -0
  175. package/dist/services/review/analyzers/performance-analyzer.js +589 -0
  176. package/dist/services/review/analyzers/performance-analyzer.js.map +1 -0
  177. package/dist/services/review/analyzers/security-analyzer.d.ts +96 -0
  178. package/dist/services/review/analyzers/security-analyzer.d.ts.map +1 -0
  179. package/dist/services/review/analyzers/security-analyzer.js +512 -0
  180. package/dist/services/review/analyzers/security-analyzer.js.map +1 -0
  181. package/dist/services/review/analyzers/static-analyzer.d.ts +90 -0
  182. package/dist/services/review/analyzers/static-analyzer.d.ts.map +1 -0
  183. package/dist/services/review/analyzers/static-analyzer.js +423 -0
  184. package/dist/services/review/analyzers/static-analyzer.js.map +1 -0
  185. package/dist/services/review/fixers/auto-fixer.d.ts +94 -0
  186. package/dist/services/review/fixers/auto-fixer.d.ts.map +1 -0
  187. package/dist/services/review/fixers/auto-fixer.js +404 -0
  188. package/dist/services/review/fixers/auto-fixer.js.map +1 -0
  189. package/dist/services/review/fixers/index.d.ts +11 -0
  190. package/dist/services/review/fixers/index.d.ts.map +1 -0
  191. package/dist/services/review/fixers/index.js +11 -0
  192. package/dist/services/review/fixers/index.js.map +1 -0
  193. package/dist/services/review/fixers/refactor-suggester.d.ts +100 -0
  194. package/dist/services/review/fixers/refactor-suggester.d.ts.map +1 -0
  195. package/dist/services/review/fixers/refactor-suggester.js +555 -0
  196. package/dist/services/review/fixers/refactor-suggester.js.map +1 -0
  197. package/dist/services/review/fixers/test-generator.d.ts +99 -0
  198. package/dist/services/review/fixers/test-generator.d.ts.map +1 -0
  199. package/dist/services/review/fixers/test-generator.js +458 -0
  200. package/dist/services/review/fixers/test-generator.js.map +1 -0
  201. package/dist/services/review/index.d.ts +14 -0
  202. package/dist/services/review/index.d.ts.map +1 -0
  203. package/dist/services/review/index.js +14 -0
  204. package/dist/services/review/index.js.map +1 -0
  205. package/dist/services/review/reporters/fix-reporter.d.ts +67 -0
  206. package/dist/services/review/reporters/fix-reporter.d.ts.map +1 -0
  207. package/dist/services/review/reporters/fix-reporter.js +437 -0
  208. package/dist/services/review/reporters/fix-reporter.js.map +1 -0
  209. package/dist/services/review/reporters/index.d.ts +10 -0
  210. package/dist/services/review/reporters/index.d.ts.map +1 -0
  211. package/dist/services/review/reporters/index.js +10 -0
  212. package/dist/services/review/reporters/index.js.map +1 -0
  213. package/dist/services/review/reporters/score-reporter.d.ts +84 -0
  214. package/dist/services/review/reporters/score-reporter.d.ts.map +1 -0
  215. package/dist/services/review/reporters/score-reporter.js +560 -0
  216. package/dist/services/review/reporters/score-reporter.js.map +1 -0
  217. package/dist/services/review/review.service.d.ts +129 -0
  218. package/dist/services/review/review.service.d.ts.map +1 -0
  219. package/dist/services/review/review.service.js +396 -0
  220. package/dist/services/review/review.service.js.map +1 -0
  221. package/dist/services/review/review.types.d.ts +443 -0
  222. package/dist/services/review/review.types.d.ts.map +1 -0
  223. package/dist/services/review/review.types.js +11 -0
  224. package/dist/services/review/review.types.js.map +1 -0
  225. package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts +53 -0
  226. package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts.map +1 -0
  227. package/dist/services/scoring/dimensions/accessibility.analyzer.js +260 -0
  228. package/dist/services/scoring/dimensions/accessibility.analyzer.js.map +1 -0
  229. package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts +138 -0
  230. package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts.map +1 -0
  231. package/dist/services/scoring/dimensions/backend-logic.analyzer.js +713 -0
  232. package/dist/services/scoring/dimensions/backend-logic.analyzer.js.map +1 -0
  233. package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts +142 -0
  234. package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts.map +1 -0
  235. package/dist/services/scoring/dimensions/business-logic.analyzer.js +747 -0
  236. package/dist/services/scoring/dimensions/business-logic.analyzer.js.map +1 -0
  237. package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts +142 -0
  238. package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts.map +1 -0
  239. package/dist/services/scoring/dimensions/code-quality.analyzer.js +685 -0
  240. package/dist/services/scoring/dimensions/code-quality.analyzer.js.map +1 -0
  241. package/dist/services/scoring/dimensions/index.d.ts +18 -0
  242. package/dist/services/scoring/dimensions/index.d.ts.map +1 -0
  243. package/dist/services/scoring/dimensions/index.js +27 -0
  244. package/dist/services/scoring/dimensions/index.js.map +1 -0
  245. package/dist/services/scoring/dimensions/performance.analyzer.d.ts +125 -0
  246. package/dist/services/scoring/dimensions/performance.analyzer.d.ts.map +1 -0
  247. package/dist/services/scoring/dimensions/performance.analyzer.js +615 -0
  248. package/dist/services/scoring/dimensions/performance.analyzer.js.map +1 -0
  249. package/dist/services/scoring/dimensions/security.analyzer.d.ts +53 -0
  250. package/dist/services/scoring/dimensions/security.analyzer.d.ts.map +1 -0
  251. package/dist/services/scoring/dimensions/security.analyzer.js +327 -0
  252. package/dist/services/scoring/dimensions/security.analyzer.js.map +1 -0
  253. package/dist/services/scoring/dimensions/seo.analyzer.d.ts +77 -0
  254. package/dist/services/scoring/dimensions/seo.analyzer.d.ts.map +1 -0
  255. package/dist/services/scoring/dimensions/seo.analyzer.js +502 -0
  256. package/dist/services/scoring/dimensions/seo.analyzer.js.map +1 -0
  257. package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts +106 -0
  258. package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts.map +1 -0
  259. package/dist/services/scoring/dimensions/test-coverage.analyzer.js +496 -0
  260. package/dist/services/scoring/dimensions/test-coverage.analyzer.js.map +1 -0
  261. package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts +126 -0
  262. package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts.map +1 -0
  263. package/dist/services/scoring/dimensions/ui-ux.analyzer.js +665 -0
  264. package/dist/services/scoring/dimensions/ui-ux.analyzer.js.map +1 -0
  265. package/dist/services/scoring/index.d.ts +10 -0
  266. package/dist/services/scoring/index.d.ts.map +1 -0
  267. package/dist/services/scoring/index.js +10 -0
  268. package/dist/services/scoring/index.js.map +1 -0
  269. package/dist/services/scoring/scoring-service.d.ts +222 -0
  270. package/dist/services/scoring/scoring-service.d.ts.map +1 -0
  271. package/dist/services/scoring/scoring-service.js +636 -0
  272. package/dist/services/scoring/scoring-service.js.map +1 -0
  273. package/package.json +11 -3
  274. package/templates/README.md +183 -0
  275. package/templates/nestjs/controller.spec.ts +203 -0
  276. package/templates/nestjs/e2e/api.e2e-spec.ts +451 -0
  277. package/templates/nestjs/e2e/auth.e2e-spec.ts +533 -0
  278. package/templates/nestjs/fixtures/test-module.ts +311 -0
  279. package/templates/nestjs/guard.spec.ts +314 -0
  280. package/templates/nestjs/interceptor.spec.ts +458 -0
  281. package/templates/nestjs/module.spec.ts +173 -0
  282. package/templates/nestjs/pipe.spec.ts +474 -0
  283. package/templates/nestjs/service.spec.ts +296 -0
  284. package/templates/rust/Cargo.toml +72 -0
  285. package/templates/rust/actix-controller.test.rs +114 -0
  286. package/templates/rust/axum-handler.test.rs +117 -0
  287. package/templates/rust/integration.test.rs +63 -0
  288. package/templates/rust/rocket-route.test.rs +106 -0
  289. package/templates/rust/unit.test.rs +38 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Bug Detector
3
+ *
4
+ * Detects various bugs in code including:
5
+ * - Memory leaks (useState, useEffect patterns)
6
+ * - Race conditions (async/await without proper handling)
7
+ * - Null/undefined errors (missing guards)
8
+ * - Infinite loops (recursive calls)
9
+ * - Missing error handling (try/catch)
10
+ * - SQL/NoSQL injection patterns
11
+ * - XSS vulnerabilities (innerHTML, dangerouslySetInnerHTML)
12
+ */
13
+ import type { BugType, DetectedBug, DetectionOptions, Severity } from '../optimization.types.js';
14
+ /**
15
+ * Bug Detector Service
16
+ */
17
+ export declare class BugDetector {
18
+ private readonly logger;
19
+ constructor();
20
+ /**
21
+ * Detect bugs in a single file
22
+ */
23
+ detectInFile(filePath: string, content: string, options?: DetectionOptions): Promise<DetectedBug[]>;
24
+ /**
25
+ * Detect bugs across all files in a directory
26
+ */
27
+ detectInDirectory(dirPath: string, options?: DetectionOptions): Promise<DetectedBug[]>;
28
+ /**
29
+ * Get prioritized list of bugs
30
+ */
31
+ prioritizeBugs(bugs: DetectedBug[]): DetectedBug[];
32
+ /**
33
+ * Get bugs by severity
34
+ */
35
+ getBugsBySeverity(bugs: DetectedBug[], severity: Severity): DetectedBug[];
36
+ /**
37
+ * Get bugs by type
38
+ */
39
+ getBugsByType(bugs: DetectedBug[], type: BugType): DetectedBug[];
40
+ /**
41
+ * Get fixable bugs
42
+ */
43
+ getFixableBugs(bugs: DetectedBug[]): DetectedBug[];
44
+ /**
45
+ * Generate statistics summary
46
+ */
47
+ generateSummary(bugs: DetectedBug[]): {
48
+ total: number;
49
+ bySeverity: Record<Severity, number>;
50
+ byType: Record<BugType, number>;
51
+ fixable: number;
52
+ };
53
+ /**
54
+ * Find all regex matches in content with their positions
55
+ */
56
+ private findAllMatches;
57
+ /**
58
+ * Find line and column for a position in content
59
+ */
60
+ private findLocation;
61
+ /**
62
+ * Generate unique bug ID
63
+ */
64
+ private generateBugId;
65
+ /**
66
+ * Check if bug type is auto-fixable
67
+ */
68
+ private isFixable;
69
+ /**
70
+ * Check if severity matches minimum requirement
71
+ */
72
+ private isSeverityMatch;
73
+ /**
74
+ * Extract code snippet around a line
75
+ */
76
+ private extractSnippet;
77
+ /**
78
+ * Get relevant files to scan
79
+ */
80
+ private getRelevantFiles;
81
+ }
82
+ //# sourceMappingURL=bug-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bug-detector.d.ts","sourceRoot":"","sources":["../../../../src/services/optimization/detectors/bug-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,gBAAgB,EAEhB,QAAQ,EACT,MAAM,0BAA0B,CAAC;AA2MlC;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;IAMhC;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,EAAE,CAAC;IA+CzB;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,EAAE,CAAC;IAoBzB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAelD;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE;IAIzE;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE;IAIhE;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAIlD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC;KACjB;IAsBD;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;YACW,gBAAgB;CAsD/B"}
@@ -0,0 +1,443 @@
1
+ /**
2
+ * Bug Detector
3
+ *
4
+ * Detects various bugs in code including:
5
+ * - Memory leaks (useState, useEffect patterns)
6
+ * - Race conditions (async/await without proper handling)
7
+ * - Null/undefined errors (missing guards)
8
+ * - Infinite loops (recursive calls)
9
+ * - Missing error handling (try/catch)
10
+ * - SQL/NoSQL injection patterns
11
+ * - XSS vulnerabilities (innerHTML, dangerouslySetInnerHTML)
12
+ */
13
+ import * as fs from 'node:fs/promises';
14
+ import * as path from 'node:path';
15
+ import { createLogger } from '../../../shared/utils/logger.js';
16
+ /** Regex patterns for bug detection */
17
+ const BUG_PATTERNS = {
18
+ 'memory-leak': [
19
+ {
20
+ pattern: /useEffect\s*\(\s*\(\)\s*=>\s*{[\s\S]*?(?:addEventListener|setInterval|setTimeout|subscribe)[\s\S]*?},\s*\[\s*\]\s*\)/gs,
21
+ severity: 'high',
22
+ description: 'Missing cleanup function in useEffect with event listener or timer',
23
+ fix: 'Return a cleanup function: () => {.removeEventListener(...) / clearInterval(...)}',
24
+ },
25
+ {
26
+ pattern: /setInterval\s*\(\s*\(\)\s*=>\s*{[\s\S]*?useState\(|[\s\S]*?setState\(/gs,
27
+ severity: 'high',
28
+ description: 'Potential stale closure in setInterval - state may not update',
29
+ fix: 'Use useRef to hold current state value',
30
+ },
31
+ {
32
+ pattern: /useCallback\s*\(\s*\(\)\s*=>\s*{[\s\S]*?},\s*\[\s*\]\s*\)[\s\S]*?useEffect/gs,
33
+ severity: 'medium',
34
+ description: 'useCallback with empty deps used in useEffect may cause stale closure',
35
+ fix: 'Include all dependencies in useCallback dependency array',
36
+ },
37
+ ],
38
+ 'race-condition': [
39
+ {
40
+ pattern: /\w+State\([\w\s,()]*\)\s*;\s*\w+State\([\w\s,()]*\+\s*1\)\s*;/gs,
41
+ severity: 'high',
42
+ description: 'Multiple state updates based on old state can cause race conditions',
43
+ fix: 'Use functional updates: setState(prev => prev + 1)',
44
+ },
45
+ {
46
+ pattern: /await\s+[^;]+;\s*await\s+[^;]+(?:\w+\s*=)\s*result/gs,
47
+ severity: 'medium',
48
+ description: 'Sequential async operations that could run in parallel',
49
+ fix: 'Use Promise.all() for parallel execution',
50
+ },
51
+ {
52
+ pattern: /for\s*\(\s*const\s+\w+\s+of\s+\w+\s*\)\s*{[\s\S]*?await\s+/gs,
53
+ severity: 'medium',
54
+ description: 'Sequential awaits in loop - consider Promise.all for better performance',
55
+ fix: 'Collect promises and use Promise.all()',
56
+ },
57
+ ],
58
+ 'null-reference': [
59
+ {
60
+ pattern: /(?:\w+\.\w+\s*\?\?\s*undefined|\w+\?\.\w+\s*\|\|[^|]|\w+\.\w+\s*\|\|\s*\w+\.\w+)/gs,
61
+ severity: 'medium',
62
+ description: 'Potential null/undefined access without proper guard',
63
+ fix: 'Use optional chaining (?.) or nullish coalescing (??) consistently',
64
+ },
65
+ {
66
+ pattern: /const\s+{\s*\w+\s*}\s*=\s*(?:req\.body|req\.query|req\.params|formData\(\)|JSON\.parse)/gs,
67
+ severity: 'high',
68
+ description: 'Destructuring without validation - may cause undefined errors',
69
+ fix: 'Validate input before destructuring or use default values',
70
+ },
71
+ {
72
+ pattern: /\[\d+\](?!\s*\?\?)/gs,
73
+ severity: 'low',
74
+ description: 'Array access without bounds checking',
75
+ fix: 'Check array length before accessing or use .at() with safe defaults',
76
+ },
77
+ ],
78
+ 'infinite-loop': [
79
+ {
80
+ pattern: /while\s*\(\s*true\s*\)|for\s*\(\s*;\s*;\s*\)/gs,
81
+ severity: 'high',
82
+ description: 'Infinite loop detected - ensure there is a break condition',
83
+ fix: 'Add proper termination condition or break statement',
84
+ },
85
+ {
86
+ pattern: /function\s+\w+\s*\([^)]*\)\s*{[\s\S]{0,500}return\s+\w+\([^)]*\)[\s\S]*?}/gs,
87
+ severity: 'critical',
88
+ description: 'Possible infinite recursion - no base case detected',
89
+ fix: 'Add base case to prevent stack overflow',
90
+ },
91
+ {
92
+ pattern: /useEffect\s*\(\s*\(\)\s*=>\s*{[\s\S]*?setState\([\s\S]*?},\s*\[\s*\]\s*\)/gs,
93
+ severity: 'critical',
94
+ description: 'useEffect with setState and empty deps will cause infinite loop',
95
+ fix: 'Add state to dependency array or use functional update',
96
+ },
97
+ ],
98
+ 'missing-error-handling': [
99
+ {
100
+ pattern: /await\s+(?:fetch|axios|\w+\.fetch|\w+\.get|\w+\.post|\w+\.query)(?:\([^)]*\))?(?!\s*\.\s*catch|[\s\S]*?try\s*{)/gs,
101
+ severity: 'high',
102
+ description: 'Async operation without error handling',
103
+ fix: 'Wrap in try/catch or add .catch() handler',
104
+ },
105
+ {
106
+ pattern: /JSON\.parse\s*\([^)]+\)(?!\s*(?:\?\s*\.|try|\.catch))/gs,
107
+ severity: 'high',
108
+ description: 'JSON.parse without try/catch can throw on invalid JSON',
109
+ fix: 'Wrap in try/catch block',
110
+ },
111
+ {
112
+ pattern: /\.then\s*\([^)]*\)\s*(?!\.catch)/gs,
113
+ severity: 'medium',
114
+ description: 'Promise chain without .catch() handler',
115
+ fix: 'Add .catch() to handle rejections',
116
+ },
117
+ ],
118
+ 'sql-injection': [
119
+ {
120
+ pattern: /(?:SELECT|INSERT|UPDATE|DELETE)\s+(?:(?!prepare|execute|escape|\$\d|\?|\$\w+\s*=>).)*?(?:\+\s*[^;]+|`\s*\$\s*{|`[^`]*\s*\$\s*{)/gsi,
121
+ severity: 'critical',
122
+ description: 'Possible SQL injection via string concatenation or template literal',
123
+ fix: 'Use parameterized queries or prepared statements',
124
+ },
125
+ {
126
+ pattern: /query\s*\(\s*['"`][\s\S]*?\$\{[\s\S]*?\}['"`]\s*/gs,
127
+ severity: 'critical',
128
+ description: 'SQL query with template literal interpolation',
129
+ fix: 'Use parameterized queries with placeholders',
130
+ },
131
+ {
132
+ pattern: /db\.(?:exec|query|run)\s*\(\s*[^;]*?\+\s*/gs,
133
+ severity: 'critical',
134
+ description: 'SQL query built with string concatenation',
135
+ fix: 'Use prepared statements with parameter binding',
136
+ },
137
+ ],
138
+ 'xss': [
139
+ {
140
+ pattern: /\.innerHTML\s*=\s*(?!.*DOMPurify|sanitize)/gs,
141
+ severity: 'critical',
142
+ description: 'XSS vulnerability: innerHTML assignment without sanitization',
143
+ fix: 'Use textContent or sanitize with DOMPurify',
144
+ },
145
+ {
146
+ pattern: /dangerouslySetInnerHTML\s*=\s*{\s*__html:\s*[^}]+}(?![\s\S]*?DOMPurify|sanitize)/gs,
147
+ severity: 'high',
148
+ description: 'React dangerouslySetInnerHTML without sanitization',
149
+ fix: 'Sanitize HTML with DOMPurify before rendering',
150
+ },
151
+ {
152
+ pattern: /document\.write\s*\(/gs,
153
+ severity: 'critical',
154
+ description: 'document.write() is vulnerable to XSS',
155
+ fix: 'Use DOM manipulation methods like appendChild',
156
+ },
157
+ {
158
+ pattern: /eval\s*\(|new\s+Function\s*\(/gs,
159
+ severity: 'high',
160
+ description: 'eval() or new Function() can lead to code injection',
161
+ fix: 'Avoid eval - use safer alternatives',
162
+ },
163
+ ],
164
+ 'missing-validation': [
165
+ {
166
+ pattern: /(?:req\.body|req\.query|req\.params|formData\(\)|URLSearchParams)\.[a-zA-Z_][a-zA-Z0-9_]*(?!\s*(?:\.\s*(?:validate|parse|safeParse|schema)|\|\||\?\s*\.|!))/gs,
167
+ severity: 'high',
168
+ description: 'Direct use of user input without validation',
169
+ fix: 'Validate with schema library (Zod, Yup, Joi)',
170
+ },
171
+ {
172
+ pattern: /localStorage\.(?:getItem|setItem)\s*\([^)]+\)(?![\s\S]*?validate|parse)/gs,
173
+ severity: 'medium',
174
+ description: 'localStorage value used without validation',
175
+ fix: 'Validate and parse localStorage values',
176
+ },
177
+ ],
178
+ 'unused-variable': [
179
+ {
180
+ pattern: /(?:const|let|var)\s+\w+\s*=\s*[^;]+;(?:\s*(?:const|let|var)\s+|[\s\S]{0,200}return)/gs,
181
+ severity: 'low',
182
+ description: 'Variable declared but potentially unused',
183
+ fix: 'Remove unused variable or use it',
184
+ },
185
+ {
186
+ pattern: /import\s+{[^}]+}\s+from\s+[^;]+;(?!.*(?:export|typeof|\w+\s*[,:]))/gs,
187
+ severity: 'low',
188
+ description: 'Import may be unused',
189
+ fix: 'Remove unused import',
190
+ },
191
+ ],
192
+ 'dead-code': [
193
+ {
194
+ pattern: /return\s+[^;]+;[\s\S]{0,100}(?!return|if|switch|throw|try)/gs,
195
+ severity: 'low',
196
+ description: 'Unreachable code after return statement',
197
+ fix: 'Remove dead code',
198
+ },
199
+ {
200
+ pattern: /if\s*\(\s*(?:true|false|0|1|null|undefined)\s*\)/gs,
201
+ severity: 'low',
202
+ description: 'Conditional with constant value - dead code',
203
+ fix: 'Remove dead branch or use actual condition',
204
+ },
205
+ ],
206
+ };
207
+ /**
208
+ * Bug Detector Service
209
+ */
210
+ export class BugDetector {
211
+ logger;
212
+ constructor() {
213
+ this.logger = createLogger('BugDetector');
214
+ }
215
+ /**
216
+ * Detect bugs in a single file
217
+ */
218
+ async detectInFile(filePath, content, options = {}) {
219
+ const bugs = [];
220
+ const lines = content.split('\n');
221
+ // Filter by bug types if specified
222
+ const typesToCheck = options.bugTypes?.length
223
+ ? options.bugTypes
224
+ : Object.keys(BUG_PATTERNS);
225
+ for (const bugType of typesToCheck) {
226
+ const patterns = BUG_PATTERNS[bugType];
227
+ if (!patterns)
228
+ continue;
229
+ for (const { pattern, severity, description, fix } of patterns) {
230
+ const matches = this.findAllMatches(content, pattern);
231
+ for (const match of matches) {
232
+ const location = this.findLocation(content, match.start);
233
+ // Check severity filter
234
+ if (options.minSeverity && !this.isSeverityMatch(severity, options.minSeverity)) {
235
+ continue;
236
+ }
237
+ const bug = {
238
+ id: this.generateBugId(filePath, bugType, location.line),
239
+ type: bugType,
240
+ severity,
241
+ description,
242
+ location: {
243
+ filePath: path.relative(process.cwd(), filePath),
244
+ line: location.line,
245
+ column: location.column,
246
+ },
247
+ fixable: this.isFixable(bugType),
248
+ suggestedFix: fix,
249
+ codeSnippet: this.extractSnippet(lines, location.line, 3),
250
+ };
251
+ bugs.push(bug);
252
+ }
253
+ }
254
+ }
255
+ return bugs;
256
+ }
257
+ /**
258
+ * Detect bugs across all files in a directory
259
+ */
260
+ async detectInDirectory(dirPath, options = {}) {
261
+ const allBugs = [];
262
+ const files = await this.getRelevantFiles(dirPath, options);
263
+ this.logger.info(`Scanning ${files.length} files for bugs...`);
264
+ for (const filePath of files) {
265
+ try {
266
+ const content = await fs.readFile(filePath, 'utf-8');
267
+ const bugs = await this.detectInFile(filePath, content, options);
268
+ allBugs.push(...bugs);
269
+ }
270
+ catch (error) {
271
+ this.logger.warn(`Failed to analyze ${filePath}:`, error);
272
+ }
273
+ }
274
+ this.logger.info(`Found ${allBugs.length} bugs`);
275
+ return allBugs;
276
+ }
277
+ /**
278
+ * Get prioritized list of bugs
279
+ */
280
+ prioritizeBugs(bugs) {
281
+ const severityWeight = { critical: 4, high: 3, medium: 2, low: 1 };
282
+ return bugs.sort((a, b) => {
283
+ const severityDiff = severityWeight[b.severity] - severityWeight[a.severity];
284
+ if (severityDiff !== 0)
285
+ return severityDiff;
286
+ // Prefer fixable bugs
287
+ if (a.fixable && !b.fixable)
288
+ return -1;
289
+ if (!a.fixable && b.fixable)
290
+ return 1;
291
+ return 0;
292
+ });
293
+ }
294
+ /**
295
+ * Get bugs by severity
296
+ */
297
+ getBugsBySeverity(bugs, severity) {
298
+ return bugs.filter(bug => bug.severity === severity);
299
+ }
300
+ /**
301
+ * Get bugs by type
302
+ */
303
+ getBugsByType(bugs, type) {
304
+ return bugs.filter(bug => bug.type === type);
305
+ }
306
+ /**
307
+ * Get fixable bugs
308
+ */
309
+ getFixableBugs(bugs) {
310
+ return bugs.filter(bug => bug.fixable);
311
+ }
312
+ /**
313
+ * Generate statistics summary
314
+ */
315
+ generateSummary(bugs) {
316
+ const bySeverity = {
317
+ critical: 0,
318
+ high: 0,
319
+ medium: 0,
320
+ low: 0,
321
+ };
322
+ const byType = {};
323
+ for (const bug of bugs) {
324
+ bySeverity[bug.severity]++;
325
+ byType[bug.type] = (byType[bug.type] || 0) + 1;
326
+ }
327
+ return {
328
+ total: bugs.length,
329
+ bySeverity,
330
+ byType: byType,
331
+ fixable: bugs.filter(b => b.fixable).length,
332
+ };
333
+ }
334
+ /**
335
+ * Find all regex matches in content with their positions
336
+ */
337
+ findAllMatches(content, pattern) {
338
+ const matches = [];
339
+ const globalPattern = new RegExp(pattern.source, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g');
340
+ let match;
341
+ while ((match = globalPattern.exec(content)) !== null) {
342
+ matches.push({
343
+ start: match.index,
344
+ end: match.index + match[0].length,
345
+ text: match[0],
346
+ });
347
+ }
348
+ return matches;
349
+ }
350
+ /**
351
+ * Find line and column for a position in content
352
+ */
353
+ findLocation(content, position) {
354
+ const before = content.substring(0, position);
355
+ const lines = before.split('\n');
356
+ return {
357
+ line: lines.length,
358
+ column: lines[lines.length - 1].length + 1,
359
+ };
360
+ }
361
+ /**
362
+ * Generate unique bug ID
363
+ */
364
+ generateBugId(filePath, type, line) {
365
+ const hash = Buffer.from(`${filePath}:${type}:${line}`).toString('base64').slice(0, 8);
366
+ return `bug-${type}-${hash}`;
367
+ }
368
+ /**
369
+ * Check if bug type is auto-fixable
370
+ */
371
+ isFixable(type) {
372
+ return ['dead-code', 'unused-variable', 'missing-validation'].includes(type);
373
+ }
374
+ /**
375
+ * Check if severity matches minimum requirement
376
+ */
377
+ isSeverityMatch(severity, minSeverity) {
378
+ const order = ['critical', 'high', 'medium', 'low'];
379
+ return order.indexOf(severity) <= order.indexOf(minSeverity);
380
+ }
381
+ /**
382
+ * Extract code snippet around a line
383
+ */
384
+ extractSnippet(lines, targetLine, context) {
385
+ const start = Math.max(0, targetLine - context - 1);
386
+ const end = Math.min(lines.length, targetLine + context);
387
+ return lines
388
+ .slice(start, end)
389
+ .map((line, idx) => {
390
+ const lineNum = start + idx + 1;
391
+ const prefix = lineNum === targetLine ? '>>> ' : ' ';
392
+ return `${prefix}${lineNum}: ${line}`;
393
+ })
394
+ .join('\n');
395
+ }
396
+ /**
397
+ * Get relevant files to scan
398
+ */
399
+ async getRelevantFiles(dirPath, options) {
400
+ const files = [];
401
+ const extensions = ['.ts', '.tsx', '.js', '.jsx', '.vue', '.svelte'];
402
+ async function walk(currentPath) {
403
+ try {
404
+ const entries = await fs.readdir(currentPath, { withFileTypes: true });
405
+ for (const entry of entries) {
406
+ const fullPath = path.join(currentPath, entry.name);
407
+ // Skip node_modules and common exclusions
408
+ if (entry.name === 'node_modules' ||
409
+ entry.name === '.git' ||
410
+ entry.name === 'dist' ||
411
+ entry.name === 'build' ||
412
+ entry.name === '.next' ||
413
+ entry.name === 'coverage') {
414
+ continue;
415
+ }
416
+ // Check exclude patterns
417
+ if (options.excludePatterns?.some(pattern => entry.name.match(pattern))) {
418
+ continue;
419
+ }
420
+ if (entry.isDirectory()) {
421
+ await walk(fullPath);
422
+ }
423
+ else if (entry.isFile()) {
424
+ const ext = path.extname(entry.name);
425
+ if (extensions.includes(ext)) {
426
+ // Check include patterns
427
+ if (!options.includePatterns?.length ||
428
+ options.includePatterns.some(pattern => entry.name.match(pattern))) {
429
+ files.push(fullPath);
430
+ }
431
+ }
432
+ }
433
+ }
434
+ }
435
+ catch (error) {
436
+ // Skip directories we can't read
437
+ }
438
+ }
439
+ await walk(dirPath);
440
+ return files;
441
+ }
442
+ }
443
+ //# sourceMappingURL=bug-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bug-detector.js","sourceRoot":"","sources":["../../../../src/services/optimization/detectors/bug-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Code Smell Detector
3
+ *
4
+ * Detects code smells including:
5
+ * - Long functions (>50 lines)
6
+ * - Deep nesting (>4 levels)
7
+ * - Magic numbers
8
+ * - God objects
9
+ * - Feature envy
10
+ * - Inappropriate intimacy
11
+ * - Duplicated code
12
+ */
13
+ import type { CodeSmell, CodeSmellType, DetectionOptions, Severity } from '../optimization.types.js';
14
+ /**
15
+ * Code Smell Detector Service
16
+ */
17
+ export declare class CodeSmellDetector {
18
+ private readonly logger;
19
+ private readonly fileContents;
20
+ private readonly hashes;
21
+ constructor();
22
+ /**
23
+ * Detect code smells in a single file
24
+ */
25
+ detectInFile(filePath: string, content: string, options?: DetectionOptions): Promise<CodeSmell[]>;
26
+ /**
27
+ * Detect code smells across all files in a directory
28
+ */
29
+ detectInDirectory(dirPath: string, options?: DetectionOptions): Promise<CodeSmell[]>;
30
+ /**
31
+ * Get prioritized list of code smells
32
+ */
33
+ prioritizeSmells(smells: CodeSmell[]): CodeSmell[];
34
+ /**
35
+ * Get smells by type
36
+ */
37
+ getSmellsByType(smells: CodeSmell[], type: CodeSmellType): CodeSmell[];
38
+ /**
39
+ * Get smells by severity
40
+ */
41
+ getSmellsBySeverity(smells: CodeSmell[], severity: Severity): CodeSmell[];
42
+ /**
43
+ * Generate statistics summary
44
+ */
45
+ generateSummary(smells: CodeSmell[]): {
46
+ total: number;
47
+ byType: Record<CodeSmellType, number>;
48
+ bySeverity: Record<Severity, number>;
49
+ avgComplexity: number;
50
+ };
51
+ /**
52
+ * Detect long functions
53
+ */
54
+ private detectLongFunctions;
55
+ /**
56
+ * Detect deep nesting
57
+ */
58
+ private detectDeepNesting;
59
+ /**
60
+ * Detect magic numbers
61
+ */
62
+ private detectMagicNumbers;
63
+ /**
64
+ * Detect god objects
65
+ */
66
+ private detectGodObjects;
67
+ /**
68
+ * Detect complex conditions
69
+ */
70
+ private detectComplexConditions;
71
+ /**
72
+ * Detect parameter hell (too many parameters)
73
+ */
74
+ private detectParameterHell;
75
+ /**
76
+ * Detect shotgun surgery (many files need to be modified for one change)
77
+ */
78
+ private detectShotgunSurgery;
79
+ /**
80
+ * Detect duplicated code across files
81
+ */
82
+ private detectDuplicatedCode;
83
+ /**
84
+ * Detect indentation size from file
85
+ */
86
+ private detectIndentSize;
87
+ /**
88
+ * Normalize code for duplicate detection
89
+ */
90
+ private normalizeCode;
91
+ /**
92
+ * Suggest a constant name based on context
93
+ */
94
+ private suggestConstantName;
95
+ /**
96
+ * Generate unique smell ID
97
+ */
98
+ private generateSmellId;
99
+ /**
100
+ * Check if severity matches minimum requirement
101
+ */
102
+ private isSeverityMatch;
103
+ /**
104
+ * Get relevant files to scan
105
+ */
106
+ private getRelevantFiles;
107
+ }
108
+ //# sourceMappingURL=code-smell-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-smell-detector.d.ts","sourceRoot":"","sources":["../../../../src/services/optimization/detectors/code-smell-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAEhB,QAAQ,EACT,MAAM,0BAA0B,CAAC;AAclC;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;;IAMzD;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,EAAE,CAAC;IA6BvB;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,EAAE,CAAC;IA6BvB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAelD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE;IAItE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE;IAIzE;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACtC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,aAAa,EAAE,MAAM,CAAC;KACvB;IAwBD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoE3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;OAEG;YACW,oBAAoB;IA4DlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;YACW,gBAAgB;CAgD/B"}