@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,330 @@
1
+ /**
2
+ * Performance Optimizer
3
+ *
4
+ * Applies performance optimizations including:
5
+ * - Add React.memo where appropriate
6
+ * - Wrap callbacks in useCallback
7
+ * - Memoize expensive calculations
8
+ * - Suggest code splitting points
9
+ * - Recommend lazy loading
10
+ * - Database query optimization suggestions
11
+ */
12
+ import * as crypto from 'node:crypto';
13
+ import * as fs from 'node:fs/promises';
14
+ import * as path from 'node:path';
15
+ import { createLogger } from '../../../shared/utils/logger.js';
16
+ /**
17
+ * Performance Optimizer Service
18
+ */
19
+ export class PerfOptimizer {
20
+ logger;
21
+ constructor() {
22
+ this.logger = createLogger('PerfOptimizer');
23
+ }
24
+ /**
25
+ * Optimize performance issues in a file
26
+ */
27
+ async optimizeFile(filePath, content) {
28
+ const appliedOptimizations = [];
29
+ const suggestions = [];
30
+ const errors = [];
31
+ let optimizedContent = content;
32
+ // Detect if this is a React component
33
+ const isReactFile = this.isReactFile(filePath, content);
34
+ if (isReactFile) {
35
+ // Apply React-specific optimizations
36
+ const memoResult = this.addReactMemo(filePath, content);
37
+ if (memoResult) {
38
+ optimizedContent = memoResult.content;
39
+ appliedOptimizations.push(memoResult.optimization);
40
+ }
41
+ const callbackResult = this.addUseCallback(filePath, optimizedContent);
42
+ if (callbackResult) {
43
+ optimizedContent = callbackResult.content;
44
+ appliedOptimizations.push(callbackResult.optimization);
45
+ }
46
+ const useMemoResult = this.addUseMemo(filePath, optimizedContent);
47
+ if (useMemoResult) {
48
+ optimizedContent = useMemoResult.content;
49
+ appliedOptimizations.push(useMemoResult.optimization);
50
+ }
51
+ }
52
+ // General performance optimizations
53
+ const lazyResult = this.addLazyImport(filePath, optimizedContent);
54
+ if (lazyResult) {
55
+ optimizedContent = lazyResult.content;
56
+ if (lazyResult.autoApplied) {
57
+ appliedOptimizations.push(lazyResult.optimization);
58
+ }
59
+ else {
60
+ suggestions.push(lazyResult.suggestion);
61
+ }
62
+ }
63
+ return {
64
+ optimizedContent,
65
+ appliedOptimizations,
66
+ suggestions,
67
+ errors,
68
+ };
69
+ }
70
+ /**
71
+ * Add React.memo to components
72
+ */
73
+ addReactMemo(filePath, content) {
74
+ // Find component definitions that could benefit from memo
75
+ const pattern = /export\s+(?:const|function)\s+(\w+)\s*(?:<[^>]+>)?\s*\([^)]*\)\s*{[\s\S]{200,}/g;
76
+ const matches = Array.from(content.matchAll(pattern));
77
+ if (matches.length === 0) {
78
+ return null;
79
+ }
80
+ let optimized = content;
81
+ let modifications = 0;
82
+ for (const match of matches) {
83
+ const componentName = match[1];
84
+ const fullMatch = match[0];
85
+ // Skip if already wrapped in memo
86
+ if (content.includes(`${componentName})`) || content.includes('memo(')) {
87
+ continue;
88
+ }
89
+ // Check if component receives props and has substantial body
90
+ if (fullMatch.includes('props') && fullMatch.length > 300) {
91
+ const exportMatch = fullMatch.match(/export\s+(const|function)/);
92
+ if (exportMatch) {
93
+ const replacement = fullMatch.replace(/export\s+(const|function)\s+(\w+)/, `const $2 = React.memo(` + (exportMatch[1] === 'const' ? '$2' : 'function $2'));
94
+ // Add closing parenthesis and wrap
95
+ const optimizedComponent = `export ${replacement});`;
96
+ optimized = optimized.replace(fullMatch, optimizedComponent);
97
+ modifications++;
98
+ if (modifications > 2) {
99
+ // Don't over-optimize
100
+ break;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ if (modifications === 0) {
106
+ return null;
107
+ }
108
+ return {
109
+ content: optimized,
110
+ optimization: {
111
+ id: this.generateOptId(),
112
+ type: 'performance',
113
+ description: `Added React.memo to ${modifications} component(s)`,
114
+ modifiedFiles: [path.relative(process.cwd(), filePath)],
115
+ originalCode: content.slice(0, 200),
116
+ fixedCode: optimized.slice(0, 200),
117
+ location: { filePath, line: 1 },
118
+ },
119
+ };
120
+ }
121
+ /**
122
+ * Add useCallback to callback functions
123
+ */
124
+ addUseCallback(filePath, content) {
125
+ // Find inline functions in JSX that could be wrapped
126
+ const pattern = /(?:onClick|onChange|onSubmit|on[A-Z]\w+)=\s*{\s*\(\)\s*=>/g;
127
+ const matches = Array.from(content.matchAll(pattern));
128
+ if (matches.length < 2) {
129
+ return null; // Not worth it for single usage
130
+ }
131
+ // Group by callback type to see if same callback is used multiple times
132
+ const callbackGroups = new Map();
133
+ for (const match of matches) {
134
+ const callbackType = match[0].match(/(on\w+)/)?.[1] || 'unknown';
135
+ if (!callbackGroups.has(callbackType)) {
136
+ callbackGroups.set(callbackType, []);
137
+ }
138
+ callbackGroups.get(callbackType).push(match.index);
139
+ }
140
+ // Find callbacks used 3+ times
141
+ const frequentCallbacks = Array.from(callbackGroups.entries())
142
+ .filter(([_, indices]) => indices.length >= 3)
143
+ .map(([type, _]) => type);
144
+ if (frequentCallbacks.length === 0) {
145
+ return null;
146
+ }
147
+ // Suggest adding useCallback (can't auto-apply safely without AST)
148
+ const suggestions = frequentCallbacks.map(cb => ` const handle${cb.charAt(2).toUpperCase() + cb.slice(3)} = useCallback(() => {`);
149
+ return {
150
+ content,
151
+ optimization: {
152
+ id: this.generateOptId(),
153
+ type: 'performance',
154
+ description: `Identified ${frequentCallbacks.length} callback(s) that should use useCallback`,
155
+ modifiedFiles: [path.relative(process.cwd(), filePath)],
156
+ originalCode: '',
157
+ fixedCode: suggestions.join('\n'),
158
+ location: { filePath, line: 1 },
159
+ },
160
+ };
161
+ }
162
+ /**
163
+ * Add useMemo to expensive calculations
164
+ */
165
+ addUseMemo(filePath, content) {
166
+ // Find expensive operations: sort, filter, reduce on arrays in component body
167
+ const patterns = [
168
+ /const\s+\w+\s*=\s*\w+\.sort\s*\(/g,
169
+ /const\s+\w+\s*=\s*\w+\.filter\s*\([^)]+\)\.sort\s*\(/g,
170
+ /const\s+\w+\s*=\s*\w+\.filter\s*\([^)]+\)\.filter\s*\(/g,
171
+ /const\s+\w+\s*=\s*\w+\.map\s*\([^)]+\)\.filter\s*\(/g,
172
+ /Object\.keys\s*\([^)]+\)\.map/g,
173
+ /Object\.values\s*\([^)]+\)\.map/g,
174
+ /Object\.entries\s*\([^)]+\)\.map/g,
175
+ ];
176
+ let matchCount = 0;
177
+ let totalMatches = 0;
178
+ for (const pattern of patterns) {
179
+ const matches = content.match(pattern);
180
+ if (matches) {
181
+ totalMatches += matches.length;
182
+ matchCount++;
183
+ }
184
+ }
185
+ if (totalMatches < 2) {
186
+ return null;
187
+ }
188
+ return {
189
+ content,
190
+ optimization: {
191
+ id: this.generateOptId(),
192
+ type: 'performance',
193
+ description: `Found ${totalMatches} expensive calculation(s) that should use useMemo`,
194
+ modifiedFiles: [path.relative(process.cwd(), filePath)],
195
+ originalCode: '',
196
+ fixedCode: `const memoizedValue = useMemo(() => {
197
+ return expensiveCalculation(data);
198
+ }, [data]);`,
199
+ location: { filePath, line: 1 },
200
+ },
201
+ };
202
+ }
203
+ /**
204
+ * Add lazy import for code splitting
205
+ */
206
+ addLazyImport(filePath, content) {
207
+ // Find imports that could be lazy-loaded
208
+ const largeLibraries = [
209
+ 'chart.js',
210
+ 'react-chartjs-2',
211
+ '@monaco-editor/react',
212
+ 'react-quill',
213
+ 'react-markdown',
214
+ 'react-player',
215
+ 'react-pdf',
216
+ 'draft-js',
217
+ 'slate',
218
+ 'd3',
219
+ 'three',
220
+ '@react-three/fiber',
221
+ '@react-three/drei',
222
+ ];
223
+ let lazyCandidate = null;
224
+ const lines = content.split('\n');
225
+ for (let i = 0; i < lines.length; i++) {
226
+ const line = lines[i];
227
+ for (const lib of largeLibraries) {
228
+ if (line.includes(`from '${lib}'`) || line.includes(`from "${lib}"`)) {
229
+ lazyCandidate = {
230
+ name: lib,
231
+ line: i + 1,
232
+ importStatement: line.trim(),
233
+ };
234
+ break;
235
+ }
236
+ }
237
+ if (lazyCandidate)
238
+ break;
239
+ }
240
+ if (!lazyCandidate) {
241
+ return null;
242
+ }
243
+ // Check if already lazy
244
+ if (content.includes('lazy(') || content.includes('Suspense')) {
245
+ return null;
246
+ }
247
+ // Can't auto-apply safely (need to add Suspense boundary)
248
+ return {
249
+ content,
250
+ optimization: {
251
+ id: this.generateOptId(),
252
+ type: 'performance',
253
+ description: `Library '${lazyCandidate.name}' could be lazy-loaded`,
254
+ modifiedFiles: [path.relative(process.cwd(), filePath)],
255
+ originalCode: lazyCandidate.importStatement,
256
+ fixedCode: `const ${lazyCandidate.name.replace(/[^a-zA-Z]/g, '')} = lazy(() => import('${lazyCandidate.name}'));`,
257
+ location: { filePath, line: lazyCandidate.line },
258
+ },
259
+ autoApplied: false,
260
+ suggestion: `Consider lazy-loading '${lazyCandidate.name}' to reduce initial bundle size. Add Suspense boundary where component is used.`,
261
+ };
262
+ }
263
+ /**
264
+ * Suggest database query optimizations
265
+ */
266
+ suggestQueryOptimizations(content) {
267
+ const suggestions = [];
268
+ // Check for N+1 patterns
269
+ if (content.includes('findMany(') && content.includes('for (')) {
270
+ suggestions.push('Possible N+1 query detected. Use include/join for eager loading instead of querying in loops.');
271
+ }
272
+ // Check for SELECT *
273
+ if (content.includes('SELECT *')) {
274
+ suggestions.push('SELECT * retrieves all columns. Specify only needed columns to reduce data transfer.');
275
+ }
276
+ // Check for missing pagination
277
+ if (content.includes('findMany(') && !content.includes('take') && !content.includes('skip')) {
278
+ suggestions.push('Consider adding pagination to large queries using take/skip parameters.');
279
+ }
280
+ // Check for missing indexes hints
281
+ if (content.includes('.where(') && !content.includes('index')) {
282
+ suggestions.push('Ensure database indexes exist for frequently queried columns in .where() clauses.');
283
+ }
284
+ return suggestions;
285
+ }
286
+ /**
287
+ * Check if file is a React component
288
+ */
289
+ isReactFile(filePath, content) {
290
+ const ext = path.extname(filePath);
291
+ const isReactExt = ['.tsx', '.jsx'].includes(ext);
292
+ const hasReactImports = content.includes("from 'react'") ||
293
+ content.includes('from "react"') ||
294
+ content.includes("from 'react/") ||
295
+ content.includes('from "react/') ||
296
+ content.includes('React.') ||
297
+ content.includes('JSX.');
298
+ return isReactExt || hasReactImports;
299
+ }
300
+ /**
301
+ * Generate unique optimization ID
302
+ */
303
+ generateOptId() {
304
+ return `opt-perf-${crypto.randomBytes(4).toString('hex')}`;
305
+ }
306
+ /**
307
+ * Apply optimizations to a file
308
+ */
309
+ async applyOptimizations(filePath, optimizations, dryRun = false) {
310
+ const errors = [];
311
+ try {
312
+ const content = await fs.readFile(filePath, 'utf-8');
313
+ const { optimizedContent } = await this.optimizeFile(filePath, content);
314
+ if (!dryRun && optimizedContent !== content) {
315
+ await fs.writeFile(filePath, optimizedContent, 'utf-8');
316
+ this.logger.info(`Applied performance optimizations to ${filePath}`);
317
+ }
318
+ return { success: true, errors };
319
+ }
320
+ catch (error) {
321
+ errors.push({
322
+ target: filePath,
323
+ message: error instanceof Error ? error.message : String(error),
324
+ fatal: true,
325
+ });
326
+ return { success: false, errors };
327
+ }
328
+ }
329
+ }
330
+ //# sourceMappingURL=perf-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perf-optimizer.js","sourceRoot":"","sources":["../../../../src/services/optimization/optimizers/perf-optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Refactoring Optimizer
3
+ *
4
+ * Applies refactoring optimizations including:
5
+ * - Extract functions/methods
6
+ * - Rename for clarity
7
+ * - Remove duplication
8
+ * - Simplify complex logic
9
+ * - Improve structure
10
+ */
11
+ import type { AppliedOptimization, Location, OptimizationError } from '../optimization.types.js';
12
+ /**
13
+ * Refactoring suggestion
14
+ */
15
+ interface RefactoringSuggestion {
16
+ type: string;
17
+ description: string;
18
+ originalCode: string;
19
+ suggestedCode: string;
20
+ location: Location;
21
+ autoApplicable: boolean;
22
+ }
23
+ /**
24
+ * Refactoring Optimizer Service
25
+ */
26
+ export declare class RefactOptimizer {
27
+ private readonly logger;
28
+ constructor();
29
+ /**
30
+ * Analyze and suggest refactorings for a file
31
+ */
32
+ analyzeFile(filePath: string, content: string): Promise<{
33
+ suggestions: RefactoringSuggestion[];
34
+ autoApplicable: RefactoringSuggestion[];
35
+ }>;
36
+ /**
37
+ * Apply auto-applicable refactorings
38
+ */
39
+ applyRefactorings(filePath: string, refactorings: RefactoringSuggestion[], dryRun?: boolean, createBackup?: boolean): Promise<{
40
+ success: boolean;
41
+ appliedRefactorings: AppliedOptimization[];
42
+ errors: OptimizationError[];
43
+ }>;
44
+ /**
45
+ * Detect long methods that should be broken down
46
+ */
47
+ private detectLongMethods;
48
+ /**
49
+ * Detect duplicate code blocks
50
+ */
51
+ private detectDuplicateCode;
52
+ /**
53
+ * Detect poorly named variables/functions
54
+ */
55
+ private detectPoorNaming;
56
+ /**
57
+ * Detect large classes (God Objects)
58
+ */
59
+ private detectLargeClasses;
60
+ /**
61
+ * Detect feature envy - methods that use another class's data more than their own
62
+ */
63
+ private detectFeatureEnvy;
64
+ /**
65
+ * Detect inappropriate intimacy - classes too familiar with each other's internals
66
+ */
67
+ private detectInappropriateIntimacy;
68
+ /**
69
+ * Create backup of a file
70
+ */
71
+ private createBackup;
72
+ /**
73
+ * Simple hash function for duplicate detection
74
+ */
75
+ private simpleHash;
76
+ /**
77
+ * Generate unique refactoring ID
78
+ */
79
+ private generateRefactorId;
80
+ }
81
+ export {};
82
+ //# sourceMappingURL=refact-optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refact-optimizer.d.ts","sourceRoot":"","sources":["../../../../src/services/optimization/optimizers/refact-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EACV,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;IAMhC;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5D,WAAW,EAAE,qBAAqB,EAAE,CAAC;QACrC,cAAc,EAAE,qBAAqB,EAAE,CAAC;KACzC,CAAC;IAsBF;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,qBAAqB,EAAE,EACrC,MAAM,GAAE,OAAe,EACvB,YAAY,GAAE,OAAc,GAC3B,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;QAC3C,MAAM,EAAE,iBAAiB,EAAE,CAAC;KAC7B,CAAC;IAoDF;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqEzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsC1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2CzB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA+BnC;;OAEG;YACW,YAAY;IAa1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAG3B"}