UNPKG

@casoon/auditmysite

Version:

A comprehensive command-line tool for automated accessibility, security, performance, and SEO testing using Playwright and pa11y, based on sitemap URLs

164 lines 7.58 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.StandardPipeline = void 0; const sitemap_parser_1 = require("./sitemap-parser"); const accessibility_checker_1 = require("./accessibility-checker"); const output_generator_1 = require("./output-generator"); const detailed_report_1 = require("./detailed-report"); const path = __importStar(require("path")); class StandardPipeline { /** * Führt die Standard-Pipeline aus und erstellt KI-freundliche Output-Dateien */ async run(options) { const outputDir = options.outputDir || './accessibility-reports'; const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); // Parser initialisieren const parser = new sitemap_parser_1.SitemapParser(); // Sitemap parsen const urls = await parser.parseSitemap(options.sitemapUrl); console.log(`📄 Sitemap geladen: ${urls.length} URLs gefunden`); // URLs filtern const filterPatterns = ['[...slug]', '[category]', '/demo/']; const filteredUrls = parser.filterUrls(urls, { filterPatterns }); console.log(`🔍 URLs gefiltert: ${filteredUrls.length} URLs zum Testen`); // URLs zu lokalen URLs konvertieren const baseUrl = new URL(options.sitemapUrl).origin; const localUrls = parser.convertToLocalUrls(filteredUrls, baseUrl); // Accessibility-Checker initialisieren const checker = new accessibility_checker_1.AccessibilityChecker(); await checker.initialize(); console.log('🧪 Führe Accessibility-Tests aus...'); // Tests ausführen const testOptions = { maxPages: options.maxPages || 20, timeout: options.timeout || 10000, waitUntil: 'domcontentloaded', pa11yStandard: options.pa11yStandard || 'WCAG2AA' }; const results = await checker.testMultiplePages(localUrls.map(url => url.loc), testOptions); // Zusammenfassung erstellen const summary = { totalPages: localUrls.length, testedPages: results.length, passedPages: results.filter(r => r.passed).length, failedPages: results.filter(r => !r.passed).length, totalErrors: results.reduce((sum, r) => sum + r.errors.length, 0), totalWarnings: results.reduce((sum, r) => sum + r.warnings.length, 0), totalDuration: results.reduce((sum, r) => sum + r.duration, 0), results }; await checker.cleanup(); // Output-Dateien generieren const outputGenerator = new output_generator_1.OutputGenerator(); const outputFiles = []; // Markdown für Menschen (Standard) const mdOutputPath = path.join(outputDir, `accessibility-report-${timestamp}.md`); await outputGenerator.generateOutput(summary, { format: 'markdown', outputFile: mdOutputPath, includeDetails: options.includeDetails || true, includePa11yIssues: options.includePa11yIssues || false, summaryOnly: false }); outputFiles.push(mdOutputPath); // Detailed-Report generieren (falls gewünscht) if (options.generateDetailedReport !== false && summary.totalErrors > 0) { const detailedReportGenerator = new detailed_report_1.DetailedReportGenerator(); const detailedReportPath = await detailedReportGenerator.generateDetailedReport(summary, { outputDir: options.outputDir, includeContext: true, includeRecommendations: true, groupByType: true, includeCodeExamples: true }); outputFiles.push(detailedReportPath); } return { summary, outputFiles }; } /** * Führt eine schnelle Pipeline nur mit Markdown-Output aus */ async runQuick(options) { const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); // Parser initialisieren const parser = new sitemap_parser_1.SitemapParser(); // Sitemap parsen const urls = await parser.parseSitemap(options.sitemapUrl); // URLs filtern const filterPatterns = ['[...slug]', '[category]', '/demo/']; const filteredUrls = parser.filterUrls(urls, { filterPatterns }); // URLs zu lokalen URLs konvertieren const baseUrl = new URL(options.sitemapUrl).origin; const localUrls = parser.convertToLocalUrls(filteredUrls, baseUrl); // Accessibility-Checker initialisieren const checker = new accessibility_checker_1.AccessibilityChecker(); await checker.initialize(); // Tests ausführen const testOptions = { maxPages: options.maxPages || 10, timeout: options.timeout || 10000, waitUntil: 'domcontentloaded', pa11yStandard: options.pa11yStandard || 'WCAG2AA' }; const results = await checker.testMultiplePages(localUrls.map(url => url.loc), testOptions); // Zusammenfassung erstellen const summary = { totalPages: localUrls.length, testedPages: results.length, passedPages: results.filter(r => r.passed).length, failedPages: results.filter(r => !r.passed).length, totalErrors: results.reduce((sum, r) => sum + r.errors.length, 0), totalWarnings: results.reduce((sum, r) => sum + r.warnings.length, 0), totalDuration: results.reduce((sum, r) => sum + r.duration, 0), results }; await checker.cleanup(); // Nur Markdown-Output generieren const outputGenerator = new output_generator_1.OutputGenerator(); const markdownFile = `accessibility-report-${timestamp}.md`; await outputGenerator.generateOutput(summary, { format: 'markdown', outputFile: markdownFile, includeDetails: true, includePa11yIssues: false, summaryOnly: false }); return { summary, markdownFile }; } } exports.StandardPipeline = StandardPipeline; //# sourceMappingURL=standard-pipeline.js.map