import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; import typescriptEslint from "@typescript-eslint/eslint-plugin"; import react from "eslint-plugin-react"; import reactHooks from "eslint-plugin-react-hooks"; import prettier from "eslint-plugin-prettier"; import promise from "eslint-plugin-promise"; import jestDom from "eslint-plugin-jest-dom"; import testingLibrary from "eslint-plugin-testing-library"; import globals from "globals"; import tsParser from "@typescript-eslint/parser"; 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: [ "**/node_modules", "**/lib", "**/dist", "**/build", "**/coverage", "**/expected", "**/website", "**/gh-pages", "**/weex", "**/build.ts", "packages/vue", "packages/element", "**/esm", "**/doc-site", "**/public", "packages/*/*/client.d.ts", "packages/*/*/server.d.ts", "packages/*/*/client.js", "packages/*/*/server.js", "packages/core/build", "packages/core/devtools", "packages/core/database/src/sql-parser/index.js", "**/.dumi/tmp", "**/.dumi/tmp-test", "**/.dumi/tmp-production", "packages/core/cli/templates/plugin/src/client/*.tpl", "packages/app/client/src/.plugins", "**/docker", "**/storage", "**/benchmark", "packages/core/cli/src", "packages/core/cli/bin", "packages/plugins/@hera/plugin-core/src/client/features/departments/index.tsx", ], }, ...fixupConfigRules(compat.extends( "eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:react/recommended", "plugin:react-hooks/recommended", "plugin:promise/recommended", "plugin:prettier/recommended", )), { plugins: { "@typescript-eslint": fixupPluginRules(typescriptEslint), react: fixupPluginRules(react), "react-hooks": fixupPluginRules(reactHooks), prettier: fixupPluginRules(prettier), promise: fixupPluginRules(promise), "jest-dom": jestDom, "testing-library": testingLibrary, }, languageOptions: { globals: { ...globals.node, ...globals.es2020, ...globals.browser, sleep: true, prettyFormat: true, }, parser: tsParser, ecmaVersion: 11, sourceType: "module", parserOptions: { ecmaFeatures: { jsx: true, }, project: "./tsconfig.json", }, }, settings: { react: { version: "detect", }, }, rules: { "@typescript-eslint/no-this-alias": "off", "@typescript-eslint/ban-types": "off", "no-unused-vars": "off", "no-useless-catch": "off", "@typescript-eslint/no-unused-vars": "off", "no-empty-function": "off", "@typescript-eslint/no-empty-function": "off", "react/display-name": "off", "react/prop-types": "off", "no-explicit-any": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/no-var-requires": "off", "promise/always-return": "off", }, }, { files: ["**/e2e/**/*.{ts,js,tsx,jsx}", "**/__e2e__/**/*.{ts,js,tsx,jsx}"], rules: { "@typescript-eslint/no-floating-promises": "error", }, }, { files: [ "packages/plugins/@hera/**/*.{ts,js,tsx,jsx}", "packages/plugins/@hera/**/*.{ts,js,tsx,jsx}", ], rules: { eqeqeq: ["error", "smart"], }, }];