@casoon/auditmysite
Version:
Professional website analysis suite with robust accessibility testing, Core Web Vitals performance monitoring, SEO analysis, and content optimization insights. Features isolated browser contexts, retry mechanisms, and comprehensive API endpoints for profe
106 lines • 4.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccessibilityService = void 0;
const parsers_1 = require("../core/parsers");
class AccessibilityService {
constructor() {
// Delay initialization until initialize() is called
this.checker = null;
this.parser = new parsers_1.SitemapParser();
}
async initialize() {
if (!this.checker) {
// Create BrowserPoolManager for AccessibilityChecker
const { BrowserPoolManager } = require('../core/browser/browser-pool-manager');
const poolManager = new BrowserPoolManager({
maxInstances: 3,
acquireTimeout: 30000,
destroyTimeout: 5000,
headless: true
});
await poolManager.initialize();
// Dynamically import AccessibilityChecker
const { AccessibilityChecker } = require('../core/accessibility');
this.checker = new AccessibilityChecker({
poolManager,
enableComprehensiveAnalysis: true
});
await this.checker.initialize();
}
}
async cleanup() {
await this.checker.cleanup();
}
async testSitemap(sitemapUrl, options = {}) {
try {
// Parse sitemap
const urls = await this.parser.parseSitemap(sitemapUrl);
// Apply filters and limits
const filterPatterns = ['[...slug]', '[category]', '/demo/'];
const filteredUrls = this.parser.filterUrls(urls, { filterPatterns });
const limitedUrls = filteredUrls.slice(0, options.maxPages || 20);
// Convert to TestOptions
const testOptions = {
timeout: options.timeout || 10000,
waitUntil: 'domcontentloaded',
pa11yStandard: options.standard || 'WCAG2AA',
verbose: options.verbose || false,
collectPerformanceMetrics: options.performanceReport,
lighthouse: options.performanceReport,
// Add other options as needed
};
// Run tests
const results = await this.checker.testMultiplePagesParallel(limitedUrls.map((url) => url.loc), testOptions);
// Generate summary
const summary = this.generateSummary(results);
// Generate reports if requested
const reports = {};
if (options.securityReport) {
reports.security = await this.generateSecurityReport(results);
}
return {
success: summary.successRate === 100,
results,
summary,
reports: reports.security ? { security: reports.security } : undefined
};
}
catch (error) {
return {
success: false,
results: [],
summary: {
totalPages: 0,
passedPages: 0,
failedPages: 0,
totalErrors: 0,
totalWarnings: 0,
successRate: 0
},
error: error instanceof Error ? error.message : String(error)
};
}
}
generateSummary(results) {
const totalPages = results.length;
const passedPages = results.filter(r => r.passed).length;
const failedPages = totalPages - passedPages;
const totalErrors = results.reduce((sum, r) => sum + r.errors.length, 0);
const totalWarnings = results.reduce((sum, r) => sum + r.warnings.length, 0);
const successRate = totalPages > 0 ? (passedPages / totalPages) * 100 : 0;
return {
totalPages,
passedPages,
failedPages,
totalErrors,
totalWarnings,
successRate
};
}
async generateSecurityReport(results) {
// Placeholder for security report
return `# Security Report\n\nSecurity scanning not yet implemented.`;
}
}
exports.AccessibilityService = AccessibilityService;
//# sourceMappingURL=accessibility-service.js.map