import { FlatCompat } from '@eslint/eslintrc'; import js from '@eslint/js'; import typescriptEslint from '@typescript-eslint/eslint-plugin'; import tsParser from '@typescript-eslint/parser'; import importPlugin from 'eslint-plugin-import'; import jest from 'eslint-plugin-jest'; import globals from 'globals'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); export const compat = new FlatCompat({ baseDirectory: __dirname, recommendedConfig: js.configs.recommended, allConfig: js.configs.all, }); export default [ { ignores: [ '**/node_modules', '**/dist', '**/coverage', '**/*.cjs', '**/*.cts', '**/*.mjs', 'jest.config.js', ], }, ...compat.extends( 'eslint:recommended', 'plugin:import/recommended', 'plugin:import/typescript', 'plugin:@typescript-eslint/recommended', 'prettier', ), { plugins: { import: importPlugin, '@typescript-eslint': typescriptEslint, jest, }, languageOptions: { globals: { ...globals.node, ...globals.browser, }, parser: tsParser, ecmaVersion: 12, sourceType: 'module', parserOptions: { project: './tsconfig.json', }, }, settings: { 'import/resolver': { typescript: true, node: true, }, }, rules: { 'guard-for-in': ['error'], 'import/no-cycle': ['error'], 'import/no-self-import': ['error'], 'import/no-named-as-default-member': ['off'], 'no-console': ['error'], 'no-eval': ['error'], 'no-extra-boolean-cast': ['error'], 'no-ex-assign': ['error'], 'no-constant-condition': ['off'], 'no-return-await': ['error'], 'no-restricted-imports': [ 'error', { name: 'console', message: 'Please use a logger and/or the utils package assert', }, { name: 'fs', message: 'Avoid use of node-specific libraries', }, ], '@typescript-eslint/ban-ts-comment': ['off'], '@typescript-eslint/explicit-module-boundary-types': ['off'], '@typescript-eslint/no-explicit-any': ['off'], '@typescript-eslint/no-floating-promises': ['error'], '@typescript-eslint/no-non-null-assertion': ['off'], '@typescript-eslint/no-require-imports': ['warn'], '@typescript-eslint/no-unused-expressions': ['off'], '@typescript-eslint/no-empty-object-type': ['off'], '@typescript-eslint/no-unused-vars': [ 'error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', }, ], 'jest/no-disabled-tests': 'warn', 'jest/no-focused-tests': 'error', 'jest/no-identical-title': 'error', 'jest/prefer-to-have-length': 'warn', 'jest/valid-expect': 'error', }, }, ];