import { defineConfig, globalIgnores } from "eslint/config"; import nextVitals from "eslint-config-next/core-web-vitals"; import nextTs from "eslint-config-next/typescript"; const eslintConfig = defineConfig([ // Ignores MUST come first so they apply to every subsequent // config item. globalIgnores() at the bottom of the array works // for *.next / out / build / next-env.d.ts because eslint-config- // next handles those internally, but .pnpmfile.cjs is not in that // default list — declaring an explicit `{ ignores: [...] }` block // at index 0 is the documented way to make eslint v9 skip files // entirely before any config rules apply. { ignores: [ "**/.pnpmfile.cjs", "**/*.cjs", ], }, ...nextVitals, ...nextTs, { rules: { "react-hooks/set-state-in-effect": "off", "@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_" }], }, }, // Override default ignores of eslint-config-next. globalIgnores([ // Default ignores of eslint-config-next: ".next/**", "out/**", "build/**", "next-env.d.ts", // .pnpmfile.cjs is a pnpm install hook (CommonJS by design). // The TypeScript no-require-imports rule would otherwise flag // every require() call in this file. eslint-config-next does NOT // ignore .cjs by default. ".pnpmfile.cjs", "**/*.cjs", ]), ]); export default eslintConfig;