// @ts-check import eslint from '@eslint/js'; import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; import globals from 'globals'; import tseslint from 'typescript-eslint'; export default tseslint.config( { ignores: ['eslint.config.mjs'], }, eslint.configs.recommended, ...tseslint.configs.recommendedTypeChecked, eslintPluginPrettierRecommended, { languageOptions: { globals: { ...globals.node, ...globals.jest, }, sourceType: 'commonjs', parserOptions: { projectService: { allowDefaultProject: ['jest.config.js', '*.config.mjs'], }, tsconfigRootDir: import.meta.dirname, }, }, }, { rules: { '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/no-unsafe-argument': 'error', '@typescript-eslint/no-unused-vars': [ 'error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', }, ], 'no-console': 'error', 'prettier/prettier': ['error', { endOfLine: 'auto' }], 'no-restricted-syntax': [ 'error', { selector: "CallExpression[callee.name='parseInt']", message: '❌ parseInt() is forbidden (UUID risk)', }, { selector: "UnaryExpression[operator='+']", message: '❌ +value is forbidden (UUID risk)', }, ], }, }, { files: [ '**/*.spec.ts', '**/*.e2e-spec.ts', 'test/jest.setup.ts', 'test/jest-e2e.setup.ts', ], rules: { '@typescript-eslint/unbound-method': 'off', '@typescript-eslint/no-unsafe-assignment': 'off', 'no-console': 'off', }, } );