accessibility-server-mcp 1.0.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/LICENSE +21 -0
- package/README.md +762 -0
- package/config/wcag-rules.json +252 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +437 -0
- package/dist/index.js.map +1 -0
- package/dist/test-manual.d.ts +6 -0
- package/dist/test-manual.d.ts.map +1 -0
- package/dist/test-manual.js +66 -0
- package/dist/test-manual.js.map +1 -0
- package/dist/tools/accessibility-tester.d.ts +56 -0
- package/dist/tools/accessibility-tester.d.ts.map +1 -0
- package/dist/tools/accessibility-tester.js +317 -0
- package/dist/tools/accessibility-tester.js.map +1 -0
- package/dist/tools/color-contrast.d.ts +49 -0
- package/dist/tools/color-contrast.d.ts.map +1 -0
- package/dist/tools/color-contrast.js +237 -0
- package/dist/tools/color-contrast.js.map +1 -0
- package/dist/tools/wcag-validator.d.ts +43 -0
- package/dist/tools/wcag-validator.d.ts.map +1 -0
- package/dist/tools/wcag-validator.js +249 -0
- package/dist/tools/wcag-validator.js.map +1 -0
- package/dist/tools/website-accessibility-tester.d.ts +103 -0
- package/dist/tools/website-accessibility-tester.d.ts.map +1 -0
- package/dist/tools/website-accessibility-tester.js +228 -0
- package/dist/tools/website-accessibility-tester.js.map +1 -0
- package/dist/types/accessibility.d.ts +172 -0
- package/dist/types/accessibility.d.ts.map +1 -0
- package/dist/types/accessibility.js +5 -0
- package/dist/types/accessibility.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.d.ts +70 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +5 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/utils/browser-manager.d.ts +83 -0
- package/dist/utils/browser-manager.d.ts.map +1 -0
- package/dist/utils/browser-manager.js +292 -0
- package/dist/utils/browser-manager.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +107 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/report-generator.d.ts +31 -0
- package/dist/utils/report-generator.d.ts.map +1 -0
- package/dist/utils/report-generator.js +252 -0
- package/dist/utils/report-generator.js.map +1 -0
- package/dist/utils/website-crawler.d.ts +66 -0
- package/dist/utils/website-crawler.d.ts.map +1 -0
- package/dist/utils/website-crawler.js +306 -0
- package/dist/utils/website-crawler.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-manager.js","sourceRoot":"","sources":["../../src/utils/browser-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized logging utility for the accessibility MCP server
|
|
3
|
+
*
|
|
4
|
+
* Note: For MCP compatibility, when MCP_MODE is enabled, all logging is silenced
|
|
5
|
+
* to avoid interfering with JSON-RPC communication on stdout. When logging is enabled,
|
|
6
|
+
* all output goes to stderr to ensure stdout remains clean for JSON-RPC.
|
|
7
|
+
*/
|
|
8
|
+
export declare class Logger {
|
|
9
|
+
private readonly logger;
|
|
10
|
+
constructor(serviceName?: string);
|
|
11
|
+
/**
|
|
12
|
+
* Log an informational message
|
|
13
|
+
*/
|
|
14
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
15
|
+
/**
|
|
16
|
+
* Log a warning message
|
|
17
|
+
*/
|
|
18
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
19
|
+
/**
|
|
20
|
+
* Log an error message
|
|
21
|
+
*/
|
|
22
|
+
error(message: string, error?: Error | Record<string, unknown>): void;
|
|
23
|
+
/**
|
|
24
|
+
* Log a debug message
|
|
25
|
+
*/
|
|
26
|
+
debug(message: string, meta?: Record<string, unknown>): void;
|
|
27
|
+
/**
|
|
28
|
+
* Log a performance measurement
|
|
29
|
+
*/
|
|
30
|
+
performance(operation: string, duration: number, meta?: Record<string, unknown>): void;
|
|
31
|
+
/**
|
|
32
|
+
* Create a child logger with additional context
|
|
33
|
+
*/
|
|
34
|
+
child(meta: Record<string, unknown>): Logger;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAWA;;;;;;GAMG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,WAAW,SAAsB;IAyD7C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAYrE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAOtF;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAK7C"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { Writable } from 'stream';
|
|
4
|
+
// Null stream for discarding logs in MCP mode
|
|
5
|
+
class NullStream extends Writable {
|
|
6
|
+
_write(_chunk, _encoding, callback) {
|
|
7
|
+
callback();
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Centralized logging utility for the accessibility MCP server
|
|
12
|
+
*
|
|
13
|
+
* Note: For MCP compatibility, when MCP_MODE is enabled, all logging is silenced
|
|
14
|
+
* to avoid interfering with JSON-RPC communication on stdout. When logging is enabled,
|
|
15
|
+
* all output goes to stderr to ensure stdout remains clean for JSON-RPC.
|
|
16
|
+
*/
|
|
17
|
+
export class Logger {
|
|
18
|
+
logger;
|
|
19
|
+
constructor(serviceName = 'accessibility-mcp') {
|
|
20
|
+
const transports = [];
|
|
21
|
+
// Only add console transport if not in MCP mode (when stdio is used for JSON-RPC)
|
|
22
|
+
const isMCPMode = process.env.MCP_MODE === 'true';
|
|
23
|
+
if (!isMCPMode) {
|
|
24
|
+
transports.push(new winston.transports.Console({
|
|
25
|
+
stderrLevels: ['error', 'warn', 'info', 'debug'], // Force all levels to stderr
|
|
26
|
+
format: winston.format.combine(winston.format.colorize(), winston.format.simple(), winston.format.printf(({ timestamp, level, message, service, ...meta }) => {
|
|
27
|
+
const metaString = Object.keys(meta).length ? JSON.stringify(meta, null, 2) : '';
|
|
28
|
+
return `${timestamp} [${service}] ${level}: ${message} ${metaString}`;
|
|
29
|
+
}))
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Add a null transport for MCP mode to prevent winston warnings
|
|
34
|
+
transports.push(new winston.transports.Stream({
|
|
35
|
+
stream: new NullStream()
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
this.logger = winston.createLogger({
|
|
39
|
+
level: process.env.LOG_LEVEL || 'info',
|
|
40
|
+
format: winston.format.combine(winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.json()),
|
|
41
|
+
defaultMeta: { service: serviceName },
|
|
42
|
+
transports,
|
|
43
|
+
silent: isMCPMode // Silence the entire logger in MCP mode
|
|
44
|
+
});
|
|
45
|
+
// Add file transport in production
|
|
46
|
+
if (process.env.NODE_ENV === 'production') {
|
|
47
|
+
this.logger.add(new winston.transports.File({
|
|
48
|
+
filename: path.join(process.cwd(), 'logs', 'error.log'),
|
|
49
|
+
level: 'error'
|
|
50
|
+
}));
|
|
51
|
+
this.logger.add(new winston.transports.File({
|
|
52
|
+
filename: path.join(process.cwd(), 'logs', 'combined.log')
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Log an informational message
|
|
58
|
+
*/
|
|
59
|
+
info(message, meta) {
|
|
60
|
+
this.logger.info(message, meta);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Log a warning message
|
|
64
|
+
*/
|
|
65
|
+
warn(message, meta) {
|
|
66
|
+
this.logger.warn(message, meta);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Log an error message
|
|
70
|
+
*/
|
|
71
|
+
error(message, error) {
|
|
72
|
+
if (error instanceof Error) {
|
|
73
|
+
this.logger.error(message, {
|
|
74
|
+
error: error.message,
|
|
75
|
+
stack: error.stack,
|
|
76
|
+
name: error.name
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.logger.error(message, error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Log a debug message
|
|
85
|
+
*/
|
|
86
|
+
debug(message, meta) {
|
|
87
|
+
this.logger.debug(message, meta);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Log a performance measurement
|
|
91
|
+
*/
|
|
92
|
+
performance(operation, duration, meta) {
|
|
93
|
+
this.logger.info(`Performance: ${operation}`, {
|
|
94
|
+
duration_ms: duration,
|
|
95
|
+
...meta
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a child logger with additional context
|
|
100
|
+
*/
|
|
101
|
+
child(meta) {
|
|
102
|
+
const childLogger = new Logger();
|
|
103
|
+
childLogger.logger.defaultMeta = { ...this.logger.defaultMeta, ...meta };
|
|
104
|
+
return childLogger;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AccessibilityTestResult, TestSummary, ColorContrastResult } from '../types/accessibility.js';
|
|
2
|
+
/**
|
|
3
|
+
* Utility class for generating accessibility test reports
|
|
4
|
+
*/
|
|
5
|
+
export declare class ReportGenerator {
|
|
6
|
+
/**
|
|
7
|
+
* Calculate accessibility score based on test results
|
|
8
|
+
*/
|
|
9
|
+
static calculateAccessibilityScore(result: AccessibilityTestResult): number;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a comprehensive test summary
|
|
12
|
+
*/
|
|
13
|
+
static generateTestSummary(result: AccessibilityTestResult): TestSummary;
|
|
14
|
+
/**
|
|
15
|
+
* Generate a human-readable text report
|
|
16
|
+
*/
|
|
17
|
+
static generateTextReport(result: AccessibilityTestResult): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate HTML report
|
|
20
|
+
*/
|
|
21
|
+
static generateHTMLReport(result: AccessibilityTestResult): string;
|
|
22
|
+
/**
|
|
23
|
+
* Generate CSV report for data analysis
|
|
24
|
+
*/
|
|
25
|
+
static generateCSVReport(result: AccessibilityTestResult): string;
|
|
26
|
+
/**
|
|
27
|
+
* Generate color contrast report
|
|
28
|
+
*/
|
|
29
|
+
static generateColorContrastReport(results: ColorContrastResult[]): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=report-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../src/utils/report-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,WAAW,EAGX,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,2BAA2B,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM;IAwB3E;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,GAAG,WAAW;IA+BxE;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM;IAsElE;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM;IAkFlE;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM;IAuBjE;;OAEG;IACH,MAAM,CAAC,2BAA2B,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,MAAM;CA6B3E"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for generating accessibility test reports
|
|
3
|
+
*/
|
|
4
|
+
export class ReportGenerator {
|
|
5
|
+
/**
|
|
6
|
+
* Calculate accessibility score based on test results
|
|
7
|
+
*/
|
|
8
|
+
static calculateAccessibilityScore(result) {
|
|
9
|
+
const totalChecks = result.violations.length + result.passes.length;
|
|
10
|
+
if (totalChecks === 0)
|
|
11
|
+
return 100;
|
|
12
|
+
// Weight violations by severity
|
|
13
|
+
const severityWeights = {
|
|
14
|
+
critical: 10,
|
|
15
|
+
serious: 5,
|
|
16
|
+
moderate: 2,
|
|
17
|
+
minor: 1
|
|
18
|
+
};
|
|
19
|
+
let totalPenalty = 0;
|
|
20
|
+
for (const violation of result.violations) {
|
|
21
|
+
totalPenalty += severityWeights[violation.impact] * violation.nodes.length;
|
|
22
|
+
}
|
|
23
|
+
// Calculate score (0-100)
|
|
24
|
+
const maxPossiblePenalty = totalChecks * severityWeights.critical;
|
|
25
|
+
const score = Math.max(0, Math.round(100 - (totalPenalty / maxPossiblePenalty) * 100));
|
|
26
|
+
return score;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate a comprehensive test summary
|
|
30
|
+
*/
|
|
31
|
+
static generateTestSummary(result) {
|
|
32
|
+
const violationsBySeverity = {
|
|
33
|
+
critical: 0,
|
|
34
|
+
serious: 0,
|
|
35
|
+
moderate: 0,
|
|
36
|
+
minor: 0
|
|
37
|
+
};
|
|
38
|
+
// Count violations by severity
|
|
39
|
+
for (const violation of result.violations) {
|
|
40
|
+
violationsBySeverity[violation.impact]++;
|
|
41
|
+
}
|
|
42
|
+
// Determine compliance status based on violations
|
|
43
|
+
const compliance = {
|
|
44
|
+
A: result.violations.filter(v => v.wcagLevel === 'A').length === 0,
|
|
45
|
+
AA: result.violations.filter(v => ['A', 'AA'].includes(v.wcagLevel)).length === 0,
|
|
46
|
+
AAA: result.violations.length === 0
|
|
47
|
+
};
|
|
48
|
+
const score = this.calculateAccessibilityScore(result);
|
|
49
|
+
return {
|
|
50
|
+
totalViolations: result.violations.length,
|
|
51
|
+
violationsBySeverity,
|
|
52
|
+
passedRules: result.passes.length,
|
|
53
|
+
score,
|
|
54
|
+
compliance
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Generate a human-readable text report
|
|
59
|
+
*/
|
|
60
|
+
static generateTextReport(result) {
|
|
61
|
+
const lines = [];
|
|
62
|
+
// Header
|
|
63
|
+
lines.push('ACCESSIBILITY TEST REPORT');
|
|
64
|
+
lines.push('='.repeat(50));
|
|
65
|
+
lines.push('');
|
|
66
|
+
if (result.url) {
|
|
67
|
+
lines.push(`URL: ${result.url}`);
|
|
68
|
+
}
|
|
69
|
+
lines.push(`Test Date: ${result.timestamp}`);
|
|
70
|
+
lines.push(`Test Duration: ${result.testDuration}ms`);
|
|
71
|
+
lines.push(`WCAG Level: ${result.metadata.wcagLevel}`);
|
|
72
|
+
lines.push('');
|
|
73
|
+
// Summary
|
|
74
|
+
lines.push('SUMMARY');
|
|
75
|
+
lines.push('-'.repeat(20));
|
|
76
|
+
lines.push(`Accessibility Score: ${result.summary.score}/100`);
|
|
77
|
+
lines.push(`Total Violations: ${result.summary.totalViolations}`);
|
|
78
|
+
lines.push(`Passed Rules: ${result.summary.passedRules}`);
|
|
79
|
+
lines.push('');
|
|
80
|
+
// Compliance Status
|
|
81
|
+
lines.push('WCAG COMPLIANCE');
|
|
82
|
+
lines.push('-'.repeat(20));
|
|
83
|
+
Object.entries(result.summary.compliance).forEach(([level, compliant]) => {
|
|
84
|
+
const status = compliant ? '✓ PASS' : '✗ FAIL';
|
|
85
|
+
lines.push(`WCAG ${level}: ${status}`);
|
|
86
|
+
});
|
|
87
|
+
lines.push('');
|
|
88
|
+
// Violations by Severity
|
|
89
|
+
if (result.violations.length > 0) {
|
|
90
|
+
lines.push('VIOLATIONS BY SEVERITY');
|
|
91
|
+
lines.push('-'.repeat(30));
|
|
92
|
+
Object.entries(result.summary.violationsBySeverity)
|
|
93
|
+
.filter(([_, count]) => count > 0)
|
|
94
|
+
.forEach(([severity, count]) => {
|
|
95
|
+
lines.push(`${severity.toUpperCase()}: ${count}`);
|
|
96
|
+
});
|
|
97
|
+
lines.push('');
|
|
98
|
+
// Detailed Violations
|
|
99
|
+
lines.push('DETAILED VIOLATIONS');
|
|
100
|
+
lines.push('-'.repeat(30));
|
|
101
|
+
result.violations.forEach((violation, index) => {
|
|
102
|
+
lines.push(`${index + 1}. ${violation.description}`);
|
|
103
|
+
lines.push(` Impact: ${violation.impact.toUpperCase()}`);
|
|
104
|
+
lines.push(` WCAG Level: ${violation.wcagLevel}`);
|
|
105
|
+
lines.push(` Help: ${violation.help}`);
|
|
106
|
+
lines.push(` Affected Elements: ${violation.nodes.length}`);
|
|
107
|
+
if (violation.nodes.length > 0) {
|
|
108
|
+
violation.nodes.slice(0, 3).forEach((node, nodeIndex) => {
|
|
109
|
+
lines.push(` Element ${nodeIndex + 1}: ${node.target.join(' > ')}`);
|
|
110
|
+
});
|
|
111
|
+
if (violation.nodes.length > 3) {
|
|
112
|
+
lines.push(` ... and ${violation.nodes.length - 3} more elements`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
lines.push('');
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return lines.join('\n');
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Generate HTML report
|
|
122
|
+
*/
|
|
123
|
+
static generateHTMLReport(result) {
|
|
124
|
+
const html = `
|
|
125
|
+
<!DOCTYPE html>
|
|
126
|
+
<html lang="en">
|
|
127
|
+
<head>
|
|
128
|
+
<meta charset="UTF-8">
|
|
129
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
130
|
+
<title>Accessibility Test Report</title>
|
|
131
|
+
<style>
|
|
132
|
+
body { font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; }
|
|
133
|
+
.header { background: #f5f5f5; padding: 20px; border-radius: 5px; margin-bottom: 20px; }
|
|
134
|
+
.summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-bottom: 20px; }
|
|
135
|
+
.metric { background: white; border: 1px solid #ddd; padding: 15px; border-radius: 5px; text-align: center; }
|
|
136
|
+
.score { font-size: 2em; font-weight: bold; color: ${result.summary.score >= 90 ? '#28a745' : result.summary.score >= 70 ? '#ffc107' : '#dc3545'}; }
|
|
137
|
+
.violation { border-left: 4px solid #dc3545; padding: 15px; margin-bottom: 15px; background: #f8f9fa; }
|
|
138
|
+
.violation.critical { border-color: #721c24; background: #f5c6cb; }
|
|
139
|
+
.violation.serious { border-color: #dc3545; background: #f8d7da; }
|
|
140
|
+
.violation.moderate { border-color: #ffc107; background: #fff3cd; }
|
|
141
|
+
.violation.minor { border-color: #17a2b8; background: #d1ecf1; }
|
|
142
|
+
.element { background: #e9ecef; padding: 8px; margin: 5px 0; border-radius: 3px; font-family: monospace; }
|
|
143
|
+
.compliance { display: flex; gap: 10px; }
|
|
144
|
+
.compliance-item { padding: 10px; border-radius: 5px; font-weight: bold; }
|
|
145
|
+
.pass { background: #d4edda; color: #155724; }
|
|
146
|
+
.fail { background: #f8d7da; color: #721c24; }
|
|
147
|
+
</style>
|
|
148
|
+
</head>
|
|
149
|
+
<body>
|
|
150
|
+
<div class="header">
|
|
151
|
+
<h1>Accessibility Test Report</h1>
|
|
152
|
+
${result.url ? `<p><strong>URL:</strong> ${result.url}</p>` : ''}
|
|
153
|
+
<p><strong>Test Date:</strong> ${result.timestamp}</p>
|
|
154
|
+
<p><strong>WCAG Level:</strong> ${result.metadata.wcagLevel}</p>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<div class="summary">
|
|
158
|
+
<div class="metric">
|
|
159
|
+
<div class="score">${result.summary.score}</div>
|
|
160
|
+
<div>Accessibility Score</div>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="metric">
|
|
163
|
+
<div style="font-size: 1.5em; color: #dc3545;">${result.summary.totalViolations}</div>
|
|
164
|
+
<div>Total Violations</div>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="metric">
|
|
167
|
+
<div style="font-size: 1.5em; color: #28a745;">${result.summary.passedRules}</div>
|
|
168
|
+
<div>Passed Rules</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<h2>WCAG Compliance</h2>
|
|
173
|
+
<div class="compliance">
|
|
174
|
+
${Object.entries(result.summary.compliance).map(([level, compliant]) => `<div class="compliance-item ${compliant ? 'pass' : 'fail'}">
|
|
175
|
+
WCAG ${level}: ${compliant ? 'PASS' : 'FAIL'}
|
|
176
|
+
</div>`).join('')}
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
${result.violations.length > 0 ? `
|
|
180
|
+
<h2>Violations (${result.violations.length})</h2>
|
|
181
|
+
${result.violations.map((violation, index) => `
|
|
182
|
+
<div class="violation ${violation.impact}">
|
|
183
|
+
<h3>${index + 1}. ${violation.description}</h3>
|
|
184
|
+
<p><strong>Impact:</strong> ${violation.impact.toUpperCase()}</p>
|
|
185
|
+
<p><strong>WCAG Level:</strong> ${violation.wcagLevel}</p>
|
|
186
|
+
<p><strong>Help:</strong> ${violation.help}</p>
|
|
187
|
+
<p><strong>Learn More:</strong> <a href="${violation.helpUrl}" target="_blank">${violation.helpUrl}</a></p>
|
|
188
|
+
|
|
189
|
+
<h4>Affected Elements (${violation.nodes.length}):</h4>
|
|
190
|
+
${violation.nodes.slice(0, 5).map(node => `
|
|
191
|
+
<div class="element">${node.target.join(' > ')}</div>
|
|
192
|
+
`).join('')}
|
|
193
|
+
${violation.nodes.length > 5 ? `<p>... and ${violation.nodes.length - 5} more elements</p>` : ''}
|
|
194
|
+
</div>
|
|
195
|
+
`).join('')}
|
|
196
|
+
` : '<p>No violations found! 🎉</p>'}
|
|
197
|
+
</body>
|
|
198
|
+
</html>`;
|
|
199
|
+
return html;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Generate CSV report for data analysis
|
|
203
|
+
*/
|
|
204
|
+
static generateCSVReport(result) {
|
|
205
|
+
const rows = [];
|
|
206
|
+
// Header
|
|
207
|
+
rows.push('Rule ID,Description,Impact,WCAG Level,Element Count,Element Targets,Help URL');
|
|
208
|
+
// Violations
|
|
209
|
+
result.violations.forEach(violation => {
|
|
210
|
+
const targets = violation.nodes.map(node => node.target.join(' > ')).join('; ');
|
|
211
|
+
rows.push([
|
|
212
|
+
violation.id,
|
|
213
|
+
`"${violation.description.replace(/"/g, '""')}"`,
|
|
214
|
+
violation.impact,
|
|
215
|
+
violation.wcagLevel,
|
|
216
|
+
violation.nodes.length.toString(),
|
|
217
|
+
`"${targets.replace(/"/g, '""')}"`,
|
|
218
|
+
violation.helpUrl
|
|
219
|
+
].join(','));
|
|
220
|
+
});
|
|
221
|
+
return rows.join('\n');
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Generate color contrast report
|
|
225
|
+
*/
|
|
226
|
+
static generateColorContrastReport(results) {
|
|
227
|
+
const lines = [];
|
|
228
|
+
lines.push('COLOR CONTRAST ANALYSIS REPORT');
|
|
229
|
+
lines.push('='.repeat(50));
|
|
230
|
+
lines.push('');
|
|
231
|
+
results.forEach((result, index) => {
|
|
232
|
+
lines.push(`${index + 1}. Color Combination`);
|
|
233
|
+
lines.push(` Foreground: ${result.foreground}`);
|
|
234
|
+
lines.push(` Background: ${result.background}`);
|
|
235
|
+
lines.push(` Contrast Ratio: ${result.ratio.toFixed(2)}:1`);
|
|
236
|
+
lines.push(` WCAG AA Normal: ${result.wcagAA.normal ? 'PASS' : 'FAIL'}`);
|
|
237
|
+
lines.push(` WCAG AA Large: ${result.wcagAA.large ? 'PASS' : 'FAIL'}`);
|
|
238
|
+
lines.push(` WCAG AAA Normal: ${result.wcagAAA.normal ? 'PASS' : 'FAIL'}`);
|
|
239
|
+
lines.push(` WCAG AAA Large: ${result.wcagAAA.large ? 'PASS' : 'FAIL'}`);
|
|
240
|
+
lines.push(` Score: ${result.score}/100`);
|
|
241
|
+
if (result.recommendations && result.recommendations.length > 0) {
|
|
242
|
+
lines.push(' Recommendations:');
|
|
243
|
+
result.recommendations.forEach(rec => {
|
|
244
|
+
lines.push(` - ${rec}`);
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
lines.push('');
|
|
248
|
+
});
|
|
249
|
+
return lines.join('\n');
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=report-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../src/utils/report-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BrowserManager } from './browser-manager.js';
|
|
2
|
+
export interface CrawlOptions {
|
|
3
|
+
/** Maximum number of pages to crawl */
|
|
4
|
+
maxPages?: number;
|
|
5
|
+
/** Maximum depth to crawl from the starting URL */
|
|
6
|
+
maxDepth?: number;
|
|
7
|
+
/** Patterns to exclude from crawling */
|
|
8
|
+
excludePatterns?: string[];
|
|
9
|
+
/** Patterns to include (if specified, only these will be crawled) */
|
|
10
|
+
includePatterns?: string[];
|
|
11
|
+
/** Whether to respect robots.txt */
|
|
12
|
+
respectRobots?: boolean;
|
|
13
|
+
/** Delay between requests in milliseconds */
|
|
14
|
+
delay?: number;
|
|
15
|
+
/** Whether to stay within the same domain */
|
|
16
|
+
stayOnDomain?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface CrawlResult {
|
|
19
|
+
/** Successfully discovered URLs */
|
|
20
|
+
urls: string[];
|
|
21
|
+
/** URLs that failed to crawl */
|
|
22
|
+
failedUrls: Array<{
|
|
23
|
+
url: string;
|
|
24
|
+
error: string;
|
|
25
|
+
}>;
|
|
26
|
+
/** Total time spent crawling */
|
|
27
|
+
crawlDuration: number;
|
|
28
|
+
/** Metadata about the crawl */
|
|
29
|
+
metadata: {
|
|
30
|
+
startUrl: string;
|
|
31
|
+
maxPages: number;
|
|
32
|
+
maxDepth: number;
|
|
33
|
+
actualDepth: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare class WebsiteCrawler {
|
|
37
|
+
private readonly logger;
|
|
38
|
+
private readonly browserManager;
|
|
39
|
+
private readonly visited;
|
|
40
|
+
private readonly discovered;
|
|
41
|
+
private readonly failedUrls;
|
|
42
|
+
private readonly depthMap;
|
|
43
|
+
constructor(browserManager: BrowserManager);
|
|
44
|
+
/**
|
|
45
|
+
* Crawl a website starting from the given URL
|
|
46
|
+
*/
|
|
47
|
+
crawlWebsite(startUrl: string, options?: CrawlOptions): Promise<CrawlResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Crawl a single page and discover links
|
|
50
|
+
*/
|
|
51
|
+
private crawlPage;
|
|
52
|
+
/**
|
|
53
|
+
* Extract links from a page
|
|
54
|
+
*/
|
|
55
|
+
private extractLinks;
|
|
56
|
+
/**
|
|
57
|
+
* Check if a domain is allowed based on the base domain
|
|
58
|
+
* Handles various cases like subdomains, www prefixes, and related domains
|
|
59
|
+
*/
|
|
60
|
+
private isDomainAllowed;
|
|
61
|
+
/**
|
|
62
|
+
* Check if a URL should be excluded based on patterns
|
|
63
|
+
*/
|
|
64
|
+
private shouldExcludeUrl;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=website-crawler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"website-crawler.d.ts","sourceRoot":"","sources":["../../src/utils/website-crawler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oCAAoC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gCAAgC;IAChC,UAAU,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;gBAE1C,cAAc,EAAE,cAAc;IAK1C;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAuFtF;;OAEG;YACW,SAAS;IA0HvB;;OAEG;YACW,YAAY;IAsD1B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAmCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA0BzB"}
|