import js from '@eslint/js'; import path from 'path'; import { fileURLToPath } from 'url'; import tseslint from 'typescript-eslint'; import react from 'eslint-plugin-react'; import reactHooks from 'eslint-plugin-react-hooks'; import unusedImports from 'eslint-plugin-unused-imports'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default tseslint.config( { ignores: ['dist', 'node_modules'], }, js.configs.recommended, ...tseslint.configs.recommended, { files: ['**/*.{ts,tsx}'], plugins: { react, 'react-hooks': reactHooks, 'unused-imports': unusedImports, }, languageOptions: { ecmaVersion: 2020, sourceType: 'module', parserOptions: { ecmaFeatures: { jsx: true, }, project: ['./tsconfig.json', './tsconfig.node.json'], tsconfigRootDir: __dirname, }, }, settings: { react: { version: 'detect', }, }, rules: { ...react.configs.recommended.rules, ...reactHooks.configs.recommended.rules, 'react/react-in-jsx-scope': 'off', 'react/prop-types': 'off', '@typescript-eslint/explicit-function-return-type': 'error', '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/no-unused-vars': 'off', 'unused-imports/no-unused-imports': 'error', 'unused-imports/no-unused-vars': [ 'error', { vars: 'all', varsIgnorePattern: '^_', args: 'after-used', argsIgnorePattern: '^_', }, ], 'max-lines': ['error', { max: 250, skipBlankLines: true, skipComments: true }], 'max-lines-per-function': ['error', { max: 40, skipBlankLines: true, skipComments: true }], 'max-params': ['error', 4], 'max-depth': ['error', 4], complexity: ['error', 10], 'max-nested-callbacks': ['error', 3], '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/prefer-nullish-coalescing': 'error', '@typescript-eslint/prefer-optional-chain': 'error', '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/no-misused-promises': 'error', 'prefer-const': 'error', 'no-var': 'error', 'eqeqeq': ['error', 'always'], 'curly': ['error', 'all'], 'no-else-return': 'error', 'no-console': ['warn', { allow: ['warn', 'error'] }], }, }, );