@oalacea/daemon 0.6.4 → 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 (285) 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/optimize.command.d.ts +110 -0
  19. package/dist/cli/commands/optimize.command.d.ts.map +1 -0
  20. package/dist/cli/commands/optimize.command.js +497 -0
  21. package/dist/cli/commands/optimize.command.js.map +1 -0
  22. package/dist/cli/commands/report.command.d.ts +110 -0
  23. package/dist/cli/commands/report.command.d.ts.map +1 -0
  24. package/dist/cli/commands/report.command.js +532 -0
  25. package/dist/cli/commands/report.command.js.map +1 -0
  26. package/dist/cli/commands/review.command.d.ts +110 -0
  27. package/dist/cli/commands/review.command.d.ts.map +1 -0
  28. package/dist/cli/commands/review.command.js +520 -0
  29. package/dist/cli/commands/review.command.js.map +1 -0
  30. package/dist/cli/commands/score.command.d.ts +47 -0
  31. package/dist/cli/commands/score.command.d.ts.map +1 -0
  32. package/dist/cli/commands/score.command.js +261 -0
  33. package/dist/cli/commands/score.command.js.map +1 -0
  34. package/dist/cli/utils/index.d.ts +10 -0
  35. package/dist/cli/utils/index.d.ts.map +1 -0
  36. package/dist/cli/utils/index.js +10 -0
  37. package/dist/cli/utils/index.js.map +1 -0
  38. package/dist/cli/utils/output.d.ts +192 -0
  39. package/dist/cli/utils/output.d.ts.map +1 -0
  40. package/dist/cli/utils/output.js +411 -0
  41. package/dist/cli/utils/output.js.map +1 -0
  42. package/dist/cli/utils/progress.d.ts +204 -0
  43. package/dist/cli/utils/progress.d.ts.map +1 -0
  44. package/dist/cli/utils/progress.js +396 -0
  45. package/dist/cli/utils/progress.js.map +1 -0
  46. package/dist/core/types/index.d.ts +1 -0
  47. package/dist/core/types/index.d.ts.map +1 -1
  48. package/dist/core/types/project.types.d.ts +3 -3
  49. package/dist/core/types/project.types.d.ts.map +1 -1
  50. package/dist/core/types/scoring.types.d.ts +301 -0
  51. package/dist/core/types/scoring.types.d.ts.map +1 -0
  52. package/dist/core/types/scoring.types.js +8 -0
  53. package/dist/core/types/scoring.types.js.map +1 -0
  54. package/dist/services/detection/framework-detector.d.ts.map +1 -1
  55. package/dist/services/detection/framework-detector.js +74 -5
  56. package/dist/services/detection/framework-detector.js.map +1 -1
  57. package/dist/services/index.d.ts +12 -0
  58. package/dist/services/index.d.ts.map +1 -1
  59. package/dist/services/index.js +14 -0
  60. package/dist/services/index.js.map +1 -1
  61. package/dist/services/optimization/detectors/bug-detector.d.ts +82 -0
  62. package/dist/services/optimization/detectors/bug-detector.d.ts.map +1 -0
  63. package/dist/services/optimization/detectors/bug-detector.js +443 -0
  64. package/dist/services/optimization/detectors/bug-detector.js.map +1 -0
  65. package/dist/services/optimization/detectors/code-smell-detector.d.ts +108 -0
  66. package/dist/services/optimization/detectors/code-smell-detector.d.ts.map +1 -0
  67. package/dist/services/optimization/detectors/code-smell-detector.js +569 -0
  68. package/dist/services/optimization/detectors/code-smell-detector.js.map +1 -0
  69. package/dist/services/optimization/detectors/index.d.ts +7 -0
  70. package/dist/services/optimization/detectors/index.d.ts.map +1 -0
  71. package/dist/services/optimization/detectors/index.js +7 -0
  72. package/dist/services/optimization/detectors/index.js.map +1 -0
  73. package/dist/services/optimization/detectors/perf-detector.d.ts +80 -0
  74. package/dist/services/optimization/detectors/perf-detector.d.ts.map +1 -0
  75. package/dist/services/optimization/detectors/perf-detector.js +451 -0
  76. package/dist/services/optimization/detectors/perf-detector.js.map +1 -0
  77. package/dist/services/optimization/index.d.ts +61 -0
  78. package/dist/services/optimization/index.d.ts.map +1 -0
  79. package/dist/services/optimization/index.js +69 -0
  80. package/dist/services/optimization/index.js.map +1 -0
  81. package/dist/services/optimization/optimization.service.d.ts +65 -0
  82. package/dist/services/optimization/optimization.service.d.ts.map +1 -0
  83. package/dist/services/optimization/optimization.service.js +511 -0
  84. package/dist/services/optimization/optimization.service.js.map +1 -0
  85. package/dist/services/optimization/optimization.types.d.ts +343 -0
  86. package/dist/services/optimization/optimization.types.d.ts.map +1 -0
  87. package/dist/services/optimization/optimization.types.js +8 -0
  88. package/dist/services/optimization/optimization.types.js.map +1 -0
  89. package/dist/services/optimization/optimizers/code-optimizer.d.ts +87 -0
  90. package/dist/services/optimization/optimizers/code-optimizer.d.ts.map +1 -0
  91. package/dist/services/optimization/optimizers/code-optimizer.js +436 -0
  92. package/dist/services/optimization/optimizers/code-optimizer.js.map +1 -0
  93. package/dist/services/optimization/optimizers/index.d.ts +7 -0
  94. package/dist/services/optimization/optimizers/index.d.ts.map +1 -0
  95. package/dist/services/optimization/optimizers/index.js +7 -0
  96. package/dist/services/optimization/optimizers/index.js.map +1 -0
  97. package/dist/services/optimization/optimizers/perf-optimizer.d.ts +64 -0
  98. package/dist/services/optimization/optimizers/perf-optimizer.d.ts.map +1 -0
  99. package/dist/services/optimization/optimizers/perf-optimizer.js +330 -0
  100. package/dist/services/optimization/optimizers/perf-optimizer.js.map +1 -0
  101. package/dist/services/optimization/optimizers/refact-optimizer.d.ts +82 -0
  102. package/dist/services/optimization/optimizers/refact-optimizer.d.ts.map +1 -0
  103. package/dist/services/optimization/optimizers/refact-optimizer.js +354 -0
  104. package/dist/services/optimization/optimizers/refact-optimizer.js.map +1 -0
  105. package/dist/services/optimization/patterns/anti-patterns.d.ts +31 -0
  106. package/dist/services/optimization/patterns/anti-patterns.d.ts.map +1 -0
  107. package/dist/services/optimization/patterns/anti-patterns.js +501 -0
  108. package/dist/services/optimization/patterns/anti-patterns.js.map +1 -0
  109. package/dist/services/optimization/patterns/index.d.ts +5 -0
  110. package/dist/services/optimization/patterns/index.d.ts.map +1 -0
  111. package/dist/services/optimization/patterns/index.js +5 -0
  112. package/dist/services/optimization/patterns/index.js.map +1 -0
  113. package/dist/services/reporting/export/chart.exporter.d.ts +59 -0
  114. package/dist/services/reporting/export/chart.exporter.d.ts.map +1 -0
  115. package/dist/services/reporting/export/chart.exporter.js +350 -0
  116. package/dist/services/reporting/export/chart.exporter.js.map +1 -0
  117. package/dist/services/reporting/export/index.d.ts +9 -0
  118. package/dist/services/reporting/export/index.d.ts.map +1 -0
  119. package/dist/services/reporting/export/index.js +10 -0
  120. package/dist/services/reporting/export/index.js.map +1 -0
  121. package/dist/services/reporting/export/pdf.exporter.d.ts +133 -0
  122. package/dist/services/reporting/export/pdf.exporter.d.ts.map +1 -0
  123. package/dist/services/reporting/export/pdf.exporter.js +270 -0
  124. package/dist/services/reporting/export/pdf.exporter.js.map +1 -0
  125. package/dist/services/reporting/history.service.d.ts +93 -0
  126. package/dist/services/reporting/history.service.d.ts.map +1 -0
  127. package/dist/services/reporting/history.service.js +285 -0
  128. package/dist/services/reporting/history.service.js.map +1 -0
  129. package/dist/services/reporting/index.d.ts +15 -0
  130. package/dist/services/reporting/index.d.ts.map +1 -0
  131. package/dist/services/reporting/index.js +16 -0
  132. package/dist/services/reporting/index.js.map +1 -0
  133. package/dist/services/reporting/report.service.d.ts +102 -0
  134. package/dist/services/reporting/report.service.d.ts.map +1 -0
  135. package/dist/services/reporting/report.service.js +240 -0
  136. package/dist/services/reporting/report.service.js.map +1 -0
  137. package/dist/services/reporting/reporting.types.d.ts +329 -0
  138. package/dist/services/reporting/reporting.types.d.ts.map +1 -0
  139. package/dist/services/reporting/reporting.types.js +8 -0
  140. package/dist/services/reporting/reporting.types.js.map +1 -0
  141. package/dist/services/reporting/templates/html.template.d.ts +81 -0
  142. package/dist/services/reporting/templates/html.template.d.ts.map +1 -0
  143. package/dist/services/reporting/templates/html.template.js +741 -0
  144. package/dist/services/reporting/templates/html.template.js.map +1 -0
  145. package/dist/services/reporting/templates/json.template.d.ts +85 -0
  146. package/dist/services/reporting/templates/json.template.d.ts.map +1 -0
  147. package/dist/services/reporting/templates/json.template.js +308 -0
  148. package/dist/services/reporting/templates/json.template.js.map +1 -0
  149. package/dist/services/reporting/templates/markdown.template.d.ts +69 -0
  150. package/dist/services/reporting/templates/markdown.template.d.ts.map +1 -0
  151. package/dist/services/reporting/templates/markdown.template.js +311 -0
  152. package/dist/services/reporting/templates/markdown.template.js.map +1 -0
  153. package/dist/services/reporting/trend-analyzer.d.ts +73 -0
  154. package/dist/services/reporting/trend-analyzer.d.ts.map +1 -0
  155. package/dist/services/reporting/trend-analyzer.js +291 -0
  156. package/dist/services/reporting/trend-analyzer.js.map +1 -0
  157. package/dist/services/review/analyzers/dependency-analyzer.d.ts +87 -0
  158. package/dist/services/review/analyzers/dependency-analyzer.d.ts.map +1 -0
  159. package/dist/services/review/analyzers/dependency-analyzer.js +458 -0
  160. package/dist/services/review/analyzers/dependency-analyzer.js.map +1 -0
  161. package/dist/services/review/analyzers/index.d.ts +13 -0
  162. package/dist/services/review/analyzers/index.d.ts.map +1 -0
  163. package/dist/services/review/analyzers/index.js +13 -0
  164. package/dist/services/review/analyzers/index.js.map +1 -0
  165. package/dist/services/review/analyzers/nestjs-analyzer.d.ts +210 -0
  166. package/dist/services/review/analyzers/nestjs-analyzer.d.ts.map +1 -0
  167. package/dist/services/review/analyzers/nestjs-analyzer.js +571 -0
  168. package/dist/services/review/analyzers/nestjs-analyzer.js.map +1 -0
  169. package/dist/services/review/analyzers/performance-analyzer.d.ts +91 -0
  170. package/dist/services/review/analyzers/performance-analyzer.d.ts.map +1 -0
  171. package/dist/services/review/analyzers/performance-analyzer.js +589 -0
  172. package/dist/services/review/analyzers/performance-analyzer.js.map +1 -0
  173. package/dist/services/review/analyzers/security-analyzer.d.ts +96 -0
  174. package/dist/services/review/analyzers/security-analyzer.d.ts.map +1 -0
  175. package/dist/services/review/analyzers/security-analyzer.js +512 -0
  176. package/dist/services/review/analyzers/security-analyzer.js.map +1 -0
  177. package/dist/services/review/analyzers/static-analyzer.d.ts +90 -0
  178. package/dist/services/review/analyzers/static-analyzer.d.ts.map +1 -0
  179. package/dist/services/review/analyzers/static-analyzer.js +423 -0
  180. package/dist/services/review/analyzers/static-analyzer.js.map +1 -0
  181. package/dist/services/review/fixers/auto-fixer.d.ts +94 -0
  182. package/dist/services/review/fixers/auto-fixer.d.ts.map +1 -0
  183. package/dist/services/review/fixers/auto-fixer.js +404 -0
  184. package/dist/services/review/fixers/auto-fixer.js.map +1 -0
  185. package/dist/services/review/fixers/index.d.ts +11 -0
  186. package/dist/services/review/fixers/index.d.ts.map +1 -0
  187. package/dist/services/review/fixers/index.js +11 -0
  188. package/dist/services/review/fixers/index.js.map +1 -0
  189. package/dist/services/review/fixers/refactor-suggester.d.ts +100 -0
  190. package/dist/services/review/fixers/refactor-suggester.d.ts.map +1 -0
  191. package/dist/services/review/fixers/refactor-suggester.js +555 -0
  192. package/dist/services/review/fixers/refactor-suggester.js.map +1 -0
  193. package/dist/services/review/fixers/test-generator.d.ts +99 -0
  194. package/dist/services/review/fixers/test-generator.d.ts.map +1 -0
  195. package/dist/services/review/fixers/test-generator.js +458 -0
  196. package/dist/services/review/fixers/test-generator.js.map +1 -0
  197. package/dist/services/review/index.d.ts +14 -0
  198. package/dist/services/review/index.d.ts.map +1 -0
  199. package/dist/services/review/index.js +14 -0
  200. package/dist/services/review/index.js.map +1 -0
  201. package/dist/services/review/reporters/fix-reporter.d.ts +67 -0
  202. package/dist/services/review/reporters/fix-reporter.d.ts.map +1 -0
  203. package/dist/services/review/reporters/fix-reporter.js +437 -0
  204. package/dist/services/review/reporters/fix-reporter.js.map +1 -0
  205. package/dist/services/review/reporters/index.d.ts +10 -0
  206. package/dist/services/review/reporters/index.d.ts.map +1 -0
  207. package/dist/services/review/reporters/index.js +10 -0
  208. package/dist/services/review/reporters/index.js.map +1 -0
  209. package/dist/services/review/reporters/score-reporter.d.ts +84 -0
  210. package/dist/services/review/reporters/score-reporter.d.ts.map +1 -0
  211. package/dist/services/review/reporters/score-reporter.js +560 -0
  212. package/dist/services/review/reporters/score-reporter.js.map +1 -0
  213. package/dist/services/review/review.service.d.ts +129 -0
  214. package/dist/services/review/review.service.d.ts.map +1 -0
  215. package/dist/services/review/review.service.js +396 -0
  216. package/dist/services/review/review.service.js.map +1 -0
  217. package/dist/services/review/review.types.d.ts +443 -0
  218. package/dist/services/review/review.types.d.ts.map +1 -0
  219. package/dist/services/review/review.types.js +11 -0
  220. package/dist/services/review/review.types.js.map +1 -0
  221. package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts +53 -0
  222. package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts.map +1 -0
  223. package/dist/services/scoring/dimensions/accessibility.analyzer.js +260 -0
  224. package/dist/services/scoring/dimensions/accessibility.analyzer.js.map +1 -0
  225. package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts +138 -0
  226. package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts.map +1 -0
  227. package/dist/services/scoring/dimensions/backend-logic.analyzer.js +713 -0
  228. package/dist/services/scoring/dimensions/backend-logic.analyzer.js.map +1 -0
  229. package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts +142 -0
  230. package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts.map +1 -0
  231. package/dist/services/scoring/dimensions/business-logic.analyzer.js +747 -0
  232. package/dist/services/scoring/dimensions/business-logic.analyzer.js.map +1 -0
  233. package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts +142 -0
  234. package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts.map +1 -0
  235. package/dist/services/scoring/dimensions/code-quality.analyzer.js +685 -0
  236. package/dist/services/scoring/dimensions/code-quality.analyzer.js.map +1 -0
  237. package/dist/services/scoring/dimensions/index.d.ts +18 -0
  238. package/dist/services/scoring/dimensions/index.d.ts.map +1 -0
  239. package/dist/services/scoring/dimensions/index.js +27 -0
  240. package/dist/services/scoring/dimensions/index.js.map +1 -0
  241. package/dist/services/scoring/dimensions/performance.analyzer.d.ts +125 -0
  242. package/dist/services/scoring/dimensions/performance.analyzer.d.ts.map +1 -0
  243. package/dist/services/scoring/dimensions/performance.analyzer.js +615 -0
  244. package/dist/services/scoring/dimensions/performance.analyzer.js.map +1 -0
  245. package/dist/services/scoring/dimensions/security.analyzer.d.ts +53 -0
  246. package/dist/services/scoring/dimensions/security.analyzer.d.ts.map +1 -0
  247. package/dist/services/scoring/dimensions/security.analyzer.js +327 -0
  248. package/dist/services/scoring/dimensions/security.analyzer.js.map +1 -0
  249. package/dist/services/scoring/dimensions/seo.analyzer.d.ts +77 -0
  250. package/dist/services/scoring/dimensions/seo.analyzer.d.ts.map +1 -0
  251. package/dist/services/scoring/dimensions/seo.analyzer.js +502 -0
  252. package/dist/services/scoring/dimensions/seo.analyzer.js.map +1 -0
  253. package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts +106 -0
  254. package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts.map +1 -0
  255. package/dist/services/scoring/dimensions/test-coverage.analyzer.js +496 -0
  256. package/dist/services/scoring/dimensions/test-coverage.analyzer.js.map +1 -0
  257. package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts +126 -0
  258. package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts.map +1 -0
  259. package/dist/services/scoring/dimensions/ui-ux.analyzer.js +665 -0
  260. package/dist/services/scoring/dimensions/ui-ux.analyzer.js.map +1 -0
  261. package/dist/services/scoring/index.d.ts +10 -0
  262. package/dist/services/scoring/index.d.ts.map +1 -0
  263. package/dist/services/scoring/index.js +10 -0
  264. package/dist/services/scoring/index.js.map +1 -0
  265. package/dist/services/scoring/scoring-service.d.ts +222 -0
  266. package/dist/services/scoring/scoring-service.d.ts.map +1 -0
  267. package/dist/services/scoring/scoring-service.js +636 -0
  268. package/dist/services/scoring/scoring-service.js.map +1 -0
  269. package/package.json +11 -3
  270. package/templates/README.md +183 -0
  271. package/templates/nestjs/controller.spec.ts +203 -0
  272. package/templates/nestjs/e2e/api.e2e-spec.ts +451 -0
  273. package/templates/nestjs/e2e/auth.e2e-spec.ts +533 -0
  274. package/templates/nestjs/fixtures/test-module.ts +311 -0
  275. package/templates/nestjs/guard.spec.ts +314 -0
  276. package/templates/nestjs/interceptor.spec.ts +458 -0
  277. package/templates/nestjs/module.spec.ts +173 -0
  278. package/templates/nestjs/pipe.spec.ts +474 -0
  279. package/templates/nestjs/service.spec.ts +296 -0
  280. package/templates/rust/Cargo.toml +72 -0
  281. package/templates/rust/actix-controller.test.rs +114 -0
  282. package/templates/rust/axum-handler.test.rs +117 -0
  283. package/templates/rust/integration.test.rs +63 -0
  284. package/templates/rust/rocket-route.test.rs +106 -0
  285. package/templates/rust/unit.test.rs +38 -0
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Auto Fixer
3
+ *
4
+ * Application automatique des corrections:
5
+ * - ESLint --fix
6
+ * - Organisation des imports
7
+ * - Refactorings simples
8
+ * - Suppression sécurisée de code mort
9
+ *
10
+ * @module services/review/fixers/auto-fixer
11
+ */
12
+ import { readFile, writeFile } from 'node:fs/promises';
13
+ import { dirname } from 'node:path';
14
+ import { mkdir } from 'node:fs/promises';
15
+ import { DockerManager } from '../../docker/docker-manager.js';
16
+ import { createLogger } from '../../../shared/utils/logger.js';
17
+ /**
18
+ * Correcteur automatique
19
+ */
20
+ export class AutoFixer {
21
+ docker;
22
+ logger;
23
+ appliedFixes = [];
24
+ failedFixes = [];
25
+ constructor(docker) {
26
+ this.docker = docker ?? new DockerManager();
27
+ this.logger = createLogger('AutoFixer');
28
+ }
29
+ /**
30
+ * Applique les corrections automatiques sur une liste d'issues
31
+ *
32
+ * @param issues - Liste des issues à corriger
33
+ * @param projectPath - Chemin du projet
34
+ * @param options - Options de correction
35
+ * @returns Résultat des corrections appliquées
36
+ */
37
+ async applyFixes(issues, projectPath, options = {}) {
38
+ this.appliedFixes = [];
39
+ this.failedFixes = [];
40
+ this.logger.info(`Starting auto-fix for ${issues.length} issues`);
41
+ // Filtrer les issues corrigibles
42
+ const fixableIssues = issues.filter((issue) => {
43
+ if (!issue.fixable)
44
+ return false;
45
+ if (options.maxSeverity && this.compareSeverity(issue.severity, options.maxSeverity) > 0)
46
+ return false;
47
+ if (options.maxEffort && issue.effort > options.maxEffort)
48
+ return false;
49
+ return true;
50
+ });
51
+ this.logger.info(`Found ${fixableIssues.length} auto-fixable issues`);
52
+ // Créer un backup si demandé
53
+ if (options.createBackup && !options.dryRun) {
54
+ await this.createBackup(projectPath);
55
+ }
56
+ // Grouper les issues par type de correction
57
+ const eslintFixes = fixableIssues.filter((i) => i.ruleId?.startsWith('eslint-'));
58
+ const importFixes = fixableIssues.filter((i) => i.description.includes('import') || i.ruleId?.includes('import'));
59
+ const otherFixes = fixableIssues.filter((i) => !eslintFixes.includes(i) && !importFixes.includes(i));
60
+ // Appliquer ESLint --fix pour les issues ESLint
61
+ if (eslintFixes.length > 0) {
62
+ await this.applyEslintFix(eslintFixes, projectPath, options.dryRun);
63
+ }
64
+ // Appliquer les corrections d'imports
65
+ if (importFixes.length > 0) {
66
+ await this.applyImportFixes(importFixes, projectPath, options.dryRun);
67
+ }
68
+ // Appliquer les autres corrections
69
+ for (const issue of otherFixes) {
70
+ await this.applySingleFix(issue, projectPath, options.dryRun);
71
+ }
72
+ this.logger.info(`Applied ${this.appliedFixes.length} fixes, ${this.failedFixes.length} failed`);
73
+ return [...this.appliedFixes, ...this.failedFixes];
74
+ }
75
+ /**
76
+ * Applique ESLint --fix sur les fichiers concernés
77
+ */
78
+ async applyEslintFix(issues, projectPath, dryRun) {
79
+ // Récupérer les fichiers uniques
80
+ const files = [...new Set(issues.map((i) => i.location.file))];
81
+ for (const file of files) {
82
+ const relativePath = file.replace(projectPath, '').replace(/^\//, '');
83
+ const command = `npx eslint --fix '${relativePath}'`;
84
+ const fileIssues = issues.filter((i) => i.location.file === file);
85
+ try {
86
+ const result = await this.docker.exec(command, {
87
+ workingDir: projectPath,
88
+ timeout: 30000,
89
+ });
90
+ if (result.success || result.stdout.includes('fixed')) {
91
+ for (const issue of fileIssues) {
92
+ this.appliedFixes.push({
93
+ issueId: issue.id,
94
+ applied: !dryRun,
95
+ automatic: true,
96
+ description: `Fixed via ESLint --fix: ${issue.description}`,
97
+ filesChanged: [file],
98
+ });
99
+ }
100
+ }
101
+ else {
102
+ for (const issue of fileIssues) {
103
+ this.failedFixes.push({
104
+ issueId: issue.id,
105
+ applied: false,
106
+ automatic: true,
107
+ description: `ESLint fix failed: ${issue.description}`,
108
+ filesChanged: [],
109
+ error: result.stderr,
110
+ });
111
+ }
112
+ }
113
+ }
114
+ catch (error) {
115
+ for (const issue of fileIssues) {
116
+ this.failedFixes.push({
117
+ issueId: issue.id,
118
+ applied: false,
119
+ automatic: true,
120
+ description: `ESLint fix failed: ${issue.description}`,
121
+ filesChanged: [],
122
+ error: error instanceof Error ? error.message : String(error),
123
+ });
124
+ }
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * Applique les corrections d'imports (organisation, suppression)
130
+ */
131
+ async applyImportFixes(issues, projectPath, dryRun) {
132
+ // Grouper par fichier
133
+ const filesMap = new Map();
134
+ for (const issue of issues) {
135
+ const file = issue.location.file;
136
+ if (!filesMap.has(file)) {
137
+ filesMap.set(file, []);
138
+ }
139
+ filesMap.get(file)?.push(issue);
140
+ }
141
+ // Traiter chaque fichier
142
+ for (const [file, fileIssues] of filesMap.entries()) {
143
+ try {
144
+ const content = await readFile(file, 'utf-8');
145
+ // Organiser les imports
146
+ const fixed = await this.organizeImports(content, file);
147
+ // Appliquer les corrections
148
+ if (fixed !== content && !dryRun) {
149
+ await this.ensureDirectoryExists(file);
150
+ await writeFile(file, fixed, 'utf-8');
151
+ }
152
+ for (const issue of fileIssues) {
153
+ this.appliedFixes.push({
154
+ issueId: issue.id,
155
+ applied: !dryRun,
156
+ automatic: true,
157
+ description: `Organized imports in ${file}`,
158
+ filesChanged: [file],
159
+ diff: this.generateDiff(content, fixed),
160
+ });
161
+ }
162
+ }
163
+ catch (error) {
164
+ for (const issue of fileIssues) {
165
+ this.failedFixes.push({
166
+ issueId: issue.id,
167
+ applied: false,
168
+ automatic: true,
169
+ description: `Failed to organize imports`,
170
+ filesChanged: [file],
171
+ error: error instanceof Error ? error.message : String(error),
172
+ });
173
+ }
174
+ }
175
+ }
176
+ }
177
+ /**
178
+ * Applique une correction individuelle
179
+ */
180
+ async applySingleFix(issue, projectPath, dryRun) {
181
+ const { file, line } = issue.location;
182
+ try {
183
+ const content = await readFile(file, 'utf-8');
184
+ const lines = content.split('\n');
185
+ // corrections spécifiques basées sur le type d'issue
186
+ let fixed = content;
187
+ if (issue.ruleId?.includes('console')) {
188
+ // Supprimer les console.log
189
+ fixed = this.removeConsoleLog(content, line);
190
+ }
191
+ else if (issue.ruleId?.includes('prefer-const')) {
192
+ // Changer var en const
193
+ fixed = this.varToConst(content, line);
194
+ }
195
+ else if (issue.ruleId?.includes('eqeqeq')) {
196
+ // Changer == en ===
197
+ fixed = this.equalityToStrict(content, line);
198
+ }
199
+ if (fixed !== content && !dryRun) {
200
+ await this.ensureDirectoryExists(file);
201
+ await writeFile(file, fixed, 'utf-8');
202
+ }
203
+ this.appliedFixes.push({
204
+ issueId: issue.id,
205
+ applied: !dryRun,
206
+ automatic: true,
207
+ description: issue.description,
208
+ filesChanged: [file],
209
+ diff: this.generateDiff(content, fixed),
210
+ });
211
+ }
212
+ catch (error) {
213
+ this.failedFixes.push({
214
+ issueId: issue.id,
215
+ applied: false,
216
+ automatic: true,
217
+ description: issue.description,
218
+ filesChanged: [file],
219
+ error: error instanceof Error ? error.message : String(error),
220
+ });
221
+ }
222
+ }
223
+ /**
224
+ * Organise les imports d'un fichier
225
+ */
226
+ async organizeImports(content, filePath) {
227
+ const lines = content.split('\n');
228
+ const importStatements = [];
229
+ const otherLines = [];
230
+ let inImports = true;
231
+ for (const line of lines) {
232
+ const trimmed = line.trim();
233
+ if (trimmed.startsWith('import ') || trimmed.startsWith('export ')) {
234
+ importStatements.push(line);
235
+ }
236
+ else if (inImports && trimmed.length === 0) {
237
+ // Continuer à collecter les imports
238
+ continue;
239
+ }
240
+ else if (importStatements.length > 0 && !trimmed.startsWith('import')) {
241
+ inImports = false;
242
+ otherLines.push(line);
243
+ }
244
+ else {
245
+ otherLines.push(line);
246
+ }
247
+ }
248
+ // Séparer les imports en groupes
249
+ const externalImports = [];
250
+ const internalImports = [];
251
+ const typeImports = [];
252
+ for (const imp of importStatements) {
253
+ if (imp.includes('type ')) {
254
+ typeImports.push(imp);
255
+ }
256
+ else if (imp.startsWith('import ') && /from\s+['"`][.@/]/.test(imp)) {
257
+ internalImports.push(imp);
258
+ }
259
+ else {
260
+ externalImports.push(imp);
261
+ }
262
+ }
263
+ // Trier alphabétiquement
264
+ externalImports.sort();
265
+ internalImports.sort();
266
+ typeImports.sort();
267
+ // Reconstruire le fichier
268
+ const organized = [];
269
+ if (externalImports.length > 0) {
270
+ organized.push(...externalImports);
271
+ }
272
+ if (internalImports.length > 0) {
273
+ if (externalImports.length > 0)
274
+ organized.push('');
275
+ organized.push(...internalImports);
276
+ }
277
+ if (typeImports.length > 0) {
278
+ if (externalImports.length > 0 || internalImports.length > 0)
279
+ organized.push('');
280
+ organized.push(...typeImports);
281
+ }
282
+ if (organized.length > 0) {
283
+ organized.push('');
284
+ }
285
+ organized.push(...otherLines);
286
+ return organized.join('\n');
287
+ }
288
+ /**
289
+ * Supprime un console.log spécifique
290
+ */
291
+ removeConsoleLog(content, line) {
292
+ const lines = content.split('\n');
293
+ if (line > 0 && line <= lines.length) {
294
+ const targetLine = lines[line - 1] ?? '';
295
+ if (/console\.(log|debug|info|warn|error)/.test(targetLine)) {
296
+ lines.splice(line - 1, 1);
297
+ return lines.join('\n');
298
+ }
299
+ }
300
+ return content;
301
+ }
302
+ /**
303
+ * Convertit var en const
304
+ */
305
+ varToConst(content, line) {
306
+ const lines = content.split('\n');
307
+ if (line > 0 && line <= lines.length) {
308
+ const targetLine = lines[line - 1] ?? '';
309
+ lines[line - 1] = targetLine.replace(/\bvar\b/, 'const');
310
+ return lines.join('\n');
311
+ }
312
+ return content;
313
+ }
314
+ /**
315
+ * Convertit == en ===
316
+ */
317
+ equalityToStrict(content, line) {
318
+ const lines = content.split('\n');
319
+ if (line > 0 && line <= lines.length) {
320
+ const targetLine = lines[line - 1] ?? '';
321
+ lines[line - 1] = targetLine.replace(/([^=!])==([^=])/g, '$1===$2');
322
+ lines[line - 1] = lines[line - 1]?.replace(/([^=!])!=([^=])/g, '$1!==$2');
323
+ return lines.join('\n');
324
+ }
325
+ return content;
326
+ }
327
+ /**
328
+ * Crée un backup du projet
329
+ */
330
+ async createBackup(projectPath) {
331
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
332
+ const backupPath = `${projectPath}.backup-${timestamp}`;
333
+ try {
334
+ const { exec } = await import('node:child_process');
335
+ const { promisify } = await import('node:util');
336
+ const execAsync = promisify(exec);
337
+ await execAsync(`cp -r "${projectPath}" "${backupPath}"`);
338
+ this.logger.info(`Created backup at: ${backupPath}`);
339
+ }
340
+ catch (error) {
341
+ this.logger.warn('Failed to create backup', error);
342
+ }
343
+ }
344
+ /**
345
+ * Génère un diff entre deux contenus
346
+ */
347
+ generateDiff(original, modified) {
348
+ const originalLines = original.split('\n');
349
+ const modifiedLines = modified.split('\n');
350
+ const diffs = [];
351
+ for (let i = 0; i < Math.max(originalLines.length, modifiedLines.length); i++) {
352
+ const orig = originalLines[i];
353
+ const mod = modifiedLines[i];
354
+ if (orig !== mod) {
355
+ if (orig !== undefined) {
356
+ diffs.push(`- ${orig}`);
357
+ }
358
+ if (mod !== undefined) {
359
+ diffs.push(`+ ${mod}`);
360
+ }
361
+ }
362
+ }
363
+ return diffs.join('\n');
364
+ }
365
+ /**
366
+ * Compare les sévérités
367
+ */
368
+ compareSeverity(a, b) {
369
+ const severityOrder = ['critical', 'high', 'medium', 'low', 'info'];
370
+ return severityOrder.indexOf(a) - severityOrder.indexOf(b);
371
+ }
372
+ /**
373
+ * S'assure que le répertoire existe
374
+ */
375
+ async ensureDirectoryExists(filePath) {
376
+ const dir = dirname(filePath);
377
+ try {
378
+ await mkdir(dir, { recursive: true });
379
+ }
380
+ catch {
381
+ // Le répertoire existe peut-être déjà
382
+ }
383
+ }
384
+ /**
385
+ * Retourne les corrections appliquées
386
+ */
387
+ getAppliedFixes() {
388
+ return [...this.appliedFixes];
389
+ }
390
+ /**
391
+ * Retourne les corrections échouées
392
+ */
393
+ getFailedFixes() {
394
+ return [...this.failedFixes];
395
+ }
396
+ /**
397
+ * Réinitialise l'état
398
+ */
399
+ reset() {
400
+ this.appliedFixes = [];
401
+ this.failedFixes = [];
402
+ }
403
+ }
404
+ //# sourceMappingURL=auto-fixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-fixer.js","sourceRoot":"","sources":["../../../../src/services/review/fixers/auto-fixer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Code Fixers
3
+ *
4
+ * Exports all automatic fixers for the review service.
5
+ *
6
+ * @module services/review/fixers
7
+ */
8
+ export { AutoFixer } from './auto-fixer.js';
9
+ export { TestGenerator } from './test-generator.js';
10
+ export { RefactorSuggester } from './refactor-suggester.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/review/fixers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Code Fixers
3
+ *
4
+ * Exports all automatic fixers for the review service.
5
+ *
6
+ * @module services/review/fixers
7
+ */
8
+ export { AutoFixer } from './auto-fixer.js';
9
+ export { TestGenerator } from './test-generator.js';
10
+ export { RefactorSuggester } from './refactor-suggester.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/review/fixers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Refactor Suggester
3
+ *
4
+ * Suggestions de refactoring pour améliorer la qualité du code:
5
+ * - Fractionnement des fonctions longues
6
+ * - Simplification des conditions complexes
7
+ * - Extraction de code dupliqué
8
+ * - Amélioration du nommage
9
+ * - Suggestions priorisées
10
+ *
11
+ * @module services/review/fixers/refactor-suggester
12
+ */
13
+ import type { Suggestion } from '../review.types.js';
14
+ import { DockerManager } from '../../docker/docker-manager.js';
15
+ /**
16
+ * Suggéreur de refactoring
17
+ */
18
+ export declare class RefactorSuggester {
19
+ private readonly docker;
20
+ private readonly logger;
21
+ private suggestionCounter;
22
+ constructor(docker?: DockerManager);
23
+ /**
24
+ * Analyse un projet et génère des suggestions de refactoring
25
+ *
26
+ * @param projectPath - Chemin du projet
27
+ * @param exclude - Patterns à exclure
28
+ * @returns Suggestions de refactoring
29
+ */
30
+ analyze(projectPath: string, exclude?: string[]): Promise<Suggestion[]>;
31
+ /**
32
+ * Analyse un fichier spécifique
33
+ */
34
+ private analyzeFile;
35
+ /**
36
+ * Détecte les fonctions longues
37
+ */
38
+ private detectLongFunctions;
39
+ /**
40
+ * Détecte les conditions complexes
41
+ */
42
+ private detectComplexConditions;
43
+ /**
44
+ * Détecte le code dupliqué
45
+ */
46
+ private detectDuplicates;
47
+ /**
48
+ * Détecte les problèmes de nommage
49
+ */
50
+ private detectNamingIssues;
51
+ /**
52
+ * Détecte les fonctions avec trop de paramètres
53
+ */
54
+ private detectTooManyParameters;
55
+ /**
56
+ * Détecte le code complexe sans commentaires
57
+ */
58
+ private detectUncommentedComplex;
59
+ /**
60
+ * Crée une suggestion pour fonction longue
61
+ */
62
+ private createLongFunctionSuggestion;
63
+ /**
64
+ * Crée une suggestion pour condition complexe
65
+ */
66
+ private createComplexConditionSuggestion;
67
+ /**
68
+ * Crée une suggestion pour code dupliqué
69
+ */
70
+ private createDuplicateSuggestion;
71
+ /**
72
+ * Crée une suggestion pour problème de nommage
73
+ */
74
+ private createNamingSuggestion;
75
+ /**
76
+ * Crée une suggestion pour trop de paramètres
77
+ */
78
+ private createParameterSuggestion;
79
+ /**
80
+ * Crée une suggestion pour manque de commentaires
81
+ */
82
+ private createCommentSuggestion;
83
+ /**
84
+ * Trouve tous les fichiers source
85
+ */
86
+ private findSourceFiles;
87
+ /**
88
+ * Extrait un extrait de code
89
+ */
90
+ private extractCodeSnippet;
91
+ /**
92
+ * Trouve la position ligne/colonne à partir d'un index
93
+ */
94
+ private findPosition;
95
+ /**
96
+ * Génère un ID unique
97
+ */
98
+ private generateId;
99
+ }
100
+ //# sourceMappingURL=refactor-suggester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor-suggester.d.ts","sourceRoot":"","sources":["../../../../src/services/review/fixers/refactor-suggester.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAkC/D;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAK;gBAElB,MAAM,CAAC,EAAE,aAAa;IAKlC;;;;;;OAMG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAuBjF;;OAEG;YACW,WAAW;IAkDzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwD3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuB/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyC1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA4B/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmChC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAmCpC;;OAEG;IACH,OAAO,CAAC,gCAAgC;IA8BxC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkCjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAwCjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiC/B;;OAEG;YACW,eAAe;IAgC7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}