import js from "@eslint/js"; import prettierConfig from "eslint-config-prettier"; import reactHooks from "eslint-plugin-react-hooks"; import reactRefresh from "eslint-plugin-react-refresh"; import globals from "globals"; import tseslint from "typescript-eslint"; export default tseslint.config( { ignores: ["dist", "coverage", "src/api/schema.generated.ts"] }, { files: ["**/*.{js,mjs}"], ...js.configs.recommended, languageOptions: { globals: globals.node }, }, { files: ["**/*.{ts,tsx}"], extends: [ js.configs.recommended, ...tseslint.configs.recommendedTypeChecked, ...tseslint.configs.stylisticTypeChecked, ], languageOptions: { ecmaVersion: 2023, globals: globals.browser, parserOptions: { projectService: true, tsconfigRootDir: import.meta.dirname, }, }, plugins: { "react-hooks": reactHooks, "react-refresh": reactRefresh, }, rules: { ...reactHooks.configs.recommended.rules, ...reactRefresh.configs.vite.rules, "@typescript-eslint/consistent-type-imports": [ "error", { prefer: "type-imports", fixStyle: "inline-type-imports" }, ], "@typescript-eslint/no-confusing-void-expression": "off", "@typescript-eslint/no-misused-promises": [ "error", { checksVoidReturn: { attributes: false } }, ], }, }, { files: ["**/*.{test,spec}.{ts,tsx}", "src/test/**/*.ts"], languageOptions: { globals: globals.node }, rules: { "@typescript-eslint/no-unsafe-assignment": "off", "@typescript-eslint/no-unsafe-argument": "off", }, }, prettierConfig, );