import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; import react from "eslint-plugin-react"; import reactHooks from "eslint-plugin-react-hooks"; import onlyAscii from "eslint-plugin-only-ascii"; import testingLibrary from "eslint-plugin-testing-library"; import jest from "eslint-plugin-jest"; import jestDom from "eslint-plugin-jest-dom"; import jsdoc from "eslint-plugin-jsdoc"; import globals from "globals"; import path from "node:path"; import { fileURLToPath } from "node:url"; import js from "@eslint/js"; import { FlatCompat } from "@eslint/eslintrc"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const compat = new FlatCompat({ baseDirectory: __dirname, recommendedConfig: js.configs.recommended, allConfig: js.configs.all }); export default [{ ignores: ["src/main/resources/static/scripts.js", "target/**/*"], }, ...fixupConfigRules(compat.extends( "eslint:recommended", "plugin:promise/recommended", "plugin:react/recommended", "plugin:react/jsx-runtime", "plugin:react-hooks/recommended", "plugin:jest/recommended", "plugin:jest-dom/recommended", )), jsdoc.configs['flat/recommended'], { plugins: { react: fixupPluginRules(react), "react-hooks": fixupPluginRules(reactHooks), "only-ascii": onlyAscii, "testing-library": testingLibrary, jest: fixupPluginRules(jest), "jest-dom": fixupPluginRules(jestDom), jsdoc, }, languageOptions: { globals: { ...globals.browser, ...globals.node, ...jest.environments.globals.globals, }, ecmaVersion: 12, sourceType: "module", parserOptions: { ecmaFeatures: { jsx: true, }, }, }, settings: { react: { pragma: "React", version: "18", }, jsdoc: { mode: "typescript", }, }, rules: { quotes: ["error", "single"], "no-cond-assign": "warn", "no-unused-vars": "warn", "no-useless-escape": "warn", "only-ascii/only-ascii": ["warn", { allowedChars: "✓←→♡ ·—©", }], "react/prop-types": "off", "testing-library/no-node-access": "off", "jsdoc/require-jsdoc": ["warn", { publicOnly: true, }], "jsdoc/require-returns": "off", "jsdoc/require-returns-type": "off", "jsdoc/require-property-description": "off", "jsdoc/require-param-description": "off", "jsdoc/check-tag-names": ["error", { definedTags: ["jest-environment"], }], "promise/always-return": "off", semi: ["error", "never", { beforeStatementContinuationChars: "always", }], "semi-style": ["error", "last"], }, }, ...compat.extends("plugin:testing-library/react").map(config => ({ ...config, files: ["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"], }))];