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