import js from "@eslint/js"; import tseslint from "typescript-eslint"; import nextPlugin from "@next/eslint-plugin-next"; import reactPlugin from "eslint-plugin-react"; import hooksPlugin from "eslint-plugin-react-hooks"; import { FlatCompat } from "@eslint/eslintrc"; import { fixupPluginRules } from "@eslint/compat"; import { dirname } from "path"; import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const compat = new FlatCompat({ baseDirectory: __dirname, }); export default tseslint.config( { ignores: [ "**/dist/**", "**/node_modules/**", "**/.next/**", "**/out/**", "**/cloned-websites/**", "**/public/showcase/**", ], }, js.configs.recommended, ...tseslint.configs.recommended, { files: ["apps/web/**/*.{js,jsx,ts,tsx}"], plugins: { react: fixupPluginRules(reactPlugin), "react-hooks": fixupPluginRules(hooksPlugin), "@next/next": fixupPluginRules(nextPlugin), }, rules: { ...reactPlugin.configs.recommended.rules, ...nextPlugin.configs.recommended.rules, ...nextPlugin.configs["core-web-vitals"].rules, "react/react-in-jsx-scope": "off", "react/no-unescaped-entities": "off", "react/prop-types": "off", "@next/next/no-img-element": "warn", }, settings: { react: { version: "detect", }, }, }, { // Global overrides to keep the linter from blocking commits due to legacy debt plugins: { react: fixupPluginRules(reactPlugin), "typescript-eslint": tseslint.plugin, }, rules: { "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": [ "warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_", }, ], "no-console": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/ban-ts-comment": "off", "no-empty": "warn", "react/jsx-key": "warn", "no-undef": "off", // Global recommended no-undef can be very noisy in monorepos "prefer-const": "off", "no-useless-escape": "off", "no-self-assign": "off", "no-control-regex": "off", "@typescript-eslint/no-require-imports": "off", "no-useless-assignment": "off", }, }, );