import js from '@eslint/js' import tseslint from 'typescript-eslint' import lodash from 'eslint-plugin-lodash' import unusedImports from 'eslint-plugin-unused-imports' import simpleImportSort from 'eslint-plugin-simple-import-sort' import eslintConfigPrettier from 'eslint-config-prettier' export default tseslint.config( js.configs.recommended, ...tseslint.configs.recommended, { plugins: { lodash, 'unused-imports': unusedImports, 'simple-import-sort': simpleImportSort, }, languageOptions: { parserOptions: { project: ['./tsconfig.json', './tsconfig.eslint.json'], tsconfigRootDir: import.meta.dirname, }, globals: { process: 'readonly', console: 'readonly', module: 'readonly', require: 'readonly', __dirname: 'readonly', __filename: 'readonly', Buffer: 'readonly', global: 'readonly', setTimeout: 'readonly', clearTimeout: 'readonly', setInterval: 'readonly', clearInterval: 'readonly', setImmediate: 'readonly', clearImmediate: 'readonly', URL: 'readonly', URLSearchParams: 'readonly', }, }, rules: { '@typescript-eslint/no-empty-object-type': 'error', '@typescript-eslint/no-unsafe-function-type': 'error', '@typescript-eslint/no-wrapper-object-types': 'error', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-extra-semi': 'off', '@typescript-eslint/no-unused-vars': [ 'warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', }, ], 'unused-imports/no-unused-imports': 'warn', 'no-constant-condition': 'off', 'linebreak-style': ['error', process.platform === 'win32' ? 'windows' : 'unix'], 'lodash/import-scope': [2, 'member'], 'simple-import-sort/imports': 'error', 'simple-import-sort/exports': 'error', }, }, { files: ['**/*.test.ts', '**/*.test.tsx', '**/tests/**/*.ts'], languageOptions: { parserOptions: { project: './tsconfig.test.json', }, globals: { describe: 'readonly', it: 'readonly', test: 'readonly', expect: 'readonly', beforeEach: 'readonly', afterEach: 'readonly', beforeAll: 'readonly', afterAll: 'readonly', jest: 'readonly', }, }, rules: { '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-non-null-assertion': 'off', }, }, { ignores: ['lib', 'coverage', 'jest.config.ts', 'eslint.config.mjs'], }, eslintConfigPrettier, )