diff --git a/README.md b/README.md index 1a99e80..37f6cd9 100644 --- a/README.md +++ b/README.md @@ -13,14 +13,40 @@ # About -Lumberjack runs [aXe](https://www.deque.com/axe/) accessibility checks on your entire website! +Lumberjack runs [axe](https://www.deque.com/axe/) accessibility checks on your entire website! -- Lumberjack reads your website's sitemap -- It spawns multiple Chromium instances and gets to scanning -- Finally, the results are aggregated and reported back +- Reads your website's sitemap +- Spawns multiple browser instances and starts scanning with axe +- Aggregates results and reports back # Usage +## CLI + +NPX (recommended for a single run) + ``` npx @jakepartusch/lumberjack --url https://google.com ``` + +Global Install (recommended for multiple runs) + +``` +npm install -g @jakepartusch/lumberjack +lumberjack --url https://google.com +``` + +## JavaScript (Node.js) + +``` +npm install @jakepartusch/lumberjack +``` + +``` +const lumberjack = require('@jakepartusch/lumberjack'); + +const myFunction = async () => { + const results = await lumberjack("https://google.com") + console.log(results); +} +``` diff --git a/index.js b/index.js index 2f726fa..5d98e25 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -const { chromium } = require("playwright"); +const { firefox, chromium, webkit } = require("playwright"); const Sitemapper = require("sitemapper"); const { chunks } = require("./src/util"); @@ -15,8 +15,7 @@ const fetchSitemapUrls = async baseUrl => { return sites.slice(0, maxSites); }; -const runAccessibilityTestsOnUrl = async url => { - const browser = await chromium.launch(); +const runAccessibilityTestsOnUrl = async (url, browser) => { const context = await browser.newContext(); const page = await context.newPage(); await page.goto(url); @@ -43,23 +42,36 @@ const runAccessibilityTestsOnUrl = async url => { })) }; }); - await browser.close(); return { url, ...axeViolations }; }; const runAllChecks = async (urls, spinner) => { - const chunkedUrls = [...chunks(urls, 5)]; + const chunkedUrls = [...chunks(urls, 3)]; const totalViolationsByPage = []; for (const urlChunk of chunkedUrls) { if (spinner) { spinner.text = `Running accessibility checks... (${totalViolationsByPage.length || 1} of ${urls.length} pages)`; } + const browserPromises = [ + chromium.launch(), + firefox.launch(), + webkit.launch() + ]; + const browsers = await Promise.all(browserPromises); const violationPromises = []; - for (const url of urlChunk) { - violationPromises.push(runAccessibilityTestsOnUrl(url)); + for (let i = 0; i < urlChunk.length; i++) { + const url = urlChunk[i]; + const browser = browsers[i]; + violationPromises.push(runAccessibilityTestsOnUrl(url, browser)); } const resolvedViolationsByPage = await Promise.all(violationPromises); + + const closedBrowserPromises = []; + for (const browser of browsers) { + closedBrowserPromises.push(browser.close()); + } + await Promise.all(closedBrowserPromises); totalViolationsByPage.push(...resolvedViolationsByPage); } return totalViolationsByPage; @@ -67,7 +79,8 @@ const runAllChecks = async (urls, spinner) => { const lumberjack = async (baseUrl, spinner) => { const sitemapUrls = await fetchSitemapUrls(baseUrl); - return runAllChecks(sitemapUrls, spinner); + const results = runAllChecks(sitemapUrls, spinner); + return results; }; module.exports = lumberjack; diff --git a/package.json b/package.json index 99c876f..c814a79 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@jakepartusch/lumberjack", - "version": "0.2.0", + "version": "0.3.0", "description": "Scans your entire website for accessibility issues", "main": "index.js", "bin": "./bin/cli.js",