module.exports = { root: true, parser: '@typescript-eslint/parser', parserOptions: { ecmaVersion: 'latest', sourceType: 'module', ecmaFeatures: { jsx: true, }, project: './tsconfig.json', // Required for type-aware rules }, env: { browser: true, es2021: true, node: true, }, plugins: [ 'react', 'react-hooks', '@typescript-eslint', 'jsx-a11y', 'import', 'unused-imports', ], extends: [ 'eslint:recommended', 'plugin:react/recommended', 'plugin:react-hooks/recommended', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'plugin:jsx-a11y/recommended', 'plugin:import/errors', 'plugin:import/warnings', 'plugin:import/typescript', 'prettier', ], rules: { '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }], '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/explicit-function-return-type': ['error', { allowExpressions: false }], '@typescript-eslint/strict-boolean-expressions': 'error', '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports' }], '@typescript-eslint/no-misused-promises': 'error', '@typescript-eslint/prefer-readonly': 'error', '@typescript-eslint/explicit-module-boundary-types': 'error', '@typescript-eslint/typedef': [ 'error', { arrayDestructuring: true, arrowParameter: true, memberVariableDeclaration: true, objectDestructuring: true, parameter: true, propertyDeclaration: true, variableDeclaration: true, variableDeclarationIgnoreFunction: false, }, ], 'react/react-in-jsx-scope': 'off', 'react/prop-types': 'off', 'react/jsx-uses-react': 'off', 'react/jsx-uses-vars': 'error', 'react/jsx-no-useless-fragment': 'error', 'react/self-closing-comp': 'error', 'react-hooks/rules-of-hooks': 'error', 'react-hooks/exhaustive-deps': 'error', 'jsx-a11y/no-noninteractive-element-interactions': 'error', 'jsx-a11y/anchor-is-valid': 'error', 'jsx-a11y/click-events-have-key-events': 'error', 'import/order': [ 'error', { groups: [['builtin', 'external'], ['internal', 'parent', 'sibling', 'index']], 'newlines-between': 'always', alphabetize: { order: 'asc', caseInsensitive: true }, }, ], 'import/no-unresolved': 'error', 'import/no-duplicates': 'error', 'unused-imports/no-unused-imports-ts': 'error', 'no-console': ['warn', { allow: ['warn', 'error'] }], 'no-debugger': 'error', 'eqeqeq': ['error', 'always'], 'curly': 'error', 'semi': ['error', 'always'], 'quotes': ['error', 'single', { avoidEscape: true }], 'prefer-const': 'error', 'no-var': 'error', }, settings: { react: { version: 'detect', }, 'import/resolver': { typescript: {}, }, }, };