import type {ESLint, Linter, Rule} from 'eslint';
import ExhaustiveDeps from './rules/ExhaustiveDeps';
import ReactCompiler from './rules/ReactCompiler';
import RulesOfHooks from './rules/RulesOfHooks';
const rules = {
'exhaustive-deps': ExhaustiveDeps,
'react-compiler': ReactCompiler,
'rules-of-hooks': RulesOfHooks,
} satisfies Record<string, Rule.RuleModule>;
const configRules = {
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'warn',
} satisfies Linter.RulesRecord;
const recommendedConfig = {
name: 'react-hooks/recommended',
plugins: {
get 'react-hooks'(): ESLint.Plugin {
return plugin;
},
},
rules: configRules,
};
const plugin = {
meta: {name: 'eslint-plugin-react-hooks'},
rules,
configs: {
'recommended-legacy': {
plugins: ['react-hooks'],
rules: configRules,
},
recommended: recommendedConfig,
'recommended-latest': recommendedConfig,
},
} satisfies ESLint.Plugin;
const configs = plugin.configs;
const meta = plugin.meta;
export {configs, meta, rules};