@uuv/a11y
Version:
A javascript lib for running a11y validation based on multiple reference(RGAA, etc)
74 lines (73 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromAxeToUvvA11yIssue = fromAxeToUvvA11yIssue;
const uuv_a11y_result_1 = require("../../model/uuv-a11y-result");
/**
* Convert an aXe selector array to a selector string. Copied from
* https://github.com/dequelabs/axe-cli/blob/develop/lib/utils.js
* for now, wonder if we can share or move out.
* @private
* @param {Array} selectors - The selector parts.
* @returns {String} Returns the selector string.
*/
function selectorToString(selectors) {
return selectors
.reduce((selectorParts, selector) => selectorParts.concat(selector), [])
.join(" ");
}
/**
* Convert a axe violation impact to a pa11y level
* @private
* @param {string} impact axe level
* @returns {string} pa11y level
*/
function axeImpactToPa11yLevel(impact) {
switch (impact) {
case "moderate":
return uuv_a11y_result_1.IssueType.Warning;
case "minor":
return uuv_a11y_result_1.IssueType.Notice;
case "critical":
case "serious":
default:
return uuv_a11y_result_1.IssueType.Error;
}
}
function axeImpactToPa11yImpact(impact) {
switch (impact) {
case "critical":
return uuv_a11y_result_1.IssueImpact.Critical;
case "serious":
return uuv_a11y_result_1.IssueImpact.Serious;
case "moderate":
return uuv_a11y_result_1.IssueImpact.Moderate;
case "minor":
return uuv_a11y_result_1.IssueImpact.Minor;
default:
return uuv_a11y_result_1.IssueImpact.Unknown;
}
}
/**
* Process an aXe issue.
* @private
* @param {Object} axeIssue - An aXe issue to process.
* @returns {Object[]} Returns an array of processed issues.
*/
function fromAxeToUvvA11yIssue(axeIssue) {
// See https://github.com/dequelabs/axe-core/blob/develop/doc/API.md#results-object for a description
// of an axe issue
const selectors = axeIssue.nodes.map(node => selectorToString(node.target));
return selectors.map(selector => ({
type: axeImpactToPa11yLevel(axeIssue.impact),
code: axeIssue.id,
message: `${axeIssue.help} (${axeIssue.helpUrl})`,
selector,
htmlElement: window.document.querySelector(selector),
runnerExtras: {
description: axeIssue.description,
impact: axeImpactToPa11yImpact(axeIssue.impact),
help: axeIssue.help,
helpUrl: axeIssue.helpUrl
}
}));
}