UNPKG

@mindfiredigital/eslint-plugin-hub

Version:

eslint-plugin-hub is a powerful, flexible ESLint plugin that provides a curated set of rules to enhance code readability, maintainability, and prevent common errors. Whether you're working with vanilla JavaScript, TypeScript, React, or Angular, eslint-plu

97 lines (87 loc) 3.37 kB
const generalRules = require('./lib/rules/general/index.js'); const reactRules = require('./lib/rules/react/index.js'); const angularRules = require('./lib/rules/angular/index.js'); const flatConfigBase = require('./configs/flat-config-base.js'); const legacyConfigBase = require('./configs/legacy-config-base.js'); const { name, version } = require('./package.json'); // Helper function to convert rule definitions to rule configurations for legacy config const convertRulesToLegacyConfig = rules => { const config = {}; Object.entries(rules).forEach(([key, rule]) => { config[`@mindfiredigital/hub/${key}`] = ['error', rule]; }); return config; }; // Helper function to convert rule definitions to rule configurations for flat config const convertRulesToFlatConfig = rules => { const config = {}; Object.entries(rules).forEach(([key]) => { config[`hub/${key}`] = 'error'; }); return config; }; // Recommended rules for MERN in legacy (with @mindfiredigital prefix) const mernRecommendedRulesLegacy = { '@mindfiredigital/hub/file-kebabcase': 'error', '@mindfiredigital/hub/vars-camelcase': 'error', '@mindfiredigital/hub/class-pascalcase': 'error', '@mindfiredigital/hub/function-camelcase': 'error', '@mindfiredigital/hub/function-descriptive': 'warn', '@mindfiredigital/hub/react-component-name-match-filename': 'error', '@mindfiredigital/hub/react-filename-pascalcase': 'error', }; // Recommended rules for MERN in flat config (no need for @mindfiredigital prefix) const mernRecommendedRulesFlat = { 'hub/file-kebabcase': 'error', 'hub/vars-camelcase': 'error', 'hub/class-pascalcase': 'error', 'hub/function-camelcase': 'error', 'hub/function-descriptive': 'warn', 'hub/react-component-name-match-filename': 'error', 'hub/react-filename-pascalcase': 'error', }; // Create configuration (legacy or flat) const createConfig = (rules, flatConfigName = false) => ({ ...(flatConfigName ? { ...flatConfigBase, name: flatConfigName, plugins: { hub } } : { ...legacyConfigBase, plugins: ['@mindfiredigital/eslint-plugin-hub'] }), rules: { ...rules }, }); // Define the hub object with meta information and rules const hub = { meta: { name, version, }, rules: { ...generalRules.rules, ...reactRules.rules, ...angularRules.rules, }, }; // Configurations for flat and legacy, including recommended rules const configs = { // Legacy format configurations all: createConfig(convertRulesToLegacyConfig(hub.rules)), general: createConfig(convertRulesToLegacyConfig(generalRules.rules)), react: createConfig(convertRulesToLegacyConfig(reactRules.rules)), angular: createConfig(convertRulesToLegacyConfig(angularRules.rules)), mern: createConfig(mernRecommendedRulesLegacy), // Flat format configurations 'flat/all': createConfig(convertRulesToFlatConfig(hub.rules), 'hub/flat/all'), 'flat/general': createConfig( convertRulesToFlatConfig(generalRules.rules), 'hub/flat/general' ), 'flat/react': createConfig( convertRulesToFlatConfig(reactRules.rules), 'hub/flat/react' ), 'flat/angular': createConfig( convertRulesToFlatConfig(angularRules.rules), 'hub/flat/angular' ), 'flat/mern': createConfig(mernRecommendedRulesFlat, 'hub/flat/mern'), }; // Export the hub and its configurations module.exports = { ...hub, configs };