UNPKG

axe-sarif-converter

Version:

Convert axe-core accessibility scan results to the SARIF format

145 lines (144 loc) 7.39 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SarifConverter = void 0; exports.defaultSarifConverter = defaultSarifConverter; var artifact_property_provider_1 = require("./artifact-property-provider"); var axe_tool_property_provider_1 = require("./axe-tool-property-provider"); var converter_property_provider_1 = require("./converter-property-provider"); var environment_data_provider_1 = require("./environment-data-provider"); var invocation_provider_1 = require("./invocation-provider"); var result_to_rule_converter_1 = require("./result-to-rule-converter"); var sarif_result_message_formatter_1 = require("./sarif-result-message-formatter"); var wcag_link_data_1 = require("./wcag-link-data"); var wcag_link_data_indexer_1 = require("./wcag-link-data-indexer"); var wcag_taxonomy_provider_1 = require("./wcag-taxonomy-provider"); function defaultSarifConverter() { return new SarifConverter(converter_property_provider_1.getConverterProperties, axe_tool_property_provider_1.getAxeToolProperties, invocation_provider_1.getInvocations, artifact_property_provider_1.getArtifactProperties); } var SarifConverter = /** @class */ (function () { function SarifConverter(getConverterToolProperties, getAxeProperties, invocationConverter, getArtifactProperties) { this.getConverterToolProperties = getConverterToolProperties; this.getAxeProperties = getAxeProperties; this.invocationConverter = invocationConverter; this.getArtifactProperties = getArtifactProperties; this.tagsToWcagLinkData = wcag_link_data_1.axeTagsToWcagLinkData; this.wcagLinkDataIndexer = new wcag_link_data_indexer_1.WCAGLinkDataIndexer(this.tagsToWcagLinkData); } SarifConverter.prototype.convert = function (results, options) { return { version: '2.1.0', $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json', runs: [this.convertRun(results, options)], }; }; SarifConverter.prototype.convertRun = function (results, options) { var resultToRuleConverter = result_to_rule_converter_1.ResultToRuleConverter.fromV2Results(results, this.wcagLinkDataIndexer.getSortedWcagTags(), this.wcagLinkDataIndexer.getWcagTagsToTaxaIndices()); var environmentData = (0, environment_data_provider_1.getEnvironmentDataFromResults)(results); return { conversion: this.getConverterToolProperties(), tool: { driver: __assign(__assign({}, this.getAxeProperties(environmentData)), { rules: resultToRuleConverter.getRulePropertiesFromResults() }), }, invocations: this.invocationConverter(environmentData), artifacts: [this.getArtifactProperties(environmentData)], results: this.convertResults(results, resultToRuleConverter.getRuleIdsToRuleIndices()), taxonomies: [ (0, wcag_taxonomy_provider_1.getWcagTaxonomy)(this.wcagLinkDataIndexer.getSortedWcagTags(), this.tagsToWcagLinkData), ], }; }; SarifConverter.prototype.convertResults = function (results, ruleIdsToRuleIndices) { var resultArray = []; var environmentData = (0, environment_data_provider_1.getEnvironmentDataFromResults)(results); this.convertRuleResults(resultArray, results.violations, ruleIdsToRuleIndices, 'fail', environmentData); this.convertRuleResults(resultArray, results.passes, ruleIdsToRuleIndices, 'pass', environmentData); this.convertRuleResults(resultArray, results.incomplete, ruleIdsToRuleIndices, 'open', environmentData); this.convertRuleResultsWithoutNodes(resultArray, results.inapplicable, ruleIdsToRuleIndices, 'notApplicable'); return resultArray; }; SarifConverter.prototype.convertRuleResults = function (resultArray, ruleResults, ruleIdsToRuleIndices, kind, environmentData) { if (ruleResults) { for (var _i = 0, ruleResults_1 = ruleResults; _i < ruleResults_1.length; _i++) { var ruleResult = ruleResults_1[_i]; for (var _a = 0, _b = ruleResult.nodes; _a < _b.length; _a++) { var node = _b[_a]; resultArray.push(this.convertRuleResult(node, ruleResult, ruleIdsToRuleIndices, kind, environmentData)); } } } }; SarifConverter.prototype.convertRuleResult = function (node, ruleResult, ruleIdsToRuleIndices, kind, environmentData) { return { ruleId: ruleResult.id, ruleIndex: ruleIdsToRuleIndices[ruleResult.id], kind: kind, level: this.getResultLevelFromResultKind(kind), message: (0, sarif_result_message_formatter_1.formatSarifResultMessage)(node, kind), locations: [ { physicalLocation: { artifactLocation: (0, artifact_property_provider_1.getArtifactLocation)(environmentData), region: { startLine: 1, snippet: { text: node.html, }, }, }, logicalLocations: this.getLogicalLocations(node), }, ], }; }; SarifConverter.prototype.getLogicalLocations = function (node) { var selector = node.target.join(';'); var logicalLocations = [ this.formatLogicalLocation(selector), ]; // casting node as "any" works around axe-core/#1636 if (node.xpath) { var nodeXpath = node.xpath.join(';'); logicalLocations.push(this.formatLogicalLocation(nodeXpath)); } return logicalLocations; }; SarifConverter.prototype.formatLogicalLocation = function (name) { return { fullyQualifiedName: name, kind: 'element', }; }; SarifConverter.prototype.convertRuleResultsWithoutNodes = function (resultArray, ruleResults, ruleIdsToRuleIndices, kind) { if (ruleResults) { for (var _i = 0, ruleResults_2 = ruleResults; _i < ruleResults_2.length; _i++) { var ruleResult = ruleResults_2[_i]; resultArray.push({ ruleId: ruleResult.id, ruleIndex: ruleIdsToRuleIndices[ruleResult.id], kind: kind, level: this.getResultLevelFromResultKind(kind), message: { text: ruleResult.description + '.', }, locations: [], }); } } }; SarifConverter.prototype.getResultLevelFromResultKind = function (kind) { return kind === 'fail' ? 'error' : 'none'; }; return SarifConverter; }()); exports.SarifConverter = SarifConverter;