import js from '@eslint/js'; import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; import eslintPluginUnicorn from 'eslint-plugin-unicorn'; import globals from 'globals'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import typescriptEslint from 'typescript-eslint'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); export default typescriptEslint.config([ eslintPluginUnicorn.configs.recommended, eslintPluginPrettierRecommended, js.configs.recommended, typescriptEslint.configs.recommended, { ignores: ['eslint.config.mjs'], }, { languageOptions: { globals: { ...globals.node, }, parser: typescriptEslint.parser, ecmaVersion: 5, sourceType: 'module', parserOptions: { project: 'tsconfig.json', tsconfigRootDir: __dirname, }, }, rules: { '@typescript-eslint/interface-name-prefix': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-floating-promises': 'error', 'unicorn/prevent-abbreviations': 'off', 'unicorn/filename-case': 'off', 'unicorn/no-null': 'off', 'unicorn/prefer-top-level-await': 'off', 'unicorn/prefer-event-target': 'off', 'unicorn/no-thenable': 'off', 'unicorn/import-style': 'off', 'unicorn/prefer-structured-clone': 'off', 'unicorn/no-for-loop': 'off', '@typescript-eslint/await-thenable': 'error', '@typescript-eslint/no-misused-promises': 'error', 'require-await': 'off', '@typescript-eslint/require-await': 'error', curly: 2, 'prettier/prettier': 0, 'object-shorthand': ['error', 'always'], 'no-restricted-imports': [ 'error', { patterns: [ { group: ['.*'], message: 'Relative imports are not allowed.', }, ], }, ], '@typescript-eslint/no-unused-vars': [ 'warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_', }, ], }, }, ]);