import eslint from "@eslint/js"; import tseslint from "typescript-eslint"; import prettierConfig from "eslint-config-prettier"; import prettierPlugin from "eslint-plugin-prettier"; // @ts-expect-error - security plugin doesn't have types import securityPlugin from "eslint-plugin-security"; export default tseslint.config( eslint.configs.recommended, ...tseslint.configs.strictTypeChecked, ...tseslint.configs.stylisticTypeChecked, prettierConfig, { plugins: { prettier: prettierPlugin, security: securityPlugin, }, rules: { // Prettier "prettier/prettier": "error", // Type Safety - STRICT (Quality Rails) "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/explicit-function-return-type": "error", "@typescript-eslint/explicit-module-boundary-types": "error", "@typescript-eslint/no-unused-vars": [ "error", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, ], "@typescript-eslint/consistent-type-imports": ["error", { prefer: "type-imports" }], // Promise/Async Safety (Quality Rails) "@typescript-eslint/no-floating-promises": "error", "@typescript-eslint/no-misused-promises": "error", "@typescript-eslint/await-thenable": "error", // Code Quality (Quality Rails) "@typescript-eslint/no-var-requires": "error", "@typescript-eslint/prefer-nullish-coalescing": "error", "@typescript-eslint/prefer-optional-chain": "error", // Security (Quality Rails) "security/detect-object-injection": "off", // Too many false positives "security/detect-non-literal-fs-filename": "warn", "security/detect-non-literal-regexp": "warn", "security/detect-unsafe-regex": "error", "security/detect-buffer-noassert": "error", "security/detect-eval-with-expression": "error", "security/detect-no-csrf-before-method-override": "error", "security/detect-possible-timing-attacks": "warn", "security/detect-pseudoRandomBytes": "error", }, }, { ignores: ["**/node_modules/**", "**/dist/**", "**/.next/**", "**/coverage/**"], } );