import js from "@eslint/js"; import reactHooks from "eslint-plugin-react-hooks"; import tseslint from "typescript-eslint"; export default tseslint.config( { ignores: [ "dist/**", "node_modules/**", "coverage/**", "tmp/**", ".codex-tmp/**", ".codex-logs/**", "screenshots/**", "*.log", "*.tmp", "vite-*.log", ], }, js.configs.recommended, ...tseslint.configs.recommended, { files: [ "src/**/*.{ts,tsx}", "scripts/**/*.mjs", "vite.config.ts", "eslint.config.js", ], languageOptions: { ecmaVersion: "latest", sourceType: "module", globals: { AbortController: "readonly", AbortSignal: "readonly", Blob: "readonly", clearInterval: "readonly", clearTimeout: "readonly", console: "readonly", crypto: "readonly", document: "readonly", File: "readonly", fetch: "readonly", FormData: "readonly", Headers: "readonly", HTMLTextAreaElement: "readonly", localStorage: "readonly", navigator: "readonly", process: "readonly", React: "readonly", RequestInit: "readonly", Response: "readonly", setInterval: "readonly", setTimeout: "readonly", URL: "readonly", URLSearchParams: "readonly", window: "readonly", }, }, plugins: { "react-hooks": reactHooks, }, rules: { "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-unused-vars": [ "warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, ], "@typescript-eslint/no-unused-expressions": "warn", "no-empty": ["error", { allowEmptyCatch: true }], "no-undef": "off", "no-useless-escape": "warn", "prefer-const": "warn", }, }, );