intern-a11y
Version:
Intern-a11y. An accessibility testing helper for Intern.
78 lines • 2.61 kB
JavaScript
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
;