import { defineConfig } from "oxlint"

export default defineConfig({
  plugins: ["typescript", "unicorn", "oxc"],
  ignorePatterns: ["**/*.gen.ts", "node_modules/**/*"],
  categories: {
    correctness: "error",
    suspicious: "warn",
    perf: "warn",
    style: "warn",
    restriction: "error",
  },
  rules: {
    "capitalized-comments": "off",
    "default-case": "off",
    "filename-case": "off",
    "func-style": ["error", "declaration", { allowArrowFunctions: true }],
    "id-length": "off",
    "init-declarations": "off",
    "max-params": "off",
    "max-statements": "off",
    "new-cap": "off",
    "no-array-for-each": "off",
    "no-async-await": "off",
    "no-await-expression-member": "off",
    "no-await-in-loop": "off",
    "no-bitwise": "off",
    "no-console": "off",
    "no-continue": "off",
    "no-dynamic-delete": "off",
    "no-empty-file": "off",
    "no-empty-function": "off",
    "no-eq-null": "warn",
    "no-implicit-coercion": "off",
    "no-magic-numbers": "off",
    "no-multi-assign": "off",
    "no-nested-ternary": "off",
    "unicorn/no-nested-ternary": "off",
    "no-null": "off",
    "no-optional-chaining": "off",
    "no-plusplus": "off",
    "no-rest-spread-properties": "off",
    "no-shadow-restricted-names": "off",
    "no-shadow": "off",
    "no-ternary": "off",
    "no-undefined": "off",
    "no-underscore-dangle": "off",
    "no-use-before-define": "off",
    "unicorn/numeric-separators-style": "off",
    "prefer-destructuring": "off",
    "prefer-for-of": "off",
    "prefer-template": "off",
    "prefer-ternary": "off",
    "require-module-specifiers": "off",
    "sort-imports": "off",
    "sort-keys": "off",
    "switch-case-braces": "off",
    "typescript/consistent-indexed-object-style": "off",
    "typescript/consistent-type-definitions": ["error", "type"],
    "typescript/explicit-function-return-type": "off",
    "typescript/explicit-member-accessibility": "off",
    "typescript/explicit-module-boundary-types": "off",
    "typescript/no-empty-interface": "off",
    "typescript/no-empty-object-type": "off",
    "typescript/no-namespace": "off",
    "typescript/no-non-null-assertion": "off",
    "typescript/prefer-function-type": "off",
    "unicorn/no-process-exit": "off",
    "unicorn/prefer-string-raw": "off",
    "unicorn/relative-url-style": "off",
    "unicorn/require-post-message-target-origin": "off",
    "unicorn/text-encoding-identifier-case": "off",
  },
  overrides: [
    {
      files: ["*.test.ts"],
      rules: {
        "typescript/no-explicit-any": "off",
        "typescript/no-require-imports": "off",
        "typescript/no-var-requires": "off",
        "unicorn/prefer-module": "off",
        "unicorn/consistent-function-scoping": "off",
        "func-names": "off",
      },
    },
    {
      files: ["*.d.ts"],
      rules: {
        "typescript/no-explicit-any": "off",
        "unicorn/consistent-function-scoping": "off",
        "typescript/consistent-type-definitions": "off",
      },
    },
  ],
})
