.eslintrc.json•3.42 kB
{
"env": {
"node": true,
"es2022": true,
"jest": true
},
"extends": [
"eslint:recommended",
"@typescript-eslint/recommended",
"@typescript-eslint/recommended-requiring-type-checking",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"project": "./tsconfig.json"
},
"plugins": ["@typescript-eslint", "import", "security"],
"rules": {
// TypeScript specific rules
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
"@typescript-eslint/explicit-function-return-type": "warn",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/prefer-nullish-coalescing": "error",
"@typescript-eslint/prefer-optional-chain": "error",
"@typescript-eslint/no-floating-promises": "error",
"@typescript-eslint/await-thenable": "error",
"@typescript-eslint/no-misused-promises": "error",
"@typescript-eslint/require-await": "error",
"@typescript-eslint/no-unnecessary-type-assertion": "error",
"@typescript-eslint/prefer-as-const": "error",
"@typescript-eslint/consistent-type-definitions": ["error", "interface"],
"@typescript-eslint/consistent-type-imports": ["error", { "prefer": "type-imports" }],
// General JavaScript/TypeScript rules
"no-console": ["warn", { "allow": ["warn", "error"] }],
"no-debugger": "error",
"no-duplicate-imports": "error",
"no-unused-expressions": "error",
"prefer-const": "error",
"no-var": "error",
"object-shorthand": "error",
"prefer-arrow-callback": "error",
"prefer-template": "error",
"template-curly-spacing": "error",
"arrow-spacing": "error",
"comma-dangle": ["error", "es5"],
"quotes": ["error", "single", { "avoidEscape": true }],
"semi": ["error", "always"],
// Import rules
"import/order": [
"error",
{
"groups": ["builtin", "external", "internal", "parent", "sibling", "index"],
"newlines-between": "always",
"alphabetize": {
"order": "asc",
"caseInsensitive": true
}
}
],
"import/no-duplicates": "error",
"import/no-unresolved": "off",
// Security rules
"security/detect-object-injection": "warn",
"security/detect-non-literal-regexp": "warn",
"security/detect-unsafe-regex": "error",
"security/detect-buffer-noassert": "error",
"security/detect-child-process": "warn",
"security/detect-disable-mustache-escape": "error",
"security/detect-eval-with-expression": "error",
"security/detect-no-csrf-before-method-override": "error",
"security/detect-non-literal-fs-filename": "warn",
"security/detect-non-literal-require": "warn",
"security/detect-possible-timing-attacks": "warn",
"security/detect-pseudoRandomBytes": "error"
},
"overrides": [
{
"files": ["*.test.ts", "*.spec.ts"],
"rules": {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"security/detect-object-injection": "off"
}
},
{
"files": ["*.config.js", "*.config.ts", "jest.config.js"],
"rules": {
"@typescript-eslint/no-var-requires": "off",
"import/no-commonjs": "off"
}
}
],
"ignorePatterns": ["dist/", "build/", "coverage/", "node_modules/", "*.js"]
}