'use strict'; const fromEntries = require('object.fromentries'); const entries = require('object.entries'); const allRules = require('../lib/rules'); function filterRules(rules, predicate) { return fromEntries(entries(rules).filter((entry) => predicate(entry[1]))); } /** * @param {object} rules - rules object mapping rule name to rule module * @returns {Record} */ function configureAsError(rules) { return fromEntries(Object.keys(rules).map((key) => [`react/${key}`, 2])); } const activeRules = filterRules(allRules, (rule) => !rule.meta.deprecated); const activeRulesConfig = configureAsError(activeRules); const deprecatedRules = filterRules(allRules, (rule) => rule.meta.deprecated); module.exports = { plugins: { /** * @type {{ * deprecatedRules: Record, * rules: Record, * }} */ react: { deprecatedRules, rules: allRules, }, }, rules: activeRulesConfig, languageOptions: { parserOptions: { ecmaFeatures: { jsx: true, }, }, }, }; // this is so the `languageOptions` property won't be warned in the new config system Object.defineProperty(module.exports, 'languageOptions', { enumerable: false });