UNPKG

intern-a11y

Version:

Intern-a11y. An accessibility testing helper for Intern.

78 lines 2.61 kB
"use strict"; var https_1 = require("https"); var querystring_1 = require("querystring"); var fs_1 = require("fs"); var common_1 = require("../common"); var _tenon_1 = require("./_tenon"); function check(options) { return new Promise(function (resolve, reject) { var apiKey = process.env['TENON_API_KEY']; if (!apiKey && options.apiKey) { apiKey = options.apiKey; } if (!apiKey) { throw new Error('tenon requires an API key'); } var queryData = { key: apiKey }; for (var key in options.config) { queryData[key] = options.config[key]; } var source = options.source; if (/^https?:\/\/\S+$/.test(source)) { queryData.url = source; } else if (_tenon_1.fileExists(source)) { queryData.src = fs_1.readFileSync(source, { encoding: 'utf8' }); } else { queryData.src = source; } var data = querystring_1.stringify(queryData); var request = https_1.request({ host: 'tenon.io', path: '/api/', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }, function (response) { var responseData = []; response.setEncoding('utf8'); response.on('data', function (chunk) { responseData.push(chunk); }); response.on('end', function () { if (response.statusCode !== 200) { reject(new Error(response.statusMessage)); } else { resolve(JSON.parse(responseData.join(''))); } }); response.on('error', function (error) { reject(error); }); }); request.write(data); request.end(); }).then(function (results) { var a11yResults = _tenon_1.toA11yResults(results); var totalErrors = results.resultSummary.issues.totalErrors; var error; if (totalErrors === 1) { error = new common_1.A11yError('1 a11y violation was logged', a11yResults); } if (totalErrors > 1) { error = new common_1.A11yError(totalErrors + ' a11y violations were logged', a11yResults); } if (error) { throw error; } return a11yResults; }); } exports.check = check; //# sourceMappingURL=tenon.js.map