eslint-plugin-ecmascript-compat
Version:
ESLint plugin for checking JavaScript code compatibility with target browsers and Node.js versions
68 lines (65 loc) • 2.42 kB
JavaScript
const eslint = require('eslint');
const esPlugin = require('eslint-plugin-es-x');
const compatData = require('@mdn/browser-compat-data');
const { noRestrictedSyntaxPrototypeMethod } = require('./ruleOptionsUtil');
const coreRules = new eslint.Linter().getRules();
module.exports = [
{
ruleConfig: {
definition: coreRules.get('no-restricted-properties'),
options: [{ object: 'Atomics', property: 'notify', message: '(ES2020)' }],
},
compatFeatures: [compatData.javascript.builtins.Atomics.notify],
},
{
ruleConfig: {
definition: coreRules.get('no-restricted-properties'),
options: [{ object: 'Atomics', property: 'wait', message: '(ES2020)' }],
},
compatFeatures: [compatData.javascript.builtins.Atomics.wait],
},
{
ruleConfig: { definition: esPlugin.rules['no-bigint'] },
compatFeatures: [compatData.javascript.builtins.BigInt],
},
{
ruleConfig: { definition: esPlugin.rules['no-dynamic-import'] },
compatFeatures: [compatData.javascript.operators.import],
},
{
ruleConfig: { definition: esPlugin.rules['no-global-this'] },
compatFeatures: [compatData.javascript.builtins.globalThis],
polyfill: 'globalThis',
},
{
ruleConfig: { definition: esPlugin.rules['no-import-meta'] },
compatFeatures: [compatData.javascript.operators.import_meta],
},
{
ruleConfig: { definition: esPlugin.rules['no-export-ns-from'] },
compatFeatures: [compatData.javascript.statements.export.namespace],
},
{
ruleConfig: { definition: esPlugin.rules['no-nullish-coalescing-operators'] },
compatFeatures: [compatData.javascript.operators.nullish_coalescing],
},
{
ruleConfig: { definition: esPlugin.rules['no-optional-chaining'] },
compatFeatures: [compatData.javascript.operators.optional_chaining],
},
{
// Rule requires the ES6 global, Promise
ruleConfig: { definition: esPlugin.rules['no-promise-all-settled'] },
compatFeatures: [compatData.javascript.builtins.Promise.allSettled],
polyfill: 'Promise.prototype.allSettled',
},
{
// May false positive for Cache/Clients.matchAll()
ruleConfig: {
definition: coreRules.get('no-restricted-syntax'),
options: noRestrictedSyntaxPrototypeMethod('String.prototype.matchAll', 'ES2020'),
},
compatFeatures: [compatData.javascript.builtins.String.matchAll],
polyfill: 'String.prototype.matchAll',
},
];