UNPKG

@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

164 lines • 5.26 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 }; } /** * Add URLs to queue */ addUrls(urls) { const newUrls = urls.map(url => ({ url, priority: this.calculatePriority(url), status: 'pending', attempts: 0 })); // Remove duplicates const existingUrls = new Set(this.queue.map(item => item.url)); const uniqueNewUrls = newUrls.filter(item => !existingUrls.has(item.url)); this.queue.push(...uniqueNewUrls); // Sort by priority this.queue.sort((a, b) => a.priority - b.priority); console.log(`šŸ“‹ Added ${uniqueNewUrls.length} URLs to queue (${this.queue.length} total)`); } /** * Get next URL from queue */ getNextUrl() { const pendingUrl = this.queue.find(item => item.status === 'pending'); if (!pendingUrl) return null; pendingUrl.status = 'in-progress'; pendingUrl.attempts++; return pendingUrl; } /** * Mark URL as completed */ 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); } } /** * Mark URL as failed */ 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})`); } } } /** * Get queue status */ 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) }; } /** * Get all completed results */ getCompletedResults() { return this.completed.map(item => item.result); } /** * Get all failed results */ 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, })); } /** * Show queue statistics */ 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}%`); } /** * Calculate priority for URL */ calculatePriority(url) { const pattern = this.options.priorityPatterns.find(p => url.includes(p.pattern)); return pattern ? pattern.priority : 10; // Standard priority } /** * Clear queue */ clear() { this.queue = []; this.completed = []; this.failed = []; } /** * Retry failed URLs */ 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