@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.
- package/README.md +268 -58
- package/bin/Dockerfile +158 -16
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +22 -2
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/command.types.d.ts +216 -0
- package/dist/cli/commands/command.types.d.ts.map +1 -0
- package/dist/cli/commands/command.types.js +64 -0
- package/dist/cli/commands/command.types.js.map +1 -0
- package/dist/cli/commands/history.command.d.ts +91 -0
- package/dist/cli/commands/history.command.d.ts.map +1 -0
- package/dist/cli/commands/history.command.js +336 -0
- package/dist/cli/commands/history.command.js.map +1 -0
- package/dist/cli/commands/index.d.ts +14 -3
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +7 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/optimize.command.d.ts +110 -0
- package/dist/cli/commands/optimize.command.d.ts.map +1 -0
- package/dist/cli/commands/optimize.command.js +497 -0
- package/dist/cli/commands/optimize.command.js.map +1 -0
- package/dist/cli/commands/report.command.d.ts +110 -0
- package/dist/cli/commands/report.command.d.ts.map +1 -0
- package/dist/cli/commands/report.command.js +532 -0
- package/dist/cli/commands/report.command.js.map +1 -0
- package/dist/cli/commands/review.command.d.ts +110 -0
- package/dist/cli/commands/review.command.d.ts.map +1 -0
- package/dist/cli/commands/review.command.js +520 -0
- package/dist/cli/commands/review.command.js.map +1 -0
- package/dist/cli/commands/score.command.d.ts +47 -0
- package/dist/cli/commands/score.command.d.ts.map +1 -0
- package/dist/cli/commands/score.command.js +261 -0
- package/dist/cli/commands/score.command.js.map +1 -0
- package/dist/cli/utils/index.d.ts +10 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/index.js +10 -0
- package/dist/cli/utils/index.js.map +1 -0
- package/dist/cli/utils/output.d.ts +192 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +411 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/cli/utils/progress.d.ts +204 -0
- package/dist/cli/utils/progress.d.ts.map +1 -0
- package/dist/cli/utils/progress.js +396 -0
- package/dist/cli/utils/progress.js.map +1 -0
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/project.types.d.ts +3 -3
- package/dist/core/types/project.types.d.ts.map +1 -1
- package/dist/core/types/scoring.types.d.ts +301 -0
- package/dist/core/types/scoring.types.d.ts.map +1 -0
- package/dist/core/types/scoring.types.js +8 -0
- package/dist/core/types/scoring.types.js.map +1 -0
- package/dist/services/detection/framework-detector.d.ts.map +1 -1
- package/dist/services/detection/framework-detector.js +74 -5
- package/dist/services/detection/framework-detector.js.map +1 -1
- package/dist/services/index.d.ts +12 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +14 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/optimization/detectors/bug-detector.d.ts +82 -0
- package/dist/services/optimization/detectors/bug-detector.d.ts.map +1 -0
- package/dist/services/optimization/detectors/bug-detector.js +443 -0
- package/dist/services/optimization/detectors/bug-detector.js.map +1 -0
- package/dist/services/optimization/detectors/code-smell-detector.d.ts +108 -0
- package/dist/services/optimization/detectors/code-smell-detector.d.ts.map +1 -0
- package/dist/services/optimization/detectors/code-smell-detector.js +569 -0
- package/dist/services/optimization/detectors/code-smell-detector.js.map +1 -0
- package/dist/services/optimization/detectors/index.d.ts +7 -0
- package/dist/services/optimization/detectors/index.d.ts.map +1 -0
- package/dist/services/optimization/detectors/index.js +7 -0
- package/dist/services/optimization/detectors/index.js.map +1 -0
- package/dist/services/optimization/detectors/perf-detector.d.ts +80 -0
- package/dist/services/optimization/detectors/perf-detector.d.ts.map +1 -0
- package/dist/services/optimization/detectors/perf-detector.js +451 -0
- package/dist/services/optimization/detectors/perf-detector.js.map +1 -0
- package/dist/services/optimization/index.d.ts +61 -0
- package/dist/services/optimization/index.d.ts.map +1 -0
- package/dist/services/optimization/index.js +69 -0
- package/dist/services/optimization/index.js.map +1 -0
- package/dist/services/optimization/optimization.service.d.ts +65 -0
- package/dist/services/optimization/optimization.service.d.ts.map +1 -0
- package/dist/services/optimization/optimization.service.js +511 -0
- package/dist/services/optimization/optimization.service.js.map +1 -0
- package/dist/services/optimization/optimization.types.d.ts +343 -0
- package/dist/services/optimization/optimization.types.d.ts.map +1 -0
- package/dist/services/optimization/optimization.types.js +8 -0
- package/dist/services/optimization/optimization.types.js.map +1 -0
- package/dist/services/optimization/optimizers/code-optimizer.d.ts +87 -0
- package/dist/services/optimization/optimizers/code-optimizer.d.ts.map +1 -0
- package/dist/services/optimization/optimizers/code-optimizer.js +436 -0
- package/dist/services/optimization/optimizers/code-optimizer.js.map +1 -0
- package/dist/services/optimization/optimizers/index.d.ts +7 -0
- package/dist/services/optimization/optimizers/index.d.ts.map +1 -0
- package/dist/services/optimization/optimizers/index.js +7 -0
- package/dist/services/optimization/optimizers/index.js.map +1 -0
- package/dist/services/optimization/optimizers/perf-optimizer.d.ts +64 -0
- package/dist/services/optimization/optimizers/perf-optimizer.d.ts.map +1 -0
- package/dist/services/optimization/optimizers/perf-optimizer.js +330 -0
- package/dist/services/optimization/optimizers/perf-optimizer.js.map +1 -0
- package/dist/services/optimization/optimizers/refact-optimizer.d.ts +82 -0
- package/dist/services/optimization/optimizers/refact-optimizer.d.ts.map +1 -0
- package/dist/services/optimization/optimizers/refact-optimizer.js +354 -0
- package/dist/services/optimization/optimizers/refact-optimizer.js.map +1 -0
- package/dist/services/optimization/patterns/anti-patterns.d.ts +31 -0
- package/dist/services/optimization/patterns/anti-patterns.d.ts.map +1 -0
- package/dist/services/optimization/patterns/anti-patterns.js +501 -0
- package/dist/services/optimization/patterns/anti-patterns.js.map +1 -0
- package/dist/services/optimization/patterns/index.d.ts +5 -0
- package/dist/services/optimization/patterns/index.d.ts.map +1 -0
- package/dist/services/optimization/patterns/index.js +5 -0
- package/dist/services/optimization/patterns/index.js.map +1 -0
- package/dist/services/reporting/export/chart.exporter.d.ts +59 -0
- package/dist/services/reporting/export/chart.exporter.d.ts.map +1 -0
- package/dist/services/reporting/export/chart.exporter.js +350 -0
- package/dist/services/reporting/export/chart.exporter.js.map +1 -0
- package/dist/services/reporting/export/index.d.ts +9 -0
- package/dist/services/reporting/export/index.d.ts.map +1 -0
- package/dist/services/reporting/export/index.js +10 -0
- package/dist/services/reporting/export/index.js.map +1 -0
- package/dist/services/reporting/export/pdf.exporter.d.ts +133 -0
- package/dist/services/reporting/export/pdf.exporter.d.ts.map +1 -0
- package/dist/services/reporting/export/pdf.exporter.js +270 -0
- package/dist/services/reporting/export/pdf.exporter.js.map +1 -0
- package/dist/services/reporting/history.service.d.ts +93 -0
- package/dist/services/reporting/history.service.d.ts.map +1 -0
- package/dist/services/reporting/history.service.js +285 -0
- package/dist/services/reporting/history.service.js.map +1 -0
- package/dist/services/reporting/index.d.ts +15 -0
- package/dist/services/reporting/index.d.ts.map +1 -0
- package/dist/services/reporting/index.js +16 -0
- package/dist/services/reporting/index.js.map +1 -0
- package/dist/services/reporting/report.service.d.ts +102 -0
- package/dist/services/reporting/report.service.d.ts.map +1 -0
- package/dist/services/reporting/report.service.js +240 -0
- package/dist/services/reporting/report.service.js.map +1 -0
- package/dist/services/reporting/reporting.types.d.ts +329 -0
- package/dist/services/reporting/reporting.types.d.ts.map +1 -0
- package/dist/services/reporting/reporting.types.js +8 -0
- package/dist/services/reporting/reporting.types.js.map +1 -0
- package/dist/services/reporting/templates/html.template.d.ts +81 -0
- package/dist/services/reporting/templates/html.template.d.ts.map +1 -0
- package/dist/services/reporting/templates/html.template.js +741 -0
- package/dist/services/reporting/templates/html.template.js.map +1 -0
- package/dist/services/reporting/templates/json.template.d.ts +85 -0
- package/dist/services/reporting/templates/json.template.d.ts.map +1 -0
- package/dist/services/reporting/templates/json.template.js +308 -0
- package/dist/services/reporting/templates/json.template.js.map +1 -0
- package/dist/services/reporting/templates/markdown.template.d.ts +69 -0
- package/dist/services/reporting/templates/markdown.template.d.ts.map +1 -0
- package/dist/services/reporting/templates/markdown.template.js +311 -0
- package/dist/services/reporting/templates/markdown.template.js.map +1 -0
- package/dist/services/reporting/trend-analyzer.d.ts +73 -0
- package/dist/services/reporting/trend-analyzer.d.ts.map +1 -0
- package/dist/services/reporting/trend-analyzer.js +291 -0
- package/dist/services/reporting/trend-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/dependency-analyzer.d.ts +87 -0
- package/dist/services/review/analyzers/dependency-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/dependency-analyzer.js +458 -0
- package/dist/services/review/analyzers/dependency-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/index.d.ts +13 -0
- package/dist/services/review/analyzers/index.d.ts.map +1 -0
- package/dist/services/review/analyzers/index.js +13 -0
- package/dist/services/review/analyzers/index.js.map +1 -0
- package/dist/services/review/analyzers/nestjs-analyzer.d.ts +210 -0
- package/dist/services/review/analyzers/nestjs-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/nestjs-analyzer.js +571 -0
- package/dist/services/review/analyzers/nestjs-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/performance-analyzer.d.ts +91 -0
- package/dist/services/review/analyzers/performance-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/performance-analyzer.js +589 -0
- package/dist/services/review/analyzers/performance-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/security-analyzer.d.ts +96 -0
- package/dist/services/review/analyzers/security-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/security-analyzer.js +512 -0
- package/dist/services/review/analyzers/security-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/static-analyzer.d.ts +90 -0
- package/dist/services/review/analyzers/static-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/static-analyzer.js +423 -0
- package/dist/services/review/analyzers/static-analyzer.js.map +1 -0
- package/dist/services/review/fixers/auto-fixer.d.ts +94 -0
- package/dist/services/review/fixers/auto-fixer.d.ts.map +1 -0
- package/dist/services/review/fixers/auto-fixer.js +404 -0
- package/dist/services/review/fixers/auto-fixer.js.map +1 -0
- package/dist/services/review/fixers/index.d.ts +11 -0
- package/dist/services/review/fixers/index.d.ts.map +1 -0
- package/dist/services/review/fixers/index.js +11 -0
- package/dist/services/review/fixers/index.js.map +1 -0
- package/dist/services/review/fixers/refactor-suggester.d.ts +100 -0
- package/dist/services/review/fixers/refactor-suggester.d.ts.map +1 -0
- package/dist/services/review/fixers/refactor-suggester.js +555 -0
- package/dist/services/review/fixers/refactor-suggester.js.map +1 -0
- package/dist/services/review/fixers/test-generator.d.ts +99 -0
- package/dist/services/review/fixers/test-generator.d.ts.map +1 -0
- package/dist/services/review/fixers/test-generator.js +458 -0
- package/dist/services/review/fixers/test-generator.js.map +1 -0
- package/dist/services/review/index.d.ts +14 -0
- package/dist/services/review/index.d.ts.map +1 -0
- package/dist/services/review/index.js +14 -0
- package/dist/services/review/index.js.map +1 -0
- package/dist/services/review/reporters/fix-reporter.d.ts +67 -0
- package/dist/services/review/reporters/fix-reporter.d.ts.map +1 -0
- package/dist/services/review/reporters/fix-reporter.js +437 -0
- package/dist/services/review/reporters/fix-reporter.js.map +1 -0
- package/dist/services/review/reporters/index.d.ts +10 -0
- package/dist/services/review/reporters/index.d.ts.map +1 -0
- package/dist/services/review/reporters/index.js +10 -0
- package/dist/services/review/reporters/index.js.map +1 -0
- package/dist/services/review/reporters/score-reporter.d.ts +84 -0
- package/dist/services/review/reporters/score-reporter.d.ts.map +1 -0
- package/dist/services/review/reporters/score-reporter.js +560 -0
- package/dist/services/review/reporters/score-reporter.js.map +1 -0
- package/dist/services/review/review.service.d.ts +129 -0
- package/dist/services/review/review.service.d.ts.map +1 -0
- package/dist/services/review/review.service.js +396 -0
- package/dist/services/review/review.service.js.map +1 -0
- package/dist/services/review/review.types.d.ts +443 -0
- package/dist/services/review/review.types.d.ts.map +1 -0
- package/dist/services/review/review.types.js +11 -0
- package/dist/services/review/review.types.js.map +1 -0
- package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts +53 -0
- package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/accessibility.analyzer.js +260 -0
- package/dist/services/scoring/dimensions/accessibility.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts +138 -0
- package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/backend-logic.analyzer.js +713 -0
- package/dist/services/scoring/dimensions/backend-logic.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts +142 -0
- package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/business-logic.analyzer.js +747 -0
- package/dist/services/scoring/dimensions/business-logic.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts +142 -0
- package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/code-quality.analyzer.js +685 -0
- package/dist/services/scoring/dimensions/code-quality.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/index.d.ts +18 -0
- package/dist/services/scoring/dimensions/index.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/index.js +27 -0
- package/dist/services/scoring/dimensions/index.js.map +1 -0
- package/dist/services/scoring/dimensions/performance.analyzer.d.ts +125 -0
- package/dist/services/scoring/dimensions/performance.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/performance.analyzer.js +615 -0
- package/dist/services/scoring/dimensions/performance.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/security.analyzer.d.ts +53 -0
- package/dist/services/scoring/dimensions/security.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/security.analyzer.js +327 -0
- package/dist/services/scoring/dimensions/security.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/seo.analyzer.d.ts +77 -0
- package/dist/services/scoring/dimensions/seo.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/seo.analyzer.js +502 -0
- package/dist/services/scoring/dimensions/seo.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts +106 -0
- package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/test-coverage.analyzer.js +496 -0
- package/dist/services/scoring/dimensions/test-coverage.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts +126 -0
- package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/ui-ux.analyzer.js +665 -0
- package/dist/services/scoring/dimensions/ui-ux.analyzer.js.map +1 -0
- package/dist/services/scoring/index.d.ts +10 -0
- package/dist/services/scoring/index.d.ts.map +1 -0
- package/dist/services/scoring/index.js +10 -0
- package/dist/services/scoring/index.js.map +1 -0
- package/dist/services/scoring/scoring-service.d.ts +222 -0
- package/dist/services/scoring/scoring-service.d.ts.map +1 -0
- package/dist/services/scoring/scoring-service.js +636 -0
- package/dist/services/scoring/scoring-service.js.map +1 -0
- package/package.json +11 -3
- package/templates/README.md +183 -0
- package/templates/nestjs/controller.spec.ts +203 -0
- package/templates/nestjs/e2e/api.e2e-spec.ts +451 -0
- package/templates/nestjs/e2e/auth.e2e-spec.ts +533 -0
- package/templates/nestjs/fixtures/test-module.ts +311 -0
- package/templates/nestjs/guard.spec.ts +314 -0
- package/templates/nestjs/interceptor.spec.ts +458 -0
- package/templates/nestjs/module.spec.ts +173 -0
- package/templates/nestjs/pipe.spec.ts +474 -0
- package/templates/nestjs/service.spec.ts +296 -0
- package/templates/rust/Cargo.toml +72 -0
- package/templates/rust/actix-controller.test.rs +114 -0
- package/templates/rust/axum-handler.test.rs +117 -0
- package/templates/rust/integration.test.rs +63 -0
- package/templates/rust/rocket-route.test.rs +106 -0
- package/templates/rust/unit.test.rs +38 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects performance issues including:
|
|
5
|
+
* - React issues: missing Memo, improper useCallback/useMemo
|
|
6
|
+
* - Backend: N+1 query patterns
|
|
7
|
+
* - Bundle: large chunks, code-splitting opportunities
|
|
8
|
+
* - Images: unoptimized images
|
|
9
|
+
* - API: missing caching, redundant calls
|
|
10
|
+
* - CSS: unused styles, large CSS
|
|
11
|
+
*/
|
|
12
|
+
import type { DetectionOptions, PerformanceIssue, PerfCategory, Severity } from '../optimization.types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Performance Detector Service
|
|
15
|
+
*/
|
|
16
|
+
export declare class PerfDetector {
|
|
17
|
+
private readonly logger;
|
|
18
|
+
constructor();
|
|
19
|
+
/**
|
|
20
|
+
* Detect performance issues in a single file
|
|
21
|
+
*/
|
|
22
|
+
detectInFile(filePath: string, content: string, options?: DetectionOptions): Promise<PerformanceIssue[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Detect performance issues across all files in a directory
|
|
25
|
+
*/
|
|
26
|
+
detectInDirectory(dirPath: string, options?: DetectionOptions): Promise<PerformanceIssue[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Get prioritized list of performance issues
|
|
29
|
+
*/
|
|
30
|
+
prioritizeIssues(issues: PerformanceIssue[]): PerformanceIssue[];
|
|
31
|
+
/**
|
|
32
|
+
* Get issues by category
|
|
33
|
+
*/
|
|
34
|
+
getIssuesByCategory(issues: PerformanceIssue[], category: PerfCategory): PerformanceIssue[];
|
|
35
|
+
/**
|
|
36
|
+
* Get issues by impact level
|
|
37
|
+
*/
|
|
38
|
+
getIssuesByImpact(issues: PerformanceIssue[], impact: Severity): PerformanceIssue[];
|
|
39
|
+
/**
|
|
40
|
+
* Calculate total potential improvement
|
|
41
|
+
*/
|
|
42
|
+
calculateTotalImprovement(issues: PerformanceIssue[]): {
|
|
43
|
+
estimatedGain: number;
|
|
44
|
+
byCategory: Record<PerfCategory, number>;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Generate statistics summary
|
|
48
|
+
*/
|
|
49
|
+
generateSummary(issues: PerformanceIssue[]): {
|
|
50
|
+
total: number;
|
|
51
|
+
byCategory: Record<PerfCategory, number>;
|
|
52
|
+
byImpact: Record<Severity, number>;
|
|
53
|
+
totalEstimatedGain: number;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Find all regex matches in content with their positions
|
|
57
|
+
*/
|
|
58
|
+
private findAllMatches;
|
|
59
|
+
/**
|
|
60
|
+
* Find line and column for a position in content
|
|
61
|
+
*/
|
|
62
|
+
private findLocation;
|
|
63
|
+
/**
|
|
64
|
+
* Generate unique issue ID
|
|
65
|
+
*/
|
|
66
|
+
private generateIssueId;
|
|
67
|
+
/**
|
|
68
|
+
* Check if severity matches minimum requirement
|
|
69
|
+
*/
|
|
70
|
+
private isSeverityMatch;
|
|
71
|
+
/**
|
|
72
|
+
* Extract metrics from matched text
|
|
73
|
+
*/
|
|
74
|
+
private extractMetrics;
|
|
75
|
+
/**
|
|
76
|
+
* Get relevant files to scan
|
|
77
|
+
*/
|
|
78
|
+
private getRelevantFiles;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=perf-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perf-detector.d.ts","sourceRoot":"","sources":["../../../../src/services/optimization/detectors/perf-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAEhB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACT,MAAM,0BAA0B,CAAC;AAuMlC;;GAEG;AACH,qBAAa,YAAY;IACvB,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,gBAAgB,EAAE,CAAC;IA+C9B;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoB9B;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE;IAiBhE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,EAAE;IAI3F;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,gBAAgB,EAAE;IAInF;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG;QACrD,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;KAC1C;IAgBD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG;QAC3C,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnC,kBAAkB,EAAE,MAAM,CAAC;KAC5B;IAmBD;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;YACW,gBAAgB;CAqD/B"}
|
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects performance issues including:
|
|
5
|
+
* - React issues: missing Memo, improper useCallback/useMemo
|
|
6
|
+
* - Backend: N+1 query patterns
|
|
7
|
+
* - Bundle: large chunks, code-splitting opportunities
|
|
8
|
+
* - Images: unoptimized images
|
|
9
|
+
* - API: missing caching, redundant calls
|
|
10
|
+
* - CSS: unused styles, large CSS
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'node:fs/promises';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
import { createLogger } from '../../../shared/utils/logger.js';
|
|
15
|
+
/** Performance issue patterns */
|
|
16
|
+
const PERF_PATTERNS = {
|
|
17
|
+
'react-rendering': [
|
|
18
|
+
{
|
|
19
|
+
pattern: /export\s+(?:const|function)\s+\w+\s*\([^)]*\)\s*{[\s\S]{300,}(?!\s*return\s*React\.memo|memo\()/gs,
|
|
20
|
+
impact: 'medium',
|
|
21
|
+
description: 'Large component without React.memo - may re-render unnecessarily',
|
|
22
|
+
expectedImprovement: '30-50% fewer re-renders when props unchanged',
|
|
23
|
+
estimatedGain: 40,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
pattern: /const\s+\w+\s*=\s*\(\)\s*=>\s*{[\s\S]{100,}}\s*,\s*\[\s*\]\s*\)/gs,
|
|
27
|
+
impact: 'medium',
|
|
28
|
+
description: 'useCallback with empty deps but large function body - may indicate missing deps',
|
|
29
|
+
expectedImprovement: 'Prevent stale closures and infinite loops',
|
|
30
|
+
estimatedGain: 20,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
pattern: /{\s*(\w+(?:\s*\|\s*\w+)*)\.map\s*\([^)]+\)\s*=>\s*<[^>]+on[A-Z]\w+=\s*{\s*\([^)]*\)\s*=>/gs,
|
|
34
|
+
impact: 'high',
|
|
35
|
+
description: 'Inline function in map causes new function references on each render',
|
|
36
|
+
expectedImprovement: 'Eliminate unnecessary child re-renders',
|
|
37
|
+
estimatedGain: 50,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
pattern: /<(\w+(?:\.\w+)*)(?:\s+[^>]*?)?\s*key=\{\s*\w+\s*\+\s*\d+\s*\}/gs,
|
|
41
|
+
impact: 'high',
|
|
42
|
+
description: 'Using index as key prevents efficient reconciliation',
|
|
43
|
+
expectedImprovement: 'Proper diffing and reordering of list items',
|
|
44
|
+
estimatedGain: 60,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
pattern: /useState\s*\(\s*\[\s*\]/s,
|
|
48
|
+
impact: 'low',
|
|
49
|
+
description: 'Array initialized with [] may cause issues if mutated directly',
|
|
50
|
+
expectedImprovement: 'Prevent reference equality issues',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
'api-efficiency': [
|
|
54
|
+
{
|
|
55
|
+
pattern: /for\s*(?:await|)?\s*\(\s*const\s+\w+\s+of\s+\w+\s*\)\s*{[\s\S]*?(?:fetch\(|axios|\.get\(|\.post\()/gs,
|
|
56
|
+
impact: 'high',
|
|
57
|
+
description: 'Sequential API calls in loop - could be parallelized',
|
|
58
|
+
expectedImprovement: '70-90% faster with Promise.all()',
|
|
59
|
+
estimatedGain: 80,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
pattern: /await\s+(?:fetch|axios\.|http\.)(?:get|post|put|delete)\([\s\S]{0,500}\)\s*;\s*await\s+(?:fetch|axios\.|http\.)(?:get|post|put|delete)\(/gs,
|
|
63
|
+
impact: 'medium',
|
|
64
|
+
description: 'Sequential independent API calls - could be parallelized',
|
|
65
|
+
expectedImprovement: '40-50% faster with parallel requests',
|
|
66
|
+
estimatedGain: 45,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
pattern: /fetch\s*\([^)]+\)\s*(?!.*(?:cache|Cache-Control))/gs,
|
|
70
|
+
impact: 'medium',
|
|
71
|
+
description: 'Fetch without cache headers may cause redundant requests',
|
|
72
|
+
expectedImprovement: 'Reduce network traffic and improve load times',
|
|
73
|
+
estimatedGain: 30,
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
'database-queries': [
|
|
77
|
+
{
|
|
78
|
+
pattern: /for\s*(?:await|)?\s*\(\s*const\s+\w+\s+of\s+\w+\s*\)\s*{[\s\S]{0,200}(?:db\.|prisma\.|sequelize\.|mongoose\.| knex\()(?:find|query|select|exec)/gs,
|
|
79
|
+
impact: 'critical',
|
|
80
|
+
description: 'N+1 query pattern - querying database inside loop',
|
|
81
|
+
expectedImprovement: '90-99% reduction in database queries',
|
|
82
|
+
estimatedGain: 95,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
pattern: /findMany\s*\([^)]*\)\s*;\s*(?:for|while)\s*[\s\S]{0,200}findUnique\s*\(/gs,
|
|
86
|
+
impact: 'critical',
|
|
87
|
+
description: 'N+1 query with Prisma - related data fetched in loop',
|
|
88
|
+
expectedImprovement: 'Use include/join for eager loading',
|
|
89
|
+
estimatedGain: 95,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
pattern: /\.find\s*\(\s*{\s*[^}]*}\s*\)\s*\.populate\s*\(/gs,
|
|
93
|
+
impact: 'medium',
|
|
94
|
+
description: 'Multiple populate calls may indicate missing eager load',
|
|
95
|
+
expectedImprovement: 'Single query with multiple populates',
|
|
96
|
+
estimatedGain: 50,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
pattern: /SELECT\s+\*\s+FROM/gis,
|
|
100
|
+
impact: 'medium',
|
|
101
|
+
description: 'SELECT * retrieves all columns - specify only needed columns',
|
|
102
|
+
expectedImprovement: '20-40% less data transferred',
|
|
103
|
+
estimatedGain: 30,
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
'bundle-size': [
|
|
107
|
+
{
|
|
108
|
+
pattern: /import\s+{[^}]+}\s+from\s+['"](?:lodash|moment|@material-ui|@mui|react-bootstrap)['"]/gs,
|
|
109
|
+
impact: 'high',
|
|
110
|
+
description: 'Full library import - use tree-shakeable imports',
|
|
111
|
+
expectedImprovement: '50-200KB reduction in bundle size',
|
|
112
|
+
estimatedGain: 100,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
pattern: /import\s+\w+\s+from\s+['"](?:lodash|@material-ui|@mui)['"]/gs,
|
|
116
|
+
impact: 'high',
|
|
117
|
+
description: 'Default import prevents tree-shaking',
|
|
118
|
+
expectedImprovement: 'Enable tree-shaking with named imports',
|
|
119
|
+
estimatedGain: 80,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
pattern: /import\s+{[^}]+}\s+from\s+['"]\.\.?\/[^'"]+['"]\s*;(?![\s\S]{0,1000}?lazy|Suspense)/gs,
|
|
123
|
+
impact: 'low',
|
|
124
|
+
description: 'Large component could be code-split with lazy loading',
|
|
125
|
+
expectedImprovement: 'Reduce initial bundle size',
|
|
126
|
+
estimatedGain: 15,
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
'asset-optimization': [
|
|
130
|
+
{
|
|
131
|
+
pattern: /<(?:img|Image)\s+[^>]*src=\s*['"][^'"]*\.(?:png|jpg|jpeg|gif)['"][^>]*(?!\s*width\s*=|\s*height\s*=)/gs,
|
|
132
|
+
impact: 'medium',
|
|
133
|
+
description: 'Image without width/height causes layout shift',
|
|
134
|
+
expectedImprovement: 'Better CLS score and user experience',
|
|
135
|
+
estimatedGain: 25,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
pattern: /<(?:img|Image)\s+[^>]*src=\s*['"][^'"]*(?!\.webp|\.avif)(?:\.png|\.jpg|\.jpeg)['"]/gs,
|
|
139
|
+
impact: 'low',
|
|
140
|
+
description: 'Could use modern image formats (WebP/AVIF) for better compression',
|
|
141
|
+
expectedImprovement: '20-50% smaller image files',
|
|
142
|
+
estimatedGain: 35,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
pattern: /<(?:img|Image)[^>]*src=\s*['"][^'"]*(?!\?auto=format)[^'"]*['"][^>]*(?!\s*loading=\s*['"]lazy['"])/gs,
|
|
146
|
+
impact: 'low',
|
|
147
|
+
description: 'Below-fold image without lazy loading',
|
|
148
|
+
expectedImprovement: 'Faster initial page load',
|
|
149
|
+
estimatedGain: 20,
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
'css-optimization': [
|
|
153
|
+
{
|
|
154
|
+
pattern: /style=\s*{[^}]*backgroundColor:\s*[^}'\s]+[^}]*}/gs,
|
|
155
|
+
impact: 'low',
|
|
156
|
+
description: 'Inline styles prevent CSS optimization',
|
|
157
|
+
expectedImprovement: 'Move to CSS class for better caching',
|
|
158
|
+
estimatedGain: 10,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
pattern: /<style[^>]*>[\s\S]{1000,}<\/style>/gs,
|
|
162
|
+
impact: 'medium',
|
|
163
|
+
description: 'Large inline style block - consider CSS modules or external CSS',
|
|
164
|
+
expectedImprovement: 'Better caching and smaller HTML',
|
|
165
|
+
estimatedGain: 20,
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
'memory-usage': [
|
|
169
|
+
{
|
|
170
|
+
pattern: /useState\s*\(\s*(?:new Array\(|Array\(|\[\s*\.\.\.)/gs,
|
|
171
|
+
impact: 'medium',
|
|
172
|
+
description: 'Large array in state may cause memory issues',
|
|
173
|
+
expectedImprovement: 'Consider pagination or virtualization',
|
|
174
|
+
estimatedGain: 40,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
pattern: /useEffect\s*\(\s*\(\)\s*=>\s*{[\s\S]*?const\s+\w+\s*=\s*new\s+(?:Map|Set|WeakMap|WeakSet)/gs,
|
|
178
|
+
impact: 'low',
|
|
179
|
+
description: 'Creating new Map/Set on every render without cleanup',
|
|
180
|
+
expectedImprovement: 'Use useMemo or move outside component',
|
|
181
|
+
estimatedGain: 15,
|
|
182
|
+
},
|
|
183
|
+
],
|
|
184
|
+
'network-requests': [
|
|
185
|
+
{
|
|
186
|
+
pattern: /useEffect\s*\(\s*\(\)\s*=>\s*{[\s\S]{0,500}fetch\([^)]+\)[\s\S]{0,500},\s*\[\s*\]\s*\)/gs,
|
|
187
|
+
impact: 'low',
|
|
188
|
+
description: 'Data fetch on every mount - consider caching',
|
|
189
|
+
expectedImprovement: 'Use React Query or SWR for caching',
|
|
190
|
+
estimatedGain: 50,
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
pattern: /<link\s+[^>]*rel=\s*['"]stylesheet['"][^>]*>(?![\s\S]{0,100}?rel=['"]preload['"])/gs,
|
|
194
|
+
impact: 'medium',
|
|
195
|
+
description: 'Stylesheet could be preloaded for faster rendering',
|
|
196
|
+
expectedImprovement: 'Faster initial render',
|
|
197
|
+
estimatedGain: 15,
|
|
198
|
+
},
|
|
199
|
+
],
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Performance Detector Service
|
|
203
|
+
*/
|
|
204
|
+
export class PerfDetector {
|
|
205
|
+
logger;
|
|
206
|
+
constructor() {
|
|
207
|
+
this.logger = createLogger('PerfDetector');
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Detect performance issues in a single file
|
|
211
|
+
*/
|
|
212
|
+
async detectInFile(filePath, content, options = {}) {
|
|
213
|
+
const issues = [];
|
|
214
|
+
const lines = content.split('\n');
|
|
215
|
+
// Filter by categories if specified
|
|
216
|
+
const categoriesToCheck = options.perfCategories?.length
|
|
217
|
+
? options.perfCategories
|
|
218
|
+
: Object.keys(PERF_PATTERNS);
|
|
219
|
+
for (const category of categoriesToCheck) {
|
|
220
|
+
const patterns = PERF_PATTERNS[category];
|
|
221
|
+
if (!patterns)
|
|
222
|
+
continue;
|
|
223
|
+
for (const { pattern, impact, description, expectedImprovement, estimatedGain } of patterns) {
|
|
224
|
+
const matches = this.findAllMatches(content, pattern);
|
|
225
|
+
for (const match of matches) {
|
|
226
|
+
const location = this.findLocation(content, match.start);
|
|
227
|
+
// Check severity filter
|
|
228
|
+
if (options.minSeverity && !this.isSeverityMatch(impact, options.minSeverity)) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const issue = {
|
|
232
|
+
id: this.generateIssueId(filePath, category, location.line),
|
|
233
|
+
category,
|
|
234
|
+
impact,
|
|
235
|
+
description,
|
|
236
|
+
location: {
|
|
237
|
+
filePath: path.relative(process.cwd(), filePath),
|
|
238
|
+
line: location.line,
|
|
239
|
+
column: location.column,
|
|
240
|
+
},
|
|
241
|
+
currentMetrics: this.extractMetrics(match.text, category),
|
|
242
|
+
expectedImprovement,
|
|
243
|
+
estimatedGain,
|
|
244
|
+
};
|
|
245
|
+
issues.push(issue);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return issues;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Detect performance issues across all files in a directory
|
|
253
|
+
*/
|
|
254
|
+
async detectInDirectory(dirPath, options = {}) {
|
|
255
|
+
const allIssues = [];
|
|
256
|
+
const files = await this.getRelevantFiles(dirPath, options);
|
|
257
|
+
this.logger.info(`Scanning ${files.length} files for performance issues...`);
|
|
258
|
+
for (const filePath of files) {
|
|
259
|
+
try {
|
|
260
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
261
|
+
const issues = await this.detectInFile(filePath, content, options);
|
|
262
|
+
allIssues.push(...issues);
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
this.logger.warn(`Failed to analyze ${filePath}:`, error);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
this.logger.info(`Found ${allIssues.length} performance issues`);
|
|
269
|
+
return allIssues;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get prioritized list of performance issues
|
|
273
|
+
*/
|
|
274
|
+
prioritizeIssues(issues) {
|
|
275
|
+
const impactWeight = { critical: 4, high: 3, medium: 2, low: 1 };
|
|
276
|
+
return issues.sort((a, b) => {
|
|
277
|
+
// First by estimated gain
|
|
278
|
+
if ((a.estimatedGain || 0) !== (b.estimatedGain || 0)) {
|
|
279
|
+
return (b.estimatedGain || 0) - (a.estimatedGain || 0);
|
|
280
|
+
}
|
|
281
|
+
// Then by impact
|
|
282
|
+
const impactDiff = (impactWeight[b.impact] ?? 0) - (impactWeight[a.impact] ?? 0);
|
|
283
|
+
if (impactDiff !== 0)
|
|
284
|
+
return impactDiff;
|
|
285
|
+
return 0;
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Get issues by category
|
|
290
|
+
*/
|
|
291
|
+
getIssuesByCategory(issues, category) {
|
|
292
|
+
return issues.filter(issue => issue.category === category);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get issues by impact level
|
|
296
|
+
*/
|
|
297
|
+
getIssuesByImpact(issues, impact) {
|
|
298
|
+
return issues.filter(issue => issue.impact === impact);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Calculate total potential improvement
|
|
302
|
+
*/
|
|
303
|
+
calculateTotalImprovement(issues) {
|
|
304
|
+
const byCategory = {};
|
|
305
|
+
let totalGain = 0;
|
|
306
|
+
for (const issue of issues) {
|
|
307
|
+
const gain = issue.estimatedGain || 0;
|
|
308
|
+
totalGain += gain;
|
|
309
|
+
byCategory[issue.category] = (byCategory[issue.category] || 0) + gain;
|
|
310
|
+
}
|
|
311
|
+
return {
|
|
312
|
+
estimatedGain: Math.min(totalGain, 100), // Cap at 100%
|
|
313
|
+
byCategory: byCategory,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Generate statistics summary
|
|
318
|
+
*/
|
|
319
|
+
generateSummary(issues) {
|
|
320
|
+
const byCategory = {};
|
|
321
|
+
const byImpact = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
322
|
+
let totalEstimatedGain = 0;
|
|
323
|
+
for (const issue of issues) {
|
|
324
|
+
byCategory[issue.category] = (byCategory[issue.category] || 0) + 1;
|
|
325
|
+
byImpact[issue.impact]++;
|
|
326
|
+
totalEstimatedGain += issue.estimatedGain || 0;
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
total: issues.length,
|
|
330
|
+
byCategory: byCategory,
|
|
331
|
+
byImpact,
|
|
332
|
+
totalEstimatedGain: Math.min(totalEstimatedGain, 100),
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Find all regex matches in content with their positions
|
|
337
|
+
*/
|
|
338
|
+
findAllMatches(content, pattern) {
|
|
339
|
+
const matches = [];
|
|
340
|
+
const globalPattern = new RegExp(pattern.source, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g');
|
|
341
|
+
let match;
|
|
342
|
+
while ((match = globalPattern.exec(content)) !== null) {
|
|
343
|
+
matches.push({
|
|
344
|
+
start: match.index,
|
|
345
|
+
end: match.index + match[0].length,
|
|
346
|
+
text: match[0],
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
return matches;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Find line and column for a position in content
|
|
353
|
+
*/
|
|
354
|
+
findLocation(content, position) {
|
|
355
|
+
const before = content.substring(0, position);
|
|
356
|
+
const lines = before.split('\n');
|
|
357
|
+
return {
|
|
358
|
+
line: lines.length,
|
|
359
|
+
column: lines[lines.length - 1].length + 1,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Generate unique issue ID
|
|
364
|
+
*/
|
|
365
|
+
generateIssueId(filePath, category, line) {
|
|
366
|
+
const hash = Buffer.from(`${filePath}:${category}:${line}`).toString('base64').slice(0, 8);
|
|
367
|
+
return `perf-${category}-${hash}`;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Check if severity matches minimum requirement
|
|
371
|
+
*/
|
|
372
|
+
isSeverityMatch(severity, minSeverity) {
|
|
373
|
+
const order = ['high', 'medium', 'low'];
|
|
374
|
+
return order.indexOf(severity) <= order.indexOf(minSeverity);
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Extract metrics from matched text
|
|
378
|
+
*/
|
|
379
|
+
extractMetrics(text, category) {
|
|
380
|
+
const metrics = [];
|
|
381
|
+
switch (category) {
|
|
382
|
+
case 'bundle-size':
|
|
383
|
+
// Estimate bundle impact
|
|
384
|
+
const sizeMatch = text.match(/(?:lodash|moment|@material-ui|@mui)/);
|
|
385
|
+
if (sizeMatch) {
|
|
386
|
+
metrics.push({ name: 'potential_reduction', value: 100, unit: 'KB' });
|
|
387
|
+
}
|
|
388
|
+
break;
|
|
389
|
+
case 'database-queries':
|
|
390
|
+
// Count potential queries
|
|
391
|
+
const loopMatch = text.match(/for\s*\(/gi);
|
|
392
|
+
if (loopMatch) {
|
|
393
|
+
metrics.push({ name: 'queries_multiplier', value: loopMatch.length, unit: 'x' });
|
|
394
|
+
}
|
|
395
|
+
break;
|
|
396
|
+
case 'api-efficiency':
|
|
397
|
+
const fetchMatch = text.match(/fetch|axios|\.get\(|\.post\(/gi);
|
|
398
|
+
if (fetchMatch) {
|
|
399
|
+
metrics.push({ name: 'sequential_calls', value: fetchMatch.length, unit: 'calls' });
|
|
400
|
+
}
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
return metrics;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Get relevant files to scan
|
|
407
|
+
*/
|
|
408
|
+
async getRelevantFiles(dirPath, options) {
|
|
409
|
+
const files = [];
|
|
410
|
+
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.vue', '.svelte', '.css', '.scss', '.html'];
|
|
411
|
+
async function walk(currentPath) {
|
|
412
|
+
try {
|
|
413
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
414
|
+
for (const entry of entries) {
|
|
415
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
416
|
+
// Skip node_modules and common exclusions
|
|
417
|
+
if (entry.name === 'node_modules' ||
|
|
418
|
+
entry.name === '.git' ||
|
|
419
|
+
entry.name === 'dist' ||
|
|
420
|
+
entry.name === 'build' ||
|
|
421
|
+
entry.name === '.next' ||
|
|
422
|
+
entry.name === 'coverage') {
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
// Check exclude patterns
|
|
426
|
+
if (options.excludePatterns?.some(pattern => entry.name.match(pattern))) {
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
if (entry.isDirectory()) {
|
|
430
|
+
await walk(fullPath);
|
|
431
|
+
}
|
|
432
|
+
else if (entry.isFile()) {
|
|
433
|
+
const ext = path.extname(entry.name);
|
|
434
|
+
if (extensions.includes(ext)) {
|
|
435
|
+
if (!options.includePatterns?.length ||
|
|
436
|
+
options.includePatterns.some(pattern => entry.name.match(pattern))) {
|
|
437
|
+
files.push(fullPath);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
catch (error) {
|
|
444
|
+
// Skip directories we can't read
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
await walk(dirPath);
|
|
448
|
+
return files;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
//# sourceMappingURL=perf-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perf-detector.js","sourceRoot":"","sources":["../../../../src/services/optimization/detectors/perf-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimization Service Barrel Export
|
|
3
|
+
*
|
|
4
|
+
* Central export point for all optimization-related services and types.
|
|
5
|
+
*/
|
|
6
|
+
import { OptimizationService } from './optimization.service.js';
|
|
7
|
+
import type { DetectionOptions, DetectAndOptimizeOptions, OptimizationReport } from './optimization.types.js';
|
|
8
|
+
export { OptimizationService } from './optimization.service.js';
|
|
9
|
+
export { BugDetector } from './detectors/bug-detector.js';
|
|
10
|
+
export { PerfDetector } from './detectors/perf-detector.js';
|
|
11
|
+
export { CodeSmellDetector } from './detectors/code-smell-detector.js';
|
|
12
|
+
export { CodeOptimizer } from './optimizers/code-optimizer.js';
|
|
13
|
+
export { PerfOptimizer } from './optimizers/perf-optimizer.js';
|
|
14
|
+
export { RefactOptimizer } from './optimizers/refact-optimizer.js';
|
|
15
|
+
export { ANTI_PATTERNS, getAntiPatternsByCategory, getAntiPatternById, getAntiPatternsBySeverity, findMatchingAntiPatterns, } from './patterns/anti-patterns.js';
|
|
16
|
+
export type { BugType, DetectedBug, Location, Severity, PerfCategory, PerformanceIssue, Metric, CodeSmellType, CodeSmell, OptimizationReport, OptimizationResult, OptimizationStats, AppliedOptimization, Suggestion, OptimizationError, PriorityScore, DetectionOptions, OptimizationOptions, DetectAndOptimizeOptions, AntiPattern, PatternMatcher, FileAnalysis, } from './optimization.types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Default optimization service instance
|
|
19
|
+
*/
|
|
20
|
+
export declare const optimizationService: OptimizationService;
|
|
21
|
+
/**
|
|
22
|
+
* Convenience function to detect issues in a project
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { detectOptimizations } from '@pamacea/daemon';
|
|
27
|
+
*
|
|
28
|
+
* const report = await detectOptimizations('/path/to/project');
|
|
29
|
+
* console.log(`Found ${report.bugs.length} bugs`);
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function detectOptimizations(projectPath: string, options?: DetectionOptions): Promise<OptimizationReport>;
|
|
33
|
+
/**
|
|
34
|
+
* Convenience function to detect and optimize in one operation
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* import { detectAndOptimize } from '@pamacea/daemon';
|
|
39
|
+
*
|
|
40
|
+
* const result = await detectAndOptimize('/path/to/project', {
|
|
41
|
+
* autoFix: true,
|
|
42
|
+
* maxFixes: 10,
|
|
43
|
+
* });
|
|
44
|
+
* console.log(`Applied ${result.appliedOptimizations.length} optimizations`);
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function detectAndOptimize(projectPath: string, options?: DetectAndOptimizeOptions): Promise<import("./optimization.types.js").OptimizationResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Convenience function to generate a summary report
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* import { generateReport } from '@pamacea/daemon';
|
|
54
|
+
*
|
|
55
|
+
* const report = await detectOptimizations('/path/to/project');
|
|
56
|
+
* const summary = generateReport(report);
|
|
57
|
+
* console.log(summary);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function generateReport(report: OptimizationReport): string;
|
|
61
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/optimization/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAEV,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EAGR,YAAY,EACZ,gBAAgB,EAChB,MAAM,EAGN,aAAa,EACb,SAAS,EAGT,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAGjB,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,aAAa,EAGb,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EAGxB,WAAW,EACX,cAAc,EAGd,YAAY,GACb,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,gBAAgB,+BAG3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,wBAAwB,iEAGnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAEjE"}
|