From 388882e311fb0f662cc99c4da93a917fbe634a66 Mon Sep 17 00:00:00 2001 From: Tom Brunet Date: Tue, 16 May 2023 15:32:21 -0500 Subject: [PATCH 01/21] Update for Puppeteer 19 --- .github/workflows/master.yml | 6 +-- .github/workflows/publish.yml | 12 ++--- .github/workflows/test.yml | 22 ++++----- .../features/step_definitions/hooks.js | 2 +- .../jest-selenium/test/basic.test.js | 2 +- .../mocha-puppeteer-ts/package.json | 2 +- accessibility-checker/package.json | 6 +-- accessibility-checker/src-ts/index.ts | 12 ++--- .../src-ts/lib/ACBrowserManager.ts | 4 +- .../src-ts/lib/ACConfigManager.ts | 13 +++--- .../src-ts/lib/ACConstants.ts | 4 +- .../src-ts/lib/ACEngineManager.ts | 15 +++--- accessibility-checker/src-ts/lib/ACHelper.ts | 25 +++++----- .../src-ts/lib/ACReportManager.ts | 25 +++++----- .../src-ts/lib/api/IChecker.ts | 2 +- .../src-ts/lib/api/IEngine.ts | 2 +- .../src-ts/lib/log/ACMetricsLogger.ts | 5 +- .../src-ts/lib/reporters/ACReporterCSV.ts | 6 +-- .../src-ts/lib/reporters/ACReporterHTML.ts | 8 ++-- .../src-ts/lib/reporters/ACReporterJSON.ts | 4 +- .../src-ts/lib/reporters/ACReporterXLSX.ts | 12 ++--- .../src-ts/lib/reporters/ReportUtil.ts | 2 +- .../src-ts/lib/reporters/multiScanData.ts | 4 +- .../src-ts/lib/reporters/multiScanReport.ts | 12 ++--- accessibility-checker/src/package.json | 4 +- accessibility-checker/test-act-w3/main.js | 2 +- accessibility-checker/test-act/main.js | 2 +- .../aChecker.Content.Puppeteer.test.js | 46 +++++++++---------- ...nce.JSONObjectVerificationSelenium.test.js | 2 +- .../aChecker.Content.Selenium.test.js | 2 +- accessibility-checker/tsconfig.json | 16 +++---- 31 files changed, 137 insertions(+), 144 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 02fcf2d42..b6abbe70a 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -17,7 +17,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -61,7 +61,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -100,7 +100,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 51682c0c7..09d3eb0dd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -17,7 +17,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -56,7 +56,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -79,7 +79,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -102,7 +102,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -127,7 +127,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -197,7 +197,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0bb5c1463..481f1e0a2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -44,7 +44,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -86,7 +86,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -136,7 +136,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -182,7 +182,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -222,7 +222,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -263,7 +263,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -302,7 +302,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] # test-file: [karma.conf1.js, karma.conf1b.js, karma.conf2.js, karma.conf2b.js, karma.conf3.js] // conf1 and conf2 fail a lot test-file: [karma.conf1b.js, karma.conf2b.js, karma.conf3.js] @@ -346,7 +346,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -382,7 +382,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -426,7 +426,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 diff --git a/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/hooks.js b/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/hooks.js index f1f7254c4..2a73990dc 100644 --- a/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/hooks.js +++ b/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/hooks.js @@ -25,7 +25,7 @@ function getBrowserChrome() { const options = new chrome.Options(); options.addArguments("--disable-dev-shm-usage"); - options.addArguments("--headless"); + options.addArguments("--headless=new"); options.addArguments('--ignore-certificate-errors') let service = new chrome.ServiceBuilder(spath).build(); diff --git a/accessibility-checker/boilerplates/jest-selenium/test/basic.test.js b/accessibility-checker/boilerplates/jest-selenium/test/basic.test.js index 892d9e951..c97b18612 100644 --- a/accessibility-checker/boilerplates/jest-selenium/test/basic.test.js +++ b/accessibility-checker/boilerplates/jest-selenium/test/basic.test.js @@ -18,7 +18,7 @@ beforeAll(function() { const options = new chrome.Options(); options.addArguments("--disable-dev-shm-usage"); - options.addArguments("--headless"); + options.addArguments("--headless=new"); options.addArguments('--ignore-certificate-errors') const service = new chrome.ServiceBuilder(spath).build(); diff --git a/accessibility-checker/boilerplates/mocha-puppeteer-ts/package.json b/accessibility-checker/boilerplates/mocha-puppeteer-ts/package.json index fb4bee55a..396fe8cd0 100644 --- a/accessibility-checker/boilerplates/mocha-puppeteer-ts/package.json +++ b/accessibility-checker/boilerplates/mocha-puppeteer-ts/package.json @@ -13,7 +13,7 @@ "accessibility-checker": "*", "chai": "^4.3.0", "mocha": "^8.3.0", - "puppeteer": "^13.4.0", + "puppeteer": "^20.2.1", "typescript": "^4.1.5" } } diff --git a/accessibility-checker/package.json b/accessibility-checker/package.json index 60e355abf..b5b2256e3 100644 --- a/accessibility-checker/package.json +++ b/accessibility-checker/package.json @@ -1,6 +1,7 @@ { "name": "accessibility-checker", "version": "3.0.0", + "type": "module", "description": "Accessibility Checker for Node", "license": "SEE LICENSE IN LICENSE from the 'equal-access' repository", "main": "src/index.js", @@ -18,15 +19,14 @@ "url": "git@github.com/IBMa/equal-access/accessibility-checker" }, "engines": { - "node": ">=10" + "node": ">=16" }, "dependencies": { - "axios": "^0.27.2", "chromedriver": "*", "deep-diff": "^1.0.2", "exceljs": "^4.3.0", "js-yaml": "^4.1.0", - "puppeteer": "^13.0.0", + "puppeteer": "^20.2.1", "string-hash": "^1.1.3", "uuid": "^8.3.2" }, diff --git a/accessibility-checker/src-ts/index.ts b/accessibility-checker/src-ts/index.ts index 50f4f92ee..42386fb5e 100644 --- a/accessibility-checker/src-ts/index.ts +++ b/accessibility-checker/src-ts/index.ts @@ -14,12 +14,12 @@ limitations under the License. *****************************************************************************/ -import { ACBrowserManager } from "./lib/ACBrowserManager"; -import { ACConfigManager } from "./lib/ACConfigManager"; -import { ACEngineManager } from "./lib/ACEngineManager"; -import { getComplianceHelper } from "./lib/ACHelper"; -import { ACReportManager } from "./lib/ACReportManager"; -import { eAssertResult, ICheckerReport, ICheckerResult, IConfig, IConfigUnsupported, ReportResult } from "./lib/api/IChecker"; +import { ACBrowserManager } from "./lib/ACBrowserManager.js"; +import { ACConfigManager } from "./lib/ACConfigManager.js"; +import { ACEngineManager } from "./lib/ACEngineManager.js"; +import { getComplianceHelper } from "./lib/ACHelper.js"; +import { ACReportManager } from "./lib/ACReportManager.js"; +import { eAssertResult, ICheckerReport, ICheckerResult, IConfig, IConfigUnsupported, ReportResult } from "./lib/api/IChecker.js"; /** * This function is responsible performing a scan based on the context that is provided, following are * the supported context type: diff --git a/accessibility-checker/src-ts/lib/ACBrowserManager.ts b/accessibility-checker/src-ts/lib/ACBrowserManager.ts index a57a473dc..17cdc6304 100644 --- a/accessibility-checker/src-ts/lib/ACBrowserManager.ts +++ b/accessibility-checker/src-ts/lib/ACBrowserManager.ts @@ -1,6 +1,6 @@ import * as puppeteer from "puppeteer"; -import { IConfigUnsupported } from "./api/IChecker"; -import { ACConfigManager } from "./ACConfigManager"; +import { IConfigUnsupported } from "./api/IChecker.js"; +import { ACConfigManager } from "./ACConfigManager.js"; export class ACBrowserManager { diff --git a/accessibility-checker/src-ts/lib/ACConfigManager.ts b/accessibility-checker/src-ts/lib/ACConfigManager.ts index e8d087e11..4e02036c4 100644 --- a/accessibility-checker/src-ts/lib/ACConfigManager.ts +++ b/accessibility-checker/src-ts/lib/ACConfigManager.ts @@ -17,10 +17,9 @@ import * as pathLib from "path"; import * as fs from "fs"; import * as YAML from "js-yaml"; -import { ACConstants } from "./ACConstants"; +import { ACConstants } from "./ACConstants.js"; import { v4 as uuidv4 } from 'uuid'; -import { IConfig, IConfigUnsupported } from "./api/IChecker"; -import axios from "axios"; +import { IConfig, IConfigUnsupported } from "./api/IChecker.js"; /** * This function is responsible converting policies into an Array based on string or Array. @@ -100,8 +99,8 @@ async function processACConfig(ACConfig) { if (ACConfig.ignoreHTTPSErrors) { process.env.NODE_TLS_REJECT_UNAUTHORIZED="0" } - const response = await axios.get(ruleArchiveFile); - ruleArchiveParse = await response.data; + const response = await fetch(ruleArchiveFile); + ruleArchiveParse = await response.json(); } catch (err) { console.log(err); throw new Error(err); @@ -176,7 +175,7 @@ function initializeDefaults(config: IConfigUnsupported) { // Load in the package.json file so that we can extract the module name and the version to build // a toolID which needs to be used when results are build for the purpose of keeping track of // which tool is uploading the results. - let packageObject = require('../package.json'); + const packageObject = JSON.parse(fs.readFileSync('../package.json').toString()); // Build the toolID based on name and version config.toolID = packageObject.name + "-v" + packageObject.version; @@ -271,7 +270,7 @@ function loadConfigFromYAMLorJSONFile() { ACConstants.DEBUG && console.log("Loading: " + jsOrJSONFile) // Load in as json or js and return this object - return require(fileToCheck); + return JSON.parse(fs.readFileSync(fileToCheck).toString()); } } catch (e) { ACConstants.DEBUG && console.log("JSON or JS file does not exists, will load default config.") diff --git a/accessibility-checker/src-ts/lib/ACConstants.ts b/accessibility-checker/src-ts/lib/ACConstants.ts index c8b483189..1b85a95db 100644 --- a/accessibility-checker/src-ts/lib/ACConstants.ts +++ b/accessibility-checker/src-ts/lib/ACConstants.ts @@ -22,8 +22,8 @@ // Load all the modules that are needed import { tmpdir } from "os"; import * as pathLib from "path"; -import { IConfigUnsupported } from "./api/IChecker"; -import { eRuleLevel } from "./api/IEngine"; +import { IConfigUnsupported } from "./api/IChecker.js"; +import { eRuleLevel } from "./api/IEngine.js"; // Used to specify all the constant export const ACConstants : IConfigUnsupported = { diff --git a/accessibility-checker/src-ts/lib/ACEngineManager.ts b/accessibility-checker/src-ts/lib/ACEngineManager.ts index 67ce9949a..85ad663e0 100644 --- a/accessibility-checker/src-ts/lib/ACEngineManager.ts +++ b/accessibility-checker/src-ts/lib/ACEngineManager.ts @@ -1,7 +1,6 @@ -import { ACConfigManager } from "./ACConfigManager"; +import { ACConfigManager } from "./ACConfigManager.js"; import * as path from "path"; import * as fs from "fs"; -import axios from "axios"; let ace; @@ -117,18 +116,18 @@ try { if (!ACEngineManager.localLoadPromise) { ACEngineManager.localLoadPromise = new Promise(async (resolve, reject) => { let config = await ACConfigManager.getConfigUnsupported(); - const response = await axios.get(`${config.rulePack}/ace-node.js`); - const data = await response.data; + const response = await fetch(`${config.rulePack}/ace-node.js`); + const data = await response.text(); let engineDir = path.join(path.resolve(config.cacheFolder), "engine"); if (!fs.existsSync(engineDir)) { fs.mkdirSync(engineDir, { recursive: true }); } - let nodePath = path.join(engineDir, "ace-node") - fs.writeFile(nodePath + ".js", data, function (err) { + let nodePath = path.join(engineDir, "ace-node") + ".js"; + fs.writeFile(nodePath, data, async (err) => { try { err && console.log(err); - var ace_ibma = require(nodePath); - checker = new ace_ibma.Checker(); + let ace_ibma : any = await import(nodePath); + checker = new ace_ibma.default.Checker(); } catch (e) { console.log(e); return reject(e); diff --git a/accessibility-checker/src-ts/lib/ACHelper.ts b/accessibility-checker/src-ts/lib/ACHelper.ts index be5ba7430..46ad2af50 100644 --- a/accessibility-checker/src-ts/lib/ACHelper.ts +++ b/accessibility-checker/src-ts/lib/ACHelper.ts @@ -1,9 +1,9 @@ -import { ICheckerReport, ICheckerResult, IConfigUnsupported } from "./api/IChecker"; -import { ACBrowserManager } from "./ACBrowserManager"; -import { ACConfigManager } from "./ACConfigManager"; -import { ACEngineManager } from "./ACEngineManager"; -import { ACReportManager } from "./ACReportManager"; -import { Report } from "./api/IEngine"; +import { ICheckerReport, ICheckerResult, IConfigUnsupported } from "./api/IChecker.js"; +import { ACBrowserManager } from "./ACBrowserManager.js"; +import { ACConfigManager } from "./ACConfigManager.js"; +import { ACEngineManager } from "./ACEngineManager.js"; +import { ACReportManager } from "./ACReportManager.js"; +import { Report } from "./api/IEngine.js"; declare var after; @@ -31,11 +31,14 @@ async function initialize() { try { // If cucumber is the platform... - let {AfterAll} = require('cucumber'); - AfterAll(function (done) { - const rulePack = `${Config.rulePack}`; - initialize().then(() => ACReportManager.metricsLogger.sendLogsV2(() => ACBrowserManager.close().then(done), rulePack)); - }); + import("cucumber"!).then((module) => { + if (module.default.AfterAll) { + module.default.AfterAll(function (done) { + const rulePack = `${Config.rulePack}`; + initialize().then(() => ACReportManager.metricsLogger.sendLogsV2(() => ACBrowserManager.close().then(done), rulePack)); + }); + } + }) } catch (e) { if (typeof (after) !== "undefined") { after(function (done) { diff --git a/accessibility-checker/src-ts/lib/ACReportManager.ts b/accessibility-checker/src-ts/lib/ACReportManager.ts index a65ff303f..359cf980d 100644 --- a/accessibility-checker/src-ts/lib/ACReportManager.ts +++ b/accessibility-checker/src-ts/lib/ACReportManager.ts @@ -1,16 +1,17 @@ -import { eAssertResult, ICheckerError, ICheckerReport, ICheckerReportCounts, ICheckerResult, IConfigUnsupported, ILogger, ReportResult } from "./api/IChecker"; -import { ACConfigManager } from "./ACConfigManager"; -import { ACMetricsLogger } from "./log/ACMetricsLogger"; +import { eAssertResult, ICheckerError, ICheckerReport, ICheckerReportCounts, ICheckerResult, IConfigUnsupported, ILogger, ReportResult } from "./api/IChecker.js"; +import { ACConfigManager } from "./ACConfigManager.js"; +import { ACMetricsLogger } from "./log/ACMetricsLogger.js"; import * as path from "path"; -import { ACEngineManager } from "./ACEngineManager"; -import { ruleIdToLegacyId } from ".."; +import { ACEngineManager } from "./ACEngineManager.js"; +import { ruleIdToLegacyId } from "../index.js"; import * as DeepDiff from "deep-diff"; -import { ACReporterCSV } from "./reporters/ACReporterCSV"; -import { ACReporterXLSX } from "./reporters/ACReporterXLSX"; -import { initializeSummary, IScanSummary } from "./reporters/ReportUtil"; -import { ACReporterHTML } from "./reporters/ACReporterHTML"; -import { ACReporterJSON } from "./reporters/ACReporterJSON"; -import { eRuleLevel, Report, Rule } from "./api/IEngine"; +import { ACReporterCSV } from "./reporters/ACReporterCSV.js"; +import { ACReporterXLSX } from "./reporters/ACReporterXLSX.js"; +import { initializeSummary, IScanSummary } from "./reporters/ReportUtil.js"; +import { ACReporterHTML } from "./reporters/ACReporterHTML.js"; +import { ACReporterJSON } from "./reporters/ACReporterJSON.js"; +import { eRuleLevel, Report, Rule } from "./api/IEngine.js"; +import { readFileSync } from "fs"; export class ACReportManager { static config: IConfigUnsupported; @@ -1059,7 +1060,7 @@ export class ACReportManager { */ static getBaseline(label) { try { - let retVal = require(path.join(path.join(process.cwd(), ACReportManager.config.baselineFolder), label)); + let retVal : ICheckerReport = JSON.parse(readFileSync(path.join(path.join(process.cwd(), ACReportManager.config.baselineFolder), label)).toString()); if (retVal && retVal.results) { if (!this.refactorMap) { this.refactorMap = {} diff --git a/accessibility-checker/src-ts/lib/api/IChecker.ts b/accessibility-checker/src-ts/lib/api/IChecker.ts index 046891922..a1a6e04a6 100644 --- a/accessibility-checker/src-ts/lib/api/IChecker.ts +++ b/accessibility-checker/src-ts/lib/api/IChecker.ts @@ -1,4 +1,4 @@ -import { eRuleLevel, RuleDetails } from "./IEngine"; +import { eRuleLevel, RuleDetails } from "./IEngine.js"; export enum eAssertResult { ERROR = -1, diff --git a/accessibility-checker/src-ts/lib/api/IEngine.ts b/accessibility-checker/src-ts/lib/api/IEngine.ts index 13f5f2cfd..ba321912c 100644 --- a/accessibility-checker/src-ts/lib/api/IEngine.ts +++ b/accessibility-checker/src-ts/lib/api/IEngine.ts @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import { IMapResult } from "./IMapper"; +import { IMapResult } from "./IMapper.js"; export enum eRuleLevel { violation = "violation", diff --git a/accessibility-checker/src-ts/lib/log/ACMetricsLogger.ts b/accessibility-checker/src-ts/lib/log/ACMetricsLogger.ts index ed26974fd..db1c06983 100644 --- a/accessibility-checker/src-ts/lib/log/ACMetricsLogger.ts +++ b/accessibility-checker/src-ts/lib/log/ACMetricsLogger.ts @@ -21,8 +21,7 @@ *******************************************************************************/ // Load required modules -import { ILogger } from "../api/IChecker"; -import axios from "axios"; +import { ILogger } from "../api/IChecker.js"; /** * This function is responsible for constructing the accessibility-checker Metrics object which contains all the function @@ -131,7 +130,7 @@ export class ACMetricsLogger { // Dispatch the call to the metrics server // Istanbul is not able to capture the coverate of functions call in a callback therefore we need to skip /* istanbul ignore next */ - axios.get(this.metricsURLV2 + "/api/pub/meter/v2" + qs).then(() => { + fetch(this.metricsURLV2 + "/api/pub/meter/v2" + qs).then(() => { }).catch((_err) => { }).finally(() => { // Decrement the numProfiles to identify that scan has finished diff --git a/accessibility-checker/src-ts/lib/reporters/ACReporterCSV.ts b/accessibility-checker/src-ts/lib/reporters/ACReporterCSV.ts index b20cb19d7..939740883 100644 --- a/accessibility-checker/src-ts/lib/reporters/ACReporterCSV.ts +++ b/accessibility-checker/src-ts/lib/reporters/ACReporterCSV.ts @@ -17,9 +17,9 @@ // Load all the modules that are needed import * as pathLib from "path"; import * as fs from "fs"; -import { ACEngineManager } from "../ACEngineManager"; -import { IConfigUnsupported } from "../api/IChecker"; -import { IScanSummary } from "./ReportUtil"; +import { ACEngineManager } from "../ACEngineManager.js"; +import { IConfigUnsupported } from "../api/IChecker.js"; +import { IScanSummary } from "./ReportUtil.js"; declare var after; diff --git a/accessibility-checker/src-ts/lib/reporters/ACReporterHTML.ts b/accessibility-checker/src-ts/lib/reporters/ACReporterHTML.ts index 876ebeaed..c21838b42 100644 --- a/accessibility-checker/src-ts/lib/reporters/ACReporterHTML.ts +++ b/accessibility-checker/src-ts/lib/reporters/ACReporterHTML.ts @@ -17,10 +17,10 @@ // Load all the modules that are needed import * as pathLib from "path"; import * as fs from "fs"; -import { ACEngineManager } from "../ACEngineManager"; -import { IConfigUnsupported } from "../api/IChecker"; -import { IScanSummary } from "./ReportUtil"; -import { genReport } from "./genReport"; +import { ACEngineManager } from "../ACEngineManager.js"; +import { IConfigUnsupported } from "../api/IChecker.js"; +import { IScanSummary } from "./ReportUtil.js"; +import { genReport } from "./genReport.js"; declare var after; diff --git a/accessibility-checker/src-ts/lib/reporters/ACReporterJSON.ts b/accessibility-checker/src-ts/lib/reporters/ACReporterJSON.ts index df76cc5ce..b904c82dd 100644 --- a/accessibility-checker/src-ts/lib/reporters/ACReporterJSON.ts +++ b/accessibility-checker/src-ts/lib/reporters/ACReporterJSON.ts @@ -17,8 +17,8 @@ // Load all the modules that are needed import * as pathLib from "path"; import * as fs from "fs"; -import { IConfigUnsupported } from "../api/IChecker"; -import { IScanSummary, IScanSummaryCounts } from "./ReportUtil"; +import { IConfigUnsupported } from "../api/IChecker.js"; +import { IScanSummary, IScanSummaryCounts } from "./ReportUtil.js"; declare var after; diff --git a/accessibility-checker/src-ts/lib/reporters/ACReporterXLSX.ts b/accessibility-checker/src-ts/lib/reporters/ACReporterXLSX.ts index 566d7c3df..322e97ef5 100644 --- a/accessibility-checker/src-ts/lib/reporters/ACReporterXLSX.ts +++ b/accessibility-checker/src-ts/lib/reporters/ACReporterXLSX.ts @@ -17,12 +17,12 @@ // Load all the modules that are needed import * as pathLib from "path"; import * as fs from "fs"; -import { ACEngineManager } from "../ACEngineManager"; -import { ACConfigManager } from "../ACConfigManager"; -import { IConfigUnsupported } from "../api/IChecker"; -import { IScanSummary } from "./ReportUtil"; -import { MultiScanData } from "./multiScanData"; -import MultiScanReport from "./multiScanReport"; +import { ACEngineManager } from "../ACEngineManager.js"; +import { ACConfigManager } from "../ACConfigManager.js"; +import { IConfigUnsupported } from "../api/IChecker.js"; +import { IScanSummary } from "./ReportUtil.js"; +import { MultiScanData } from "./multiScanData.js"; +import MultiScanReport from "./multiScanReport.js"; declare var after; diff --git a/accessibility-checker/src-ts/lib/reporters/ReportUtil.ts b/accessibility-checker/src-ts/lib/reporters/ReportUtil.ts index 6ddd30a34..a5de777a7 100644 --- a/accessibility-checker/src-ts/lib/reporters/ReportUtil.ts +++ b/accessibility-checker/src-ts/lib/reporters/ReportUtil.ts @@ -1,4 +1,4 @@ -import { IConfigUnsupported } from "../api/IChecker"; +import { IConfigUnsupported } from "../api/IChecker.js"; export interface IPageScanSummary { label: string diff --git a/accessibility-checker/src-ts/lib/reporters/multiScanData.ts b/accessibility-checker/src-ts/lib/reporters/multiScanData.ts index 18c564a19..1fd12a068 100644 --- a/accessibility-checker/src-ts/lib/reporters/multiScanData.ts +++ b/accessibility-checker/src-ts/lib/reporters/multiScanData.ts @@ -15,8 +15,8 @@ *****************************************************************************/ -const stringHash = require("string-hash"); -import { IConfigUnsupported } from "../api/IChecker"; +import * as stringHash from "string-hash"; +import { IConfigUnsupported } from "../api/IChecker.js"; import { report } from 'process'; export class MultiScanData { diff --git a/accessibility-checker/src-ts/lib/reporters/multiScanReport.ts b/accessibility-checker/src-ts/lib/reporters/multiScanReport.ts index a581e2700..e08780591 100644 --- a/accessibility-checker/src-ts/lib/reporters/multiScanReport.ts +++ b/accessibility-checker/src-ts/lib/reporters/multiScanReport.ts @@ -14,14 +14,8 @@ limitations under the License. *****************************************************************************/ -import { writeFileSync } from 'fs'; -import ReportUtil from "./multiScanReportUtil"; -// import ReportSummaryUtil from '../../../util/reportSummaryUtil'; - -// import ExcelJS from "exceljs" -const ExcelJS = require('exceljs'); -const fs = require('fs'); - +import * as ExcelJS from "exceljs"; +import * as fs from "fs"; export default class MultiScanReport { @@ -30,7 +24,7 @@ export default class MultiScanReport { var reportWorkbook = MultiScanReport.createReportWorkbook(storedScans, scanType, storedScanCount, archives, toolID); // create binary buffer - const buffer = await reportWorkbook.xlsx.writeBuffer(); + const buffer : any = await reportWorkbook.xlsx.writeBuffer(); fs.writeFileSync(fileName, buffer); } diff --git a/accessibility-checker/src/package.json b/accessibility-checker/src/package.json index 4219ef30d..171a19035 100644 --- a/accessibility-checker/src/package.json +++ b/accessibility-checker/src/package.json @@ -1,6 +1,7 @@ { "name": "accessibility-checker", "version": "3.0.0", + "type": "module", "description": "An automated testing tools for accessibility testing using Puppeteer, Selenium, or Zombie", "main": "index.js", "scripts": { @@ -18,12 +19,11 @@ "author": "IBM Accessibility", "license": "Apache-2.0", "dependencies": { - "axios": "^0.27.2", "chromedriver": "*", "deep-diff": "^1.0.2", "exceljs": "^4.3.0", "js-yaml": "^4.1.0", - "puppeteer": "^13.0.0", + "puppeteer": "^20.2.1", "string-hash": "^1.1.3", "uuid": "^8.3.2" }, diff --git a/accessibility-checker/test-act-w3/main.js b/accessibility-checker/test-act-w3/main.js index 81f974cbc..fa94c2046 100644 --- a/accessibility-checker/test-act-w3/main.js +++ b/accessibility-checker/test-act-w3/main.js @@ -12,7 +12,7 @@ const fs = require("fs"); } // Setup the Puppeteer test environment - let browser = await puppeteer.launch({ headless: true, ignoreHTTPSErrors: true }); + let browser = await puppeteer.launch({ headless: 'new', ignoreHTTPSErrors: true }); let pupPage = await browser.newPage(); await pupPage.setRequestInterception(true); pupPage.on('request', request => { diff --git a/accessibility-checker/test-act/main.js b/accessibility-checker/test-act/main.js index e822ffaad..03fe81510 100644 --- a/accessibility-checker/test-act/main.js +++ b/accessibility-checker/test-act/main.js @@ -9,7 +9,7 @@ const fs = require("fs"); "@graph": [] } let ruleTestInfo = await getTestcases(); - let browser = await puppeteer.launch({ headless: true, ignoreHTTPSErrors: true }); + let browser = await puppeteer.launch({ headless: 'new', ignoreHTTPSErrors: true }); let pupPage = await browser.newPage(); await pupPage.setRequestInterception(true); pupPage.on('request', request => { diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js index 23ec87f09..4f5067a47 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js @@ -1,5 +1,5 @@ - /****************************************************************************** - Copyright:: 2020- IBM, Inc +/****************************************************************************** + Copyright:: 2020- IBM, Inc Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -12,18 +12,19 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - *****************************************************************************/ +*****************************************************************************/ - 'use strict'; +'use strict'; -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src"); -const ace = require("../../../../../accessibility-checker-engine/dist/ace-node"); -var testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); -var gdirs = fs.readdirSync(testRootDir); -var expect = require("chai").expect; +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; +import { expect } from "chai"; +import puppeteer from 'puppeteer'; +let unitTestcaseHTML = {}; +let testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); +let gdirs = fs.readdirSync(testRootDir); const mapRuleToG = aChecker.ruleIdToLegacyId; @@ -36,7 +37,6 @@ for (const key in mapRuleToG) { let validList = {}; let policyMap = {}; const checker = new ace.Checker(); -const puppeteer = require('puppeteer'); let browser; let page; before(async function () { @@ -67,13 +67,13 @@ after(async function () { }) gdirs.forEach(function (gdir) { - var gdir = path.join(testRootDir, gdir) + gdir = path.join(testRootDir, gdir) if (fs.lstatSync(gdir).isDirectory()) { - var files = fs.readdirSync(gdir); + let files = fs.readdirSync(gdir); files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(gdir, f); + f = path.join(gdir, f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); @@ -81,7 +81,7 @@ gdirs.forEach(function (gdir) { }); // Skip test cases that don't work in this environment (e.g., can't disable meta refresh in chrome) -var skipList = [ +let skipList = [ // Not in Karma Conf Skip list // Testcase has a script reference to a file, which traps zombie when loaded as a string @@ -119,7 +119,7 @@ var skipList = [ ] -var skipMap = {} +let skipMap = {} skipList.forEach(function (skip) { skipMap[skip] = true; }); @@ -131,13 +131,13 @@ describe("Rule Unit Tests As File URL", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { if (unitTestFile in skipMap) continue; // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. @@ -162,7 +162,7 @@ describe("Rule Unit Tests As File URL", function () { // Extract the unitTestcase data file from the unitTestcase hash map. // This will contain the full content of the testcase file. Includes the document // object also. - var actualMap = {}; + let actualMap = {}; let report = null; let puppeteer = null; await page.goto("file://"+unitTestFile); diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js index 5602bed81..57b957ed4 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js @@ -65,7 +65,7 @@ if (userBrowser.toUpperCase() === "FIREFOX") { const options = new chrome.Options(); options.addArguments("--disable-dev-shm-usage"); - options.addArguments("--headless"); + options.addArguments("--headless=new"); options.addArguments('--ignore-certificate-errors') browser = new webdriver.Builder() diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js index 36cd34da4..ae97f47b3 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js @@ -97,7 +97,7 @@ if (userBrowser.toUpperCase() === "FIREFOX") { } catch (e) {} const options = new chrome.Options(); options.addArguments("--disable-dev-shm-usage"); - options.addArguments("--headless"); + options.addArguments("--headless=new"); options.addArguments('--ignore-certificate-errors') browser = new webdriver.Builder() diff --git a/accessibility-checker/tsconfig.json b/accessibility-checker/tsconfig.json index 8cb6dc230..0cd341f05 100644 --- a/accessibility-checker/tsconfig.json +++ b/accessibility-checker/tsconfig.json @@ -1,21 +1,19 @@ { "compilerOptions": { + "target": "ES6", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "module": "ESNext", + "moduleResolution": "node", + "lib": ["es2016", "esnext", "dom"], "declaration": true, "allowJs": true, - "target": "ES5", "removeComments": false, "noEmitOnError": true, "sourceMap": true, - "moduleResolution": "node", "alwaysStrict": true, - "experimentalDecorators": true, - // "module": "commonjs", + "esModuleInterop": true, "outDir": "src", - "emitDecoratorMetadata": true, - "lib": [ - "dom", - "es7" - ] }, "include": [ "src-ts/**/*.ts", From 63c63d424d7ae51e1300a8464fb912669538fae1 Mon Sep 17 00:00:00 2001 From: Tom Brunet Date: Wed, 17 May 2023 00:18:59 -0500 Subject: [PATCH 02/21] Update imports for ESM --- accessibility-checker/src-ts/bin/achecker.js | 10 +- .../src-ts/lib/ACConstants.ts | 3 +- accessibility-checker/src-ts/lib/ACHelper.ts | 48 +- .../src-ts/lib/ACReportManager.ts | 77 +- .../src-ts/lib/api/IChecker.ts | 2 +- accessibility-checker/test-act-w3/act.js | 30 +- accessibility-checker/test-act-w3/main.js | 6 +- accessibility-checker/test-act/act.js | 30 +- accessibility-checker/test-act/main.js | 6 +- .../aChecker.Content.Puppeteer.test.js | 30 +- .../Baseline_aChecker.Baseline.html.json | 1680 +++++++++-------- .../Baseline_aChecker.Baseline2.html.json | 849 +++------ .../IBMa.Defined.test.js | 6 +- .../OpenAjax.Defined.test.js | 6 +- .../RPT.Defined.test.js | 6 +- .../ValidationResult.Defined.test.js | 6 +- .../getRule.Defined.test.js | 4 +- .../aChecker.Baseline.test.js | 33 +- .../ACHelper.test.js | 6 +- .../aChecker.Config.Defined.test.js | 41 +- .../aChecker.Defined.test.js | 4 +- ...tCompliance.JSONObjectVerification.test.js | 35 +- .../aChecker.Content.Zombie.test.js | 40 +- .../aChecker.Scans/aChecker.Content.test.js | 40 +- .../aChecker.Scans/aChecker.URL.test.js | 41 +- .../aChecker.assertionCompliance.test.js | 34 +- .../aChecker.Content.Playwright.spec.mjs | 24 +- ...nce.JSONObjectVerificationSelenium.test.js | 115 +- .../aChecker.Content.Selenium.test.js | 107 +- 29 files changed, 1533 insertions(+), 1786 deletions(-) diff --git a/accessibility-checker/src-ts/bin/achecker.js b/accessibility-checker/src-ts/bin/achecker.js index 10917b45f..4097c33bc 100755 --- a/accessibility-checker/src-ts/bin/achecker.js +++ b/accessibility-checker/src-ts/bin/achecker.js @@ -15,11 +15,11 @@ See the License for the specific language governing permissions and limitations under the License. *****************************************************************************/ - -const aChecker = require("../index.js") -const fs = require('fs'); -const readline = require('readline'); -const path = require("path"); + +import * as aChecker from "../index.js"; +import * as fs from "fs"; +import * as readline from "readline"; +import * as path from "path"; let validCLParams = [ "inputFile" diff --git a/accessibility-checker/src-ts/lib/ACConstants.ts b/accessibility-checker/src-ts/lib/ACConstants.ts index 1b85a95db..b2e62b63b 100644 --- a/accessibility-checker/src-ts/lib/ACConstants.ts +++ b/accessibility-checker/src-ts/lib/ACConstants.ts @@ -81,5 +81,6 @@ export const ACConstants : IConfigUnsupported = { // both json and js are present it loads js first. configFiles: [".achecker.yml", ".achecker.yaml", "achecker", "aceconfig", pathLib.join(".config", ".achecker.yml"), pathLib.join(".config", ".achecker.yaml"), pathLib.join(".config", "achecker"), pathLib.join(".config", "aceconfig")], - ignoreHTTPSErrors: false + ignoreHTTPSErrors: false, + headless: "new" }; diff --git a/accessibility-checker/src-ts/lib/ACHelper.ts b/accessibility-checker/src-ts/lib/ACHelper.ts index 46ad2af50..f84fe5385 100644 --- a/accessibility-checker/src-ts/lib/ACHelper.ts +++ b/accessibility-checker/src-ts/lib/ACHelper.ts @@ -29,36 +29,38 @@ async function initialize() { return ACEngineManager.loadEngineLocal(); } -try { - // If cucumber is the platform... - import("cucumber"!).then((module) => { +(async () => { + try { + // If cucumber is the platform... + let module = (await import("cucumber"!)); if (module.default.AfterAll) { module.default.AfterAll(function (done) { const rulePack = `${Config.rulePack}`; initialize().then(() => ACReportManager.metricsLogger.sendLogsV2(() => ACBrowserManager.close().then(done), rulePack)); }); } - }) -} catch (e) { - if (typeof (after) !== "undefined") { - after(function (done) { - if (Config) { - const rulePack = `${Config.rulePack}/ace`; - initialize().then(() => ACReportManager.metricsLogger.sendLogsV2(() => ACBrowserManager.close().then(done), rulePack)); - } else { - done(); - } - }); - } else { - process.on('beforeExit', async function () { - if (Config) { - const rulePack = `${Config.rulePack}/ace`; - initialize().then(() => ACReportManager.metricsLogger.sendLogsV2(null, rulePack)); - ACBrowserManager.close(); - } - }); + } catch (e) { + if (typeof (after) !== "undefined") { + after(function (done) { + if (Config) { + const rulePack = `${Config.rulePack}/ace`; + initialize().then(() => ACReportManager.metricsLogger.sendLogsV2(() => ACBrowserManager.close().then(done), rulePack)); + } else { + done(); + } + }); + } else { + process.on('beforeExit', async function () { + if (Config) { + const rulePack = `${Config.rulePack}/ace`; + initialize().then(() => ACReportManager.metricsLogger.sendLogsV2(null, rulePack)); + ACBrowserManager.close(); + } + }); + } } -} +})(); + function areValidPolicy(valPolicies, curPol) { let isValPol = false; diff --git a/accessibility-checker/src-ts/lib/ACReportManager.ts b/accessibility-checker/src-ts/lib/ACReportManager.ts index 359cf980d..10a227011 100644 --- a/accessibility-checker/src-ts/lib/ACReportManager.ts +++ b/accessibility-checker/src-ts/lib/ACReportManager.ts @@ -4,7 +4,7 @@ import { ACMetricsLogger } from "./log/ACMetricsLogger.js"; import * as path from "path"; import { ACEngineManager } from "./ACEngineManager.js"; import { ruleIdToLegacyId } from "../index.js"; -import * as DeepDiff from "deep-diff"; +import DeepDiff from 'deep-diff'; import { ACReporterCSV } from "./reporters/ACReporterCSV.js"; import { ACReporterXLSX } from "./reporters/ACReporterXLSX.js"; import { initializeSummary, IScanSummary } from "./reporters/ReportUtil.js"; @@ -1060,7 +1060,8 @@ export class ACReportManager { */ static getBaseline(label) { try { - let retVal : ICheckerReport = JSON.parse(readFileSync(path.join(path.join(process.cwd(), ACReportManager.config.baselineFolder), label)).toString()); + let baselineFilename = path.join(path.join(process.cwd(), ACReportManager.config.baselineFolder), label+".json"); + let retVal : ICheckerReport = JSON.parse(readFileSync(baselineFilename).toString()); if (retVal && retVal.results) { if (!this.refactorMap) { this.refactorMap = {} @@ -1141,8 +1142,6 @@ export class ACReportManager { }; static ignoreExtraBaselineViolations(actualReport, baselineReport) { - let result = null; - let existingRuleIDs = []; // Using for loop to make is sync code let ignoredCount = 0; let changedCounts = actualReport.summary.counts; @@ -1150,44 +1149,44 @@ export class ACReportManager { let currentActualReport = actualReport.results; const currentBaselineReport = baselineReport; // a report exists in the baseline for the iframe + let legacyBaseline = false; if (currentBaselineReport && currentBaselineReport.length === 1) { - let legacyBaseline = !!currentBaselineReport[0].issues; - for (const issue of currentActualReport) { - let currentRuleID = issue.ruleId; - let currentLevel = issue.level; - let currentXPATH = issue.path.dom; - //check if the issue exists in baseline already - let result = - legacyBaseline && currentBaselineReport[0].issues.filter(issue => issue.ruleId in ruleIdToLegacyId && ruleIdToLegacyId[issue.ruleId] === currentRuleID && issue.level === currentLevel && issue.xpath === currentXPATH) - || !legacyBaseline && currentBaselineReport.results.filter(issue => issue.ruleId === currentRuleID && issue.level === currentLevel && issue.dom.path === currentXPATH); - if (result && result.length !== 0) { - //violation exists in baseline, add ignore:true - issue.ignored = true; - ignoredCount++; - if (issue.level === "violation") { - changedCounts.violation--; - } - if (issue.level === "potentialviolation") { - changedCounts.potentialviolation--; - } - if (issue.level === "recommendation") { - changedCounts.recommendation--; - } - if (issue.level === "potentialrecommendation") { - changedCounts.potentialrecommendation--; - } - if (issue.level === "manual") { - changedCounts.manual--; - } - if (issue.level === "pass") { - changedCounts.pass--; - } - - } else { - issue.ignored = false; + legacyBaseline = !!currentBaselineReport[0].issues; + } + for (const issue of currentActualReport) { + let currentRuleID = issue.ruleId; + let currentLevel = issue.level; + let currentXPATH = issue.path.dom; + //check if the issue exists in baseline already + let result = + legacyBaseline && currentBaselineReport[0].issues.filter(issue => issue.ruleId in ruleIdToLegacyId && ruleIdToLegacyId[issue.ruleId] === currentRuleID && issue.level === currentLevel && issue.xpath === currentXPATH) + || !legacyBaseline && currentBaselineReport.results.filter(issue => issue.ruleId === currentRuleID && issue.level === currentLevel && issue.path.dom === currentXPATH); + if (result && result.length !== 0) { + //violation exists in baseline, add ignore:true + issue.ignored = true; + ignoredCount++; + if (issue.level === "violation") { + changedCounts.violation--; + } + if (issue.level === "potentialviolation") { + changedCounts.potentialviolation--; + } + if (issue.level === "recommendation") { + changedCounts.recommendation--; + } + if (issue.level === "potentialrecommendation") { + changedCounts.potentialrecommendation--; + } + if (issue.level === "manual") { + changedCounts.manual--; + } + if (issue.level === "pass") { + changedCounts.pass--; } - } + } else { + issue.ignored = false; + } } // adding ignore count to summary diff --git a/accessibility-checker/src-ts/lib/api/IChecker.ts b/accessibility-checker/src-ts/lib/api/IChecker.ts index a1a6e04a6..65ab0686a 100644 --- a/accessibility-checker/src-ts/lib/api/IChecker.ts +++ b/accessibility-checker/src-ts/lib/api/IChecker.ts @@ -105,7 +105,7 @@ export type IConfigUnsupported = IConfig & { /** * (optional) If the tool allows, should we run headless */ - headless?: boolean + headless?: boolean | "new" /** * (optional) If the tool allows, set the maximum number of tabs to open diff --git a/accessibility-checker/test-act-w3/act.js b/accessibility-checker/test-act-w3/act.js index de257449e..dfc6d6b9e 100644 --- a/accessibility-checker/test-act-w3/act.js +++ b/accessibility-checker/test-act-w3/act.js @@ -7,8 +7,7 @@ 'use strict'; -const aChecker = require("../src/index"); -const request = require("request"); +import * as aChecker from "../src/index.js"; const rulesetP = aChecker.getRuleset('IBM_Accessibility'); async function getAceMapping() { @@ -62,22 +61,19 @@ async function getAceMapping() { async function getTestcases() { let aceMapping = await getAceMapping(); let ruleTestInfo = {} - return await new Promise((resolve, reject) => { - request("https://www.w3.org/WAI/content-assets/wcag-act-rules/testcases.json", (err, req, body) => { - let testcaseInfo = JSON.parse(body); - for (const testcase of testcaseInfo.testcases) { - // if (testcase.ruleId in aceMapping) { - ruleTestInfo[testcase.ruleId] = ruleTestInfo[testcase.ruleId] || { - aceRules: aceMapping[testcase.ruleId], - label: testcase.ruleName, - testcases: [] - } - ruleTestInfo[testcase.ruleId].testcases.push(testcase); - // } + let resp = await fetch("https://www.w3.org/WAI/content-assets/wcag-act-rules/testcases.json"); + let testcaseInfo = await resp.json(); + for (const testcase of testcaseInfo.testcases) { + // if (testcase.ruleId in aceMapping) { + ruleTestInfo[testcase.ruleId] = ruleTestInfo[testcase.ruleId] || { + aceRules: aceMapping[testcase.ruleId], + label: testcase.ruleName, + testcases: [] } - resolve(ruleTestInfo); - }); - }); + ruleTestInfo[testcase.ruleId].testcases.push(testcase); + // } + } + return ruleTestInfo; } async function getAssertion(ruleId, aceRules, result) { diff --git a/accessibility-checker/test-act-w3/main.js b/accessibility-checker/test-act-w3/main.js index fa94c2046..99271133a 100644 --- a/accessibility-checker/test-act-w3/main.js +++ b/accessibility-checker/test-act-w3/main.js @@ -1,8 +1,8 @@ 'use strict'; -const puppeteer = require('puppeteer'); -const { getTestcases, getResult } = require("./act"); -const fs = require("fs"); +import * as puppeteer from "puppeteer"; +import { getTestcases, getResult } from "./act"; +import * as fs from "fs"; (async () => { // Fetch the testcases from ACT let ruleTestInfo = await getTestcases(); diff --git a/accessibility-checker/test-act/act.js b/accessibility-checker/test-act/act.js index 74e50bc79..073d79b14 100644 --- a/accessibility-checker/test-act/act.js +++ b/accessibility-checker/test-act/act.js @@ -7,8 +7,7 @@ 'use strict'; -const aChecker = require("../src/index"); -const request = require("request"); +import * as aChecker from "../src/index.js"; async function getAceMapping() { let rules = await aChecker.getRules(); @@ -61,22 +60,19 @@ async function getAceMapping() { async function getTestcases() { let aceMapping = await getAceMapping(); let ruleTestInfo = {} - return await new Promise((resolve, reject) => { - request("https://act-rules.github.io/testcases.json", (err, req, body) => { - let testcaseInfo = JSON.parse(body); - for (const testcase of testcaseInfo.testcases) { - if (testcase.ruleId in aceMapping) { - ruleTestInfo[testcase.ruleId] = ruleTestInfo[testcase.ruleId] || { - aceRules: aceMapping[testcase.ruleId], - label: testcase.ruleName, - testcases: [] - } - ruleTestInfo[testcase.ruleId].testcases.push(testcase); - } + let resp = await fetch("https://act-rules.github.io/testcases.json"); + let testcaseInfo = await resp.json(); + for (const testcase of testcaseInfo.testcases) { + if (testcase.ruleId in aceMapping) { + ruleTestInfo[testcase.ruleId] = ruleTestInfo[testcase.ruleId] || { + aceRules: aceMapping[testcase.ruleId], + label: testcase.ruleName, + testcases: [] } - resolve(ruleTestInfo); - }); - }); + ruleTestInfo[testcase.ruleId].testcases.push(testcase); + } + } + return ruleTestInfo; } async function getResult(page, testcaseId, aceRules, bSkip) { diff --git a/accessibility-checker/test-act/main.js b/accessibility-checker/test-act/main.js index 03fe81510..f1812c4fd 100644 --- a/accessibility-checker/test-act/main.js +++ b/accessibility-checker/test-act/main.js @@ -1,8 +1,8 @@ 'use strict'; -const puppeteer = require('puppeteer'); -const { getTestcases, getResult } = require("./act"); -const fs = require("fs"); +import * as puppeteer from 'puppeteer'; +import { getTestcases, getResult } from "./act"; +import * as fs from "fs"; (async () => { let earlResult = { "@context": "https://act-rules.github.io/earl-context.json", diff --git a/accessibility-checker/test/a11y-rule-test-able/aChecker.Content.Puppeteer.test.js b/accessibility-checker/test/a11y-rule-test-able/aChecker.Content.Puppeteer.test.js index e17d61f09..637505344 100755 --- a/accessibility-checker/test/a11y-rule-test-able/aChecker.Content.Puppeteer.test.js +++ b/accessibility-checker/test/a11y-rule-test-able/aChecker.Content.Puppeteer.test.js @@ -14,20 +14,25 @@ limitations under the License. *****************************************************************************/ - 'use strict'; - -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; +'use strict'; +import * as fs from "fs"; +import * as path from "path"; //Using local checker and location -var aChecker = require("../../src"); +import * as aChecker from "../../src/index.js"; +import ace from "../../../accessibility-checker-engine/dist/ace-node.js"; //Using a checker local checker engine -const ace = require("../../../accessibility-checker-engine/dist/ace-node"); +import { expect } from "chai"; +import {fileURLToPath} from 'url'; +import * as puppeteer from "puppeteer"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +let unitTestcaseHTML = {}; //Location of tests with path so fs can read? const urlList = fs.readFileSync(path.join(__dirname,"listofURLs.txt")).toString(); console.log(urlList); const urls = urlList.split(/[\r\n]+/); -var expect = require("chai").expect; const mapRuleToG = aChecker.ruleIdToLegacyId; @@ -40,7 +45,6 @@ for (const key in mapRuleToG) { let validList = {}; let policyMap = {}; const checker = new ace.Checker(); -const puppeteer = require('puppeteer'); let browser; let page; before(async function () { @@ -71,7 +75,7 @@ after(async function () { }) // Skip test cases that don't work in this environment (e.g., can't disable meta refresh in chrome) -var skipList = [ +let skipList = [ // Not in Karma Conf Skip list // Testcase has a script reference to a file, which traps zombie when loaded as a string @@ -107,7 +111,7 @@ var skipList = [ path.join(process.cwd(), "..", "accessibility-checker-engine", "test", "v2", "checker", "accessibility", "rules", "page_title_valid_ruleunit","Title-empty.html"), path.join(process.cwd(), "..", "accessibility-checker-engine", "test", "v2", "checker", "accessibility", "rules", "page_title_valid_ruleunit","Title-invalidSpaces.html"), ] -var skipMap = {} +let skipMap = {} skipList.forEach(function (skip) { skipMap[skip] = true; }); @@ -119,7 +123,7 @@ describe("Rule Unit Tests As File URL", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // Loop over all the unitTestcase html/htm files and perform a scan for them for (const url of urls) { @@ -142,7 +146,7 @@ describe("Rule Unit Tests As File URL", function () { // Extract the unitTestcase data file from the unitTestcase hash map. // This will contain the full content of the testcase file. Includes the document // object also. - var actualMap = {}; + let actualMap = {}; let report = null; let puppeteer = null; await page.goto(url); diff --git a/accessibility-checker/test/baselines/Baseline_aChecker.Baseline.html.json b/accessibility-checker/test/baselines/Baseline_aChecker.Baseline.html.json index b2e37df92..20cdb0d77 100644 --- a/accessibility-checker/test/baselines/Baseline_aChecker.Baseline.html.json +++ b/accessibility-checker/test/baselines/Baseline_aChecker.Baseline.html.json @@ -1,808 +1,876 @@ { - "results": [{ - "ruleId": "WCAG20_Img_HasAlt", - "value": ["VIOLATION", "FAIL"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Fail_2", - "message": "Image does not have an 'alt' attribute short text alternative", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "", - "category": "Accessibility", - "ignored": false, - "level": "violation" - }, { - "ruleId": "WCAG20_Html_HasLang", - "value": ["VIOLATION", "FAIL"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Fail_3", - "message": "Page detected as HTML, but does not have a 'lang' attribute", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "", - "category": "Accessibility", - "ignored": false, - "level": "violation" - }, { - "ruleId": "WCAG20_Doc_HasTitle", - "value": ["VIOLATION", "FAIL"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Fail_2", - "message": "Missing element in <head> element", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "violation" - }, { - "ruleId": "WCAG20_Body_FirstASkips_Native_Host_Sematics", - "value": ["VIOLATION", "FAIL"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Fail_1", - "message": "The page does not provide a way to quickly navigate to the main content (ARIA \"main\" landmark or a skip link)", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "violation" - }, { - "ruleId": "RPT_Html_SkipNav", - "value": ["VIOLATION", "POTENTIAL"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Potential_1", - "message": "Verify there is a way to bypass blocks of content that are repeated on multiple Web pages", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "potentialviolation" - }, { - "ruleId": "WCAG20_Text_LetterSpacing", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "WCAG20_Text_LetterSpacing", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "WCAG20_Text_LetterSpacing", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "WCAG20_Text_LetterSpacing", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "WCAG20_Text_Emoticons", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "WCAG20_Text_Emoticons", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "WCAG20_Text_Emoticons", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "WCAG20_Text_Emoticons", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "RPT_Text_SensoryReference", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "RPT_Text_SensoryReference", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 1, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "RPT_List_UseMarkup", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "RPT_List_UseMarkup", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "RPT_List_UseMarkup", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "RPT_List_UseMarkup", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "RPT_Img_AltCommonMisuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 1, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "IBMA_Color_Contrast_WCAG2AA_PV", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "IBMA_Color_Contrast_WCAG2AA_PV", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "IBMA_Color_Contrast_WCAG2AA_PV", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" - }, - "ruleTime": 1, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }], - "numExecuted": 33, - "nls": { - "RPT_Html_SkipNav": { - "0": "Provide a way to bypass blocks of content that are repeated on multiple Web pages", - "Potential_1": "Verify there is a way to bypass blocks of content that are repeated on multiple Web pages" - }, - "WCAG20_Doc_HasTitle": { - "0": "The page should have a title that correctly identifies the subject of the page", - "Fail_2": "Missing <title> element in <head> element" - }, - "WCAG20_Html_HasLang": { - "0": "Page must identify the default language of the document with a 'lang' attribute", - "Fail_3": "Page detected as HTML, but does not have a 'lang' attribute" - }, - "HAAC_BackgroundImg_HasTextOrTitle": { - "0": "Background images that convey important information must have a text alternative that describes the image", - "Pass_0": "Rule Passed" - }, - "Rpt_Aria_OrphanedContent_Native_Host_Sematics": { - "0": "All content must reside within an element with a landmark role", - "Pass_0": "Rule Passed" - }, - "RPT_List_UseMarkup": { - "0": "Use proper HTML list elements to create lists", - "Pass_0": "Rule Passed" - }, - "WCAG20_Text_Emoticons": { - "0": "Emoticons must have a short text alternative that describes their purpose", - "Pass_0": "Rule Passed" - }, - "WCAG20_Text_LetterSpacing": { - "0": "Use CSS 'letter-spacing' to control spacing within a word", - "Pass_0": "Rule Passed" - }, - "IBMA_Color_Contrast_WCAG2AA_PV": { - "0": "The contrast ratio of text with its background (i.e. background with a color gradient or a background image) must meet WCAG 2.1 AA requirements", - "Pass_0": "Rule Passed" - }, - "RPT_Text_SensoryReference": { - "0": "Instructions must be meaningful without shape or location words", - "Pass_0": "Rule Passed" - }, - "WCAG20_Body_FirstASkips_Native_Host_Sematics": { - "0": "Pages must provide a way to skip directly to the main content", - "Fail_1": "The page does not provide a way to quickly navigate to the main content (ARIA \"main\" landmark or a skip link)" - }, - "text_quoted_correctly": { - "0": "Quotations should be marked with <q> or <blockquote> elements", - "Pass_0": "Rule Passed" - }, - "RPT_Img_AltCommonMisuse": { - "0": "'alt' attribute value must be a good inline replacement for the image", - "Pass_0": "Rule Passed" - }, - "WCAG20_Img_HasAlt": { - "0": "Images must have an 'alt' attribute with a short text alternative if they convey meaning, or 'alt=\"\" if decorative", - "Fail_2": "Image does not have an 'alt' attribute short text alternative" - } - }, - "summary": { - "counts": { - "violation": 4, - "potentialviolation": 1, - "recommendation": 0, - "potentialrecommendation": 0, - "manual": 0, - "pass": 28, - "ignored": 0 - }, - "scanTime": 13, - "ruleArchive": "Preview Rules (preview)", - "policies": ["IBM_Accessibility"], - "reportLevels": ["violation", "potentialviolation", "recommendation", "potentialrecommendation", "manual", "pass"], - "startScan": 1659624074346, - "URL": "data:text/html;charset=utf-8,%3C!--%0A%20%20%20%20%20%2F******************************************************************************%0A%20%20%20%20%20Copyright%3A%3A%202020-%20IBM%2C%20Inc%0A%0A%20%20%20%20Licensed%20under%20the%20Apache%20License%2C%20Version%202.0%20(the%20%22License%22)%3B%0A%20%20%20%20you%20may%20not%20use%20this%20file%20except%20in%20compliance%20with%20the%20License.%0A%20%20%20%20You%20may%20obtain%20a%20copy%20of%20the%20License%20at%0A%0A%20%20%20%20http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0%0A%0A%20%20%20%20Unless%20required%20by%20applicable%20law%20or%20agreed%20to%20in%20writing%2C%20software%0A%20%20%20%20distributed%20under%20the%20License%20is%20distributed%20on%20an%20%22AS%20IS%22%20BASIS%2C%0A%20%20%20%20WITHOUT%20WARRANTIES%20OR%20CONDITIONS%20OF%20ANY%20KIND%2C%20either%20express%20or%20implied.%0A%20%20%20%20See%20the%20License%20for%20the%20specific%20language%20governing%20permissions%20and%0A%20%20%20%20limitations%20under%20the%20License.%0A%20%20*****************************************************************************%2F%0A%0A--%3E%20%20%20%20%0A%20%20%20%20%3Chtml%3E%0A%20%20%20%20%3Cbody%3E%0A%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22fail.png%22%3E%0A%20%20%20%20%3C%2Fbody%3E%0A%3C%2Fhtml%3E" - }, - "scanID": "078af458-8769-4986-9093-011d84fda140", - "toolID": "accessibility-checker-v3.0.0", - "label": "Baseline_aChecker.Baseline.html" + "results": [ + { + "ruleId": "skip_main_exists", + "value": [ + "VIOLATION", + "FAIL" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Fail_1", + "message": "The page does not provide a way to quickly navigate to the main content (ARIA \"main\" landmark or a skip link)", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 584, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": false, + "level": "violation" + }, + { + "ruleId": "page_title_exists", + "value": [ + "VIOLATION", + "FAIL" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Fail_2", + "message": "Missing <title> element in <head> element", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 600, + "width": 800 + }, + "snippet": "<html>", + "category": "Accessibility", + "ignored": false, + "level": "violation" + }, + { + "ruleId": "img_alt_valid", + "value": [ + "VIOLATION", + "FAIL" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "fail_no_alt", + "message": "The image has neither an alt atttribute nor an ARIA label or title", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "violation" + }, + { + "ruleId": "html_lang_exists", + "value": [ + "VIOLATION", + "FAIL" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Fail_3", + "message": "Page detected as HTML, but does not have a 'lang' attribute", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 600, + "width": 800 + }, + "snippet": "<html>", + "category": "Accessibility", + "ignored": false, + "level": "violation" + }, + { + "ruleId": "html_skipnav_exists", + "value": [ + "VIOLATION", + "POTENTIAL" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 1, + "reasonId": "Potential_1", + "message": "Verify there is a way to bypass blocks of content that are repeated on multiple Web pages", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 600, + "width": 800 + }, + "snippet": "<html>", + "category": "Accessibility", + "ignored": false, + "level": "potentialviolation" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 584, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 584, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 584, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<head>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 584, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 600, + "width": 800 + }, + "snippet": "<html>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "img_alt_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<head>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 584, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 600, + "width": 800 + }, + "snippet": "<html>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<head>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 584, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 600, + "width": 800 + }, + "snippet": "<html>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "element_id_unique", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "aria_descendant_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "The element contains valid descendants", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<head>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 0, + "width": 0 + }, + "snippet": "<img id=\"ace\" src=\"fail.png\">", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 584, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 600, + "width": 800 + }, + "snippet": "<html>", + "category": "Accessibility", + "ignored": false, + "level": "pass" + } + ], + "numExecuted": 30, + "nls": { + "html_lang_exists": { + "0": "Page must identify the default language of the document with a 'lang' attribute", + "Fail_3": "Page detected as HTML, but does not have a 'lang' attribute" + }, + "html_skipnav_exists": { + "0": "Provide a way to bypass blocks of content that are repeated on multiple Web pages", + "Potential_1": "Verify there is a way to bypass blocks of content that are repeated on multiple Web pages" + }, + "page_title_exists": { + "0": "The page should have a title that correctly identifies the subject of the page", + "Fail_2": "Missing <title> element in <head> element" + }, + "aria_content_in_landmark": { + "0": "All content must reside within an element with a landmark role", + "Pass_0": "Rule Passed" + }, + "emoticons_alt_exists": { + "0": "Emoticons must have a short text alternative that describes their purpose", + "Pass_0": "Rule Passed" + }, + "img_alt_background": { + "0": "Background images that convey important information must have a text alternative that describes the image", + "Pass_0": "Rule Passed" + }, + "list_markup_review": { + "0": "Use proper HTML list elements to create lists", + "Pass_0": "Rule Passed" + }, + "skip_main_exists": { + "0": "Pages must provide a way to skip directly to the main content", + "Fail_1": "The page does not provide a way to quickly navigate to the main content (ARIA \"main\" landmark or a skip link)" + }, + "text_sensory_misuse": { + "0": "Instructions must be meaningful without shape or location words", + "Pass_0": "Rule Passed" + }, + "text_quoted_correctly": { + "0": "Quotations should be marked with <q> or <blockquote> elements", + "Pass_0": "Rule Passed" + }, + "text_whitespace_valid": { + "0": "Space characters should not be used to control spacing within a word", + "pass": "Rule Passed" + }, + "img_alt_misuse": { + "0": "'alt' attribute value must be a good inline replacement for the image", + "Pass_0": "Rule Passed" + }, + "img_alt_valid": { + "0": "Images require an 'alt' attribute with a short text alternative if they convey meaning, or 'alt=\"\" if decorative", + "fail_no_alt": "The image has neither an alt atttribute nor an ARIA label or title" + }, + "element_id_unique": { + "0": "Element 'id' attribute values must be unique within a document", + "Pass_0": "Rule Passed" + }, + "aria_descendant_valid": { + "0": "Browsers ignore the explicit and implicit ARIA roles of the descendants of certain elements", + "pass": "The element contains valid descendants" + } + }, + "summary": { + "counts": { + "violation": 4, + "potentialviolation": 1, + "recommendation": 0, + "potentialrecommendation": 0, + "manual": 0, + "pass": 25, + "ignored": 0 + }, + "scanTime": 7, + "ruleArchive": "Preview Rules (preview)", + "policies": [ + "IBM_Accessibility" + ], + "reportLevels": [ + "violation", + "potentialviolation", + "recommendation", + "potentialrecommendation", + "manual", + "pass" + ], + "startScan": 1684285310890, + "URL": "data:text/html;charset=utf-8,%3C!--%0A%20%20%20%20%20%2F******************************************************************************%0A%20%20%20%20%20Copyright%3A%3A%202020-%20IBM%2C%20Inc%0A%0A%20%20%20%20Licensed%20under%20the%20Apache%20License%2C%20Version%202.0%20(the%20%22License%22)%3B%0A%20%20%20%20you%20may%20not%20use%20this%20file%20except%20in%20compliance%20with%20the%20License.%0A%20%20%20%20You%20may%20obtain%20a%20copy%20of%20the%20License%20at%0A%0A%20%20%20%20http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0%0A%0A%20%20%20%20Unless%20required%20by%20applicable%20law%20or%20agreed%20to%20in%20writing%2C%20software%0A%20%20%20%20distributed%20under%20the%20License%20is%20distributed%20on%20an%20%22AS%20IS%22%20BASIS%2C%0A%20%20%20%20WITHOUT%20WARRANTIES%20OR%20CONDITIONS%20OF%20ANY%20KIND%2C%20either%20express%20or%20implied.%0A%20%20%20%20See%20the%20License%20for%20the%20specific%20language%20governing%20permissions%20and%0A%20%20%20%20limitations%20under%20the%20License.%0A%20%20*****************************************************************************%2F%0A%0A--%3E%20%20%20%20%0A%20%20%20%20%3Chtml%3E%0A%20%20%20%20%3Cbody%3E%0A%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22fail.png%22%20id%3D%22ace%22%3E%0A%20%20%20%20%3C%2Fbody%3E%0A%3C%2Fhtml%3E" + }, + "scanID": "2e498446-d9c7-45d5-a72d-c98fcf8d8560", + "toolID": "ibm-equal-access-toolkit-v3.0.0", + "label": "Baseline_aChecker.Baseline.html" } \ No newline at end of file diff --git a/accessibility-checker/test/baselines/Baseline_aChecker.Baseline2.html.json b/accessibility-checker/test/baselines/Baseline_aChecker.Baseline2.html.json index 8043478bb..a90da8162 100644 --- a/accessibility-checker/test/baselines/Baseline_aChecker.Baseline2.html.json +++ b/accessibility-checker/test/baselines/Baseline_aChecker.Baseline2.html.json @@ -1,7 +1,7 @@ { "results": [ { - "ruleId": "WCAG20_Doc_HasTitle", + "ruleId": "page_title_exists", "value": [ "VIOLATION", "FAIL" @@ -27,33 +27,33 @@ "level": "violation" }, { - "ruleId": "WCAG20_Body_FirstASkips_Native_Host_Sematics", + "ruleId": "img_alt_valid", "value": [ "VIOLATION", "FAIL" ], "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[2]", + "aria": "/document[1]/img[2]" }, "ruleTime": 0, - "reasonId": "Fail_1", - "message": "The page does not provide a way to quickly navigate to the main content (ARIA \"main\" landmark or a skip link)", + "reasonId": "fail_no_alt", + "message": "The image has neither an alt atttribute nor an ARIA label or title", "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 + "left": 12, + "top": 23, + "height": 0, + "width": 0 }, - "snippet": "<body>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "violation" }, { - "ruleId": "WCAG20_Img_HasAlt", + "ruleId": "img_alt_valid", "value": [ "VIOLATION", "FAIL" @@ -63,13 +63,13 @@ "aria": "/document[1]/img[1]" }, "ruleTime": 0, - "reasonId": "Fail_2", - "message": "Image does not have an 'alt' attribute short text alternative", + "reasonId": "fail_no_alt", + "message": "The image has neither an alt atttribute nor an ARIA label or title", "messageArgs": [], "apiArgs": [], "bounds": { "left": 8, - "top": 22, + "top": 23, "height": 0, "width": 0 }, @@ -79,44 +79,18 @@ "level": "violation" }, { - "ruleId": "WCAG20_Img_HasAlt", + "ruleId": "html_lang_exists", "value": [ "VIOLATION", "FAIL" ], - "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" - }, - "ruleTime": 0, - "reasonId": "Fail_2", - "message": "Image does not have an 'alt' attribute short text alternative", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 12, - "top": 22, - "height": 0, - "width": 0 - }, - "snippet": "<img src=\"fail.png\">", - "category": "Accessibility", - "ignored": false, - "level": "violation" - }, - { - "ruleId": "RPT_Html_SkipNav", - "value": [ - "VIOLATION", - "POTENTIAL" - ], "path": { "dom": "/html[1]", "aria": "/document[1]" }, "ruleTime": 0, - "reasonId": "Potential_1", - "message": "Verify there is a way to bypass blocks of content that are repeated on multiple Web pages", + "reasonId": "Fail_3", + "message": "Page detected as HTML, but does not have a 'lang' attribute", "messageArgs": [], "apiArgs": [], "bounds": { @@ -128,229 +102,21 @@ "snippet": "<html>", "category": "Accessibility", "ignored": false, - "level": "potentialviolation" - }, - { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", - "value": [ - "RECOMMENDATION", - "PASS" - ], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "RPT_List_UseMarkup", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "RPT_Text_SensoryReference", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "WCAG20_Text_Emoticons", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "WCAG20_Text_LetterSpacing", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "text_quoted_correctly", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "IBMA_Color_Contrast_WCAG2AA_PV", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 600, - "width": 800 - }, - "snippet": "<html>", - "category": "Accessibility", - "ignored": false, - "level": "pass" + "level": "violation" }, { - "ruleId": "HAAC_Aria_Native_Host_Semantics", + "ruleId": "html_skipnav_exists", "value": [ "VIOLATION", - "PASS" + "POTENTIAL" ], "path": { "dom": "/html[1]", "aria": "/document[1]" }, "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", + "reasonId": "Potential_1", + "message": "Verify there is a way to bypass blocks of content that are repeated on multiple Web pages", "messageArgs": [], "apiArgs": [], "bounds": { @@ -362,199 +128,95 @@ "snippet": "<html>", "category": "Accessibility", "ignored": false, - "level": "pass" - }, - { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", - "value": [ - "RECOMMENDATION", - "PASS" - ], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "RPT_List_UseMarkup", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, - { - "ruleId": "RPT_Text_SensoryReference", - "value": [ - "VIOLATION", - "PASS" - ], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" + "level": "potentialviolation" }, { - "ruleId": "WCAG20_Text_Emoticons", + "ruleId": "text_whitespace_valid", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[2]", + "aria": "/document[1]/img[2]" }, "ruleTime": 0, - "reasonId": "Pass_0", + "reasonId": "pass", "message": "Rule Passed", "messageArgs": [], "apiArgs": [], "bounds": { - "left": 0, - "top": 0, + "left": 12, + "top": 23, "height": 0, "width": 0 }, - "snippet": "<head>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "WCAG20_Text_LetterSpacing", + "ruleId": "text_whitespace_valid", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" }, "ruleTime": 0, - "reasonId": "Pass_0", + "reasonId": "pass", "message": "Rule Passed", "messageArgs": [], "apiArgs": [], "bounds": { - "left": 0, - "top": 0, + "left": 8, + "top": 23, "height": 0, "width": 0 }, - "snippet": "<head>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "text_quoted_correctly", + "ruleId": "text_whitespace_valid", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/head[1]", + "dom": "/html[1]/body[1]", "aria": "/document[1]" }, "ruleTime": 0, - "reasonId": "Pass_0", + "reasonId": "pass", "message": "Rule Passed", "messageArgs": [], "apiArgs": [], "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 + "left": 8, + "top": 8, + "height": 584, + "width": 784 }, - "snippet": "<head>", + "snippet": "<body>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "HAAC_Aria_Native_Host_Semantics", + "ruleId": "text_sensory_misuse", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[2]", + "aria": "/document[1]/img[2]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -562,25 +224,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 0, - "top": 0, + "left": 12, + "top": 23, "height": 0, "width": 0 }, - "snippet": "<head>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", + "ruleId": "text_sensory_misuse", "value": [ - "RECOMMENDATION", + "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -589,17 +251,17 @@ "apiArgs": [], "bounds": { "left": 8, - "top": 8, - "height": 584, - "width": 784 + "top": 23, + "height": 0, + "width": 0 }, - "snippet": "<body>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", + "ruleId": "text_sensory_misuse", "value": [ "VIOLATION", "PASS" @@ -625,14 +287,14 @@ "level": "pass" }, { - "ruleId": "RPT_List_UseMarkup", + "ruleId": "text_quoted_correctly", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[2]", + "aria": "/document[1]/img[2]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -640,25 +302,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 + "left": 12, + "top": 23, + "height": 0, + "width": 0 }, - "snippet": "<body>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "RPT_Text_SensoryReference", + "ruleId": "text_quoted_correctly", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -667,17 +329,17 @@ "apiArgs": [], "bounds": { "left": 8, - "top": 8, - "height": 584, - "width": 784 + "top": 23, + "height": 0, + "width": 0 }, - "snippet": "<body>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "WCAG20_Text_Emoticons", + "ruleId": "text_quoted_correctly", "value": [ "VIOLATION", "PASS" @@ -703,13 +365,13 @@ "level": "pass" }, { - "ruleId": "WCAG20_Text_LetterSpacing", + "ruleId": "list_markup_review", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]", + "dom": "/html[1]/head[1]", "aria": "/document[1]" }, "ruleTime": 0, @@ -718,25 +380,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 + "left": 0, + "top": 0, + "height": 0, + "width": 0 }, - "snippet": "<body>", + "snippet": "<head>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "text_quoted_correctly", + "ruleId": "list_markup_review", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[2]", + "aria": "/document[1]/img[2]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -744,25 +406,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 8, - "height": 584, - "width": 784 + "left": 12, + "top": 23, + "height": 0, + "width": 0 }, - "snippet": "<body>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "IBMA_Color_Contrast_WCAG2AA_PV", + "ruleId": "list_markup_review", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -771,17 +433,17 @@ "apiArgs": [], "bounds": { "left": 8, - "top": 8, - "height": 584, - "width": 784 + "top": 23, + "height": 0, + "width": 0 }, - "snippet": "<body>", + "snippet": "<img src=\"fail.png\">", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "HAAC_Aria_Native_Host_Semantics", + "ruleId": "list_markup_review", "value": [ "VIOLATION", "PASS" @@ -807,14 +469,14 @@ "level": "pass" }, { - "ruleId": "RPT_Img_AltCommonMisuse", + "ruleId": "list_markup_review", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" + "dom": "/html[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -822,25 +484,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 22, - "height": 0, - "width": 0 + "left": 0, + "top": 0, + "height": 600, + "width": 800 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<html>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", + "ruleId": "img_alt_misuse", "value": [ - "RECOMMENDATION", + "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" + "dom": "/html[1]/body[1]/img[2]", + "aria": "/document[1]/img[2]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -848,8 +510,8 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 22, + "left": 12, + "top": 23, "height": 0, "width": 0 }, @@ -859,7 +521,7 @@ "level": "pass" }, { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", + "ruleId": "img_alt_misuse", "value": [ "VIOLATION", "PASS" @@ -875,7 +537,7 @@ "apiArgs": [], "bounds": { "left": 8, - "top": 22, + "top": 23, "height": 0, "width": 0 }, @@ -885,14 +547,14 @@ "level": "pass" }, { - "ruleId": "RPT_List_UseMarkup", + "ruleId": "img_alt_background", "value": [ - "VIOLATION", + "RECOMMENDATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" + "dom": "/html[1]/head[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -900,25 +562,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 22, + "left": 0, + "top": 0, "height": 0, "width": 0 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<head>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "RPT_Text_SensoryReference", + "ruleId": "img_alt_background", "value": [ - "VIOLATION", + "RECOMMENDATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" + "dom": "/html[1]/body[1]/img[2]", + "aria": "/document[1]/img[2]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -926,8 +588,8 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 22, + "left": 12, + "top": 23, "height": 0, "width": 0 }, @@ -937,9 +599,9 @@ "level": "pass" }, { - "ruleId": "WCAG20_Text_Emoticons", + "ruleId": "img_alt_background", "value": [ - "VIOLATION", + "RECOMMENDATION", "PASS" ], "path": { @@ -953,7 +615,7 @@ "apiArgs": [], "bounds": { "left": 8, - "top": 22, + "top": 23, "height": 0, "width": 0 }, @@ -963,14 +625,14 @@ "level": "pass" }, { - "ruleId": "WCAG20_Text_LetterSpacing", + "ruleId": "img_alt_background", "value": [ - "VIOLATION", + "RECOMMENDATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" + "dom": "/html[1]/body[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -979,24 +641,24 @@ "apiArgs": [], "bounds": { "left": 8, - "top": 22, - "height": 0, - "width": 0 + "top": 8, + "height": 584, + "width": 784 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<body>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "text_quoted_correctly", + "ruleId": "img_alt_background", "value": [ - "VIOLATION", + "RECOMMENDATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" + "dom": "/html[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1004,25 +666,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 22, - "height": 0, - "width": 0 + "left": 0, + "top": 0, + "height": 600, + "width": 800 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<html>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "IBMA_Color_Contrast_WCAG2AA_PV", + "ruleId": "emoticons_alt_exists", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" + "dom": "/html[1]/head[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1030,25 +692,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 22, + "left": 0, + "top": 0, "height": 0, "width": 0 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<head>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "HAAC_Aria_Native_Host_Semantics", + "ruleId": "emoticons_alt_exists", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[1]", - "aria": "/document[1]/img[1]" + "dom": "/html[1]/body[1]/img[2]", + "aria": "/document[1]/img[2]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1056,8 +718,8 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 8, - "top": 22, + "left": 12, + "top": 23, "height": 0, "width": 0 }, @@ -1067,14 +729,14 @@ "level": "pass" }, { - "ruleId": "RPT_Img_AltCommonMisuse", + "ruleId": "emoticons_alt_exists", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1082,8 +744,8 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 12, - "top": 22, + "left": 8, + "top": 23, "height": 0, "width": 0 }, @@ -1093,14 +755,14 @@ "level": "pass" }, { - "ruleId": "HAAC_BackgroundImg_HasTextOrTitle", + "ruleId": "emoticons_alt_exists", "value": [ - "RECOMMENDATION", + "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" + "dom": "/html[1]/body[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1108,25 +770,25 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 12, - "top": 22, - "height": 0, - "width": 0 + "left": 8, + "top": 8, + "height": 584, + "width": 784 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<body>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "Rpt_Aria_OrphanedContent_Native_Host_Sematics", + "ruleId": "emoticons_alt_exists", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" + "dom": "/html[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1134,18 +796,18 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 12, - "top": 22, - "height": 0, - "width": 0 + "left": 0, + "top": 0, + "height": 600, + "width": 800 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<html>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "RPT_List_UseMarkup", + "ruleId": "aria_descendant_valid", "value": [ "VIOLATION", "PASS" @@ -1155,13 +817,13 @@ "aria": "/document[1]/img[2]" }, "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", + "reasonId": "pass", + "message": "The element contains valid descendants", "messageArgs": [], "apiArgs": [], "bounds": { "left": 12, - "top": 22, + "top": 23, "height": 0, "width": 0 }, @@ -1171,23 +833,23 @@ "level": "pass" }, { - "ruleId": "RPT_Text_SensoryReference", + "ruleId": "aria_descendant_valid", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" }, "ruleTime": 0, - "reasonId": "Pass_0", - "message": "Rule Passed", + "reasonId": "pass", + "message": "The element contains valid descendants", "messageArgs": [], "apiArgs": [], "bounds": { - "left": 12, - "top": 22, + "left": 8, + "top": 23, "height": 0, "width": 0 }, @@ -1197,14 +859,14 @@ "level": "pass" }, { - "ruleId": "WCAG20_Text_Emoticons", + "ruleId": "aria_content_in_landmark", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" + "dom": "/html[1]/head[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1212,18 +874,18 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 12, - "top": 22, + "left": 0, + "top": 0, "height": 0, "width": 0 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<head>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "WCAG20_Text_LetterSpacing", + "ruleId": "aria_content_in_landmark", "value": [ "VIOLATION", "PASS" @@ -1239,7 +901,7 @@ "apiArgs": [], "bounds": { "left": 12, - "top": 22, + "top": 23, "height": 0, "width": 0 }, @@ -1249,14 +911,14 @@ "level": "pass" }, { - "ruleId": "text_quoted_correctly", + "ruleId": "aria_content_in_landmark", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" + "dom": "/html[1]/body[1]/img[1]", + "aria": "/document[1]/img[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1264,8 +926,8 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 12, - "top": 22, + "left": 8, + "top": 23, "height": 0, "width": 0 }, @@ -1275,14 +937,14 @@ "level": "pass" }, { - "ruleId": "IBMA_Color_Contrast_WCAG2AA_PV", + "ruleId": "aria_content_in_landmark", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" + "dom": "/html[1]/body[1]", + "aria": "/document[1]" }, "ruleTime": 0, "reasonId": "Pass_0", @@ -1290,89 +952,100 @@ "messageArgs": [], "apiArgs": [], "bounds": { - "left": 12, - "top": 22, - "height": 0, - "width": 0 + "left": 8, + "top": 8, + "height": 584, + "width": 784 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<body>", "category": "Accessibility", "ignored": false, "level": "pass" }, { - "ruleId": "HAAC_Aria_Native_Host_Semantics", + "ruleId": "aria_content_in_landmark", "value": [ "VIOLATION", "PASS" ], "path": { - "dom": "/html[1]/body[1]/img[2]", - "aria": "/document[1]/img[2]" + "dom": "/html[1]", + "aria": "/document[1]" }, - "ruleTime": 0, + "ruleTime": 1, "reasonId": "Pass_0", "message": "Rule Passed", "messageArgs": [], "apiArgs": [], "bounds": { - "left": 12, - "top": 22, - "height": 0, - "width": 0 + "left": 0, + "top": 0, + "height": 600, + "width": 800 }, - "snippet": "<img src=\"fail.png\">", + "snippet": "<html>", "category": "Accessibility", "ignored": false, "level": "pass" } ], - "numExecuted": 52, + "numExecuted": 39, "nls": { - "WCAG20_Html_HasLang": { + "html_lang_exists": { + "0": "Page must identify the default language of the document with a 'lang' attribute", "Fail_3": "Page detected as HTML, but does not have a 'lang' attribute" }, - "RPT_Html_SkipNav": { + "html_skipnav_exists": { + "0": "Provide a way to bypass blocks of content that are repeated on multiple Web pages", "Potential_1": "Verify there is a way to bypass blocks of content that are repeated on multiple Web pages" }, - "WCAG20_Doc_HasTitle": { + "page_title_exists": { + "0": "The page should have a title that correctly identifies the subject of the page", "Fail_2": "Missing <title> element in <head> element" }, - "HAAC_BackgroundImg_HasTextOrTitle": { + "aria_content_in_landmark": { + "0": "All content must reside within an element with a landmark role", "Pass_0": "Rule Passed" }, - "Rpt_Aria_OrphanedContent_Native_Host_Sematics": { + "emoticons_alt_exists": { + "0": "Emoticons must have a short text alternative that describes their purpose", "Pass_0": "Rule Passed" }, - "RPT_List_UseMarkup": { + "img_alt_background": { + "0": "Background images that convey important information must have a text alternative that describes the image", "Pass_0": "Rule Passed" }, - "RPT_Text_SensoryReference": { + "list_markup_review": { + "0": "Use proper HTML list elements to create lists", "Pass_0": "Rule Passed" }, - "WCAG20_Text_Emoticons": { - "Pass_0": "Rule Passed" + "skip_main_exists": { + "0": "Pages must provide a way to skip directly to the main content", + "Fail_1": "The page does not provide a way to quickly navigate to the main content (ARIA \"main\" landmark or a skip link)" }, - "WCAG20_Text_LetterSpacing": { + "text_sensory_misuse": { + "0": "Instructions must be meaningful without shape or location words", "Pass_0": "Rule Passed" }, "text_quoted_correctly": { + "0": "Quotations should be marked with <q> or <blockquote> elements", "Pass_0": "Rule Passed" }, - "IBMA_Color_Contrast_WCAG2AA_PV": { - "Pass_0": "Rule Passed" + "text_whitespace_valid": { + "0": "Space characters should not be used to control spacing within a word", + "pass": "Rule Passed" }, - "HAAC_Aria_Native_Host_Semantics": { + "img_alt_misuse": { + "0": "'alt' attribute value must be a good inline replacement for the image", "Pass_0": "Rule Passed" }, - "WCAG20_Body_FirstASkips_Native_Host_Sematics": { - "Fail_1": "The page does not provide a way to quickly navigate to the main content (ARIA \"main\" landmark or a skip link)" - }, - "WCAG20_Img_HasAlt": { - "Fail_2": "Image does not have an 'alt' attribute short text alternative" + "img_alt_valid": { + "0": "Images require an 'alt' attribute with a short text alternative if they convey meaning, or 'alt=\"\" if decorative", + "fail_no_alt": "The image has neither an alt atttribute nor an ARIA label or title" }, - "RPT_Img_AltCommonMisuse": { - "Pass_0": "Rule Passed" + "aria_descendant_valid": { + "0": "Browsers ignore the explicit and implicit ARIA roles of the descendants of certain elements", + "pass": "The element contains valid descendants" } }, "summary": { @@ -1382,11 +1055,11 @@ "recommendation": 0, "potentialrecommendation": 0, "manual": 0, - "pass": 46, + "pass": 33, "ignored": 0 }, - "scanTime": 5, - "ruleArchive": "", + "scanTime": 3, + "ruleArchive": "Preview Rules (preview)", "policies": [ "IBM_Accessibility" ], @@ -1398,10 +1071,10 @@ "manual", "pass" ], - "startScan": 1582566852099, + "startScan": 1684285040429, "URL": "data:text/html;charset=utf-8,%3C!--%0A%20%20%20%20%20%2F******************************************************************************%0A%20%20%20%20%20Copyright%3A%3A%202020-%20IBM%2C%20Inc%0A%0A%20%20%20%20Licensed%20under%20the%20Apache%20License%2C%20Version%202.0%20(the%20%22License%22)%3B%0A%20%20%20%20you%20may%20not%20use%20this%20file%20except%20in%20compliance%20with%20the%20License.%0A%20%20%20%20You%20may%20obtain%20a%20copy%20of%20the%20License%20at%0A%0A%20%20%20%20http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0%0A%0A%20%20%20%20Unless%20required%20by%20applicable%20law%20or%20agreed%20to%20in%20writing%2C%20software%0A%20%20%20%20distributed%20under%20the%20License%20is%20distributed%20on%20an%20%22AS%20IS%22%20BASIS%2C%0A%20%20%20%20WITHOUT%20WARRANTIES%20OR%20CONDITIONS%20OF%20ANY%20KIND%2C%20either%20express%20or%20implied.%0A%20%20%20%20See%20the%20License%20for%20the%20specific%20language%20governing%20permissions%20and%0A%20%20%20%20limitations%20under%20the%20License.%0A%20%20*****************************************************************************%2F%0A%0A--%3E%20%0A%3Chtml%3E%0A%20%20%20%20%3Cbody%3E%0A%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22fail.png%22%3E%0A%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22fail.png%22%3E%0A%20%20%20%20%3C%2Fbody%3E%0A%3C%2Fhtml%3E" }, - "scanID": "00b5c4de-a980-4344-92c9-856172c4e903", - "toolID": "accessibility-checker-v3.0.0", + "scanID": "5ce30134-4744-4d21-8368-1d963f91a3e4", + "toolID": "ibm-equal-access-toolkit-v3.0.0", "label": "Baseline_aChecker.Baseline2.html" } \ No newline at end of file diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/IBMa.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/IBMa.Defined.test.js index 0c6402237..e38645e2b 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/IBMa.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/IBMa.Defined.test.js @@ -14,9 +14,9 @@ limitations under the License. *****************************************************************************/ -var expect = require('chai').expect; -var aChecker = require("../../../src/"); - +import * as aChecker from "../../../src/index.js"; +import { expect } from "chai"; + // Check all aspects of the IBMa namespace to make sure that all things are defined. // Need to do this check, to make sure the engine is loaded into the browser correctly by the karma plugin. describe("Check IBMa namespace", function () { diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/OpenAjax.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/OpenAjax.Defined.test.js index 079ac0db1..bb4106fb8 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/OpenAjax.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/OpenAjax.Defined.test.js @@ -14,9 +14,9 @@ limitations under the License. *****************************************************************************/ -var expect = require('chai').expect; -var aChecker = require("../../../src/"); - +import * as aChecker from "../../../src/index.js"; +import { expect } from "chai"; + // This Test Suite is to make sure all the objects/function in the OpenAjax namespace are // defined. // Need to do this check, to make sure the engine is loaded into the browser correctly by the karma plugin. diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/RPT.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/RPT.Defined.test.js index 262c6fcdd..038d0f624 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/RPT.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/RPT.Defined.test.js @@ -14,9 +14,9 @@ limitations under the License. *****************************************************************************/ -var expect = require('chai').expect; -var aChecker = require("../../../src/"); - +import * as aChecker from "../../../src/index.js"; +import { expect } from "chai"; + // This Test Suite is to make sure all the objects/function in the RPT namespace are // defined. describe("Check RPT namespace", function () { diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/ValidationResult.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/ValidationResult.Defined.test.js index 1613a781a..dc9a1fbc7 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/ValidationResult.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/ValidationResult.Defined.test.js @@ -14,9 +14,9 @@ limitations under the License. *****************************************************************************/ -var expect = require('chai').expect; -var aChecker = require("../../../src/"); - +import * as aChecker from "../../../src/index.js"; +import { expect } from "chai"; + describe("ValidationResult", function () { it("Should be defined", function() { expect(typeof ValidationResult).not.toBe("undefined"); diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/getRule.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/getRule.Defined.test.js index 4c6539de8..d406f56f1 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/getRule.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/getRule.Defined.test.js @@ -14,8 +14,8 @@ limitations under the License. *****************************************************************************/ -var expect = require('chai').expect; -var aChecker = require("../../../src/"); +import * as aChecker from "../../../src/index.js"; +import { expect } from "chai"; // Test to make sure the getRule function still exists in global space (window.getRule) describe("getRule", function () { diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js index 37bf99992..9d3ae4951 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js @@ -13,25 +13,26 @@ See the License for the specific language governing permissions and limitations under the License. *****************************************************************************/ - 'use strict'; +'use strict'; -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src") -var expect = require("chai").expect; -var util = require('util') +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +// import ace from "../../../../accessibility-checker-engine/dist/ace-node.js"; +import { expect } from "chai"; +import * as util from "util"; -var files = ["aChecker.Baseline.html", "aChecker.Baseline2.html"]; +let unitTestcaseHTML = {}; +let files = ["aChecker.Baseline.html", "aChecker.Baseline2.html"]; files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(process.cwd(), "test","mocha","aChecker.Fast","aChecker.Baselines",f); + f = path.join(process.cwd(), "test","mocha","aChecker.Fast","aChecker.Baselines",f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); -var codes = {}; +let codes = {}; codes[path.join(process.cwd(), "test", "mocha", "aChecker.Fast", "aChecker.Baselines", "aChecker.Baseline.html")] = 0; codes[path.join(process.cwd(), "test", "mocha", "aChecker.Fast", "aChecker.Baselines", "aChecker.Baseline2.html")] = 1; @@ -42,12 +43,12 @@ describe("Baseline testing", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. @@ -72,8 +73,8 @@ describe("Baseline testing", function () { // Extract the unitTestcase data file from the unitTestcase hash map. // This will contain the full content of the testcase file. Includes the document // object also. - var unitTestDataFileContent = unitTestcaseHTML[unitTestFile]; - var labelName = unitTestFile.substring(Math.max(unitTestFile.lastIndexOf("/"), unitTestFile.lastIndexOf("\\")) + 1); + let unitTestDataFileContent = unitTestcaseHTML[unitTestFile]; + let labelName = unitTestFile.substring(Math.max(unitTestFile.lastIndexOf("/"), unitTestFile.lastIndexOf("\\")) + 1); // Perform the accessibility scan using the IBMaScan Wrapper let result = await aChecker.getCompliance(unitTestDataFileContent, "Baseline_" + labelName); let assertVal = aChecker.assertCompliance(result.report); diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js index 78fd142af..dbdc08cb5 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js @@ -14,11 +14,11 @@ limitations under the License. *****************************************************************************/ -var expect = require('chai').expect; -var aChecker = require("../../../../src"); +import * as aChecker from "../../../../src/index.js"; +import { expect } from "chai"; before(async () => { - aChecker.Config = await aChecker.getConfig(); + await aChecker.getConfig(); }); // This Test Suite is to make sure all the objects/function added by ACHelper.js is added diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js index 67a398a6f..3ab7f99c1 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js @@ -14,67 +14,68 @@ limitations under the License. *****************************************************************************/ -var expect = require('chai').expect; -var aChecker = require("../../../../src"); +import * as aChecker from "../../../../src/index.js"; +import { expect } from "chai"; +let Config; before(async () => { - aChecker.Config = await aChecker.getConfig(); + Config = await aChecker.getConfig(); }); -// Make sure the aChecker.Config is defined -describe("aChecker.Config", function () { +// Make sure the Config is defined +describe("Config", function () { it("Should be defined in global space", function () { - expect(typeof aChecker.Config).to.not.equal("undefined"); + expect(typeof Config).to.not.equal("undefined"); }); }); -// Make sure that all the config properties in the aChecker.Config are defined that need to be defined. -describe("aChecker.Config property", function () { +// Make sure that all the config properties in the Config are defined that need to be defined. +describe("Config property", function () { it("DEBUG Should be defined in global space", function () { - expect(typeof aChecker.Config.DEBUG).to.not.equal("undefined"); + expect(typeof Config.DEBUG).to.not.equal("undefined"); }); it("captureScreenshots Should be defined in global space", function () { - expect(typeof aChecker.Config.captureScreenshots).to.not.equal("undefined"); + expect(typeof Config.captureScreenshots).to.not.equal("undefined"); }); it("checkHiddenContent Should be defined in global space", function () { - expect(typeof aChecker.Config.checkHiddenContent).to.not.equal("undefined"); + expect(typeof Config.checkHiddenContent).to.not.equal("undefined"); }); it("extensions Should be defined in global space", function () { - expect(typeof aChecker.Config.extensions).to.not.equal("undefined"); + expect(typeof Config.extensions).to.not.equal("undefined"); }); it("failLevels Should be defined in global space", function () { - expect(typeof aChecker.Config.failLevels).to.not.equal("undefined"); + expect(typeof Config.failLevels).to.not.equal("undefined"); }); it("label Should be defined in global space", function () { - expect(typeof aChecker.Config.label).to.not.equal("undefined"); + expect(typeof Config.label).to.not.equal("undefined"); }); it("outputFolder Should be defined in global space", function () { - expect(typeof aChecker.Config.outputFolder).to.not.equal("undefined"); + expect(typeof Config.outputFolder).to.not.equal("undefined"); }); it("policies Should be defined in global space", function () { - expect(typeof aChecker.Config.policies).to.not.equal("undefined"); + expect(typeof Config.policies).to.not.equal("undefined"); }); it("reportLevels Should be defined in global space", function () { - expect(typeof aChecker.Config.reportLevels).to.not.equal("undefined"); + expect(typeof Config.reportLevels).to.not.equal("undefined"); }); it("ruleServer Should be defined in global space", function () { - expect(typeof aChecker.Config.ruleServer).to.not.equal("undefined"); + expect(typeof Config.ruleServer).to.not.equal("undefined"); }); it("scanID Should be defined in global space", function () { - expect(typeof aChecker.Config.scanID).to.not.equal("undefined"); + expect(typeof Config.scanID).to.not.equal("undefined"); }); it("toolID Should be defined in global space", function () { - expect(typeof aChecker.Config.toolID).to.not.equal("undefined"); + expect(typeof Config.toolID).to.not.equal("undefined"); }); }); diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js index 7a0d55320..c52cd0c0a 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js @@ -14,8 +14,8 @@ limitations under the License. *****************************************************************************/ -var expect = require('chai').expect; -var aChecker = require("../../../../src"); +import * as aChecker from "../../../../src/index.js"; +import { expect } from "chai"; describe("aChecker", function () { it("Should be defined", function () { diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js index 1e0622854..225fbd8e9 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js @@ -16,17 +16,20 @@ 'use strict'; -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src") -var expect = require("chai").expect; - -var files = ["JSONObjectStructureVerification.html"]; +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +import { expect } from "chai"; +import {fileURLToPath} from 'url'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +let unitTestcaseHTML = {}; + +let files = ["JSONObjectStructureVerification.html"]; files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(__dirname, f); + f = path.join(__dirname, f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); @@ -38,12 +41,12 @@ describe("JSON Structure Verification Zombie", function () { }); // Variable Decleration - var originalPolicies; + let originalPolicies; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. @@ -78,17 +81,17 @@ describe("JSON Structure Verification Zombie", function () { // Extract the unitTestcase data file from the unitTestcase hash map. // This will contain the full content of the testcase file. Includes the document // object also. - var unitTestDataFileContent = unitTestcaseHTML[unitTestFile]; - var labelName = unitTestFile.substring(Math.max(unitTestFile.lastIndexOf("/"), unitTestFile.lastIndexOf("\\")) + 1); + let unitTestDataFileContent = unitTestcaseHTML[unitTestFile]; + let labelName = unitTestFile.substring(Math.max(unitTestFile.lastIndexOf("/"), unitTestFile.lastIndexOf("\\")) + 1); // Perform the accessibility scan using the IBMaScan Wrapper let report = await aChecker.getCompliance(unitTestDataFileContent, labelName); report = report.report; // Make sure that the structure of the result match with expected structure // Fetch the baseline object based on the label provided - var expected = aChecker.getBaseline(labelName); + let expected = aChecker.getBaseline(labelName); // Define the differences with some content as we expect it to be null or undefined if pass - var differences = "Something"; + let differences = "Something"; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js index d8714afa0..70384423d 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js @@ -14,17 +14,17 @@ limitations under the License. *****************************************************************************/ - 'use strict'; +'use strict'; -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src"); -const ace = require("../../../../../accessibility-checker-engine/dist/ace-node"); -var testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); -var gdirs = fs.readdirSync(testRootDir); -var expect = require("chai").expect; -const zombie = require("zombie"); +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; +import { expect } from "chai"; +import * as zombie from "zombie"; +let unitTestcaseHTML = {}; +let testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); +let gdirs = fs.readdirSync(testRootDir); const mapRuleToG = aChecker.ruleIdToLegacyId; @@ -56,13 +56,13 @@ before(async function () { }); gdirs.forEach(function (gdir) { - var gdir = path.join(testRootDir, gdir) + gdir = path.join(testRootDir, gdir) if (fs.lstatSync(gdir).isDirectory()) { - var files = fs.readdirSync(gdir); + let files = fs.readdirSync(gdir); files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(gdir, f); + f = path.join(gdir, f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); @@ -71,7 +71,7 @@ gdirs.forEach(function (gdir) { let testRoot = path.join(process.cwd(), "..", "accessibility-checker-engine", "test", "v2", "checker", "accessibility", "rules"); // Skip test cases that don't work in this environment (e.g., can't disable meta refresh in chrome) -var skipList = [ +let skipList = [ // Not in Karma Conf Skip list // Testcase has a script reference to a file, which traps zombie when loaded as a string @@ -129,7 +129,7 @@ var skipList = [ path.join(testRoot, "input_checkboxes_grouped_ruleunit", "shadow.html") ] -var skipMap = {} +let skipMap = {} skipList.forEach(function (skip) { skipMap[skip] = true; }); @@ -141,14 +141,14 @@ describe("Rule Unit Tests from Zombie", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // let count = 100; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { if (unitTestFile in skipMap) continue; // if (count-- < 0) continue; // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. @@ -170,7 +170,7 @@ describe("Rule Unit Tests from Zombie", function () { // Note the done that is passed in, this is used to wait for asyn functions. it('a11y scan should match expected value', function (done) { this.timeout(0); - var browser = new zombie(); + let browser = new zombie(); browser.visit("file://" + unitTestFile, function () { let report = null; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js index 241c99e30..0cd075179 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js @@ -14,17 +14,17 @@ limitations under the License. *****************************************************************************/ - 'use strict'; +'use strict'; -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src"); -const ace = require("../../../../../accessibility-checker-engine/dist/ace-node"); -var testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); -var gdirs = fs.readdirSync(testRootDir); -var expect = require("chai").expect; +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; +import { expect } from "chai"; +let unitTestcaseHTML = {}; +let testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); +let gdirs = fs.readdirSync(testRootDir); const mapRuleToG = aChecker.ruleIdToLegacyId; let mapGToRule = {} @@ -54,13 +54,13 @@ before(async function () { }); gdirs.forEach(function (gdir) { - var gdir = path.join(testRootDir, gdir) + gdir = path.join(testRootDir, gdir) if (fs.lstatSync(gdir).isDirectory()) { - var files = fs.readdirSync(gdir); + let files = fs.readdirSync(gdir); files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(gdir, f); + f = path.join(gdir, f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); @@ -69,7 +69,7 @@ gdirs.forEach(function (gdir) { // Skip test cases that don't work in this environment (e.g., can't disable meta refresh in chrome) let testRoot = path.join(process.cwd(), "..", "accessibility-checker-engine", "test", "v2", "checker", "accessibility", "rules"); -var skipList = [ +let skipList = [ // Not in Karma Conf Skip list // Testcase has a script reference to a file, which traps zombie when loaded as a string @@ -107,7 +107,7 @@ var skipList = [ ] -var skipMap = {} +let skipMap = {} skipList.forEach(function (skip) { skipMap[skip] = true; }); @@ -119,13 +119,13 @@ describe("Rule Unit Tests As Content", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { if (unitTestFile in skipMap) continue; // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. @@ -150,8 +150,8 @@ describe("Rule Unit Tests As Content", function () { // Extract the unitTestcase data file from the unitTestcase hash map. // This will contain the full content of the testcase file. Includes the document // object also. - var unitTestDataFileContent = unitTestcaseHTML[unitTestFile]; - var actualMap = {}; + let unitTestDataFileContent = unitTestcaseHTML[unitTestFile]; + let actualMap = {}; let report = null; let browser = null; let puppeteer = null; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js index cf98fc773..b7f4d7d79 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js @@ -14,16 +14,17 @@ limitations under the License. *****************************************************************************/ - 'use strict'; +'use strict'; -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src"); -const ace = require("../../../../../accessibility-checker-engine/dist/ace-node"); -var testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); -var gdirs = fs.readdirSync(testRootDir); -var expect = require("chai").expect; +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; +import { expect } from "chai"; + +let unitTestcaseHTML = {}; +let testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); +let gdirs = fs.readdirSync(testRootDir); const mapRuleToG = aChecker.ruleIdToLegacyId; @@ -55,13 +56,13 @@ before(async function () { }); gdirs.forEach(function (gdir) { - var gdir = path.join(testRootDir, gdir) + gdir = path.join(testRootDir, gdir) if (fs.lstatSync(gdir).isDirectory()) { - var files = fs.readdirSync(gdir); + let files = fs.readdirSync(gdir); files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(gdir, f); + f = path.join(gdir, f); unitTestcaseHTML[f] = "file://" + f; }; }); @@ -69,7 +70,7 @@ gdirs.forEach(function (gdir) { }); // Skip test cases that don't work in this environment (e.g., can't disable meta refresh in chrome) -var skipList = [ +let skipList = [ // Not in Karma Conf Skip list // Testcase has a script reference to a file, which traps zombie when loaded as a string @@ -108,7 +109,7 @@ var skipList = [ path.join(process.cwd(), "..", "accessibility-checker-engine", "test", "v2", "checker", "accessibility", "rules", "style_before_after_review_ruleunit","D100.html"), ] -var skipMap = {} +let skipMap = {} skipList.forEach(function (skip) { skipMap[skip] = true; }); @@ -120,13 +121,13 @@ describe("Rule Unit Tests As URLs", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { if (unitTestFile in skipMap) continue; // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. @@ -151,8 +152,8 @@ describe("Rule Unit Tests As URLs", function () { // Extract the unitTestcase data file from the unitTestcase hash map. // This will contain the full content of the testcase file. Includes the document // object also. - var unitTestDataFileContent = unitTestcaseHTML[unitTestFile]; - var actualMap = {}; + let unitTestDataFileContent = unitTestcaseHTML[unitTestFile]; + let actualMap = {}; let report = null; let browser = null; let puppeteer = null; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js index d7a31a45b..c15c43252 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js @@ -16,23 +16,23 @@ 'use strict'; -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src"); -const ace = require("../../../../../accessibility-checker-engine/dist/ace-node"); -var testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); -var gdirs = fs.readdirSync(testRootDir); -var expect = require("chai").expect; +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +// import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; +import { expect } from "chai"; +let unitTestcaseHTML = {}; +let testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); +let gdirs = fs.readdirSync(testRootDir); gdirs.forEach(function (gdir) { - var gdir = path.join(testRootDir, gdir) + gdir = path.join(testRootDir, gdir) if (fs.lstatSync(gdir).isDirectory()) { - var files = fs.readdirSync(gdir); + let files = fs.readdirSync(gdir); files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(gdir, f); + f = path.join(gdir, f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); @@ -41,7 +41,7 @@ gdirs.forEach(function (gdir) { // Skip test cases that don't work in this environment (e.g., can't disable meta refresh in chrome) let testRoot = path.join(process.cwd(), "..", "accessibility-checker-engine", "test", "v2", "checker", "accessibility", "rules") -var skipList = [ +let skipList = [ // Testcase has a script reference to a file, which traps zombie when loaded as a string // Not in Karma conf skip list path.join(testRoot, "Hidden", "unitTestisNodeVisible.html"), @@ -51,7 +51,7 @@ var skipList = [ path.join(testRoot, "element_accesskey_labelled_ruleunit", "AssesskeyNeedsLabelHidden.html"), path.join(testRoot, "aria_activedescendant_valid_ruleunit", "ActiveDescendant.html") ] -var skipMap = {} +let skipMap = {} skipList.forEach(function (skip) { skipMap[skip] = true; }); @@ -63,14 +63,14 @@ describe("Rule Unit Tests With Assertion", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { if (unitTestFile in skipMap) continue; // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. diff --git a/accessibility-checker/test/mocha/aChecker.Playwright/aChecker.Scans/aChecker.Content.Playwright.spec.mjs b/accessibility-checker/test/mocha/aChecker.Playwright/aChecker.Scans/aChecker.Content.Playwright.spec.mjs index e319971fc..9a2c6b548 100644 --- a/accessibility-checker/test/mocha/aChecker.Playwright/aChecker.Scans/aChecker.Content.Playwright.spec.mjs +++ b/accessibility-checker/test/mocha/aChecker.Playwright/aChecker.Scans/aChecker.Content.Playwright.spec.mjs @@ -22,9 +22,9 @@ import * as fs from "fs"; import * as path from "path"; import * as aChecker from "../../../../src/index.js"; import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; -var unitTestcaseHTML = {}; -var testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); -var gdirs = fs.readdirSync(testRootDir); +let unitTestcaseHTML = {}; +let testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); +let gdirs = fs.readdirSync(testRootDir); // gdirs = [ // "style_color_misuse_ruleunit", @@ -73,13 +73,13 @@ test.afterAll(async () => { }) gdirs.forEach(function (gdir) { - var gdir = path.join(testRootDir, gdir) + gdir = path.join(testRootDir, gdir) if (fs.lstatSync(gdir).isDirectory()) { - var files = fs.readdirSync(gdir); + let files = fs.readdirSync(gdir); files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(gdir, f); + f = path.join(gdir, f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); @@ -88,7 +88,7 @@ gdirs.forEach(function (gdir) { let testRoot = path.join(process.cwd(), "..", "accessibility-checker-engine", "test", "v2", "checker", "accessibility", "rules"); // Skip test cases that don't work in this environment (e.g., can't disable meta refresh in chrome) -var skipList = [ +let skipList = [ //not in karma conf file path.join(testRoot, "a_text_purpose_ruleunit", "A-hasTextEmbedded.html"), path.join(testRoot, "a_text_purpose_ruleunit", "A-nonTabable.html"), @@ -106,7 +106,7 @@ var skipList = [ path.join(testRoot, "aria_banner_label_unique_ruleunit", "validLandMarks-testCaseFromAnn.html") ] -var skipMap = {} +let skipMap = {} skipList.forEach(function (skip) { skipMap[skip] = true; }); @@ -118,14 +118,14 @@ test.describe("Rule Unit Tests from Playwright", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // let count = 10; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { if (unitTestFile in skipMap) continue; // if (count-- < 0) continue; // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js index 57b957ed4..042fc8c70 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js @@ -14,26 +14,24 @@ limitations under the License. *****************************************************************************/ - 'use strict'; -var userBrowser = process.env.USER_BROWSER || "CHROME"; - -var webdriver = require('selenium-webdriver'), - By = webdriver.By, - until = webdriver.until; - -var fs = require("fs"); -var path = require("path"); - -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src"); -var expect = require("chai").expect; - -var browser; +'use strict'; +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +import { expect } from "chai"; +import { Builder, Capabilities } from "selenium-webdriver"; +import {fileURLToPath} from 'url'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +let userBrowser = process.env.USER_BROWSER || "CHROME"; +let unitTestcaseHTML = {}; + +let browser; if (userBrowser.toUpperCase() === "FIREFOX") { before(function (done) { try { this.timeout(10000); - browser = new webdriver.Builder() + browser = new Builder() .forBrowser('firefox') .usingServer('http://localhost:4444/wd/hub') .build(); @@ -44,40 +42,43 @@ if (userBrowser.toUpperCase() === "FIREFOX") { } }); } else if (userBrowser.toUpperCase() === "CHROME") { - var chrome = require('selenium-webdriver/chrome'); before(function (done) { - try { - this.timeout(10000); - var spath; - if (process.platform !== 'win32'){ - spath = require('chromedriver').path; - spath = path.join(spath, ".."); - spath = path.join(spath, ".."); - spath = path.join(spath, ".."); - spath = path.join(spath, "bin"); - spath = path.join(spath, "chromedriver"); + this.timeout(10000); + (async () => { + try { + const chrome = (await import('selenium-webdriver/chrome.js')); + const chromedriver = (await import("chromedriver")); + let spath; + if (process.platform !== 'win32'){ + spath = chromedriver.path; + spath = path.join(spath, ".."); + spath = path.join(spath, ".."); + spath = path.join(spath, ".."); + spath = path.join(spath, "bin"); + spath = path.join(spath, "chromedriver"); + } + else { + spath = chromedriver.path; + } + let service = new chrome.ServiceBuilder(spath).build(); + chrome.setDefaultService(service); + + const options = new chrome.Options(); + options.addArguments("--disable-dev-shm-usage"); + options.addArguments("--headless=new"); + options.addArguments('--ignore-certificate-errors') + + browser = new Builder() + .withCapabilities(Capabilities.chrome()) + .setChromeOptions(options) + .build(); + browser.manage().window().setRect({x: 0, y:0, width: 13666, height: 784}); + expect(typeof browser).to.not.equal("undefined"); + done(); + } catch (e) { + console.log(e); } - else { - spath = require('chromedriver').path; - } - var service = new chrome.ServiceBuilder(spath).build(); - chrome.setDefaultService(service); - - const options = new chrome.Options(); - options.addArguments("--disable-dev-shm-usage"); - options.addArguments("--headless=new"); - options.addArguments('--ignore-certificate-errors') - - browser = new webdriver.Builder() - .withCapabilities(webdriver.Capabilities.chrome()) - .setChromeOptions(options) - .build(); - browser.manage().window().setRect({x: 0, y:0, width: 13666, height: 784}); - expect(typeof browser).to.not.equal("undefined"); - done(); - } catch (e) { - console.log(e); - } + })(); }) } @@ -85,11 +86,11 @@ after(function (done) { browser.quit().then(done); }) -var files = ["JSONObjectStructureVerificationSelenium.html"]; +let files = ["JSONObjectStructureVerificationSelenium.html"]; files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(__dirname, f); + f = path.join(__dirname, f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); @@ -101,10 +102,10 @@ describe("JSON Structure Verification Selenium", function () { }); // Variable Decleration - var originalPolicies; + let originalPolicies; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { // This function is used to execute for each of the unitTestFiles, we have to use this type of function // to allow dynamic creation/execution of the Unit Testcases. This is like forcing an syncronous execution @@ -127,20 +128,20 @@ describe("JSON Structure Verification Selenium", function () { it('JSON structure should match baseline for selenium', function (done) { this.timeout(0); - var labelName = unitTestFile.substring(Math.max(unitTestFile.lastIndexOf("/"), unitTestFile.lastIndexOf("\\")) + 1); + let labelName = unitTestFile.substring(Math.max(unitTestFile.lastIndexOf("/"), unitTestFile.lastIndexOf("\\")) + 1); browser.get("file://" + unitTestFile).then(function () { // Decleare the actualMap which will store all the actual xpath results - var actualMap = {}; + let actualMap = {}; // Perform the accessibility scan using the IBMaScan Wrapper aChecker.getCompliance(browser, labelName, function (report, doc) { try { // Make sure that the structure of the result match with expected structure // Fetch the baseline object based on the label provided - var expected = aChecker.getBaseline(labelName); + let expected = aChecker.getBaseline(labelName); // Define the differences with some content as we expect it to be null or undefined if pass - var differences = "Something"; + let differences = "Something"; // Update all the items in the results which dynamically change over scans to the values // already defined in the baseline file. diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js index ae97f47b3..50a18f71f 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js @@ -14,26 +14,24 @@ limitations under the License. *****************************************************************************/ - 'use strict'; -var userBrowser = process.env.USER_BROWSER || "CHROME"; +'use strict'; +import * as fs from "fs"; +import * as path from "path"; +import * as aChecker from "../../../../src/index.js"; +import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; +import { expect } from "chai"; +import { Builder, Capabilities } from "selenium-webdriver"; -var webdriver = require('selenium-webdriver'), - By = webdriver.By, - until = webdriver.until; +let userBrowser = process.env.USER_BROWSER || "CHROME"; -var fs = require("fs"); -var path = require("path"); -var unitTestcaseHTML = {}; -var aChecker = require("../../../../src"); -const ace = require("../../../../../accessibility-checker-engine/dist/ace-node"); -var testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); -var gdirs = fs.readdirSync(testRootDir); +let unitTestcaseHTML = {}; +let testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); +let gdirs = fs.readdirSync(testRootDir); // gdirs = [ // "style_color_misuse_ruleunit", // "a_text_purpose_ruleunit", // "style_before_after_review_ruleunit"] -var expect = require("chai").expect; const mapRuleToG = aChecker.ruleIdToLegacyId; @@ -64,12 +62,12 @@ before(async function () { }); }); -var browser; +let browser; if (userBrowser.toUpperCase() === "FIREFOX") { before(function (done) { try { this.timeout(10000); - browser = new webdriver.Builder() + browser = new Builder() .forBrowser('firefox') .usingServer('http://localhost:4444/wd/hub') .build(); @@ -80,37 +78,40 @@ if (userBrowser.toUpperCase() === "FIREFOX") { } }) } else if (userBrowser.toUpperCase() === "CHROME") { - var chrome = require('selenium-webdriver/chrome'); before(function (done) { - try { - this.timeout(10000); - var spath = require('chromedriver').path; - spath = path.join(spath, ".."); - spath = path.join(spath, ".."); - spath = path.join(spath, ".."); - spath = path.join(spath, "bin"); - spath = path.join(spath, "chromedriver"); - - var service = new chrome.ServiceBuilder(spath).build(); + this.timeout(10000); + (async () => { try { - chrome.setDefaultService(service); - } catch (e) {} - const options = new chrome.Options(); - options.addArguments("--disable-dev-shm-usage"); - options.addArguments("--headless=new"); - options.addArguments('--ignore-certificate-errors') + const chrome = await import('selenium-webdriver/chrome.js'); + const chromedriver = await import('chromedriver'); + let spath = chromedriver.path; + spath = path.join(spath, ".."); + spath = path.join(spath, ".."); + spath = path.join(spath, ".."); + spath = path.join(spath, "bin"); + spath = path.join(spath, "chromedriver"); - browser = new webdriver.Builder() - .withCapabilities(webdriver.Capabilities.chrome()) - .setChromeOptions(options) - .build(); - - browser.manage().window().setRect({x: 0, y:0, width: 13666, height: 784}); - expect(typeof browser).to.not.equal("undefined"); - done(); - } catch (e) { - console.log(e); - } + let service = new chrome.ServiceBuilder(spath).build(); + try { + chrome.setDefaultService(service); + } catch (e) {} + const options = new chrome.Options(); + options.addArguments("--disable-dev-shm-usage"); + options.addArguments("--headless=new"); + options.addArguments('--ignore-certificate-errors') + + browser = new Builder() + .withCapabilities(Capabilities.chrome()) + .setChromeOptions(options) + .build(); + + browser.manage().window().setRect({x: 0, y:0, width: 13666, height: 784}); + expect(typeof browser).to.not.equal("undefined"); + done(); + } catch (e) { + console.log(e); + } + })(); }) } @@ -119,13 +120,13 @@ after(function (done) { }) gdirs.forEach(function (gdir) { - var gdir = path.join(testRootDir, gdir) + gdir = path.join(testRootDir, gdir) if (fs.lstatSync(gdir).isDirectory()) { - var files = fs.readdirSync(gdir); + let files = fs.readdirSync(gdir); files.forEach(function (f) { - var fileExtension = f.substr(f.lastIndexOf('.') + 1); + let fileExtension = f.substr(f.lastIndexOf('.') + 1); if (fileExtension === 'html' || fileExtension === 'htm') { - var f = path.join(gdir, f); + f = path.join(gdir, f); unitTestcaseHTML[f] = fs.readFileSync(f, 'utf8'); }; }); @@ -134,7 +135,7 @@ gdirs.forEach(function (gdir) { let testRoot = path.join(process.cwd(), "..", "accessibility-checker-engine", "test", "v2", "checker", "accessibility", "rules"); // Skip test cases that don't work in this environment (e.g., can't disable meta refresh in chrome) -var skipList = [ +let skipList = [ //not in karma conf file path.join(testRoot, "a_text_purpose_ruleunit", "A-hasTextEmbedded.html"), path.join(testRoot, "a_text_purpose_ruleunit", "A-nonTabable.html"), @@ -152,7 +153,7 @@ var skipList = [ path.join(testRoot, "aria_banner_label_unique_ruleunit", "validLandMarks-testCaseFromAnn.html") ] -var skipMap = {} +let skipMap = {} skipList.forEach(function (skip) { skipMap[skip] = true; }); @@ -164,14 +165,14 @@ describe("Rule Unit Tests from Selenium", function () { }); // Variable Decleration - var originalTimeout; + let originalTimeout; // let count = 10; // Loop over all the unitTestcase html/htm files and perform a scan for them - for (var unitTestFile in unitTestcaseHTML) { + for (let unitTestFile in unitTestcaseHTML) { if (unitTestFile in skipMap) continue; // if (count-- < 0) continue; // Get the extension of the file we are about to scan - var fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); + let fileExtension = unitTestFile.substr(unitTestFile.lastIndexOf('.') + 1); // Make sure the unit testcase we are trying to scan is actually and html/htm files, if it is not // just move on to the next one. @@ -194,7 +195,7 @@ describe("Rule Unit Tests from Selenium", function () { it('a11y scan should match expected value', function (done) { this.timeout(0); - var regex = "test.*html?$"; + let regex = "test.*html?$"; browser.get("file://" + unitTestFile).then(function () { let report = null; From 8d01685f8e66475d7987f16896e0b8859c5dfe3e Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Wed, 17 May 2023 10:02:59 -0500 Subject: [PATCH 03/21] Fix object verification --- .../src-ts/lib/ACConfigManager.ts | 2 +- .../JSONObjectStructureVerification.html.json | 5154 +++++++++-------- ...ectStructureVerificationSelenium.html.json | 5154 +++++++++-------- 3 files changed, 5709 insertions(+), 4601 deletions(-) diff --git a/accessibility-checker/src-ts/lib/ACConfigManager.ts b/accessibility-checker/src-ts/lib/ACConfigManager.ts index 4e02036c4..18cc740cf 100644 --- a/accessibility-checker/src-ts/lib/ACConfigManager.ts +++ b/accessibility-checker/src-ts/lib/ACConfigManager.ts @@ -175,7 +175,7 @@ function initializeDefaults(config: IConfigUnsupported) { // Load in the package.json file so that we can extract the module name and the version to build // a toolID which needs to be used when results are build for the purpose of keeping track of // which tool is uploading the results. - const packageObject = JSON.parse(fs.readFileSync('../package.json').toString()); + const packageObject = JSON.parse(fs.readFileSync('./package.json').toString()); // Build the toolID based on name and version config.toolID = packageObject.name + "-v" + packageObject.version; diff --git a/accessibility-checker/test/baselines/JSONObjectStructureVerification.html.json b/accessibility-checker/test/baselines/JSONObjectStructureVerification.html.json index ec34af501..ffffed7ba 100644 --- a/accessibility-checker/test/baselines/JSONObjectStructureVerification.html.json +++ b/accessibility-checker/test/baselines/JSONObjectStructureVerification.html.json @@ -1,2302 +1,2856 @@ { - "results": [{ - "ruleId": "page_title_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/title[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": ["Helo World"], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<title>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/title[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<title>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/title[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<title>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/title[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<title>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/title[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<title>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/meta[2]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<meta content=\"text\" name=\"Description\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/meta[2]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<meta content=\"text\" name=\"Description\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/meta[2]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<meta content=\"text\" name=\"Description\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/meta[2]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<meta content=\"text\" name=\"Description\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/meta[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<meta charset=\"utf-8\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/meta[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<meta charset=\"utf-8\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/meta[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<meta charset=\"utf-8\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]/meta[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<meta charset=\"utf-8\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/head[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 0, - "width": 0 - }, - "snippet": "<head>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_whitespace_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_sensory_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_contrast_sufficient", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": ["21.00", 32, 700, "#000000", "#ffffff", false, false], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "heading_markup_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "heading_content_exists", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Heading element has descriptive text", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/h1[1]", - "aria": "/document[1]/main[1]/heading[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<h1>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_whitespace_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_sensory_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_block_heading", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "element_id_unique", - "value": ["VIOLATION", "FAIL"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Fail_2", - "message": "The <div> element has the id \"firstDiv\" that is already in use", - "messageArgs": ["div", "firstDiv"], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "violation" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_whitespace_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_sensory_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_block_heading", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "element_id_unique", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/div[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 144, - "height": 0, - "width": 784 - }, - "snippet": "<div id=\"firstDiv\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_whitespace_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/a[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 0, - "width": 0 - }, - "snippet": "<a name=\"navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_sensory_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/a[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 0, - "width": 0 - }, - "snippet": "<a name=\"navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/a[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 0, - "width": 0 - }, - "snippet": "<a name=\"navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/a[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 0, - "width": 0 - }, - "snippet": "<a name=\"navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/a[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 0, - "width": 0 - }, - "snippet": "<a name=\"navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/a[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 0, - "width": 0 - }, - "snippet": "<a name=\"navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]/a[1]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 0, - "width": 0 - }, - "snippet": "<a name=\"navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_whitespace_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_sensory_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_block_heading", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_role_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": ["main", "div"], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_role_redundant", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "pass", - "message": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_role_allowed", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_keyboard_handler_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_attribute_deprecated", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[2]", - "aria": "/document[1]/main[1]" - }, - "reasonId": "pass", - "message": "The ARIA roles and attribute are used per specification", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 48, - "height": 74, - "width": 784 - }, - "snippet": "<div role=\"main\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "widget_tabbable_single", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "widget_tabbable_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_whitespace_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_sensory_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_contrast_sufficient", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": ["9.40", 16, 400, "#0000ee", "#ffffff", false, false], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "element_tabbable_visible", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "pass", - "message": "The tabbable element is visible on the screen", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_content_in_landmark", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "a_text_purpose", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]/a[1]", - "aria": "/document[1]/navigation[1]/link[1]" - }, - "reasonId": "Pass_0", - "message": "Hyperlink has a description of its purpose", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 18, - "width": 56 - }, - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_whitespace_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_sensory_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_block_heading", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_role_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": ["navigation", "div"], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_role_redundant", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "pass", - "message": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_role_allowed", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_keyboard_handler_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "aria_attribute_deprecated", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]/div[1]", - "aria": "/document[1]/navigation[1]" - }, - "reasonId": "pass", - "message": "The ARIA roles and attribute are used per specification", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 19, - "width": 784 - }, - "snippet": "<div role=\"navigation\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_whitespace_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "reasonId": "pass", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 114, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_sensory_misuse", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 114, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "text_quoted_correctly", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 114, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "skip_main_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 114, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "skip_main_described", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 114, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 114, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 114, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]/body[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 8, - "top": 8, - "height": 114, - "width": 784 - }, - "snippet": "<body>", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "page_title_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 144, - "width": 800 - }, - "snippet": "<html lang=\"en\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "list_markup_review", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 144, - "width": 800 - }, - "snippet": "<html lang=\"en\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "img_alt_background", - "value": ["RECOMMENDATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 144, - "width": 800 - }, - "snippet": "<html lang=\"en\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "html_skipnav_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 144, - "width": 800 - }, - "snippet": "<html lang=\"en\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "html_lang_valid", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Lang has a valid primary lang and conforms to BCP 47", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 144, - "width": 800 - }, - "snippet": "<html lang=\"en\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "html_lang_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Page language detected as \"en\"", - "messageArgs": ["en"], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 144, - "width": 800 - }, - "snippet": "<html lang=\"en\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }, { - "ruleId": "emoticons_alt_exists", - "value": ["VIOLATION", "PASS"], - "path": { - "dom": "/html[1]", - "aria": "/document[1]" - }, - "reasonId": "Pass_0", - "message": "Rule Passed", - "messageArgs": [], - "apiArgs": [], - "bounds": { - "left": 0, - "top": 0, - "height": 144, - "width": 800 - }, - "snippet": "<html lang=\"en\">", - "category": "Accessibility", - "ignored": false, - "level": "pass" - }], - "numExecuted": 103, - "nls": { - "html_lang_valid": { - "0": "The default human language of the page must be valid and specified in accordance with BCP 47", - "Pass_0": "Lang has a valid primary lang and conforms to BCP 47" - }, - "html_lang_exists": { - "0": "Page must identify the default language of the document with a 'lang' attribute", - "Pass_0": "Page language detected as \"{0}\"" - }, - "html_skipnav_exists": { - "0": "Provide a way to bypass blocks of content that are repeated on multiple Web pages", - "Pass_0": "Rule Passed" - }, - "page_title_exists": { - "0": "The page should have a title that correctly identifies the subject of the page", - "Pass_0": "Rule Passed" - }, - "emoticons_alt_exists": { - "0": "Emoticons must have a short text alternative that describes their purpose", - "Pass_0": "Rule Passed" - }, - "img_alt_background": { - "0": "Background images that convey important information must have a text alternative that describes the image", - "Pass_0": "Rule Passed" - }, - "list_markup_review": { - "0": "Use proper HTML list elements to create lists", - "Pass_0": "Rule Passed" - }, - "aria_content_in_landmark": { - "0": "All content must reside within an element with a landmark role", - "Pass_0": "Rule Passed" - }, - "page_title_valid": { - "0": "Page <title> should be a descriptive title, rather than a filename", - "Pass_0": "Rule Passed" - }, - "skip_main_exists": { - "0": "Pages must provide a way to skip directly to the main content", - "Pass_0": "Rule Passed" - }, - "skip_main_described": { - "0": "The description of a hyperlink used to skip content must communicate where it links to", - "Pass_0": "Rule Passed" - }, - "text_sensory_misuse": { - "0": "Instructions must be meaningful without shape or location words", - "Pass_0": "Rule Passed" - }, - "text_quoted_correctly": { - "0": "Quotations should be marked with <q> or <blockquote> elements", - "Pass_0": "Rule Passed" - }, - "text_whitespace_valid": { - "0": "Space characters should not be used to control spacing within a word", - "pass": "Rule Passed" - }, - "text_block_heading": { - "0": "Heading text must use a heading element", - "Pass_0": "Rule Passed" - }, - "aria_attribute_deprecated": { - "0": "No deprecated ARIA role or attribute should be used", - "pass": "The ARIA roles and attribute are used per specification" - }, - "aria_role_allowed": { - "0": "Elements must have a valid 'role' per ARIA specification", - "Pass_0": "Rule Passed" - }, - "aria_keyboard_handler_exists": { - "0": "Interactive WAI_ARIA UI components must provide keyboard access", - "pass": "Rule Passed" - }, - "aria_role_redundant": { - "0": "An explicitly-assigned ARIA role should not be redundant with the implicit role of the element", - "pass": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element" - }, - "aria_role_valid": { - "0": "ARIA roles must be valid for the element to which they are assigned", - "Pass_0": "Rule Passed" - }, - "element_tabbable_visible": { - "0": "A tabbable element should be visible on the screen when it has keyboard focus", - "pass": "The tabbable element is visible on the screen" - }, - "text_contrast_sufficient": { - "0": "The contrast ratio of text with its background must meet WCAG 2.1 AA requirements", - "Pass_0": "Rule Passed" - }, - "a_text_purpose": { - "0": "Hyperlinks must have a text description of their purpose", - "Pass_0": "Hyperlink has a description of its purpose" - }, - "widget_tabbable_exists": { - "0": "Component must have at least one tabbable element", - "pass": "Rule Passed" - }, - "widget_tabbable_single": { - "0": "Certain components must have no more than one tabbable element", - "pass": "Rule Passed" - }, - "heading_content_exists": { - "0": "Heading elements must provide descriptive text", - "Pass_0": "Heading element has descriptive text" - }, - "heading_markup_misuse": { - "0": "Heading elements must not be used for presentation", - "Pass_0": "Rule Passed" - }, - "element_id_unique": { - "0": "Element 'id' attribute values must be unique within a document", - "Pass_0": "Rule Passed", - "Fail_2": "The <{0}> element has the id \"{1}\" that is already in use" - } - }, - "summary": { - "counts": { - "violation": 1, - "potentialviolation": 0, - "recommendation": 0, - "potentialrecommendation": 0, - "manual": 0, - "pass": 102, - "ignored": 0 - }, - "scanTime": 999, - "ruleArchive": "Preview Rules (preview)", - "policies": ["IBM_Accessibility"], - "reportLevels": ["violation", "potentialviolation", "recommendation", "potentialrecommendation", "manual", "pass"], - "startScan": 99999999999, - "URL": "<URL>" - }, - "scanID": "uuid", - "toolID": "accessibility-checker-v3.0.0", - "label": "JSONObjectStructureVerification.html" + "results": [ + { + "ruleId": "element_id_unique", + "value": [ + "VIOLATION", + "FAIL" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Fail_2", + "message": "The <div> element has the id \"firstDiv\" that is already in use", + "messageArgs": [ + "div", + "firstDiv" + ], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "violation" + }, + { + "ruleId": "widget_tabbable_single", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 1, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "widget_tabbable_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/a[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 0, + "width": 0 + }, + "snippet": "<a name=\"navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_whitespace_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 114, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/a[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 0, + "width": 0 + }, + "snippet": "<a name=\"navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_sensory_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 114, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/a[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 0, + "width": 0 + }, + "snippet": "<a name=\"navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_quoted_correctly", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 114, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_contrast_sufficient", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 1, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [ + "21.00", + 32, + 700, + "#000000", + "#ffffff", + false, + false + ], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_contrast_sufficient", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [ + "9.40", + 16, + 400, + "#0000ee", + "#ffffff", + false, + false + ], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_block_heading", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_block_heading", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_block_heading", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "text_block_heading", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "skip_main_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 114, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "skip_main_described", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 114, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "page_title_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/title[1]", + "aria": "/document[1]" + }, + "ruleTime": 1, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [ + "Helo World" + ], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<title>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "page_title_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 144, + "width": 800 + }, + "snippet": "<html lang=\"en\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/title[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<title>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/meta[2]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<meta content=\"text\" name=\"Description\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/meta[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<meta charset=\"utf-8\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<head>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/a[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 0, + "width": 0 + }, + "snippet": "<a name=\"navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 114, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "list_markup_review", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 144, + "width": 800 + }, + "snippet": "<html lang=\"en\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/title[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<title>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/meta[2]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<meta content=\"text\" name=\"Description\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/meta[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<meta charset=\"utf-8\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<head>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/a[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 0, + "width": 0 + }, + "snippet": "<a name=\"navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 114, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "img_alt_background", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 144, + "width": 800 + }, + "snippet": "<html lang=\"en\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "html_skipnav_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 144, + "width": 800 + }, + "snippet": "<html lang=\"en\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "html_lang_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 1, + "reasonId": "Pass_0", + "message": "Lang has a valid primary lang and conforms to BCP 47", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 144, + "width": 800 + }, + "snippet": "<html lang=\"en\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "html_lang_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Page language detected as \"en\"", + "messageArgs": [ + "en" + ], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 144, + "width": 800 + }, + "snippet": "<html lang=\"en\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "heading_markup_misuse", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "heading_content_exists", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Heading element has descriptive text", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/title[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<title>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/meta[2]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<meta content=\"text\" name=\"Description\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/meta[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<meta charset=\"utf-8\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<head>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/a[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 0, + "width": 0 + }, + "snippet": "<a name=\"navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 114, + "width": 784 + }, + "snippet": "<body>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "emoticons_alt_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 144, + "width": 800 + }, + "snippet": "<html lang=\"en\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "element_tabbable_visible", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "The tabbable element is visible on the screen", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "element_id_unique", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_role_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [ + "main", + "div" + ], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_role_valid", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [ + "navigation", + "div" + ], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_role_redundant", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_role_redundant", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_role_allowed", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_role_allowed", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_keyboard_handler_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_keyboard_handler_exists", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/title[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<title>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/meta[2]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<meta content=\"text\" name=\"Description\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]/meta[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<meta charset=\"utf-8\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/head[1]", + "aria": "/document[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 0, + "top": 0, + "height": 0, + "width": 0 + }, + "snippet": "<head>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/h1[1]", + "aria": "/document[1]/main[1]/heading[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<h1>", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/div[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 144, + "height": 0, + "width": 784 + }, + "snippet": "<div id=\"firstDiv\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]/a[1]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 0, + "width": 0 + }, + "snippet": "<a name=\"navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_content_in_landmark", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Rule Passed", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_attribute_deprecated", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[2]", + "aria": "/document[1]/main[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "The ARIA roles and attribute are used per specification", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 48, + "height": 74, + "width": 784 + }, + "snippet": "<div role=\"main\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "aria_attribute_deprecated", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]", + "aria": "/document[1]/navigation[1]" + }, + "ruleTime": 0, + "reasonId": "pass", + "message": "The ARIA roles and attribute are used per specification", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 784 + }, + "snippet": "<div role=\"navigation\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + }, + { + "ruleId": "a_text_purpose", + "value": [ + "VIOLATION", + "PASS" + ], + "path": { + "dom": "/html[1]/body[1]/div[1]/a[1]", + "aria": "/document[1]/navigation[1]/link[1]" + }, + "ruleTime": 0, + "reasonId": "Pass_0", + "message": "Hyperlink has a description of its purpose", + "messageArgs": [], + "apiArgs": [], + "bounds": { + "left": 8, + "top": 8, + "height": 19, + "width": 56 + }, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "category": "Accessibility", + "ignored": true, + "level": "pass" + } + ], + "numExecuted": 103, + "nls": { + "html_lang_valid": { + "0": "The default human language of the page must be valid and specified in accordance with BCP 47", + "Pass_0": "Lang has a valid primary lang and conforms to BCP 47" + }, + "html_lang_exists": { + "0": "Page must identify the default language of the document with a 'lang' attribute", + "Pass_0": "Page language detected as \"{0}\"" + }, + "html_skipnav_exists": { + "0": "Provide a way to bypass blocks of content that are repeated on multiple Web pages", + "Pass_0": "Rule Passed" + }, + "page_title_exists": { + "0": "The page should have a title that correctly identifies the subject of the page", + "Pass_0": "Rule Passed" + }, + "emoticons_alt_exists": { + "0": "Emoticons must have a short text alternative that describes their purpose", + "Pass_0": "Rule Passed" + }, + "img_alt_background": { + "0": "Background images that convey important information must have a text alternative that describes the image", + "Pass_0": "Rule Passed" + }, + "list_markup_review": { + "0": "Use proper HTML list elements to create lists", + "Pass_0": "Rule Passed" + }, + "aria_content_in_landmark": { + "0": "All content must reside within an element with a landmark role", + "Pass_0": "Rule Passed" + }, + "page_title_valid": { + "0": "Page <title> should be a descriptive title, rather than a filename", + "Pass_0": "Rule Passed" + }, + "skip_main_exists": { + "0": "Pages must provide a way to skip directly to the main content", + "Pass_0": "Rule Passed" + }, + "skip_main_described": { + "0": "The description of a hyperlink used to skip content must communicate where it links to", + "Pass_0": "Rule Passed" + }, + "text_sensory_misuse": { + "0": "Instructions must be meaningful without shape or location words", + "Pass_0": "Rule Passed" + }, + "text_quoted_correctly": { + "0": "Quotations should be marked with <q> or <blockquote> elements", + "Pass_0": "Rule Passed" + }, + "text_whitespace_valid": { + "0": "Space characters should not be used to control spacing within a word", + "pass": "Rule Passed" + }, + "text_block_heading": { + "0": "Heading text must use a heading element", + "Pass_0": "Rule Passed" + }, + "aria_attribute_deprecated": { + "0": "No deprecated ARIA role or attribute should be used", + "pass": "The ARIA roles and attribute are used per specification" + }, + "aria_role_allowed": { + "0": "Elements must have a valid 'role' per ARIA specification", + "Pass_0": "Rule Passed" + }, + "aria_keyboard_handler_exists": { + "0": "Interactive WAI_ARIA UI components must provide keyboard access", + "pass": "Rule Passed" + }, + "aria_role_redundant": { + "0": "An explicitly-assigned ARIA role should not be redundant with the implicit role of the element", + "pass": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element" + }, + "aria_role_valid": { + "0": "ARIA roles must be valid for the element to which they are assigned", + "Pass_0": "Rule Passed" + }, + "element_tabbable_visible": { + "0": "A tabbable element should be visible on the screen when it has keyboard focus", + "pass": "The tabbable element is visible on the screen" + }, + "text_contrast_sufficient": { + "0": "The contrast ratio of text with its background must meet WCAG 2.1 AA requirements", + "Pass_0": "Rule Passed" + }, + "a_text_purpose": { + "0": "Hyperlinks must have a text description of their purpose", + "Pass_0": "Hyperlink has a description of its purpose" + }, + "widget_tabbable_exists": { + "0": "Component must have at least one tabbable element", + "pass": "Rule Passed" + }, + "widget_tabbable_single": { + "0": "Certain components must have no more than one tabbable element", + "pass": "Rule Passed" + }, + "heading_content_exists": { + "0": "Heading elements must provide descriptive text", + "Pass_0": "Heading element has descriptive text" + }, + "heading_markup_misuse": { + "0": "Heading elements must not be used for presentation", + "Pass_0": "Rule Passed" + }, + "element_id_unique": { + "0": "Element 'id' attribute values must be unique within a document", + "Pass_0": "Rule Passed", + "Fail_2": "The <{0}> element has the id \"{1}\" that is already in use" + } + }, + "summary": { + "counts": { + "violation": 0, + "potentialviolation": 0, + "recommendation": 0, + "potentialrecommendation": 0, + "manual": 0, + "pass": 0, + "ignored": 103 + }, + "scanTime": 17, + "ruleArchive": "Preview Rules (preview)", + "policies": [ + "IBM_Accessibility" + ], + "reportLevels": [ + "violation", + "potentialviolation", + "recommendation", + "potentialrecommendation", + "manual", + "pass" + ], + "startScan": 1684335430085, + "URL": "data:text/html;charset=utf-8,%3C!DOCTYPE%20html%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20HTML%204.01%20Transitional%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FTR%2Fhtml4%2Floose.dtd%22%3E%0A%3C!--%0A%20%20%20%20%20%2F******************************************************************************%0A%20%20%20%20%20Copyright%3A%3A%202020-%20IBM%2C%20Inc%0A%0A%20%20%20%20Licensed%20under%20the%20Apache%20License%2C%20Version%202.0%20(the%20%22License%22)%3B%0A%20%20%20%20you%20may%20not%20use%20this%20file%20except%20in%20compliance%20with%20the%20License.%0A%20%20%20%20You%20may%20obtain%20a%20copy%20of%20the%20License%20at%0A%0A%20%20%20%20http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0%0A%0A%20%20%20%20Unless%20required%20by%20applicable%20law%20or%20agreed%20to%20in%20writing%2C%20software%0A%20%20%20%20distributed%20under%20the%20License%20is%20distributed%20on%20an%20%22AS%20IS%22%20BASIS%2C%0A%20%20%20%20WITHOUT%20WARRANTIES%20OR%20CONDITIONS%20OF%20ANY%20KIND%2C%20either%20express%20or%20implied.%0A%20%20%20%20See%20the%20License%20for%20the%20specific%20language%20governing%20permissions%20and%0A%20%20%20%20limitations%20under%20the%20License.%0A%20%20*****************************************************************************%2F%0A%0A--%3E%20%0A%3Chtml%20lang%3D%22en%22%3E%0A%0A%3Chead%3E%0A%20%20%20%20%3Ctitle%3EHelo%20World%3C%2Ftitle%3E%0A%20%20%20%20%3Cmeta%20charset%3D%22utf-8%22%3E%0A%20%20%20%20%3Cmeta%20name%3D%22Description%22%20content%3D%22text%22%3E%0A%3C%2Fhead%3E%0A%0A%3Cbody%3E%0A%20%20%20%20%3Cdiv%20role%3D%22navigation%22%3E%0A%20%20%20%20%20%20%20%20%3Ca%20href%3D%22%23navskip%22%20alt%3D%22skip%20to%20main%20content%22%3E%20NavSkip%20%3C%2Fa%3E%0A%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%3Cdiv%20role%3D%22main%22%3E%0A%20%20%20%20%20%20%20%20%3Ca%20name%3D%22navskip%22%3E%3C%2Fa%3E%0A%0A%20%20%20%20%20%20%20%20%3C!--%20xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%20--%3E%0A%0A%20%20%20%20%20%20%20%20%3Ch1%3EThis%20is%20a%20basic%20file%20to%20test%20that%20the%20karma-ibma%20is%20scanning%20for%20accessibility%20violations...%3C%2Fh1%3E%0A%0A%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22firstDiv%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C!--%3Cimg%20src%3D%22somfile.png%22%2F%3E--%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C!--%3Cimg%20src%3D%22somfile.png%22%2F%3E--%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22firstDiv%22%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%3C%2Fdiv%3E%0A%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%2F%2F%3C!%5BCDATA%5B%0A%20%20if%20(typeof(OpenAjax)%20%3D%3D%20'undefined')%20OpenAjax%20%3D%20%7B%7D%0A%20%20if%20(typeof(OpenAjax.a11y)%20%3D%3D%20'undefined')%20OpenAjax.a11y%20%3D%20%7B%7D%0A%20%20OpenAjax.a11y.ruleCoverage%20%3D%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ruleId%3A%20%221%22%2C%0A%20%20%20%20%20%20passedXpaths%3A%20%5B%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20failedXpaths%3A%20%5B%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%7D%2C%0A%20%20%5D%3B%0A%2F%2F%5D%5D%3E%0A%3C%2Fscript%3E%20%20%20%20%0A%3C%2Fbody%3E%0A%0A%3C%2Fhtml%3E%0A" + }, + "scanID": "875be7f2-0bfb-418a-a394-a5198ba958e9", + "toolID": "accessibility-checker-v3.0.0", + "label": "JSONObjectStructureVerification.html" } \ No newline at end of file diff --git a/accessibility-checker/test/baselines/JSONObjectStructureVerificationSelenium.html.json b/accessibility-checker/test/baselines/JSONObjectStructureVerificationSelenium.html.json index f38516416..58994f875 100644 --- a/accessibility-checker/test/baselines/JSONObjectStructureVerificationSelenium.html.json +++ b/accessibility-checker/test/baselines/JSONObjectStructureVerificationSelenium.html.json @@ -1,2302 +1,2856 @@ { - "nls": { - "a_text_purpose": { - "0": "Hyperlinks must have a text description of their purpose", - "Pass_0": "Hyperlink has a description of its purpose" - }, - "aria_attribute_deprecated": { - "0": "No deprecated ARIA role or attribute should be used", - "pass": "The ARIA roles and attribute are used per specification" - }, - "aria_content_in_landmark": { - "0": "All content must reside within an element with a landmark role", - "Pass_0": "Rule Passed" - }, - "aria_keyboard_handler_exists": { - "0": "Interactive WAI_ARIA UI components must provide keyboard access", - "pass": "Rule Passed" - }, - "aria_role_allowed": { - "0": "Elements must have a valid 'role' per ARIA specification", - "Pass_0": "Rule Passed" - }, - "aria_role_redundant": { - "0": "An explicitly-assigned ARIA role should not be redundant with the implicit role of the element", - "pass": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element" - }, - "aria_role_valid": { - "0": "ARIA roles must be valid for the element to which they are assigned", - "Pass_0": "Rule Passed" - }, - "element_id_unique": { - "0": "Element 'id' attribute values must be unique within a document", - "Fail_2": "The <{0}> element has the id \"{1}\" that is already in use", - "Pass_0": "Rule Passed" - }, - "element_tabbable_visible": { - "0": "A tabbable element should be visible on the screen when it has keyboard focus", - "pass": "The tabbable element is visible on the screen" - }, - "emoticons_alt_exists": { - "0": "Emoticons must have a short text alternative that describes their purpose", - "Pass_0": "Rule Passed" - }, - "heading_content_exists": { - "0": "Heading elements must provide descriptive text", - "Pass_0": "Heading element has descriptive text" - }, - "heading_markup_misuse": { - "0": "Heading elements must not be used for presentation", - "Pass_0": "Rule Passed" - }, - "html_lang_exists": { - "0": "Page must identify the default language of the document with a 'lang' attribute", - "Pass_0": "Page language detected as \"{0}\"" - }, - "html_lang_valid": { - "0": "The default human language of the page must be valid and specified in accordance with BCP 47", - "Pass_0": "Lang has a valid primary lang and conforms to BCP 47" - }, - "html_skipnav_exists": { - "0": "Provide a way to bypass blocks of content that are repeated on multiple Web pages", - "Pass_0": "Rule Passed" - }, - "img_alt_background": { - "0": "Background images that convey important information must have a text alternative that describes the image", - "Pass_0": "Rule Passed" - }, - "list_markup_review": { - "0": "Use proper HTML list elements to create lists", - "Pass_0": "Rule Passed" - }, - "page_title_exists": { - "0": "The page should have a title that correctly identifies the subject of the page", - "Pass_0": "Rule Passed" - }, - "page_title_valid": { - "0": "Page <title> should be a descriptive title, rather than a filename", - "Pass_0": "Rule Passed" - }, - "skip_main_described": { - "0": "The description of a hyperlink used to skip content must communicate where it links to", - "Pass_0": "Rule Passed" - }, - "skip_main_exists": { - "0": "Pages must provide a way to skip directly to the main content", - "Pass_0": "Rule Passed" - }, - "text_block_heading": { - "0": "Heading text must use a heading element", - "Pass_0": "Rule Passed" - }, - "text_contrast_sufficient": { - "0": "The contrast ratio of text with its background must meet WCAG 2.1 AA requirements", - "Pass_0": "Rule Passed" - }, - "text_quoted_correctly": { - "0": "Quotations should be marked with <q> or <blockquote> elements", - "Pass_0": "Rule Passed" - }, - "text_sensory_misuse": { - "0": "Instructions must be meaningful without shape or location words", - "Pass_0": "Rule Passed" - }, - "text_whitespace_valid": { - "0": "Space characters should not be used to control spacing within a word", - "pass": "Rule Passed" - }, - "widget_tabbable_exists": { - "0": "Component must have at least one tabbable element", - "pass": "Rule Passed" - }, - "widget_tabbable_single": { - "0": "Certain components must have no more than one tabbable element", - "pass": "Rule Passed" - } - }, - "numExecuted": 103, - "results": [{ - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": ["Helo World"], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/title[1]" - }, - "reasonId": "Pass_0", - "ruleId": "page_title_valid", - "snippet": "<title>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/title[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<title>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/title[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<title>", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/title[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<title>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/title[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<title>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/meta[2]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<meta content=\"text\" name=\"Description\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/meta[2]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<meta content=\"text\" name=\"Description\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/meta[2]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<meta content=\"text\" name=\"Description\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/meta[2]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<meta content=\"text\" name=\"Description\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/meta[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<meta charset=\"utf-8\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/meta[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<meta charset=\"utf-8\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/meta[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<meta charset=\"utf-8\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]/meta[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<meta charset=\"utf-8\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<head>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<head>", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<head>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 0, - "top": 0, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/head[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<head>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "pass", - "ruleId": "text_whitespace_valid", - "snippet": "<h1>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_sensory_misuse", - "snippet": "<h1>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_quoted_correctly", - "snippet": "<h1>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": ["21.00", 32, 700, "#000000", "#ffffff", false, false], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_contrast_sufficient", - "snippet": "<h1>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<h1>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<h1>", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "heading_markup_misuse", - "snippet": "<h1>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Heading element has descriptive text", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "heading_content_exists", - "snippet": "<h1>", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<h1>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]/heading[1]", - "dom": "/html[1]/body[1]/div[2]/h1[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<h1>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "pass", - "ruleId": "text_whitespace_valid", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "text_sensory_misuse", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "text_quoted_correctly", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "text_block_heading", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<div id=\"firstDiv\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "The <div> element has the id \"firstDiv\" that is already in use", - "messageArgs": ["div", "firstDiv"], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "Fail_2", - "ruleId": "element_id_unique", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "FAIL"], - "ignored": false, - "level": "violation" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "pass", - "ruleId": "text_whitespace_valid", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_sensory_misuse", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_quoted_correctly", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_block_heading", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<div id=\"firstDiv\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "element_id_unique", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<div id=\"firstDiv\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/a[1]" - }, - "reasonId": "pass", - "ruleId": "text_whitespace_valid", - "snippet": "<a name=\"navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_sensory_misuse", - "snippet": "<a name=\"navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_quoted_correctly", - "snippet": "<a name=\"navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<a name=\"navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<a name=\"navskip\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<a name=\"navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 0, - "left": 999, - "top": 999, - "width": 0 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<a name=\"navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "pass", - "ruleId": "text_whitespace_valid", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "text_sensory_misuse", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "text_quoted_correctly", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "text_block_heading", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<div role=\"main\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": ["main", "div"], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_role_valid", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "pass", - "ruleId": "aria_role_redundant", - "snippet": "<div role=\"main\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_role_allowed", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "pass", - "ruleId": "aria_keyboard_handler_exists", - "snippet": "<div role=\"main\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "The ARIA roles and attribute are used per specification", - "messageArgs": [], - "path": { - "aria": "/document[1]/main[1]", - "dom": "/html[1]/body[1]/div[2]" - }, - "reasonId": "pass", - "ruleId": "aria_attribute_deprecated", - "snippet": "<div role=\"main\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "pass", - "ruleId": "widget_tabbable_single", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "pass", - "ruleId": "widget_tabbable_exists", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "pass", - "ruleId": "text_whitespace_valid", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_sensory_misuse", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_quoted_correctly", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": ["9.40", 16, 400, "#0000ee", "#ffffff", false, false], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_contrast_sufficient", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "The tabbable element is visible on the screen", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "pass", - "ruleId": "element_tabbable_visible", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_content_in_landmark", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Hyperlink has a description of its purpose", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]/link[1]", - "dom": "/html[1]/body[1]/div[1]/a[1]" - }, - "reasonId": "Pass_0", - "ruleId": "a_text_purpose", - "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "pass", - "ruleId": "text_whitespace_valid", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_sensory_misuse", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_quoted_correctly", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_block_heading", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<div role=\"navigation\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": ["navigation", "div"], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_role_valid", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "pass", - "ruleId": "aria_role_redundant", - "snippet": "<div role=\"navigation\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "Pass_0", - "ruleId": "aria_role_allowed", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "pass", - "ruleId": "aria_keyboard_handler_exists", - "snippet": "<div role=\"navigation\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "The ARIA roles and attribute are used per specification", - "messageArgs": [], - "path": { - "aria": "/document[1]/navigation[1]", - "dom": "/html[1]/body[1]/div[1]" - }, - "reasonId": "pass", - "ruleId": "aria_attribute_deprecated", - "snippet": "<div role=\"navigation\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/body[1]" - }, - "reasonId": "pass", - "ruleId": "text_whitespace_valid", - "snippet": "<body>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/body[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_sensory_misuse", - "snippet": "<body>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/body[1]" - }, - "reasonId": "Pass_0", - "ruleId": "text_quoted_correctly", - "snippet": "<body>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/body[1]" - }, - "reasonId": "Pass_0", - "ruleId": "skip_main_exists", - "snippet": "<body>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/body[1]" - }, - "reasonId": "Pass_0", - "ruleId": "skip_main_described", - "snippet": "<body>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/body[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<body>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/body[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<body>", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 999, - "top": 999, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]/body[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<body>", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 0, - "top": 0, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]" - }, - "reasonId": "Pass_0", - "ruleId": "page_title_exists", - "snippet": "<html lang=\"en\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 0, - "top": 0, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]" - }, - "reasonId": "Pass_0", - "ruleId": "list_markup_review", - "snippet": "<html lang=\"en\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 0, - "top": 0, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]" - }, - "reasonId": "Pass_0", - "ruleId": "img_alt_background", - "snippet": "<html lang=\"en\">", - "value": ["RECOMMENDATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 0, - "top": 0, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]" - }, - "reasonId": "Pass_0", - "ruleId": "html_skipnav_exists", - "snippet": "<html lang=\"en\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 0, - "top": 0, - "width": 999 - }, - "category": "Accessibility", - "message": "Lang has a valid primary lang and conforms to BCP 47", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]" - }, - "reasonId": "Pass_0", - "ruleId": "html_lang_valid", - "snippet": "<html lang=\"en\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 0, - "top": 0, - "width": 999 - }, - "category": "Accessibility", - "message": "Page language detected as \"en\"", - "messageArgs": ["en"], - "path": { - "aria": "/document[1]", - "dom": "/html[1]" - }, - "reasonId": "Pass_0", - "ruleId": "html_lang_exists", - "snippet": "<html lang=\"en\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }, { - "apiArgs": [], - "bounds": { - "height": 999, - "left": 0, - "top": 0, - "width": 999 - }, - "category": "Accessibility", - "message": "Rule Passed", - "messageArgs": [], - "path": { - "aria": "/document[1]", - "dom": "/html[1]" - }, - "reasonId": "Pass_0", - "ruleId": "emoticons_alt_exists", - "snippet": "<html lang=\"en\">", - "value": ["VIOLATION", "PASS"], - "ignored": false, - "level": "pass" - }], - "summary": { - "counts": { - "violation": 1, - "potentialviolation": 0, - "recommendation": 0, - "potentialrecommendation": 0, - "manual": 0, - "pass": 102, - "ignored": 0 - }, - "scanTime": 999, - "ruleArchive": "Preview Rules (preview)", - "policies": ["IBM_Accessibility"], - "reportLevels": ["violation", "potentialviolation", "recommendation", "potentialrecommendation", "manual", "pass"], - "startScan": 99999999999, - "URL": "<URL>" - }, - "scanID": "uuid", - "toolID": "accessibility-checker-v3.0.0", - "label": "JSONObjectStructureVerificationSelenium.html" + "nls": { + "a_text_purpose": { + "0": "Hyperlinks must have a text description of their purpose", + "Pass_0": "Hyperlink has a description of its purpose" + }, + "aria_attribute_deprecated": { + "0": "No deprecated ARIA role or attribute should be used", + "pass": "The ARIA roles and attribute are used per specification" + }, + "aria_content_in_landmark": { + "0": "All content must reside within an element with a landmark role", + "Pass_0": "Rule Passed" + }, + "aria_keyboard_handler_exists": { + "0": "Interactive WAI_ARIA UI components must provide keyboard access", + "pass": "Rule Passed" + }, + "aria_role_allowed": { + "0": "Elements must have a valid 'role' per ARIA specification", + "Pass_0": "Rule Passed" + }, + "aria_role_redundant": { + "0": "An explicitly-assigned ARIA role should not be redundant with the implicit role of the element", + "pass": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element" + }, + "aria_role_valid": { + "0": "ARIA roles must be valid for the element to which they are assigned", + "Pass_0": "Rule Passed" + }, + "element_id_unique": { + "0": "Element 'id' attribute values must be unique within a document", + "Fail_2": "The <{0}> element has the id \"{1}\" that is already in use", + "Pass_0": "Rule Passed" + }, + "element_tabbable_visible": { + "0": "A tabbable element should be visible on the screen when it has keyboard focus", + "pass": "The tabbable element is visible on the screen" + }, + "emoticons_alt_exists": { + "0": "Emoticons must have a short text alternative that describes their purpose", + "Pass_0": "Rule Passed" + }, + "heading_content_exists": { + "0": "Heading elements must provide descriptive text", + "Pass_0": "Heading element has descriptive text" + }, + "heading_markup_misuse": { + "0": "Heading elements must not be used for presentation", + "Pass_0": "Rule Passed" + }, + "html_lang_exists": { + "0": "Page must identify the default language of the document with a 'lang' attribute", + "Pass_0": "Page language detected as \"{0}\"" + }, + "html_lang_valid": { + "0": "The default human language of the page must be valid and specified in accordance with BCP 47", + "Pass_0": "Lang has a valid primary lang and conforms to BCP 47" + }, + "html_skipnav_exists": { + "0": "Provide a way to bypass blocks of content that are repeated on multiple Web pages", + "Pass_0": "Rule Passed" + }, + "img_alt_background": { + "0": "Background images that convey important information must have a text alternative that describes the image", + "Pass_0": "Rule Passed" + }, + "list_markup_review": { + "0": "Use proper HTML list elements to create lists", + "Pass_0": "Rule Passed" + }, + "page_title_exists": { + "0": "The page should have a title that correctly identifies the subject of the page", + "Pass_0": "Rule Passed" + }, + "page_title_valid": { + "0": "Page <title> should be a descriptive title, rather than a filename", + "Pass_0": "Rule Passed" + }, + "skip_main_described": { + "0": "The description of a hyperlink used to skip content must communicate where it links to", + "Pass_0": "Rule Passed" + }, + "skip_main_exists": { + "0": "Pages must provide a way to skip directly to the main content", + "Pass_0": "Rule Passed" + }, + "text_block_heading": { + "0": "Heading text must use a heading element", + "Pass_0": "Rule Passed" + }, + "text_contrast_sufficient": { + "0": "The contrast ratio of text with its background must meet WCAG 2.1 AA requirements", + "Pass_0": "Rule Passed" + }, + "text_quoted_correctly": { + "0": "Quotations should be marked with <q> or <blockquote> elements", + "Pass_0": "Rule Passed" + }, + "text_sensory_misuse": { + "0": "Instructions must be meaningful without shape or location words", + "Pass_0": "Rule Passed" + }, + "text_whitespace_valid": { + "0": "Space characters should not be used to control spacing within a word", + "pass": "Rule Passed" + }, + "widget_tabbable_exists": { + "0": "Component must have at least one tabbable element", + "pass": "Rule Passed" + }, + "widget_tabbable_single": { + "0": "Certain components must have no more than one tabbable element", + "pass": "Rule Passed" + } + }, + "numExecuted": 103, + "results": [ + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "The <div> element has the id \"firstDiv\" that is already in use", + "messageArgs": [ + "div", + "firstDiv" + ], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "Fail_2", + "ruleId": "element_id_unique", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "FAIL" + ], + "ignored": true, + "level": "violation" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "pass", + "ruleId": "widget_tabbable_single", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "pass", + "ruleId": "widget_tabbable_exists", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "pass", + "ruleId": "text_whitespace_valid", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "pass", + "ruleId": "text_whitespace_valid", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "pass", + "ruleId": "text_whitespace_valid", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 96, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/a[1]" + }, + "reasonId": "pass", + "ruleId": "text_whitespace_valid", + "ruleTime": 0, + "snippet": "<a name=\"navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "pass", + "ruleId": "text_whitespace_valid", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "pass", + "ruleId": "text_whitespace_valid", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "pass", + "ruleId": "text_whitespace_valid", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 154, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/body[1]" + }, + "reasonId": "pass", + "ruleId": "text_whitespace_valid", + "ruleTime": 0, + "snippet": "<body>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_sensory_misuse", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "text_sensory_misuse", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_sensory_misuse", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 96, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_sensory_misuse", + "ruleTime": 0, + "snippet": "<a name=\"navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "text_sensory_misuse", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_sensory_misuse", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_sensory_misuse", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 154, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/body[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_sensory_misuse", + "ruleTime": 0, + "snippet": "<body>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_quoted_correctly", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "text_quoted_correctly", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_quoted_correctly", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 96, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_quoted_correctly", + "ruleTime": 0, + "snippet": "<a name=\"navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "text_quoted_correctly", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_quoted_correctly", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_quoted_correctly", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 154, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/body[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_quoted_correctly", + "ruleTime": 0, + "snippet": "<body>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [ + "21.00", + 32, + 700, + "#000000", + "#ffffff", + false, + false + ], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_contrast_sufficient", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [ + "9.40", + 16, + 400, + "#0000ee", + "#ffffff", + false, + false + ], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_contrast_sufficient", + "ruleTime": 1, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "text_block_heading", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_block_heading", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "text_block_heading", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "text_block_heading", + "ruleTime": 1, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 154, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/body[1]" + }, + "reasonId": "Pass_0", + "ruleId": "skip_main_exists", + "ruleTime": 0, + "snippet": "<body>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 154, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/body[1]" + }, + "reasonId": "Pass_0", + "ruleId": "skip_main_described", + "ruleTime": 0, + "snippet": "<body>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [ + "Helo World" + ], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/title[1]" + }, + "reasonId": "Pass_0", + "ruleId": "page_title_valid", + "ruleTime": 0, + "snippet": "<title>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 213, + "left": 0, + "top": 0, + "width": 27332 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]" + }, + "reasonId": "Pass_0", + "ruleId": "page_title_exists", + "ruleTime": 0, + "snippet": "<html lang=\"en\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/title[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<title>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/meta[2]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<meta content=\"text\" name=\"Description\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/meta[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<meta charset=\"utf-8\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<head>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 96, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<a name=\"navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 154, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/body[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<body>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 213, + "left": 0, + "top": 0, + "width": 27332 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]" + }, + "reasonId": "Pass_0", + "ruleId": "list_markup_review", + "ruleTime": 0, + "snippet": "<html lang=\"en\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/title[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<title>", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/meta[2]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<meta content=\"text\" name=\"Description\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/meta[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<meta charset=\"utf-8\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<head>", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 96, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<a name=\"navskip\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 154, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/body[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<body>", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 213, + "left": 0, + "top": 0, + "width": 27332 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]" + }, + "reasonId": "Pass_0", + "ruleId": "img_alt_background", + "ruleTime": 0, + "snippet": "<html lang=\"en\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 213, + "left": 0, + "top": 0, + "width": 27332 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]" + }, + "reasonId": "Pass_0", + "ruleId": "html_skipnav_exists", + "ruleTime": 0, + "snippet": "<html lang=\"en\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 213, + "left": 0, + "top": 0, + "width": 27332 + }, + "category": "Accessibility", + "message": "Lang has a valid primary lang and conforms to BCP 47", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]" + }, + "reasonId": "Pass_0", + "ruleId": "html_lang_valid", + "ruleTime": 1, + "snippet": "<html lang=\"en\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 213, + "left": 0, + "top": 0, + "width": 27332 + }, + "category": "Accessibility", + "message": "Page language detected as \"en\"", + "messageArgs": [ + "en" + ], + "path": { + "aria": "/document[1]", + "dom": "/html[1]" + }, + "reasonId": "Pass_0", + "ruleId": "html_lang_exists", + "ruleTime": 0, + "snippet": "<html lang=\"en\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "heading_markup_misuse", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Heading element has descriptive text", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "heading_content_exists", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/title[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<title>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/meta[2]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<meta content=\"text\" name=\"Description\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/meta[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<meta charset=\"utf-8\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<head>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 96, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<a name=\"navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 154, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/body[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<body>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 213, + "left": 0, + "top": 0, + "width": 27332 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]" + }, + "reasonId": "Pass_0", + "ruleId": "emoticons_alt_exists", + "ruleTime": 0, + "snippet": "<html lang=\"en\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "The tabbable element is visible on the screen", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "pass", + "ruleId": "element_tabbable_visible", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "element_id_unique", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [ + "main", + "div" + ], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_role_valid", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [ + "navigation", + "div" + ], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_role_valid", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "pass", + "ruleId": "aria_role_redundant", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "An explicitly-assigned ARIA role is not redundant with the implicit role of the element", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "pass", + "ruleId": "aria_role_redundant", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_role_allowed", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_role_allowed", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "pass", + "ruleId": "aria_keyboard_handler_exists", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "pass", + "ruleId": "aria_keyboard_handler_exists", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/title[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<title>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/meta[2]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<meta content=\"text\" name=\"Description\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]/meta[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<meta charset=\"utf-8\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 0, + "top": 0, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]", + "dom": "/html[1]/head[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<head>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]/heading[1]", + "dom": "/html[1]/body[1]/div[2]/h1[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<h1>", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[2]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 213, + "width": 27300 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/div[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<div id=\"firstDiv\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 0, + "left": 16, + "top": 96, + "width": 0 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<a name=\"navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Rule Passed", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "aria_content_in_landmark", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 74, + "left": 16, + "top": 96, + "width": 27300 + }, + "category": "Accessibility", + "message": "The ARIA roles and attribute are used per specification", + "messageArgs": [], + "path": { + "aria": "/document[1]/main[1]", + "dom": "/html[1]/body[1]/div[2]" + }, + "reasonId": "pass", + "ruleId": "aria_attribute_deprecated", + "ruleTime": 0, + "snippet": "<div role=\"main\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 27300 + }, + "category": "Accessibility", + "message": "The ARIA roles and attribute are used per specification", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]", + "dom": "/html[1]/body[1]/div[1]" + }, + "reasonId": "pass", + "ruleId": "aria_attribute_deprecated", + "ruleTime": 0, + "snippet": "<div role=\"navigation\">", + "value": [ + "RECOMMENDATION", + "PASS" + ], + "ignored": true, + "level": "pass" + }, + { + "apiArgs": [], + "bounds": { + "height": 37, + "left": 16, + "top": 16, + "width": 112 + }, + "category": "Accessibility", + "message": "Hyperlink has a description of its purpose", + "messageArgs": [], + "path": { + "aria": "/document[1]/navigation[1]/link[1]", + "dom": "/html[1]/body[1]/div[1]/a[1]" + }, + "reasonId": "Pass_0", + "ruleId": "a_text_purpose", + "ruleTime": 0, + "snippet": "<a alt=\"skip to main content\" href=\"#navskip\">", + "value": [ + "VIOLATION", + "PASS" + ], + "ignored": true, + "level": "pass" + } + ], + "summary": { + "counts": { + "violation": 0, + "potentialviolation": 0, + "recommendation": 0, + "potentialrecommendation": 0, + "manual": 0, + "pass": 0, + "ignored": 103 + }, + "scanTime": 14, + "ruleArchive": "Preview Rules (preview)", + "policies": [ + "IBM_Accessibility" + ], + "reportLevels": [ + "violation", + "potentialviolation", + "recommendation", + "potentialrecommendation", + "manual", + "pass" + ], + "startScan": 1684335563426, + "URL": "file:///Users/thbrunet/Tom/Git/equal-access/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/JSONObjectStructureVerificationSelenium.html" + }, + "scanID": "c2473ffd-7c5d-4c99-87fe-d6d0fbbb8490", + "toolID": "accessibility-checker-v3.0.0", + "label": "JSONObjectStructureVerificationSelenium.html" } \ No newline at end of file From 361d4e0fee2015c9fe1806a89afab7dd53003258 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Wed, 17 May 2023 10:07:30 -0500 Subject: [PATCH 04/21] Fix ACT runs --- accessibility-checker/test-act-w3/act.js | 6 ++---- accessibility-checker/test-act-w3/main.js | 2 +- accessibility-checker/test-act-w3/package.json | 1 + accessibility-checker/test-act/act.js | 6 ++---- accessibility-checker/test-act/main.js | 2 +- accessibility-checker/test-act/package.json | 1 + 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/accessibility-checker/test-act-w3/act.js b/accessibility-checker/test-act-w3/act.js index dfc6d6b9e..9299bd78e 100644 --- a/accessibility-checker/test-act-w3/act.js +++ b/accessibility-checker/test-act-w3/act.js @@ -58,7 +58,7 @@ async function getAceMapping() { return retVal; } -async function getTestcases() { +export async function getTestcases() { let aceMapping = await getAceMapping(); let ruleTestInfo = {} let resp = await fetch("https://www.w3.org/WAI/content-assets/wcag-act-rules/testcases.json"); @@ -98,7 +98,7 @@ async function getAssertion(ruleId, aceRules, result) { } } -async function getResult(page, actRuleId, testcaseId, aceRules, bSkip) { +export async function getResult(page, actRuleId, testcaseId, aceRules, bSkip) { const ruleset = await rulesetP; let assertions = []; if (aceRules.length === 0) { @@ -217,5 +217,3 @@ async function getResult(page, actRuleId, testcaseId, aceRules, bSkip) { issuesAll: bSkip ? [] : results.report.results } } - -module.exports = { getTestcases, getResult } \ No newline at end of file diff --git a/accessibility-checker/test-act-w3/main.js b/accessibility-checker/test-act-w3/main.js index 99271133a..c247177c4 100644 --- a/accessibility-checker/test-act-w3/main.js +++ b/accessibility-checker/test-act-w3/main.js @@ -1,7 +1,7 @@ 'use strict'; import * as puppeteer from "puppeteer"; -import { getTestcases, getResult } from "./act"; +import { getTestcases, getResult } from "./act.js"; import * as fs from "fs"; (async () => { // Fetch the testcases from ACT diff --git a/accessibility-checker/test-act-w3/package.json b/accessibility-checker/test-act-w3/package.json index 9ee7ce012..45caa5dfd 100644 --- a/accessibility-checker/test-act-w3/package.json +++ b/accessibility-checker/test-act-w3/package.json @@ -2,6 +2,7 @@ "name": "test-act", "version": "1.0.0", "description": "Run ACT testcases", + "type": "module", "scripts": { "test": "echo \"Results output to act-report-v2.txt\" && node main.js > act-report-v2.txt" } diff --git a/accessibility-checker/test-act/act.js b/accessibility-checker/test-act/act.js index 073d79b14..407f1ed5d 100644 --- a/accessibility-checker/test-act/act.js +++ b/accessibility-checker/test-act/act.js @@ -57,7 +57,7 @@ async function getAceMapping() { return retVal; } -async function getTestcases() { +export async function getTestcases() { let aceMapping = await getAceMapping(); let ruleTestInfo = {} let resp = await fetch("https://act-rules.github.io/testcases.json"); @@ -75,7 +75,7 @@ async function getTestcases() { return ruleTestInfo; } -async function getResult(page, testcaseId, aceRules, bSkip) { +export async function getResult(page, testcaseId, aceRules, bSkip) { if (aceRules.length === 0) { return { title: "", @@ -151,5 +151,3 @@ async function getResult(page, testcaseId, aceRules, bSkip) { issuesAll: issues2 } } - -module.exports = { getTestcases, getResult } \ No newline at end of file diff --git a/accessibility-checker/test-act/main.js b/accessibility-checker/test-act/main.js index f1812c4fd..af5cda7a0 100644 --- a/accessibility-checker/test-act/main.js +++ b/accessibility-checker/test-act/main.js @@ -1,7 +1,7 @@ 'use strict'; import * as puppeteer from 'puppeteer'; -import { getTestcases, getResult } from "./act"; +import { getTestcases, getResult } from "./act.js"; import * as fs from "fs"; (async () => { let earlResult = { diff --git a/accessibility-checker/test-act/package.json b/accessibility-checker/test-act/package.json index f3a0612f4..2f30a0bed 100644 --- a/accessibility-checker/test-act/package.json +++ b/accessibility-checker/test-act/package.json @@ -2,6 +2,7 @@ "name": "test-act", "version": "1.0.0", "description": "Run ACT testcases", + "type": "module", "scripts": { "test": "echo \"Results output to testOutput.txt\" && node main.js > testOutput.txt" } From c11f78bcba7785dfedc577636a4b86b6767d008b Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Wed, 17 May 2023 10:31:37 -0500 Subject: [PATCH 05/21] Throw out bounds differences within 2 --- ...cker.getCompliance.JSONObjectVerification.test.js | 10 ++++++++++ ...Compliance.JSONObjectVerificationSelenium.test.js | 12 +++++++++++- ...cker.getCompliance.JSONObjectVerification.test.js | 10 ++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js index 225fbd8e9..c9c697508 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js @@ -131,6 +131,16 @@ describe("JSON Structure Verification Zombie", function () { // Run the diff algo to get the list of differences differences = aChecker.diffResultsWithExpected(report, expected, false); } + if (typeof differences !== "undefined") { + differences = differences.filter(difference => ( + difference.kind !== "E" + || difference.path[2] !== "bounds" + || Math.abs(difference.lhs - difference.rhs) > 2 + )) + if (differences.length === 0) { + differences = undefined; + } + } expect(typeof differences).to.equal("undefined", "\nDoes not follow the correct JSON structure or can't load baselines" + JSON.stringify(differences, null, ' ')); // Mark the testcase as done. }); diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js index 042fc8c70..a37a64443 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js @@ -182,7 +182,17 @@ describe("JSON Structure Verification Selenium", function () { // Run the diff algo to get the list of differences differences = aChecker.diffResultsWithExpected(report, expected, false); } - + if (typeof differences !== "undefined") { + differences = differences.filter(difference => ( + difference.kind !== "E" + || difference.path[2] !== "bounds" + || Math.abs(difference.lhs - difference.rhs) > 2 + )) + if (differences.length === 0) { + differences = undefined; + } + } + expect(typeof differences).to.equal("undefined", "\nDoes not follow the correct JSON structure or can't load baselines" + JSON.stringify(differences, null, ' ')); // Mark the testcase as done. diff --git a/karma-accessibility-checker/test/client/aChecker.getCompliance.JSONObjectVerification.test.js b/karma-accessibility-checker/test/client/aChecker.getCompliance.JSONObjectVerification.test.js index e3f53a936..d9e5b412d 100644 --- a/karma-accessibility-checker/test/client/aChecker.getCompliance.JSONObjectVerification.test.js +++ b/karma-accessibility-checker/test/client/aChecker.getCompliance.JSONObjectVerification.test.js @@ -108,6 +108,16 @@ describe("JSONObjectVerification.test aChecker.getCompliance", function () { }) // Run the diff algo to get the list of differences differences = aChecker.diffResultsWithExpected(report, expected, true); + if (typeof differences !== "undefined") { + differences = differences.filter(difference => ( + difference.kind !== "E" + || difference.path[2] !== "bounds" + || Math.abs(difference.lhs - difference.rhs) > 2 + )) + if (differences.length === 0) { + differences = undefined; + } + } } expect(typeof differences).toEqual("undefined", "\nDoes not follow the correct JSON structure or can't load baselines" + JSON.stringify(differences, null, ' ')); // Mark the testcase as done. From 310bbc46712268bbd5e3c3956964872845338989 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Wed, 17 May 2023 11:10:03 -0500 Subject: [PATCH 06/21] Update cypress package-lock --- .../package-lock.json | 3417 ++++------------- 1 file changed, 653 insertions(+), 2764 deletions(-) diff --git a/cypress-accessibility-checker/package-lock.json b/cypress-accessibility-checker/package-lock.json index d5fd6cd97..eab3aec1d 100644 --- a/cypress-accessibility-checker/package-lock.json +++ b/cypress-accessibility-checker/package-lock.json @@ -1,7 +1,7 @@ { "name": "cypress-accessibility-checker", "version": "3.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -64,47 +64,6 @@ "node": ">= 6" } }, - "node_modules/@cypress/request/node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@cypress/request/node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/@cypress/request/node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@cypress/request/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -132,30 +91,66 @@ "ms": "^2.1.1" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz", + "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", "dev": true }, "node_modules/@hapi/topo": { @@ -168,29 +163,77 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0" @@ -209,9 +252,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", - "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==", + "version": "14.18.47", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.47.tgz", + "integrity": "sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw==", "dev": true }, "node_modules/@types/sinonjs__fake-timers": { @@ -227,9 +270,9 @@ "dev": true }, "node_modules/@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, "optional": true, "dependencies": { @@ -237,9 +280,9 @@ } }, "node_modules/acorn": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -287,9 +330,9 @@ } }, "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "engines": { "node": ">=6" @@ -310,6 +353,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -354,6 +409,12 @@ } ] }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -371,7 +432,7 @@ "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "engines": { "node": ">=0.8" } @@ -386,15 +447,15 @@ } }, "node_modules/async": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", - "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -408,23 +469,38 @@ "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "engines": { "node": "*" } }, "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { - "follow-redirects": "^1.14.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, "node_modules/balanced-match": { @@ -474,7 +550,7 @@ "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dependencies": { "tweetnacl": "^0.14.3" } @@ -528,7 +604,7 @@ "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "engines": { "node": "*" @@ -567,7 +643,7 @@ "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "node_modules/chalk": { "version": "4.1.2", @@ -600,17 +676,26 @@ "node_modules/check-more-types": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/clean-stack": { "version": "2.2.0", @@ -634,9 +719,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "dependencies": { "string-width": "^4.2.0" @@ -683,20 +768,11 @@ "dev": true }, "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -729,18 +805,18 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, "node_modules/corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", "dev": true, "engines": { "node": ">= 0.4.0" @@ -761,9 +837,9 @@ } }, "node_modules/cypress": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.6.0.tgz", - "integrity": "sha512-nNwt9eBQmSENamwa8LxvggXksfyzpyYaQ7lNBLgks3XZ6dPE/6BCQFBzeAyAPt/bNXfH3tKPkAyhiAZPYkWoEg==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.7.0.tgz", + "integrity": "sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -820,7 +896,7 @@ "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dependencies": { "assert-plus": "^1.0.0" }, @@ -829,15 +905,15 @@ } }, "node_modules/dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", "dev": true }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -851,12 +927,6 @@ } } }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/deep-diff": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-1.0.2.tgz", @@ -871,7 +941,7 @@ "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } @@ -897,7 +967,7 @@ "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -931,58 +1001,63 @@ } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz", + "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.40.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.2.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -995,9 +1070,9 @@ } }, "node_modules/eslint-plugin-cypress": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz", - "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.13.3.tgz", + "integrity": "sha512-nAPjZE5WopCsgJwl3vHm5iafpV+ZRO76Z9hMyRygWhmg5ODXDPd+9MaPl7kdJ2azj+sO87H3P1PRnggIrz848g==", "dev": true, "dependencies": { "globals": "^11.12.0" @@ -1016,9 +1091,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -1026,74 +1101,44 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", - "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "dependencies": { - "acorn": "^8.6.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -1135,7 +1180,7 @@ "node_modules/event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, "dependencies": { "duplexer": "~0.1.1", @@ -1148,9 +1193,9 @@ } }, "node_modules/eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", "dev": true }, "node_modules/eventemitter3": { @@ -1222,7 +1267,7 @@ "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" ] @@ -1242,13 +1287,22 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "dependencies": { "pend": "~1.2.0" @@ -1269,6 +1323,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -1281,6 +1344,22 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1295,15 +1374,15 @@ } }, "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true, "funding": [ { @@ -1323,7 +1402,7 @@ "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "engines": { "node": "*" } @@ -1344,7 +1423,7 @@ "node_modules/from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, "node_modules/fs-extra": { @@ -1365,7 +1444,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "node_modules/function-bind": { @@ -1373,19 +1452,14 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -1419,21 +1493,21 @@ "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -1457,9 +1531,9 @@ } }, "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "dependencies": { "ini": "2.0.0" @@ -1472,9 +1546,9 @@ } }, "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1486,22 +1560,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, "node_modules/has": { @@ -1524,6 +1592,17 @@ "node": ">=8" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -1571,19 +1650,19 @@ } }, "node_modules/http-server": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.0.0.tgz", - "integrity": "sha512-XTePIXAo5x72bI8SlKFSqsg7UuSHwsOa4+RJIe56YeMUvfTvGDy7TxFkTEhfIRmM/Dnf6x29ut541ythSBZdkQ==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "dev": true, "dependencies": { "basic-auth": "^2.0.1", - "colors": "^1.4.0", + "chalk": "^4.1.2", "corser": "^2.0.1", "he": "^1.2.0", "html-encoding-sniffer": "^3.0.0", "http-proxy": "^1.18.1", "mime": "^1.6.0", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "opener": "^1.5.1", "portfinder": "^1.0.28", "secure-compare": "3.0.1", @@ -1597,6 +1676,19 @@ "node": ">=12" } }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -1639,9 +1731,9 @@ ] }, "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -1666,7 +1758,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" @@ -1684,7 +1776,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { "once": "^1.3.0", @@ -1728,9 +1820,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -1742,7 +1834,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1809,7 +1901,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -1826,30 +1918,40 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "node_modules/joi": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", - "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "version": "17.9.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "node_modules/js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { @@ -1862,7 +1964,7 @@ "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "node_modules/json-schema": { "version": "0.4.0", @@ -1878,13 +1980,13 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/jsonfile": { "version": "6.1.0", @@ -1898,10 +2000,24 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "node_modules/lazy-ass": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, "engines": { "node": "> 0.8" @@ -1921,9 +2037,9 @@ } }, "node_modules/listr2": { - "version": "3.13.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", - "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, "dependencies": { "cli-truncate": "^2.1.0", @@ -1931,7 +2047,7 @@ "log-update": "^4.0.0", "p-map": "^4.0.0", "rfdc": "^1.3.0", - "rxjs": "^7.4.0", + "rxjs": "^7.5.1", "through": "^2.3.8", "wrap-ansi": "^7.0.0" }, @@ -1947,6 +2063,21 @@ } } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1962,7 +2093,7 @@ "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, "node_modules/log-symbols": { @@ -2045,7 +2176,7 @@ "node_modules/map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, "node_modules/merge-stream": { @@ -2067,19 +2198,19 @@ } }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -2107,33 +2238,36 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/npm-run-path": { @@ -2159,7 +2293,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { "wrappy": "1" @@ -2209,9 +2343,39 @@ "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", "dev": true }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -2239,10 +2403,19 @@ "node": ">=6" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -2266,7 +2439,7 @@ "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, "dependencies": { "through": "~2.3" @@ -2275,32 +2448,32 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dev": true, "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" }, "engines": { "node": ">= 0.12.0" @@ -2334,15 +2507,18 @@ } }, "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-bytes": { @@ -2357,19 +2533,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", "dev": true }, "node_modules/ps-tree": { @@ -2388,9 +2555,9 @@ } }, "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/pump": { "version": "3.0.0", @@ -2403,26 +2570,51 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } }, "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { "resolve": "^1.1.6" @@ -2431,22 +2623,10 @@ "node": ">= 0.10" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, "dependencies": { "throttleit": "^1.0.0" @@ -2455,17 +2635,21 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2493,6 +2677,16 @@ "node": ">=8" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -2514,13 +2708,36 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "dependencies": { - "tslib": "~2.1.0" + "tslib": "^2.1.0" } }, "node_modules/safe-buffer": { @@ -2550,13 +2767,13 @@ "node_modules/secure-compare": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", "dev": true }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2607,13 +2824,13 @@ } }, "node_modules/shx": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", - "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", + "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", "dev": true, "dependencies": { "minimist": "^1.2.3", - "shelljs": "^0.8.4" + "shelljs": "^0.8.5" }, "bin": { "shx": "lib/cli.js" @@ -2636,9 +2853,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "node_modules/slice-ansi": { @@ -2658,7 +2875,7 @@ "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, "dependencies": { "through": "2" @@ -2668,9 +2885,9 @@ } }, "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -2692,18 +2909,19 @@ } }, "node_modules/start-server-and-test": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.14.0.tgz", - "integrity": "sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.15.4.tgz", + "integrity": "sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg==", "dev": true, "dependencies": { + "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.3.2", + "debug": "4.3.4", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "6.0.0" + "wait-on": "7.0.1" }, "bin": { "server-test": "src/bin/start.js", @@ -2714,23 +2932,6 @@ "node": ">=6" } }, - "node_modules/start-server-and-test/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/start-server-and-test/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -2775,16 +2976,10 @@ "node": ">=10.17.0" } }, - "node_modules/start-server-and-test/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, "dependencies": { "duplexer": "~0.1.1" @@ -2852,22 +3047,34 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "node_modules/throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", "dev": true }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "node_modules/tmp": { @@ -2895,15 +3102,15 @@ } }, "node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", "dev": true }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -2914,7 +3121,7 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "node_modules/type-check": { "version": "0.4.0", @@ -2929,9 +3136,9 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" @@ -2993,16 +3200,10 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "engines": [ "node >=0.6.0" ], @@ -3013,22 +3214,22 @@ } }, "node_modules/wait-on": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz", - "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz", + "integrity": "sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==", "dev": true, "dependencies": { - "axios": "^0.21.1", - "joi": "^17.4.0", + "axios": "^0.27.2", + "joi": "^17.7.0", "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.1.0" + "minimist": "^1.2.7", + "rxjs": "^7.8.0" }, "bin": { "wait-on": "bin/wait-on" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/whatwg-encoding": { @@ -3087,7 +3288,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "node_modules/yallist": { @@ -3099,2335 +3300,23 @@ "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } - } - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } }, - "@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "requires": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" + "engines": { + "node": ">=10" }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", - "dev": true - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "@types/node": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", - "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==", - "dev": true - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "acorn": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", - "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", - "dev": true - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cypress": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.6.0.tgz", - "integrity": "sha512-nNwt9eBQmSENamwa8LxvggXksfyzpyYaQ7lNBLgks3XZ6dPE/6BCQFBzeAyAPt/bNXfH3tKPkAyhiAZPYkWoEg==", - "dev": true, - "requires": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^5.1.0", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "eventemitter2": "^6.4.3", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.6", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", - "dev": true - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "deep-diff": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-1.0.2.tgz", - "integrity": "sha512-aWS3UIVH+NPGCD1kki+DCU9Dua032iSsO43LqQpcs4R3+dVv7tX0qBGjiVHJHjplsoUM2XRO/KB92glqc68awg==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.2.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } - } - }, - "eslint-plugin-cypress": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz", - "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", - "dev": true, - "requires": { - "globals": "^11.12.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true - }, - "espree": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", - "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", - "dev": true, - "requires": { - "acorn": "^8.6.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "requires": { - "pify": "^2.2.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "requires": { - "async": "^3.2.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "requires": { - "whatwg-encoding": "^2.0.0" - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-server": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.0.0.tgz", - "integrity": "sha512-XTePIXAo5x72bI8SlKFSqsg7UuSHwsOa4+RJIe56YeMUvfTvGDy7TxFkTEhfIRmM/Dnf6x29ut541ythSBZdkQ==", - "dev": true, - "requires": { - "basic-auth": "^2.0.1", - "colors": "^1.4.0", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.5", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "joi": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", - "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "listr2": { - "version": "3.13.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", - "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.4.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", - "dev": true - }, - "ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "requires": { - "event-stream": "=3.3.4" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", - "dev": true, - "requires": { - "tslib": "~2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shx": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", - "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", - "dev": true, - "requires": { - "minimist": "^1.2.3", - "shelljs": "^0.8.4" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "start-server-and-test": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.14.0.tgz", - "integrity": "sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw==", - "dev": true, - "requires": { - "bluebird": "3.7.2", - "check-more-types": "2.24.0", - "debug": "4.3.2", - "execa": "5.1.1", - "lazy-ass": "1.6.0", - "ps-tree": "1.2.0", - "wait-on": "6.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "dev": true, - "requires": { - "qs": "^6.4.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wait-on": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz", - "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==", - "dev": true, - "requires": { - "axios": "^0.21.1", - "joi": "^17.4.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.1.0" - } - }, - "whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "requires": { - "iconv-lite": "0.6.3" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } From 7f83adc0d242c4ddb06e8dd41d18880a0177cda6 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Wed, 17 May 2023 11:51:16 -0500 Subject: [PATCH 07/21] Split cypress test --- .github/workflows/test.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 481f1e0a2..e8026f9b6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -342,7 +342,7 @@ jobs: # Cypress test #### cypress-checker-test-basic: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: matrix: @@ -370,9 +370,11 @@ jobs: - run: npm install working-directory: cypress-accessibility-checker - run: npm run build:report - working-directory: cypress-accessibility-checker - - run: npm test working-directory: cypress-accessibility-checker + - run: npm run test:start-http & + working-directory: cypress-accessibility-checker + - run: npx cypress run + working-directory: cypress-accessibility-checker/test ############################################################################### # Extension Build verification From 3b607ec710760f4fc4fe3fc926b9d74cb865721f Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Wed, 17 May 2023 12:01:11 -0500 Subject: [PATCH 08/21] Convert to absolute url for Windows --- accessibility-checker/src-ts/lib/ACEngineManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accessibility-checker/src-ts/lib/ACEngineManager.ts b/accessibility-checker/src-ts/lib/ACEngineManager.ts index 85ad663e0..6cbbf0a7a 100644 --- a/accessibility-checker/src-ts/lib/ACEngineManager.ts +++ b/accessibility-checker/src-ts/lib/ACEngineManager.ts @@ -126,7 +126,7 @@ try { fs.writeFile(nodePath, data, async (err) => { try { err && console.log(err); - let ace_ibma : any = await import(nodePath); + let ace_ibma : any = await import(`file://${path.resolve(nodePath)}`); checker = new ace_ibma.default.Checker(); } catch (e) { console.log(e); From f42ce6b3485f1fafd72ee3bcbb441c43a25f8e50 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Wed, 17 May 2023 13:17:48 -0500 Subject: [PATCH 09/21] Update gulpfile --- accessibility-checker/gulp/gulpfile.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/accessibility-checker/gulp/gulpfile.js b/accessibility-checker/gulp/gulpfile.js index 1049b6ba0..6f9728dbb 100644 --- a/accessibility-checker/gulp/gulpfile.js +++ b/accessibility-checker/gulp/gulpfile.js @@ -31,10 +31,10 @@ function notice(years) { " *****************************************************************************/\n"; } -const gulp = require("gulp"), - ginsert = require("gulp-insert"), - greplace = require("gulp-replace"), - terser = require("gulp-terser"); +import gulp from "gulp"; +import ginsert from "gulp-insert"; +import greplace from "gulp-replace"; +import terser from "gulp-terser"; gulp.task("build-uglify", function () { return gulp.src(["../src/**/lib/**/*.js", "../src/index.js", "!../src/node_modules/**"]) From f6caad42f6cb2d96bcadd99367d9a2abf1261c25 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Thu, 18 May 2023 23:45:20 -0500 Subject: [PATCH 10/21] Split into cjs and mjs --- accessibility-checker/.gitignore | 3 +- .../cucumber-selenium/features/Demo.feature | 14 +- .../features/step_definitions/browser_step.js | 11 +- .../features/step_definitions/hooks.js | 3 +- .../cucumber-selenium/package.json | 2 +- .../mocha-puppeteer-ts/package.json | 1 + .../mocha-puppeteer-ts/test-ts/basic.test.ts | 9 +- .../mocha-puppeteer-ts/tsconfig.json | 3 +- .../gulp/{gulpfile.js => gulpfile.mjs} | 2 +- accessibility-checker/package.json | 7 +- .../src-ts/lib/ACEngineManager.ts | 12 +- accessibility-checker/src/bin/achecker.js | 228 ++++++++++++++++++ .../src/{ => cjs}/lib/.gitignore | 0 accessibility-checker/src/cjs/package.json | 3 + accessibility-checker/src/mjs/lib/.gitignore | 1 + accessibility-checker/src/mjs/package.json | 3 + accessibility-checker/src/package.json | 10 +- accessibility-checker/test-act-w3/act.js | 2 +- accessibility-checker/test-act/act.js | 2 +- .../aChecker.Content.Puppeteer.test.js | 2 +- .../IBMa.Defined.test.js | 2 +- .../OpenAjax.Defined.test.js | 2 +- .../RPT.Defined.test.js | 2 +- .../ValidationResult.Defined.test.js | 2 +- .../getRule.Defined.test.js | 2 +- .../aChecker.Baseline.test.js | 2 +- .../ACHelper.test.js | 2 +- .../aChecker.Config.Defined.test.js | 2 +- .../aChecker.Defined.test.js | 2 +- ...tCompliance.JSONObjectVerification.test.js | 2 +- .../aChecker.Content.Puppeteer.test.js | 2 +- .../aChecker.Content.Zombie.test.js | 2 +- .../aChecker.Scans/aChecker.Content.test.js | 2 +- .../aChecker.Scans/aChecker.URL.test.js | 2 +- .../aChecker.assertionCompliance.test.js | 2 +- .../aChecker.Content.Playwright.spec.mjs | 2 +- ...nce.JSONObjectVerificationSelenium.test.js | 2 +- .../aChecker.Content.Selenium.test.js | 2 +- accessibility-checker/tsconfig-base.json | 24 ++ accessibility-checker/tsconfig-cjs.json | 8 + accessibility-checker/tsconfig.json | 29 +-- 41 files changed, 343 insertions(+), 72 deletions(-) rename accessibility-checker/gulp/{gulpfile.js => gulpfile.mjs} (96%) create mode 100644 accessibility-checker/src/bin/achecker.js rename accessibility-checker/src/{ => cjs}/lib/.gitignore (100%) create mode 100644 accessibility-checker/src/cjs/package.json create mode 100644 accessibility-checker/src/mjs/lib/.gitignore create mode 100644 accessibility-checker/src/mjs/package.json create mode 100644 accessibility-checker/tsconfig-base.json create mode 100644 accessibility-checker/tsconfig-cjs.json diff --git a/accessibility-checker/.gitignore b/accessibility-checker/.gitignore index 854bce529..928f4e6cf 100644 --- a/accessibility-checker/.gitignore +++ b/accessibility-checker/.gitignore @@ -8,4 +8,5 @@ results package-lock.json src/**/*.js src/**/*.map -src/**/*.d.ts \ No newline at end of file +src/**/*.d.ts +!src/bin/achecker.js \ No newline at end of file diff --git a/accessibility-checker/boilerplates/cucumber-selenium/features/Demo.feature b/accessibility-checker/boilerplates/cucumber-selenium/features/Demo.feature index b743fbdac..0a9a5f114 100644 --- a/accessibility-checker/boilerplates/cucumber-selenium/features/Demo.feature +++ b/accessibility-checker/boilerplates/cucumber-selenium/features/Demo.feature @@ -1,15 +1,15 @@ Feature: Cucumber Demo Demonstrate a basic usage of AAT - Scenario: Check pages and fail when issues found - Given I am at URL "http://www.altoromutual.com/" - Then Page is accessible with label "DEMO1" - When I click on ID "CatLink1" - Then Page is accessible with label "DEMO1_Personal" +# Scenario: Check pages and fail when issues found +# Given I am at URL "https://altoromutual.12mc9fdq8fib.us-south.codeengine.appdomain.cloud/#" +# Then Page is accessible with label "DEMO1" +# When I click on ID "feedbackButton" +# Then Page is accessible with label "DEMO1_Personal" Scenario: Check pages, but just record results when issues found - Given I am at URL "http://www.altoromutual.com/" + Given I am at URL "https://altoromutual.12mc9fdq8fib.us-south.codeengine.appdomain.cloud/#" Then Scan page for accessibility with label "DEMO2" - When I click on ID "CatLink1" + When I click on ID "feedbackButton" Then Scan page for accessibility with label "DEMO2_Personal" diff --git a/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/browser_step.js b/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/browser_step.js index adfeef83e..7dd2cd965 100644 --- a/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/browser_step.js +++ b/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/browser_step.js @@ -23,11 +23,16 @@ When(/^I click on XPath "([^"]*)"$/, function(selector) { }); }); -When(/^I click on ID "([^"]*)"$/, function(selector) { +When(/^I click on ID "([^"]*)"$/, async function(selector) { const myThis = this; const condition = until.elementLocated(By.id(selector)); - return myThis.driver.wait(condition, 8000).then(function() { - return myThis.driver.findElement(By.id(selector)).click(); + return myThis.driver.wait(condition, 8000).then(async function() { + let elem = await myThis.driver.findElement(By.id(selector)); + let rect = await elem.getRect(); + await myThis.driver.executeScript(`window.scrollTo(${rect.x+rect.width}, ${rect.y+rect.height});`); + await myThis.driver.sleep(2000); + await elem.click(); + await myThis.driver.sleep(2000); }); }); diff --git a/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/hooks.js b/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/hooks.js index 2a73990dc..3f077577e 100644 --- a/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/hooks.js +++ b/accessibility-checker/boilerplates/cucumber-selenium/features/step_definitions/hooks.js @@ -29,7 +29,7 @@ function getBrowserChrome() { options.addArguments('--ignore-certificate-errors') let service = new chrome.ServiceBuilder(spath).build(); - chrome.setDefaultService(service); + chrome.Driver.createSession(options, service); return new webdriver.Builder() .withCapabilities(webdriver.Capabilities.chrome()) @@ -59,7 +59,6 @@ const {BeforeAll, AfterAll, Before} = require("cucumber"); BeforeAll(function() { driver = getBrowser(); - /* return new Promise(function(resolve, reject) { aChecker.onRunComplete(resolve); diff --git a/accessibility-checker/boilerplates/cucumber-selenium/package.json b/accessibility-checker/boilerplates/cucumber-selenium/package.json index 73bd68f08..a961aa082 100644 --- a/accessibility-checker/boilerplates/cucumber-selenium/package.json +++ b/accessibility-checker/boilerplates/cucumber-selenium/package.json @@ -12,7 +12,7 @@ "eslint": "^7.0.0", "html-escape": "^2.0.0", "line-reader": "^0.4.0", - "selenium-webdriver": "4.3.0" + "selenium-webdriver": "4.9.2" }, "dependencies": {} } diff --git a/accessibility-checker/boilerplates/mocha-puppeteer-ts/package.json b/accessibility-checker/boilerplates/mocha-puppeteer-ts/package.json index 396fe8cd0..b51164cce 100644 --- a/accessibility-checker/boilerplates/mocha-puppeteer-ts/package.json +++ b/accessibility-checker/boilerplates/mocha-puppeteer-ts/package.json @@ -2,6 +2,7 @@ "name": "@ibma/ac-boilerplate-mocha-ts", "version": "3.0.0", "description": "Example usage of Accessibility Checker with Mocha and typescript", + "type": "module", "main": "src/app.js", "scripts": { "test": "tsc && mocha test/*.test.js" diff --git a/accessibility-checker/boilerplates/mocha-puppeteer-ts/test-ts/basic.test.ts b/accessibility-checker/boilerplates/mocha-puppeteer-ts/test-ts/basic.test.ts index 1dcbf5a58..e9c9e7551 100644 --- a/accessibility-checker/boilerplates/mocha-puppeteer-ts/test-ts/basic.test.ts +++ b/accessibility-checker/boilerplates/mocha-puppeteer-ts/test-ts/basic.test.ts @@ -6,13 +6,16 @@ import * as path from "path"; import { expect } from "chai"; import { before, after, describe, it } from "mocha"; import { ICheckerReport } from "accessibility-checker/lib/api/IChecker"; +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); let browser: Puppeteer.Browser; let page: Puppeteer.Page; before(async () => { try { - browser = await Puppeteer.launch(); + browser = await Puppeteer.launch({ headless: "new"}); page = await browser.newPage(); } catch (e) { console.log(e); @@ -33,14 +36,14 @@ describe("Hello World Basics", function () { const result = await getCompliance(page, "HOME"); const report = result!.report; - expect(assertCompliance(report)).to.equal(0, stringifyResults(report)); + expect(assertCompliance(report as ICheckerReport)).to.equal(0, stringifyResults(report as ICheckerReport)); }).timeout(10000); it("Homepage, Show Card", async() => { await page.click("#clickMe"); const result = await getCompliance(page, "HOME_CARD"); const report = result!.report; - expect(assertCompliance(report)).to.equal(0, stringifyResults(report)); + expect(assertCompliance(report as ICheckerReport)).to.equal(0, stringifyResults(report as ICheckerReport)); }).timeout(10000); }); //# sourceMappingURL=basic.test.js.map diff --git a/accessibility-checker/boilerplates/mocha-puppeteer-ts/tsconfig.json b/accessibility-checker/boilerplates/mocha-puppeteer-ts/tsconfig.json index d0cdf618b..acf08f21d 100644 --- a/accessibility-checker/boilerplates/mocha-puppeteer-ts/tsconfig.json +++ b/accessibility-checker/boilerplates/mocha-puppeteer-ts/tsconfig.json @@ -2,7 +2,8 @@ "compilerOptions": { "declaration": true, "allowJs": true, - "target": "ES5", + "target": "ES6", + "module": "es2022", "removeComments": false, "noEmitOnError": true, "sourceMap": true, diff --git a/accessibility-checker/gulp/gulpfile.js b/accessibility-checker/gulp/gulpfile.mjs similarity index 96% rename from accessibility-checker/gulp/gulpfile.js rename to accessibility-checker/gulp/gulpfile.mjs index 6f9728dbb..eef93a0a7 100644 --- a/accessibility-checker/gulp/gulpfile.js +++ b/accessibility-checker/gulp/gulpfile.mjs @@ -37,7 +37,7 @@ import greplace from "gulp-replace"; import terser from "gulp-terser"; gulp.task("build-uglify", function () { - return gulp.src(["../src/**/lib/**/*.js", "../src/index.js", "!../src/node_modules/**"]) + return gulp.src(["../src/**/lib/**/*.js", "../src/*/index.js", "!../src/node_modules/**"]) .pipe(terser()) .pipe(greplace('if(void 0===globalThis.ace_ibma)', "if('undefined' === typeof(globalThis.ace_ibma))")) .pipe(ginsert.prepend(notice("2016,2017,2018,2019"))) diff --git a/accessibility-checker/package.json b/accessibility-checker/package.json index b5aaebc9b..12ec5962f 100644 --- a/accessibility-checker/package.json +++ b/accessibility-checker/package.json @@ -1,7 +1,6 @@ { "name": "accessibility-checker", "version": "3.0.0", - "type": "module", "description": "Accessibility Checker for Node", "license": "SEE LICENSE IN LICENSE from the 'equal-access' repository", "main": "src/index.js", @@ -9,10 +8,10 @@ "lint": "eslint src", "test": "mocha -R dot test/mocha/**/*.test.js test/a11y-rule-test-able/*.test.js", "build": "npm run build:report && npm run build:ts && cd ../accessibility-checker-engine && npm install && npm run build && npm run build-debug && npm run build-node && npm run build-node-debug", - "build:ts": "npx tsc", + "build:ts": "npx tsc -p tsconfig.json && npx tsc -p tsconfig-cjs.json", "build:report": "(cd ../report-react && npm run build && cd ../accessibility-checker && shx cp ../report-react/build/genReport.tsx ./src-ts/lib/reporters/genReport.ts)", - "package:zip": "shx rm -rf package && gulp --gulpfile gulp/gulpfile.js && shx chmod u+x package/bin/*.js && cd package && npm pack", - "package:npm": "shx rm -rf package && gulp --gulpfile gulp/gulpfile.js && shx chmod u+x package/bin/*.js" + "package:zip": "shx rm -rf package && gulp --gulpfile gulp/gulpfile.mjs && shx chmod u+x package/bin/*.js && cd package && npm pack", + "package:npm": "shx rm -rf package && gulp --gulpfile gulp/gulpfile.mjs && shx chmod u+x package/bin/*.js" }, "repository": { "type": "git", diff --git a/accessibility-checker/src-ts/lib/ACEngineManager.ts b/accessibility-checker/src-ts/lib/ACEngineManager.ts index 6cbbf0a7a..ede9745b2 100644 --- a/accessibility-checker/src-ts/lib/ACEngineManager.ts +++ b/accessibility-checker/src-ts/lib/ACEngineManager.ts @@ -126,8 +126,16 @@ try { fs.writeFile(nodePath, data, async (err) => { try { err && console.log(err); - let ace_ibma : any = await import(`file://${path.resolve(nodePath)}`); - checker = new ace_ibma.default.Checker(); + let ace_ibma : any; + if (require) { + ace_ibma = require(path.resolve(nodePath)); + } else { + ace_ibma = await import(`file://${path.resolve(nodePath)}`); + if (ace_ibma.default) { + ace_ibma = ace_ibma.default; + } + } + checker = new ace_ibma.Checker(); } catch (e) { console.log(e); return reject(e); diff --git a/accessibility-checker/src/bin/achecker.js b/accessibility-checker/src/bin/achecker.js new file mode 100644 index 000000000..9626ae8bc --- /dev/null +++ b/accessibility-checker/src/bin/achecker.js @@ -0,0 +1,228 @@ +#!/usr/bin/env node +/****************************************************************************** + Copyright:: 2020- IBM, Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + *****************************************************************************/ + import * as aChecker from "../mjs/index.js"; + import * as fs from "fs"; + import * as readline from "readline"; + import * as path from "path"; + let validCLParams = [ + "inputFile" + ]; + let splitCLParams = [ + "policies", + "failLevels", + "reportLevels", + "outputFormat", + "label" + ]; + function processCommandLine(ACConfig) { + const [, , ...args] = process.argv; + let lastArg = null; + let lastFlag = null; + for (let arg of args) { + if (arg.match(/^--.*$/)) { + lastFlag = arg.substring(2); + lastArg = null; + } + else if (lastFlag) { + if (lastFlag in ACConfig || validCLParams.includes(lastFlag)) { + if (splitCLParams.includes(lastFlag)) { + arg = arg.split(","); + } + ACConfig[lastFlag] = arg; + } + lastFlag = lastArg = null; + } + else { + lastArg = arg; + } + } + if (lastArg) { + ACConfig.inputFile = lastArg; + } + } + async function getFiles(dir) { + let retVal = []; + for (let f of fs.readdirSync(dir)) { + if (f[0] === ".") { + // skip + } + else { + f = path.join(dir, f); + if (fs.lstatSync(f).isDirectory()) { + retVal = retVal.concat(await getFiles(f)); + } + else if (f.endsWith(".htm") || f.endsWith(".html")) { + retVal.push(f); + } + } + } + return retVal; + } + async function showHelp(config) { + let lastArg = config.inputFile; + if (!lastArg || lastArg === "help") { + console.log(`Usage: achecker [flags] [command / file / directory / URL] + + Commands: + archives : Display valid archive ids and policy ids + + Flags: + Flags can be set via .achecker.yml or aceconfig.js files. Specifying the flags here + will override those options. + + --ruleArchive : Archive id to use. Run "achecker archives" for valid ids + --policies : Comma separated list of policies. Run "achecker archives" + for valid ids + --failLevels : Comma separated list of levels that will indicate + a failure. Valid values: violation, + potentialviolation, recommendation, + potentialrecommendation, manual + --reportLevels : Comma separated list of levels that will be included + in reports. Valid values: violation, + potentialviolation, recommendation, + potentialrecommendation, manual, pass + --outputFormat : Comma separated list of output report formats. + Valid values: json, csv, xlsx, or html + --label : Comma separated list of labels to include in reports + --outputFolder : Folder to output results and reports + --baselineFolder : Folder that includes baseline files + `); + process.exit(-1); + } + else if (lastArg === "archives") { + let archiveInfo = { + "latest": [] + }; + console.log(); + console.log("Archive [Archive Id]"); + console.log(" - Policy [Policy Id]:"); + console.log("-----------------------"); + console.log(); + for (const archive of config.ruleArchiveSet) { + if (archive.sunset) + continue; + console.log(`${archive.name} [${archive.id}]`); + for (const policy of archive.policies) { + console.log(` - ${policy.name} [${policy.id}]`); + } + archiveInfo[archive.id] = archive.policies; + if (archive.latest) { + archiveInfo['latest'] = archiveInfo[archive.id]; + } + } + process.exit(-1); + } + } + async function getInputFileList() { + let config = await aChecker.getConfig(); + processCommandLine(config); + await showHelp(config); + let inputs = []; + let filename = config.inputFile.trim(); + if (filename.endsWith(".txt")) { + const fileStream = fs.createReadStream(filename); + const rl = readline.createInterface({ + input: fileStream, + crlfDelay: Infinity + }); + // Note: we use the crlfDelay option to recognize all instances of CR LF + // ('\r\n') in input.txt as a single line break. + for await (const line of rl) { + if (line.trim().length === 0) { + } + else if (line.startsWith(path.sep)) { + inputs.push(line); + } + else if (line.match(/[a-z]{4,5}:\/\//)) { + inputs.push(line); + } + else { + inputs.push(path.join(path.dirname(filename), line)); + } + } + } + else { + inputs = [filename]; + } + let retVal = []; + for (const input of inputs) { + let isDirectory = false; + try { + isDirectory = fs.lstatSync(input).isDirectory(); + } + catch (e) { } + if (isDirectory) { + retVal = retVal.concat(await getFiles(input)); + } + else { + retVal.push(input); + } + } + return retVal; + } + // Prepare the configuration + getInputFileList().then(async (rptInputFiles) => { + let idx = 0; + let failures = []; + let errors = 0; + for (let f of rptInputFiles) { + let result; + let isFile = false; + try { + isFile = fs.lstatSync(f).isFile(); + f = path.resolve(f); + } + catch (e) { } + if (isFile) { + result = await aChecker.getCompliance("file://" + f, f.replace(/^file:\/\//, "").replace(/[:?&=]/g, "_")); + } + else { + result = await aChecker.getCompliance(f, f.replace(/^(https?:|file:)\/\//, "").replace(/[:?&=]/g, "_")); + } + if (result) { + if (aChecker.assertCompliance(result.report) === 0) { + console.log("Passed:", f); + } + else { + failures.push({ + file: f, + report: result.report + }); + console.log("Failed:", f); + } + } + else { + ++errors; + console.log("Error:", f); + } + } + if (failures.length > 0) { + console.log(); + console.log("Failing scan details:"); + console.log(); + for (const fail of failures) { + console.log(aChecker.stringifyResults(fail.report)); + } + } + console.log(); + console.log(`${rptInputFiles.length - failures.length - errors} of ${rptInputFiles.length} passed.`); + await aChecker.close(); + if (failures.length !== 0 || errors !== 0) { + process.exitCode = 1; + } + }); + //# sourceMappingURL=achecker.js.map \ No newline at end of file diff --git a/accessibility-checker/src/lib/.gitignore b/accessibility-checker/src/cjs/lib/.gitignore similarity index 100% rename from accessibility-checker/src/lib/.gitignore rename to accessibility-checker/src/cjs/lib/.gitignore diff --git a/accessibility-checker/src/cjs/package.json b/accessibility-checker/src/cjs/package.json new file mode 100644 index 000000000..6a0d2ef2a --- /dev/null +++ b/accessibility-checker/src/cjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} \ No newline at end of file diff --git a/accessibility-checker/src/mjs/lib/.gitignore b/accessibility-checker/src/mjs/lib/.gitignore new file mode 100644 index 000000000..45a160d12 --- /dev/null +++ b/accessibility-checker/src/mjs/lib/.gitignore @@ -0,0 +1 @@ +engine diff --git a/accessibility-checker/src/mjs/package.json b/accessibility-checker/src/mjs/package.json new file mode 100644 index 000000000..96ae6e57e --- /dev/null +++ b/accessibility-checker/src/mjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} \ No newline at end of file diff --git a/accessibility-checker/src/package.json b/accessibility-checker/src/package.json index 171a19035..d422fc6ca 100644 --- a/accessibility-checker/src/package.json +++ b/accessibility-checker/src/package.json @@ -1,9 +1,15 @@ { "name": "accessibility-checker", "version": "3.0.0", - "type": "module", "description": "An automated testing tools for accessibility testing using Puppeteer, Selenium, or Zombie", - "main": "index.js", + "main": "cjs/index.js", + "module": "mjs/index.js", + "exports": { + ".": { + "import": "./mjs/index.js", + "require": "./cjs/index.js" + } + }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/accessibility-checker/test-act-w3/act.js b/accessibility-checker/test-act-w3/act.js index 9299bd78e..a9682af95 100644 --- a/accessibility-checker/test-act-w3/act.js +++ b/accessibility-checker/test-act-w3/act.js @@ -7,7 +7,7 @@ 'use strict'; -import * as aChecker from "../src/index.js"; +import * as aChecker from "../src/mjs/index.js"; const rulesetP = aChecker.getRuleset('IBM_Accessibility'); async function getAceMapping() { diff --git a/accessibility-checker/test-act/act.js b/accessibility-checker/test-act/act.js index 407f1ed5d..63c3c3097 100644 --- a/accessibility-checker/test-act/act.js +++ b/accessibility-checker/test-act/act.js @@ -7,7 +7,7 @@ 'use strict'; -import * as aChecker from "../src/index.js"; +import * as aChecker from "../src/mjs/index.js"; async function getAceMapping() { let rules = await aChecker.getRules(); diff --git a/accessibility-checker/test/a11y-rule-test-able/aChecker.Content.Puppeteer.test.js b/accessibility-checker/test/a11y-rule-test-able/aChecker.Content.Puppeteer.test.js index 637505344..e64d4ac32 100755 --- a/accessibility-checker/test/a11y-rule-test-able/aChecker.Content.Puppeteer.test.js +++ b/accessibility-checker/test/a11y-rule-test-able/aChecker.Content.Puppeteer.test.js @@ -18,7 +18,7 @@ import * as fs from "fs"; import * as path from "path"; //Using local checker and location -import * as aChecker from "../../src/index.js"; +import * as aChecker from "../../src/mjs/index.js"; import ace from "../../../accessibility-checker-engine/dist/ace-node.js"; //Using a checker local checker engine import { expect } from "chai"; diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/IBMa.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/IBMa.Defined.test.js index e38645e2b..ad57c5d06 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/IBMa.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/IBMa.Defined.test.js @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import * as aChecker from "../../../src/index.js"; +import * as aChecker from "../../../src/mjs/index.js"; import { expect } from "chai"; // Check all aspects of the IBMa namespace to make sure that all things are defined. diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/OpenAjax.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/OpenAjax.Defined.test.js index bb4106fb8..5f49c0190 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/OpenAjax.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/OpenAjax.Defined.test.js @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import * as aChecker from "../../../src/index.js"; +import * as aChecker from "../../../src/mjs/index.js"; import { expect } from "chai"; // This Test Suite is to make sure all the objects/function in the OpenAjax namespace are diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/RPT.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/RPT.Defined.test.js index 038d0f624..78887e99a 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/RPT.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/RPT.Defined.test.js @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import * as aChecker from "../../../src/index.js"; +import * as aChecker from "../../../src/mjs/index.js"; import { expect } from "chai"; // This Test Suite is to make sure all the objects/function in the RPT namespace are diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/ValidationResult.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/ValidationResult.Defined.test.js index dc9a1fbc7..9bf90823d 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/ValidationResult.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/ValidationResult.Defined.test.js @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import * as aChecker from "../../../src/index.js"; +import * as aChecker from "../../../src/mjs/index.js"; import { expect } from "chai"; describe("ValidationResult", function () { diff --git a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/getRule.Defined.test.js b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/getRule.Defined.test.js index d406f56f1..fa76a4811 100644 --- a/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/getRule.Defined.test.js +++ b/accessibility-checker/test/mocha-old/IBMa.Engine.Functions.Defined/getRule.Defined.test.js @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import * as aChecker from "../../../src/index.js"; +import * as aChecker from "../../../src/mjs/index.js"; import { expect } from "chai"; // Test to make sure the getRule function still exists in global space (window.getRule) diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js index 9d3ae4951..e4b83668c 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js @@ -17,7 +17,7 @@ import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; // import ace from "../../../../accessibility-checker-engine/dist/ace-node.js"; import { expect } from "chai"; import * as util from "util"; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js index dbdc08cb5..cd4ad41ab 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import { expect } from "chai"; before(async () => { diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js index 3ab7f99c1..78362fa00 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import { expect } from "chai"; let Config; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js index c52cd0c0a..781cfb511 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js @@ -14,7 +14,7 @@ limitations under the License. *****************************************************************************/ -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import { expect } from "chai"; describe("aChecker", function () { diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js index c9c697508..003a9bd0f 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js @@ -18,7 +18,7 @@ import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import { expect } from "chai"; import {fileURLToPath} from 'url'; const __filename = fileURLToPath(import.meta.url); diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js index 4f5067a47..5e95fb76a 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js @@ -18,7 +18,7 @@ import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; import { expect } from "chai"; import puppeteer from 'puppeteer'; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js index 70384423d..ccd93a645 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js @@ -18,7 +18,7 @@ import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; import { expect } from "chai"; import * as zombie from "zombie"; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js index 0cd075179..9b939fce9 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js @@ -18,7 +18,7 @@ import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; import { expect } from "chai"; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js index b7f4d7d79..ecf7fd9d4 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js @@ -18,7 +18,7 @@ import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; import { expect } from "chai"; diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js index c15c43252..893141d6f 100644 --- a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js +++ b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js @@ -18,7 +18,7 @@ import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; // import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; import { expect } from "chai"; let unitTestcaseHTML = {}; diff --git a/accessibility-checker/test/mocha/aChecker.Playwright/aChecker.Scans/aChecker.Content.Playwright.spec.mjs b/accessibility-checker/test/mocha/aChecker.Playwright/aChecker.Scans/aChecker.Content.Playwright.spec.mjs index 9a2c6b548..6ec6291ca 100644 --- a/accessibility-checker/test/mocha/aChecker.Playwright/aChecker.Scans/aChecker.Content.Playwright.spec.mjs +++ b/accessibility-checker/test/mocha/aChecker.Playwright/aChecker.Scans/aChecker.Content.Playwright.spec.mjs @@ -20,7 +20,7 @@ import { chromium } from "playwright"; import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; let unitTestcaseHTML = {}; let testRootDir = path.join(process.cwd(), "..","accessibility-checker-engine","test","v2","checker","accessibility","rules"); diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js index a37a64443..35706717f 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js @@ -17,7 +17,7 @@ 'use strict'; import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import { expect } from "chai"; import { Builder, Capabilities } from "selenium-webdriver"; import {fileURLToPath} from 'url'; diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js index 50a18f71f..3b4f982ae 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js @@ -17,7 +17,7 @@ 'use strict'; import * as fs from "fs"; import * as path from "path"; -import * as aChecker from "../../../../src/index.js"; +import * as aChecker from "../../../../src/mjs/index.js"; import ace from "../../../../../accessibility-checker-engine/dist/ace-node.js"; import { expect } from "chai"; import { Builder, Capabilities } from "selenium-webdriver"; diff --git a/accessibility-checker/tsconfig-base.json b/accessibility-checker/tsconfig-base.json new file mode 100644 index 000000000..6d5219e3f --- /dev/null +++ b/accessibility-checker/tsconfig-base.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "moduleResolution": "node", + "lib": ["es2016", "esnext", "dom"], + "declaration": true, + "allowJs": true, + "removeComments": false, + "noEmitOnError": true, + "sourceMap": true, + "alwaysStrict": true, + "esModuleInterop": true, + }, + "include": [ + "src-ts/**/*.ts", + "src-ts/**/*.js" + ], + "exclude": [ + "node_modules", + "coverage", + ".nyc_output" + ] +} \ No newline at end of file diff --git a/accessibility-checker/tsconfig-cjs.json b/accessibility-checker/tsconfig-cjs.json new file mode 100644 index 000000000..67b38c1be --- /dev/null +++ b/accessibility-checker/tsconfig-cjs.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig-base.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "src/cjs", + "target": "es2015" + } +} \ No newline at end of file diff --git a/accessibility-checker/tsconfig.json b/accessibility-checker/tsconfig.json index 0cd341f05..0c5134bf8 100644 --- a/accessibility-checker/tsconfig.json +++ b/accessibility-checker/tsconfig.json @@ -1,27 +1,8 @@ { + "extends": "./tsconfig-base.json", "compilerOptions": { - "target": "ES6", - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "module": "ESNext", - "moduleResolution": "node", - "lib": ["es2016", "esnext", "dom"], - "declaration": true, - "allowJs": true, - "removeComments": false, - "noEmitOnError": true, - "sourceMap": true, - "alwaysStrict": true, - "esModuleInterop": true, - "outDir": "src", - }, - "include": [ - "src-ts/**/*.ts", - "src-ts/**/*.js" - ], - "exclude": [ - "node_modules", - "coverage", - ".nyc_output" - ] + "module": "esnext", + "outDir": "src/mjs", + "target": "esnext" + } } \ No newline at end of file From 1007d0880d83dc2bc70453e64917489a8a9e928c Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Thu, 18 May 2023 23:57:02 -0500 Subject: [PATCH 11/21] Use modules for testing --- .github/workflows/test.yml | 10 +++++----- ...ker.Baseline.test.js => aChecker.Baseline.test.mjs} | 0 .../{ACHelper.test.js => ACHelper.test.mjs} | 0 ...efined.test.js => aChecker.Config.Defined.test.mjs} | 0 ...ecker.Defined.test.js => aChecker.Defined.test.mjs} | 0 ...cker.getCompliance.JSONObjectVerification.test.mjs} | 0 ...eer.test.js => aChecker.Content.Puppeteer.test.mjs} | 0 ...Zombie.test.js => aChecker.Content.Zombie.test.mjs} | 0 ...ecker.Content.test.js => aChecker.Content.test.mjs} | 0 .../{aChecker.URL.test.js => aChecker.URL.test.mjs} | 0 ...e.test.js => aChecker.assertionCompliance.test.mjs} | 0 ...Compliance.JSONObjectVerificationSelenium.test.mjs} | 0 ...nium.test.js => aChecker.Content.Selenium.test.mjs} | 0 13 files changed, 5 insertions(+), 5 deletions(-) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/{aChecker.Baseline.test.js => aChecker.Baseline.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/{ACHelper.test.js => ACHelper.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/{aChecker.Config.Defined.test.js => aChecker.Config.Defined.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/{aChecker.Defined.test.js => aChecker.Defined.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/{aChecker.getCompliance.JSONObjectVerification.test.js => aChecker.getCompliance.JSONObjectVerification.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/{aChecker.Content.Puppeteer.test.js => aChecker.Content.Puppeteer.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/{aChecker.Content.Zombie.test.js => aChecker.Content.Zombie.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/{aChecker.Content.test.js => aChecker.Content.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/{aChecker.URL.test.js => aChecker.URL.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/{aChecker.assertionCompliance.test.js => aChecker.assertionCompliance.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/{aChecker.getCompliance.JSONObjectVerificationSelenium.test.js => aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs} (100%) rename accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/{aChecker.Content.Selenium.test.js => aChecker.Content.Selenium.test.mjs} (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 364e59cdc..352de3403 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -117,15 +117,15 @@ jobs: - run: npm run build working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Baselines/*.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Baselines/*.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Functions.Defined/*.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Functions.Defined/*.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.ObjectStructure/*.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.ObjectStructure/*.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.mjs working-directory: accessibility-checker ############################################################################### diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Baselines/aChecker.Baseline.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/ACHelper.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Config.Defined.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Functions.Defined/aChecker.Defined.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerification.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Zombie.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js b/accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js rename to accessibility-checker/test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.js rename to accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.mjs similarity index 100% rename from accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.js rename to accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.mjs From ff8b3fb9241f61716a689328eca7795d8d055229 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 00:00:00 -0500 Subject: [PATCH 12/21] Tests to mjs --- accessibility-checker/test-act-w3/{act.js => act.mjs} | 0 accessibility-checker/test-act-w3/{main.js => main.mjs} | 0 accessibility-checker/test-act-w3/package.json | 2 +- accessibility-checker/test-act/{act.js => act.mjs} | 0 accessibility-checker/test-act/{main.js => main.mjs} | 2 +- accessibility-checker/test-act/package.json | 2 +- 6 files changed, 3 insertions(+), 3 deletions(-) rename accessibility-checker/test-act-w3/{act.js => act.mjs} (100%) rename accessibility-checker/test-act-w3/{main.js => main.mjs} (100%) rename accessibility-checker/test-act/{act.js => act.mjs} (100%) rename accessibility-checker/test-act/{main.js => main.mjs} (98%) diff --git a/accessibility-checker/test-act-w3/act.js b/accessibility-checker/test-act-w3/act.mjs similarity index 100% rename from accessibility-checker/test-act-w3/act.js rename to accessibility-checker/test-act-w3/act.mjs diff --git a/accessibility-checker/test-act-w3/main.js b/accessibility-checker/test-act-w3/main.mjs similarity index 100% rename from accessibility-checker/test-act-w3/main.js rename to accessibility-checker/test-act-w3/main.mjs diff --git a/accessibility-checker/test-act-w3/package.json b/accessibility-checker/test-act-w3/package.json index 45caa5dfd..bb0c36b34 100644 --- a/accessibility-checker/test-act-w3/package.json +++ b/accessibility-checker/test-act-w3/package.json @@ -4,6 +4,6 @@ "description": "Run ACT testcases", "type": "module", "scripts": { - "test": "echo \"Results output to act-report-v2.txt\" && node main.js > act-report-v2.txt" + "test": "echo \"Results output to act-report-v2.txt\" && node main.mjs > act-report-v2.txt" } } diff --git a/accessibility-checker/test-act/act.js b/accessibility-checker/test-act/act.mjs similarity index 100% rename from accessibility-checker/test-act/act.js rename to accessibility-checker/test-act/act.mjs diff --git a/accessibility-checker/test-act/main.js b/accessibility-checker/test-act/main.mjs similarity index 98% rename from accessibility-checker/test-act/main.js rename to accessibility-checker/test-act/main.mjs index af5cda7a0..a78ed9304 100644 --- a/accessibility-checker/test-act/main.js +++ b/accessibility-checker/test-act/main.mjs @@ -1,7 +1,7 @@ 'use strict'; import * as puppeteer from 'puppeteer'; -import { getTestcases, getResult } from "./act.js"; +import { getTestcases, getResult } from "./act.mjs"; import * as fs from "fs"; (async () => { let earlResult = { diff --git a/accessibility-checker/test-act/package.json b/accessibility-checker/test-act/package.json index 2f30a0bed..de2f65d03 100644 --- a/accessibility-checker/test-act/package.json +++ b/accessibility-checker/test-act/package.json @@ -4,6 +4,6 @@ "description": "Run ACT testcases", "type": "module", "scripts": { - "test": "echo \"Results output to testOutput.txt\" && node main.js > testOutput.txt" + "test": "echo \"Results output to testOutput.txt\" && node main.mjs > testOutput.txt" } } From d3b9f2082b58b87f239c99f262e6a32a9c388ce9 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 00:06:00 -0500 Subject: [PATCH 13/21] Fix extension --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 352de3403..4206fec42 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -163,11 +163,11 @@ jobs: - run: npm run build working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Baselines/*.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Baselines/*.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Functions.Defined/*.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Functions.Defined/*.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.ObjectStructure/*.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.ObjectStructure/*.test.mjs working-directory: accessibility-checker - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js working-directory: accessibility-checker @@ -249,9 +249,9 @@ jobs: - run: npm run build working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Slow1/aChecker.Scans/**/*.test.js + - run: npx mocha -R dot test/mocha/aChecker.Slow1/aChecker.Scans/**/*.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Slow1/aChecker.ObjectStructure/**/*.test.js + - run: npx mocha -R dot test/mocha/aChecker.Slow1/aChecker.ObjectStructure/**/*.test.mjs working-directory: accessibility-checker From f02faaf4714c92e7048fdf3a2f8c73d4383fd9e1 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 00:08:26 -0500 Subject: [PATCH 14/21] More file extension changes --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4206fec42..ec07cefb9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -209,9 +209,9 @@ jobs: - run: npm run build working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.URL.test.mjs working-directory: accessibility-checker ############################################################################### From 10c4f58d77690fb5687bd17613e8bd147b470402 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 00:15:25 -0500 Subject: [PATCH 15/21] Fix require check --- accessibility-checker/src-ts/lib/ACEngineManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accessibility-checker/src-ts/lib/ACEngineManager.ts b/accessibility-checker/src-ts/lib/ACEngineManager.ts index ede9745b2..9ae370375 100644 --- a/accessibility-checker/src-ts/lib/ACEngineManager.ts +++ b/accessibility-checker/src-ts/lib/ACEngineManager.ts @@ -127,7 +127,7 @@ try { try { err && console.log(err); let ace_ibma : any; - if (require) { + if (typeof require !== "undefined") { ace_ibma = require(path.resolve(nodePath)); } else { ace_ibma = await import(`file://${path.resolve(nodePath)}`); From bdb466cb01416326b66ad288cbce741772d926ec Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 00:16:17 -0500 Subject: [PATCH 16/21] Fix file extension --- accessibility-checker/test-act-w3/main.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accessibility-checker/test-act-w3/main.mjs b/accessibility-checker/test-act-w3/main.mjs index c247177c4..68ea258b2 100644 --- a/accessibility-checker/test-act-w3/main.mjs +++ b/accessibility-checker/test-act-w3/main.mjs @@ -1,7 +1,7 @@ 'use strict'; import * as puppeteer from "puppeteer"; -import { getTestcases, getResult } from "./act.js"; +import { getTestcases, getResult } from "./act.mjs"; import * as fs from "fs"; (async () => { // Fetch the testcases from ACT From d88354d8f007c263e4c019e649d64b098efd7b43 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 09:00:23 -0500 Subject: [PATCH 17/21] Update file extensions --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ec07cefb9..74e30c12e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -169,9 +169,9 @@ jobs: working-directory: accessibility-checker - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.ObjectStructure/*.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.assertionCompliance.test.mjs working-directory: accessibility-checker - - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.js + - run: npx mocha -R dot test/mocha/aChecker.Fast/aChecker.Scans/aChecker.Content.Puppeteer.test.mjs working-directory: accessibility-checker ############################################################################### From c49740e43197e62ba7991594df253829bf389ec2 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 09:29:14 -0500 Subject: [PATCH 18/21] Fix testcase to work on Windows --- .../rules/text_contrast_sufficient_ruleunit/act_pass_10.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/accessibility-checker-engine/test/v2/checker/accessibility/rules/text_contrast_sufficient_ruleunit/act_pass_10.html b/accessibility-checker-engine/test/v2/checker/accessibility/rules/text_contrast_sufficient_ruleunit/act_pass_10.html index 166b2fe2f..e1f327410 100644 --- a/accessibility-checker-engine/test/v2/checker/accessibility/rules/text_contrast_sufficient_ruleunit/act_pass_10.html +++ b/accessibility-checker-engine/test/v2/checker/accessibility/rules/text_contrast_sufficient_ruleunit/act_pass_10.html @@ -7,7 +7,10 @@ <body> - <button>My button!</button> + <!-- Specify the background style because Windows default colors are #f0f0f0 + instead of #efefef used by Mac / Linux + --> + <button style="background-color: #efefef;">My button!</button> <script type="text/javascript"> UnitTest = { From 7c51a887350647471f5434fdf4c5222cf28d1605 Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 10:01:06 -0500 Subject: [PATCH 19/21] Update meta hack for ACT test --- accessibility-checker/test-act-w3/main.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/accessibility-checker/test-act-w3/main.mjs b/accessibility-checker/test-act-w3/main.mjs index 68ea258b2..a5e75d0ef 100644 --- a/accessibility-checker/test-act-w3/main.mjs +++ b/accessibility-checker/test-act-w3/main.mjs @@ -63,12 +63,14 @@ import * as fs from "fs"; while (!succeeded) { try { await pupPage.goto(testcase.url, { waitUntil: 'domcontentloaded' }); - await pupPage._client.send("Page.stopLoading"); + const client = await pupPage.target().createCDPSession(); + await client.send("Page.stopLoading"); let win = await pupPage.evaluate("document"); if (win) { succeeded = true; } } catch (err) { + console.log(err); } } } else { From a57604fa2af908048d427788ee88f3837e17b45e Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 11:17:11 -0500 Subject: [PATCH 20/21] Selenium refix --- ...er.getCompliance.JSONObjectVerificationSelenium.test.mjs | 6 ++++-- .../aChecker.Scans/aChecker.Content.Selenium.test.mjs | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs index 35706717f..503107b4f 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs @@ -60,8 +60,10 @@ if (userBrowser.toUpperCase() === "FIREFOX") { else { spath = chromedriver.path; } - let service = new chrome.ServiceBuilder(spath).build(); - chrome.setDefaultService(service); + const service = new chrome.ServiceBuilder(spath).build(); + // setDefaultService function is removed since web-driver v4.3.1+ + //chrome.setDefaultService(service); + chrome.Driver.createSession(options, service); const options = new chrome.Options(); options.addArguments("--disable-dev-shm-usage"); diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.mjs b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.mjs index 3b4f982ae..001e604fd 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.mjs +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.Scans/aChecker.Content.Selenium.test.mjs @@ -91,9 +91,11 @@ if (userBrowser.toUpperCase() === "FIREFOX") { spath = path.join(spath, "bin"); spath = path.join(spath, "chromedriver"); - let service = new chrome.ServiceBuilder(spath).build(); try { - chrome.setDefaultService(service); + const service = new chrome.ServiceBuilder(spath).build(); + // setDefaultService function is removed since web-driver v4.3.1+ + //chrome.setDefaultService(service); + chrome.Driver.createSession(options, service); } catch (e) {} const options = new chrome.Options(); options.addArguments("--disable-dev-shm-usage"); From 8abedea290fb89d82acccf757ad70cdb2452e3cf Mon Sep 17 00:00:00 2001 From: Tom Brunet <thbrunet@us.ibm.com> Date: Fri, 19 May 2023 13:26:26 -0500 Subject: [PATCH 21/21] Wrong order --- ....getCompliance.JSONObjectVerificationSelenium.test.mjs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs index 503107b4f..b333033bc 100644 --- a/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs +++ b/accessibility-checker/test/mocha/aChecker.Slow1/aChecker.ObjectStructure/aChecker.getCompliance.JSONObjectVerificationSelenium.test.mjs @@ -60,15 +60,15 @@ if (userBrowser.toUpperCase() === "FIREFOX") { else { spath = chromedriver.path; } - const service = new chrome.ServiceBuilder(spath).build(); - // setDefaultService function is removed since web-driver v4.3.1+ - //chrome.setDefaultService(service); - chrome.Driver.createSession(options, service); const options = new chrome.Options(); options.addArguments("--disable-dev-shm-usage"); options.addArguments("--headless=new"); options.addArguments('--ignore-certificate-errors') + const service = new chrome.ServiceBuilder(spath).build(); + // setDefaultService function is removed since web-driver v4.3.1+ + //chrome.setDefaultService(service); + chrome.Driver.createSession(options, service); browser = new Builder() .withCapabilities(Capabilities.chrome())