@saashub/qoq-eslint-v9-js-react
Version:
Eslint flat config template for JS + React
88 lines (85 loc) • 2.98 kB
JavaScript
import { baseConfig as baseConfig$1 } from '@saashub/qoq-eslint-v9-js';
import { objectMergeRight } from '@saashub/qoq-utils';
import compatPlugin from 'eslint-plugin-compat';
import jsxA11yPlugin from 'eslint-plugin-jsx-a11y';
import reactPlugin from 'eslint-plugin-react';
import reactHooksPlugin from 'eslint-plugin-react-hooks';
import reactRefresh from 'eslint-plugin-react-refresh';
const noRestrictedImportsRule = [
baseConfig$1.rules['no-restricted-imports'][0],
{
...baseConfig$1.rules['no-restricted-imports'][1],
paths: [
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
...baseConfig$1.rules['no-restricted-imports'][1].paths,
{
name: 'lodash/debounce',
message: "Since this is a React project please use use-bebounce instead it's newer and tiny.",
},
{
name: 'lodash/fp/debounce',
message: "Since this is a React project please use use-bebounce instead it's newer and tiny.",
},
],
},
];
const importOrderRule = [
baseConfig$1.rules['import-x/order'][0],
{
...baseConfig$1.rules['import-x/order'][1],
pathGroups: [
{
pattern: 'react*',
group: 'builtin',
position: 'before',
},
],
pathGroupsExcludedImportTypes: ['react*'],
},
];
const disabledRules = {
'sonarjs/function-return-type': 0,
};
const { plugins: jsBaseConfigPlugins, ...jsBaseConfigRest } = baseConfig$1;
const baseConfig = {
...objectMergeRight(jsBaseConfigRest, {
name: '@saashub/qoq-eslint-v9-js-react',
languageOptions: {
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
},
rules: {
...compatPlugin.configs['flat/recommended'].rules,
...reactPlugin.configs.recommended.rules,
...reactPlugin.configs['jsx-runtime'].rules,
...reactHooksPlugin.configs.recommended.rules,
...reactRefresh.configs.recommended.rules,
...jsxA11yPlugin.configs.recommended.rules,
'import-x/order': importOrderRule,
'no-restricted-imports': noRestrictedImportsRule,
'react/no-unused-prop-types': 1,
'react/forward-ref-uses-ref': 1,
'react/jsx-boolean-value': 1,
'react/jsx-fragments': 1,
'react/jsx-no-useless-fragment': 1,
...disabledRules,
},
settings: {
react: {
version: 'detect',
},
},
}),
plugins: {
...jsBaseConfigPlugins,
compat: compatPlugin,
react: reactPlugin,
'react-hooks': reactHooksPlugin,
'react-refresh': reactRefresh,
'jsx-a11y': jsxA11yPlugin,
},
};
export { baseConfig, disabledRules };