// eslint.config.js import { fixupPluginRules } from '@eslint/compat' import pluginTs from '@typescript-eslint/eslint-plugin' import parserTs from '@typescript-eslint/parser' import pluginUnused from 'eslint-plugin-unused-imports' import pluginPrettier from 'eslint-plugin-prettier' import globals from 'globals' import { defineConfig, globalIgnores } from 'eslint/config' export default defineConfig([ globalIgnores([ '.history/', '.vscode/', 'build/', 'dist/', 'coverage/', 'vendors/client/', ]), { files: ['**/*.ts', '**/*.js'], languageOptions: { parser: parserTs, ecmaVersion: 2021, sourceType: 'module', parserOptions: { project: ['./tsconfig.json'], }, globals: { ...globals.es6, ...globals.node, ...globals.jest, }, }, plugins: { '@typescript-eslint': fixupPluginRules(pluginTs), 'unused-imports': fixupPluginRules(pluginUnused), prettier: fixupPluginRules(pluginPrettier), }, rules: { // TypeScript rules '@typescript-eslint/ban-ts-comment': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/member-delimiter-style': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-floating-promises': 'warn', '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-shadow': [ 'error', { allow: ['deps', 'secrets', 'values'], }, ], '@typescript-eslint/no-unsafe-argument': 'warn', '@typescript-eslint/no-unsafe-assignment': 'off', '@typescript-eslint/no-unsafe-call': 'off', '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/no-unsafe-return': 'off', '@typescript-eslint/no-unused-vars': [ 'warn', { varsIgnorePattern: '^(_|next)', }, ], '@typescript-eslint/no-use-before-define': 'off', '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/restrict-template-expressions': 'off', // General rules 'func-names': 'off', 'eol-last': ['error', 'always'], 'func-style': ['off', 'expression'], 'no-console': 'off', 'no-debugger': 'error', 'no-param-reassign': [ 'error', { props: true, ignorePropertyModificationsFor: ['memo'], }, ], 'no-plusplus': ['error', { allowForLoopAfterthoughts: true }], 'no-shadow': 'off', 'no-unused-vars': 'off', 'no-use-before-define': 'off', 'no-underscore-dangle': 'off', 'object-shorthand': 'error', 'prefer-destructuring': 'warn', 'prefer-template': 'error', // Plugin rules 'prettier/prettier': 'error', }, }, // Test files specific configuration { files: ['**/*.test.ts', '**/stubs/**/*.ts'], rules: { '@typescript-eslint/no-require-imports': 'off', '@typescript-eslint/no-unsafe-argument': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-unused-vars': 'off', }, }, ])