eslint.config.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { defineConfig, globalIgnores } from "eslint/config";
  2. import { fixupConfigRules, fixupPluginRules } from "@eslint/compat";
  3. import typescriptEslint from "@typescript-eslint/eslint-plugin";
  4. import prettier from "eslint-plugin-prettier";
  5. import globals from "globals";
  6. import tsParser from "@typescript-eslint/parser";
  7. import path from "node:path";
  8. import { fileURLToPath } from "node:url";
  9. import js from "@eslint/js";
  10. import { FlatCompat } from "@eslint/eslintrc";
  11. const __filename = fileURLToPath(import.meta.url);
  12. const __dirname = path.dirname(__filename);
  13. const compat = new FlatCompat({
  14. baseDirectory: __dirname,
  15. recommendedConfig: js.configs.recommended,
  16. allConfig: js.configs.all,
  17. });
  18. export default defineConfig([
  19. globalIgnores(['**/dist', '**/node_modules', '**/.cache']),
  20. {
  21. extends: fixupConfigRules(
  22. compat.extends(
  23. 'eslint:recommended',
  24. 'plugin:import/typescript',
  25. 'plugin:@typescript-eslint/eslint-recommended',
  26. 'plugin:@typescript-eslint/recommended',
  27. 'plugin:prettier/recommended',
  28. 'prettier',
  29. ),
  30. ),
  31. plugins: {
  32. '@typescript-eslint': fixupPluginRules(typescriptEslint),
  33. prettier: fixupPluginRules(prettier),
  34. },
  35. languageOptions: {
  36. globals: {
  37. ...globals.browser,
  38. ...globals.node,
  39. },
  40. parser: tsParser,
  41. ecmaVersion: 2020,
  42. sourceType: 'module',
  43. parserOptions: {
  44. ecmaFeatures: {
  45. arrowFunctions: true,
  46. },
  47. },
  48. },
  49. settings: {
  50. 'import/parsers': {
  51. '@typescript-eslint/parser': ['.ts', '.tsx'],
  52. },
  53. 'import/resolver': {
  54. typescript: {},
  55. },
  56. },
  57. rules: {
  58. '@typescript-eslint/no-unused-vars': 'error',
  59. 'no-unused-vars': 'off',
  60. 'no-inner-declarations': 'off',
  61. 'comma-dangle': ['error', 'always-multiline'],
  62. 'global-require': 'off',
  63. 'import/no-dynamic-require': 'off',
  64. 'import/prefer-default-export': 'off',
  65. '@typescript-eslint/no-inferrable-types': 'off',
  66. '@typescript-eslint/explicit-function-return-type': 'off',
  67. '@typescript-eslint/no-var-requires': 'off',
  68. '@typescript-eslint/no-non-null-assertion': 'off',
  69. '@typescript-eslint/no-namespace': 'off',
  70. '@typescript-eslint/no-empty-interface': [
  71. 'error',
  72. {
  73. allowSingleExtends: true,
  74. },
  75. ],
  76. },
  77. },
  78. ]);