/** * ESLint 9 Flat Config * Migration from .eslintrc.js */ import js from '@eslint/js'; import tseslint from 'typescript-eslint'; import prettier from 'eslint-config-prettier'; import security from 'eslint-plugin-security'; import sonarjs from 'eslint-plugin-sonarjs'; export default tseslint.config( js.configs.recommended, ...tseslint.configs.recommended, prettier, { plugins: { security, sonarjs, }, languageOptions: { parserOptions: { ecmaVersion: 2022, sourceType: 'module', }, }, rules: { '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], '@typescript-eslint/explicit-function-return-type': 'warn', '@typescript-eslint/no-explicit-any': 'error', 'security/detect-object-injection': 'warn', // Temporarily disabled due to ESLint 9 compatibility issues // 'security/detect-non-literal-regexp': 'warn', 'sonarjs/cognitive-complexity': ['warn', 15], }, }, // Type-checked config for packages with tsconfig.json ...tseslint.configs.recommendedTypeChecked.map((config) => ({ ...config, languageOptions: { ...config.languageOptions, parserOptions: { ...config.languageOptions?.parserOptions, project: ['./tsconfig.json', './packages/*/tsconfig.json', './apps/*/tsconfig.json', './services/*/tsconfig.json'], tsconfigRootDir: import.meta.dirname, }, }, })), { languageOptions: { parserOptions: { project: ['./tsconfig.json', './packages/*/tsconfig.json', './apps/*/tsconfig.json', './services/*/tsconfig.json'], tsconfigRootDir: import.meta.dirname, }, }, rules: { '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/await-thenable': 'error', }, }, { ignores: ['node_modules', 'dist', 'build', '.next', 'coverage', '**/*.config.js'], } );