import js from '@eslint/js' import { defineConfig } from 'eslint/config' import eslintConfigPrettier from 'eslint-config-prettier/flat' import importPlugin from 'eslint-plugin-import' import unusedImports from 'eslint-plugin-unused-imports' import tseslint from 'typescript-eslint' export default defineConfig([ js.configs.recommended, tseslint.configs.strictTypeChecked, // eslint-disable-line import/no-named-as-default-member tseslint.configs.stylisticTypeChecked, // eslint-disable-line import/no-named-as-default-member { rules: { '@typescript-eslint/dot-notation': [ 'error', { allowIndexSignaturePropertyAccess: true }, ], '@typescript-eslint/consistent-type-definitions': ['error', 'type'], '@typescript-eslint/consistent-type-exports': 'error', '@typescript-eslint/consistent-type-imports': 'error', }, }, { languageOptions: { parserOptions: { projectService: true, }, }, }, importPlugin.flatConfigs.recommended, importPlugin.flatConfigs.typescript, { rules: { 'no-restricted-syntax': ['error', 'ThrowStatement'], 'import/order': [ 'error', { pathGroups: [ { pattern: '@/**', group: 'external', position: 'after', }, ], alphabetize: { order: 'asc', caseInsensitive: true, }, 'newlines-between': 'never', }, ], }, settings: { 'import/resolver': { typescript: true, }, }, }, { plugins: { 'unused-imports': unusedImports, }, rules: { '@typescript-eslint/no-unused-vars': 'off', 'unused-imports/no-unused-imports': 'error', 'unused-imports/no-unused-vars': 'error', }, }, eslintConfigPrettier, ])