import js from "@eslint/js"; import tseslint from "@typescript-eslint/eslint-plugin"; import tsparser from "@typescript-eslint/parser"; import reactPlugin from "eslint-plugin-react"; import reactHooksPlugin from "eslint-plugin-react-hooks"; import globals from "globals"; export default [ js.configs.recommended, { files: ["**/*.{ts,tsx}"], languageOptions: { parser: tsparser, parserOptions: { ecmaVersion: "latest", sourceType: "module", ecmaFeatures: { jsx: true, }, }, globals: { ...globals.browser, ...globals.node, React: "readonly", JSX: "readonly", NodeJS: "readonly", }, }, plugins: { "@typescript-eslint": tseslint, react: reactPlugin, "react-hooks": reactHooksPlugin, }, rules: { ...tseslint.configs.recommended.rules, "@typescript-eslint/no-unused-vars": [ "warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_", }, ], "@typescript-eslint/no-explicit-any": "warn", "@typescript-eslint/no-empty-object-type": "off", "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", "no-unused-vars": "off", }, settings: { react: { version: "detect", }, }, }, { files: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}"], languageOptions: { globals: { describe: "readonly", it: "readonly", expect: "readonly", beforeEach: "readonly", afterEach: "readonly", vi: "readonly", test: "readonly", }, }, }, { ignores: [ ".next/**", "node_modules/**", "repos/**", "data/admin/plugins/**", "public/**/*.js", "*.config.js", "*.config.mjs", "e2e/**", "local-data/**/*.mjs", ], }, ];