UNPKG

react-a11y

Version:

Warns about potential accessibility issues with your React elements.

263 lines (194 loc) 10.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _toArray2 = require('babel-runtime/helpers/toArray'); var _toArray3 = _interopRequireDefault(_toArray2); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends3 = require('babel-runtime/helpers/extends'); var _extends4 = _interopRequireDefault(_extends3); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _rules = require('./rules'); var _rules2 = _interopRequireDefault(_rules); var _util = require('./util'); var util = _interopRequireWildcard(_util); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var allDevices = (0, _keys2.default)(util.devices).map(function (key) { return util.devices[key]; }); var severity = function severity(val) { switch (val) { case 0: case 'off': return 'off'; case 1: case 'warn': return 'warn'; case 2: case 'error': return 'error'; default: throw new Error('react-a11y: invalid severity ' + val); } }; var normalize = function normalize() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'off'; if (Array.isArray(opts)) { opts[0] = severity(opts[0]); return opts; } return [severity(opts)]; }; var getTests = function getTests(defns) { return Array.isArray(defns) ? defns : [defns]; }; var Suite = function () { function Suite(React, ReactDOM, options) { (0, _classCallCheck3.default)(this, Suite); this.options = options; this.React = React; this.ReactDOM = ReactDOM; if (!this.React && !this.React.createElement) { throw new Error('Missing parameter: React'); } var _options$plugins = this.options.plugins, plugins = _options$plugins === undefined ? [] : _options$plugins; // prepare all rules by including every plugin and saving their rules // namespaced like plugin/rule this.rules = plugins.map(function (name) { try { // eslint-disable-next-line global-require,import/no-dynamic-require var mod = require('react-a11y-plugin-' + name); var rules = 'default' in mod ? mod.default.rules : mod.rules; return (0, _keys2.default)(rules).reduce(function (acc, key) { return (0, _extends4.default)({}, acc, (0, _defineProperty3.default)({}, name + '/' + key, rules[key])); }, {}); } catch (err) { throw new Error('Could not find react-a11y-plugin-' + name); } }).reduce(function (acc, next) { return (0, _extends4.default)({}, acc, next); }, _rules2.default); } (0, _createClass3.default)(Suite, [{ key: 'test', value: function test(tagName, props, children, done) { var _this = this; (0, _keys2.default)(this.options.rules).forEach(function (key) { var rule = _this.rules[key]; // ensure that the rule exists if (!rule) { throw new Error('react-a11y: rule ' + key + ' not found, ' + 'maybe you\'re missing a plugin?'); } // get options for rule var _normalize = normalize(_this.options.rules[key]), _normalize2 = (0, _toArray3.default)(_normalize), sev = _normalize2[0], options = _normalize2.slice(1); if (sev !== 'off') { var ctx = { options: options, React: _this.React, ReactDOM: _this.ReactDOM }; getTests(rule).reduce(function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(pprev, defn) { var prev, tagNames, msg, url, AX, test, _defn$affects, affects, pass; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return pprev; case 2: prev = _context.sent; if (prev) { _context.next = 5; break; } return _context.abrupt('return', prev); case 5: tagNames = defn.tagName, msg = defn.msg, url = defn.url, AX = defn.AX, test = defn.test, _defn$affects = defn.affects, affects = _defn$affects === undefined ? allDevices : _defn$affects; // filter by tagName if (!Array.isArray(tagNames)) { _context.next = 11; break; } if (!(tagNames.indexOf(tagName) < 0)) { _context.next = 9; break; } return _context.abrupt('return', prev); case 9: _context.next = 14; break; case 11: if (!tagNames) { _context.next = 14; break; } if (!(tagName !== tagNames)) { _context.next = 14; break; } return _context.abrupt('return', prev); case 14: // perform the test pass = void 0; // try/catch so that exceptions are not silently swallowed by await _context.prev = 15; _context.next = 18; return test(tagName, props, children, ctx); case 18: pass = _context.sent; _context.next = 25; break; case 21: _context.prev = 21; _context.t0 = _context['catch'](15); console.log(_context.t0); pass = false; case 25: if (!pass) { done({ tagName: tagName, msg: msg, url: url, AX: AX, props: props, children: children, severity: sev, rule: key, affects: affects }); } return _context.abrupt('return', prev && pass); case 27: case 'end': return _context.stop(); } } }, _callee, _this, [[15, 21]]); })); return function (_x2, _x3) { return _ref.apply(this, arguments); }; }(), true); } }); } }]); return Suite; }(); exports.default = Suite;