{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "plugins": ["react", "typescript", "vitest", "unicorn", "import"],
  "env": {
    "browser": true,
    "node": true,
    "es2022": true
  },
  "categories": {
    "correctness": "error",
    "suspicious": "warn"
  },
  "rules": {
    "no-console": "error",
    "no-var": "error",
    "prefer-const": "error",
    "eqeqeq": ["error", "always"],
    "no-unused-vars": "off",
    "no-undef": "off",

    "typescript/no-unused-vars": [
      "error",
      { "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" }
    ],
    "typescript/no-explicit-any": "error",
    "typescript/no-non-null-assertion": "error",
    "typescript/no-inferrable-types": "error",
    "typescript/consistent-type-imports": [
      "error",
      { "prefer": "type-imports" }
    ],
    "react/jsx-no-leaked-render": "error",
    "react/react-in-jsx-scope": "off",
    "react/rules-of-hooks": "error",
    "react/exhaustive-deps": "error",
    "react/jsx-key": "error",
    "react/no-array-index-key": "error",
    "react/self-closing-comp": "warn",
    "import/no-cycle": "error",
    "import/no-duplicates": "error",
    "import/no-unassigned-import": ["error", {
      "allow": ["**/*.css", "@testing-library/jest-dom", "@testing-library/cypress/add-commands"]
    }],

    "no-shadow": "error",
    "unicorn/consistent-function-scoping": "error",
    "unicorn/prefer-add-event-listener": "error",
    "unicorn/require-module-specifiers": "error"
  },
  "overrides": [
    {
      "files": ["**/__tests__/**", "**/*.test.ts", "**/*.test.tsx", "cypress/**"],
      "rules": {
        "no-console": "off",
        "typescript/no-explicit-any": "off",
        "typescript/no-inferrable-types": "off"
      }
    },
    {
      "files": ["app/lib/logger.ts", "server/logger.ts"],
      "rules": {
        "no-console": "off"
      }
    }
  ],
  "ignorePatterns": [
    "build/**",
    "dist/**",
    "node_modules/**",
    "drizzle/**",
    ".react-router/**",
    "cypress/fixtures/**",
    "scripts/**"
  ]
}
