eslint-plugin-compat
Version:
Lint browser compatibility of API used
70 lines (62 loc) • 2.15 kB
JavaScript
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['exports', 'babel-runtime/core-js/set', './providers/index'], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require('babel-runtime/core-js/set'), require('./providers/index'));
} else {
var mod = {
exports: {}
};
factory(mod.exports, global.set, global.index);
global.Lint = mod.exports;
}
})(this, function (exports, _set, _index) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.generateErrorName = generateErrorName;
exports.default = Lint;
var _set2 = _interopRequireDefault(_set);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function generateErrorName(_node) {
if (_node.name) return _node.name;
if (_node.property) return _node.object + '.' + _node.property + '()';
return _node.object;
}
/**
* Return false if a if a rule fails
*
* TODO: Eventually, targets will default to 'modern', ('chrome@50', safari@8)
* See https://github.com/amilajack/eslint-plugin-compat/wiki#release-200
*/
function Lint(eslintNode) {
var targets = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['chrome', 'firefox', 'safari', 'edge'];
var polyfills = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new _set2.default();
// Find the corresponding rules for a eslintNode by it's ASTNodeType
var failingRule = _index.rules.filter(function (rule
// Validate ASTNodeType
) {
return rule.ASTNodeType === eslintNode.type &&
// Check if polyfill is provided
!polyfills.has(rule.id);
})
// Find the first failing rule
.find(function (rule) {
return !rule.isValid(rule, eslintNode, targets);
});
return failingRule ? {
rule: failingRule,
isValid: false,
unsupportedTargets: failingRule.getUnsupportedTargets(failingRule, targets)
} : {
rule: {},
unsupportedTargets: [],
isValid: true
};
}
});