@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
JavaScript
;
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