@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,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accessibility Dimension Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes web accessibility using axe-core and pa11y.
|
|
5
|
+
*
|
|
6
|
+
* @module services/scoring/dimensions/accessibility-analyzer
|
|
7
|
+
*/
|
|
8
|
+
import { CommandExecutor } from '../../../shared/utils/command-executor.js';
|
|
9
|
+
import { createLogger } from '../../../shared/utils/logger.js';
|
|
10
|
+
/**
|
|
11
|
+
* WCAG AA compliance thresholds
|
|
12
|
+
*/
|
|
13
|
+
const A11Y_THRESHOLDS = {
|
|
14
|
+
critical: 0, // Must have zero critical issues
|
|
15
|
+
serious: 2, // Max 2 serious issues
|
|
16
|
+
moderate: 10, // Max 10 moderate issues
|
|
17
|
+
minor: 20, // Max 20 minor issues
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Accessibility Dimension Analyzer
|
|
21
|
+
*/
|
|
22
|
+
export class AccessibilityAnalyzer {
|
|
23
|
+
/** Analyzer configuration */
|
|
24
|
+
config = {
|
|
25
|
+
dimension: 'accessibility',
|
|
26
|
+
defaultWeight: 0.10,
|
|
27
|
+
estimatedDuration: 20000,
|
|
28
|
+
requiresRunningProject: true,
|
|
29
|
+
supportedFrameworks: ['Next.js', 'React', 'Vue', 'Nuxt', 'Svelte', 'Angular', 'Remix', 'SvelteKit', 'Astro', 'Gatsby'],
|
|
30
|
+
};
|
|
31
|
+
logger;
|
|
32
|
+
executor;
|
|
33
|
+
constructor() {
|
|
34
|
+
this.logger = createLogger('AccessibilityAnalyzer');
|
|
35
|
+
this.executor = new CommandExecutor();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Analyze accessibility of the project
|
|
39
|
+
*/
|
|
40
|
+
async analyze(projectPath, _framework, _options) {
|
|
41
|
+
this.logger.info(`Analyzing accessibility for ${projectPath}`);
|
|
42
|
+
const issues = [];
|
|
43
|
+
const improvements = [];
|
|
44
|
+
let score = 100;
|
|
45
|
+
let axeResults = null;
|
|
46
|
+
try {
|
|
47
|
+
// Run accessibility scan (try multiple URLs)
|
|
48
|
+
axeResults = await this.runA11yScan(projectPath);
|
|
49
|
+
score = this.calculateA11yScore(axeResults);
|
|
50
|
+
// Generate issues from violations
|
|
51
|
+
issues.push(...this.generateA11yIssues(axeResults));
|
|
52
|
+
// Generate improvement suggestions
|
|
53
|
+
improvements.push(...this.generateA11yImprovements(axeResults));
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
this.logger.warn('Accessibility scan failed', error);
|
|
57
|
+
issues.push({
|
|
58
|
+
severity: 'medium',
|
|
59
|
+
category: 'accessibility',
|
|
60
|
+
description: 'Could not run accessibility scan. Ensure the app is running on localhost:3000',
|
|
61
|
+
fixable: false,
|
|
62
|
+
});
|
|
63
|
+
score = 50;
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
dimension: 'accessibility',
|
|
67
|
+
score,
|
|
68
|
+
weight: 0.10,
|
|
69
|
+
issues: issues.map(i => ({
|
|
70
|
+
severity: i.severity,
|
|
71
|
+
category: i.category,
|
|
72
|
+
description: i.description,
|
|
73
|
+
location: i.location,
|
|
74
|
+
fixable: i.fixable,
|
|
75
|
+
})),
|
|
76
|
+
improvements: improvements.map(imp => ({
|
|
77
|
+
type: imp.type,
|
|
78
|
+
description: imp.description,
|
|
79
|
+
effort: imp.effort,
|
|
80
|
+
impact: imp.impact,
|
|
81
|
+
})),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Run accessibility scan using axe-core
|
|
86
|
+
*/
|
|
87
|
+
async runA11yScan(projectPath) {
|
|
88
|
+
const urls = [
|
|
89
|
+
'http://localhost:3000',
|
|
90
|
+
'http://localhost:5173',
|
|
91
|
+
'http://localhost:4173',
|
|
92
|
+
];
|
|
93
|
+
for (const url of urls) {
|
|
94
|
+
try {
|
|
95
|
+
// Try pa11y first (lighter)
|
|
96
|
+
const pa11yCmd = `npx pa11y ${url} --json --runner axe`;
|
|
97
|
+
const result = await this.executor.execute(pa11yCmd, { cwd: projectPath, timeout: 30000 });
|
|
98
|
+
if (result.success && result.data.stdout) {
|
|
99
|
+
return this.parsePa11yResult(result.data.stdout);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Try next URL
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// If no URL worked, throw error
|
|
107
|
+
throw new Error('No accessible development server found');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Parse pa11y result into our format
|
|
111
|
+
*/
|
|
112
|
+
parsePa11yResult(output) {
|
|
113
|
+
try {
|
|
114
|
+
const data = JSON.parse(output);
|
|
115
|
+
return {
|
|
116
|
+
violations: data.map((v) => ({
|
|
117
|
+
id: v.code || 'unknown',
|
|
118
|
+
impact: this.mapSeverity(v.type),
|
|
119
|
+
description: v.message,
|
|
120
|
+
help: v.context || '',
|
|
121
|
+
nodes: v.selector ? [{ target: [v.selector], html: v.context || '' }] : [],
|
|
122
|
+
})),
|
|
123
|
+
passes: 0,
|
|
124
|
+
incomplete: 0,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return {
|
|
129
|
+
violations: [],
|
|
130
|
+
passes: 0,
|
|
131
|
+
incomplete: 0,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Map pa11y severity to axe impact
|
|
137
|
+
*/
|
|
138
|
+
mapSeverity(type) {
|
|
139
|
+
const mapping = {
|
|
140
|
+
error: 'critical',
|
|
141
|
+
warning: 'serious',
|
|
142
|
+
notice: 'moderate',
|
|
143
|
+
};
|
|
144
|
+
return mapping[type] || 'minor';
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Calculate accessibility score (0-100)
|
|
148
|
+
*/
|
|
149
|
+
calculateA11yScore(results) {
|
|
150
|
+
let score = 100;
|
|
151
|
+
for (const violation of results.violations) {
|
|
152
|
+
switch (violation.impact) {
|
|
153
|
+
case 'critical':
|
|
154
|
+
score -= 30;
|
|
155
|
+
break;
|
|
156
|
+
case 'serious':
|
|
157
|
+
score -= 15;
|
|
158
|
+
break;
|
|
159
|
+
case 'moderate':
|
|
160
|
+
score -= 5;
|
|
161
|
+
break;
|
|
162
|
+
case 'minor':
|
|
163
|
+
score -= 2;
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return Math.max(0, score);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Generate accessibility issues from violations
|
|
171
|
+
*/
|
|
172
|
+
generateA11yIssues(results) {
|
|
173
|
+
return results.violations.slice(0, 20).map(v => ({
|
|
174
|
+
severity: (v.impact === 'critical' || v.impact === 'serious' ? 'high' : 'medium'),
|
|
175
|
+
category: 'accessibility',
|
|
176
|
+
description: `${v.id}: ${v.description}`,
|
|
177
|
+
location: v.nodes[0]?.target[0] || 'multiple',
|
|
178
|
+
fixable: true,
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Generate accessibility improvement suggestions
|
|
183
|
+
*/
|
|
184
|
+
generateA11yImprovements(results) {
|
|
185
|
+
const improvements = [];
|
|
186
|
+
const violationIds = new Set(results.violations.map(v => v.id));
|
|
187
|
+
// Common improvements based on violations found
|
|
188
|
+
if (violationIds.has('color-contrast')) {
|
|
189
|
+
improvements.push({
|
|
190
|
+
type: 'a11y',
|
|
191
|
+
description: 'Fix color contrast issues to meet WCAG AA standards (4.5:1 for normal text)',
|
|
192
|
+
effort: 'moderate',
|
|
193
|
+
impact: 'high',
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (violationIds.has('image-alt')) {
|
|
197
|
+
improvements.push({
|
|
198
|
+
type: 'a11y',
|
|
199
|
+
description: 'Add alt text to all images for screen reader users',
|
|
200
|
+
effort: 'quick',
|
|
201
|
+
impact: 'high',
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (violationIds.has('label')) {
|
|
205
|
+
improvements.push({
|
|
206
|
+
type: 'a11y',
|
|
207
|
+
description: 'Ensure all form inputs have associated labels',
|
|
208
|
+
effort: 'quick',
|
|
209
|
+
impact: 'high',
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
if (violationIds.has('button-name')) {
|
|
213
|
+
improvements.push({
|
|
214
|
+
type: 'a11y',
|
|
215
|
+
description: 'Add accessible names to all buttons and links',
|
|
216
|
+
effort: 'quick',
|
|
217
|
+
impact: 'high',
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
if (violationIds.has('heading-order')) {
|
|
221
|
+
improvements.push({
|
|
222
|
+
type: 'a11y',
|
|
223
|
+
description: 'Fix heading order to follow logical hierarchy (h1 → h2 → h3)',
|
|
224
|
+
effort: 'moderate',
|
|
225
|
+
impact: 'medium',
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
// General improvements
|
|
229
|
+
improvements.push({
|
|
230
|
+
type: 'a11y',
|
|
231
|
+
description: 'Test your site with a screen reader (NVDA, JAWS, or VoiceOver)',
|
|
232
|
+
effort: 'moderate',
|
|
233
|
+
impact: 'high',
|
|
234
|
+
});
|
|
235
|
+
improvements.push({
|
|
236
|
+
type: 'a11y',
|
|
237
|
+
description: 'Ensure keyboard navigation works for all interactive elements',
|
|
238
|
+
effort: 'moderate',
|
|
239
|
+
impact: 'high',
|
|
240
|
+
});
|
|
241
|
+
improvements.push({
|
|
242
|
+
type: 'a11y',
|
|
243
|
+
description: 'Add skip links for main content navigation',
|
|
244
|
+
effort: 'quick',
|
|
245
|
+
impact: 'medium',
|
|
246
|
+
});
|
|
247
|
+
improvements.push({
|
|
248
|
+
type: 'a11y',
|
|
249
|
+
description: 'Use semantic HTML elements (nav, main, article, etc.)',
|
|
250
|
+
effort: 'moderate',
|
|
251
|
+
impact: 'medium',
|
|
252
|
+
});
|
|
253
|
+
return improvements;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Default accessibility analyzer instance
|
|
258
|
+
*/
|
|
259
|
+
export const accessibilityAnalyzer = new AccessibilityAnalyzer();
|
|
260
|
+
//# sourceMappingURL=accessibility.analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.analyzer.js","sourceRoot":"","sources":["../../../../src/services/scoring/dimensions/accessibility.analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend Logic Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes backend code quality including API design, error handling consistency,
|
|
5
|
+
* input validation, rate limiting, and caching strategy.
|
|
6
|
+
*
|
|
7
|
+
* @module services/scoring/dimensions/backend-logic
|
|
8
|
+
*/
|
|
9
|
+
import type { DimensionScore, CodeDimension, DimensionAnalyzerConfig } from '../../../core/types/scoring.types.js';
|
|
10
|
+
import type { Framework } from '../../../core/types/project.types.js';
|
|
11
|
+
import type { ScoringOptions } from '../../../core/types/scoring.types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Backend logic analyzer configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface BackendLogicAnalyzerOptions {
|
|
16
|
+
/** Check API routes */
|
|
17
|
+
checkApiRoutes?: boolean;
|
|
18
|
+
/** Check error handling */
|
|
19
|
+
checkErrorHandling?: boolean;
|
|
20
|
+
/** Check input validation */
|
|
21
|
+
checkInputValidation?: boolean;
|
|
22
|
+
/** Check rate limiting */
|
|
23
|
+
checkRateLimiting?: boolean;
|
|
24
|
+
/** Check caching */
|
|
25
|
+
checkCaching?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Backend Logic Analyzer
|
|
29
|
+
*
|
|
30
|
+
* Evaluates backend code quality across multiple dimensions:
|
|
31
|
+
* - API design (REST conventions, status codes)
|
|
32
|
+
* - Error handling consistency
|
|
33
|
+
* - Input validation
|
|
34
|
+
* - Rate limiting presence
|
|
35
|
+
* - Caching strategy
|
|
36
|
+
*/
|
|
37
|
+
export declare class BackendLogicAnalyzer {
|
|
38
|
+
/** Analyzer configuration */
|
|
39
|
+
readonly config: DimensionAnalyzerConfig;
|
|
40
|
+
private readonly logger;
|
|
41
|
+
private readonly executor;
|
|
42
|
+
private readonly checkApiRoutesFlag;
|
|
43
|
+
private readonly checkErrorHandlingFlag;
|
|
44
|
+
private readonly checkInputValidationFlag;
|
|
45
|
+
private readonly checkRateLimitingFlag;
|
|
46
|
+
private readonly checkCachingFlag;
|
|
47
|
+
constructor(options?: BackendLogicAnalyzerOptions);
|
|
48
|
+
/**
|
|
49
|
+
* Get the dimension this analyzer handles
|
|
50
|
+
*/
|
|
51
|
+
getDimension(): CodeDimension;
|
|
52
|
+
/**
|
|
53
|
+
* Get the default weight for this dimension
|
|
54
|
+
*/
|
|
55
|
+
getWeight(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Analyze backend logic for a project
|
|
58
|
+
*
|
|
59
|
+
* @param projectPath - Path to the project root
|
|
60
|
+
* @param _framework - Detected framework (optional, for framework-specific analysis)
|
|
61
|
+
* @param _options - Scoring options (optional)
|
|
62
|
+
* @returns Dimension score with backend metrics
|
|
63
|
+
*/
|
|
64
|
+
analyze(projectPath: string, _framework?: Framework, _options?: ScoringOptions): Promise<DimensionScore>;
|
|
65
|
+
/**
|
|
66
|
+
* Detect backend framework
|
|
67
|
+
*/
|
|
68
|
+
private detectBackendFramework;
|
|
69
|
+
/**
|
|
70
|
+
* Analyze API routes
|
|
71
|
+
*/
|
|
72
|
+
private analyzeApiRoutes;
|
|
73
|
+
/**
|
|
74
|
+
* Scan directory for API routes
|
|
75
|
+
*/
|
|
76
|
+
private scanDirectoryForApiRoutes;
|
|
77
|
+
/**
|
|
78
|
+
* Analyze a single API file
|
|
79
|
+
*/
|
|
80
|
+
private analyzeApiFile;
|
|
81
|
+
/**
|
|
82
|
+
* Check error handling patterns
|
|
83
|
+
*/
|
|
84
|
+
private checkErrorHandling;
|
|
85
|
+
/**
|
|
86
|
+
* Check input validation
|
|
87
|
+
*/
|
|
88
|
+
private checkInputValidation;
|
|
89
|
+
/**
|
|
90
|
+
* Check rate limiting
|
|
91
|
+
*/
|
|
92
|
+
private checkRateLimiting;
|
|
93
|
+
/**
|
|
94
|
+
* Check caching strategy
|
|
95
|
+
*/
|
|
96
|
+
private checkCaching;
|
|
97
|
+
/**
|
|
98
|
+
* Check if directory contains pattern
|
|
99
|
+
*/
|
|
100
|
+
private directoryContainsPattern;
|
|
101
|
+
/**
|
|
102
|
+
* Check API versioning
|
|
103
|
+
*/
|
|
104
|
+
private checkApiVersioning;
|
|
105
|
+
/**
|
|
106
|
+
* Calculate RESTful adherence score
|
|
107
|
+
*/
|
|
108
|
+
private calculateRestfulAdherence;
|
|
109
|
+
/**
|
|
110
|
+
* Check consistent status codes
|
|
111
|
+
*/
|
|
112
|
+
private checkConsistentStatusCodes;
|
|
113
|
+
/**
|
|
114
|
+
* Identify backend issues
|
|
115
|
+
*/
|
|
116
|
+
private identifyBackendIssues;
|
|
117
|
+
/**
|
|
118
|
+
* Generate backend improvements
|
|
119
|
+
*/
|
|
120
|
+
private generateBackendImprovements;
|
|
121
|
+
/**
|
|
122
|
+
* Calculate backend score
|
|
123
|
+
*/
|
|
124
|
+
private calculateBackendScore;
|
|
125
|
+
/**
|
|
126
|
+
* Count passed checks for metadata
|
|
127
|
+
*/
|
|
128
|
+
private countPassedChecks;
|
|
129
|
+
/**
|
|
130
|
+
* Create result when no backend detected
|
|
131
|
+
*/
|
|
132
|
+
private createNoBackendResult;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Default analyzer instance
|
|
136
|
+
*/
|
|
137
|
+
export declare const backendLogicAnalyzer: BackendLogicAnalyzer;
|
|
138
|
+
//# sourceMappingURL=backend-logic.analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-logic.analyzer.d.ts","sourceRoot":"","sources":["../../../../src/services/scoring/dimensions/backend-logic.analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,cAAc,EAGd,aAAa,EAMb,uBAAuB,EACxB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAkD3E;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,uBAAuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,6BAA6B;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAKtC;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAU;IACjD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAChD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAE/B,OAAO,GAAE,2BAAgC;IAUrD;;OAEG;IACH,YAAY,IAAI,aAAa;IAI7B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;;;;;;OAOG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IA2G9G;;OAEG;YACW,sBAAsB;IAwBpC;;OAEG;YACW,gBAAgB;IAqB9B;;OAEG;YACW,yBAAyB;IAwBvC;;OAEG;YACW,cAAc;IAoD5B;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,oBAAoB;IAclC;;OAEG;YACW,iBAAiB;IAiC/B;;OAEG;YACW,YAAY;IA8C1B;;OAEG;YACW,wBAAwB;IAkCtC;;OAEG;YACW,kBAAkB;IA0BhC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA+BjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAOlC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4E7B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA8FnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAe9B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|