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 5.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SimpleQueue = void 0; class SimpleQueue { constructor(options = {}) { this.queue = []; this.completed = []; this.failed = []; this.options = { maxRetries: 3, maxConcurrent: 1, priorityPatterns: [ { pattern: '/home', priority: 1 }, { pattern: '/', priority: 2 }, { pattern: '/about', priority: 3 }, { pattern: '/contact', priority: 3 }, { pattern: '/blog', priority: 4 }, { pattern: '/products', priority: 4 } ], ...options }; } /** * URLs zur Queue hinzufügen */ addUrls(urls) { const newUrls = urls.map(url => ({ url, priority: this.calculatePriority(url), status: 'pending', attempts: 0 })); // Duplikate entfernen const existingUrls = new Set(this.queue.map(item => item.url)); const uniqueNewUrls = newUrls.filter(item => !existingUrls.has(item.url)); this.queue.push(...uniqueNewUrls); // Nach Priorität sortieren this.queue.sort((a, b) => a.priority - b.priority); console.log(`📋 Added ${uniqueNewUrls.length} URLs to queue (${this.queue.length} total)`); } /** * Nächste URL aus der Queue holen */ getNextUrl() { const pendingUrl = this.queue.find(item => item.status === 'pending'); if (!pendingUrl) return null; pendingUrl.status = 'in-progress'; pendingUrl.attempts++; return pendingUrl; } /** * URL als abgeschlossen markieren */ markCompleted(url, result) { const item = this.queue.find(item => item.url === url); if (item) { item.status = 'completed'; item.result = result; this.completed.push(item); this.queue = this.queue.filter(item => item.url !== url); } } /** * URL als fehlgeschlagen markieren */ markFailed(url, error) { const item = this.queue.find(item => item.url === url); if (item) { if (item.attempts >= this.options.maxRetries) { item.status = 'failed'; item.error = error; this.failed.push(item); this.queue = this.queue.filter(item => item.url !== url); console.log(`❌ URL failed permanently: ${url} (${error})`); } else { item.status = 'pending'; item.error = error; console.log(`🔄 URL will be retried: ${url} (attempt ${item.attempts}/${this.options.maxRetries})`); } } } /** * Queue-Status abrufen */ getStatus() { const total = this.queue.length + this.completed.length + this.failed.length; const pending = this.queue.filter(item => item.status === 'pending').length; const inProgress = this.queue.filter(item => item.status === 'in-progress').length; const completed = this.completed.length; const failed = this.failed.length; const progress = total > 0 ? ((completed + failed) / total) * 100 : 0; return { total, pending, inProgress, completed, failed, progress: Math.round(progress) }; } /** * Alle abgeschlossenen Ergebnisse abrufen */ getCompletedResults() { return this.completed.map(item => item.result); } /** * Alle fehlgeschlagenen Ergebnisse abrufen */ getFailedResults() { return this.failed.map(item => ({ url: item.url, title: "", imagesWithoutAlt: 0, buttonsWithoutLabel: 0, headingsCount: 0, errors: [`Test failed: ${item.error}`], warnings: [], passed: false, duration: 0, })); } /** * Queue-Statistiken anzeigen */ showStats() { const status = this.getStatus(); console.log(`\n📊 Queue Statistics:`); console.log(` 📋 Total URLs: ${status.total}`); console.log(` ⏳ Pending: ${status.pending}`); console.log(` 🔄 In Progress: ${status.inProgress}`); console.log(` ✅ Completed: ${status.completed}`); console.log(` ❌ Failed: ${status.failed}`); console.log(` 📈 Progress: ${status.progress}%`); } /** * Priorität für URL berechnen */ calculatePriority(url) { const pattern = this.options.priorityPatterns.find(p => url.includes(p.pattern)); return pattern ? pattern.priority : 10; // Standard-Priorität } /** * Queue leeren */ clear() { this.queue = []; this.completed = []; this.failed = []; } /** * Fehlgeschlagene URLs erneut versuchen */ retryFailed() { const failedUrls = this.failed.map(item => item.url); this.failed = []; this.addUrls(failedUrls); console.log(`🔄 Added ${failedUrls.length} failed URLs back to queue`); } } exports.SimpleQueue = SimpleQueue; //# sourceMappingURL=simple-queue.js.map