{ "root": true, "env": { "es2020": true, "node": true, "mocha": true }, "parserOptions": { "ecmaVersion": 2020, "sourceType": "module" }, "extends": [ "eslint:recommended", "plugin:import/recommended", "plugin:jsdoc/recommended", "plugin:prettier/recommended" ], "plugins": ["import", "jsdoc"], "settings": { "jsdoc": { "mode": "typescript" }, "import/resolver": { "typescript": { "project": "./tsconfig.json" } } }, "rules": { "space-before-blocks": ["error", "always"], "curly": ["error", "all"], "brace-style": "error", "eqeqeq": ["error", "always"], "no-else-return": "error", "no-eq-null": "error", "no-extra-bind": "error", "no-lone-blocks": "error", "no-multi-spaces": "error", "no-empty": "error", "no-return-assign": ["error", "always"], "no-useless-catch": "error", "no-useless-return": "error", "no-multiple-empty-lines": [ "error", { "max": 2, "maxEOF": 1 } ], "block-spacing": "error", // "capitalized-comments": [ // "error", // "always", // { // "ignoreConsecutiveComments": true, // "ignorePattern": "pragma|ignored" // } // ], "eol-last": ["error", "always"], "consistent-this": ["error", "self"], "func-call-spacing": ["error", "never"], "keyword-spacing": ["error"], "id-blacklist": [ "error", "any", "Number", "number", "String", "string", "Boolean", "boolean", "Undefined", "undefined", "Symbol", "symbol" ], "linebreak-style": ["error", "unix"], "max-len": [ "warn", { "code": 100, "ignoreUrls": true } ], "no-lonely-if": "error", "no-trailing-spaces": "error", "no-whitespace-before-property": "error", "space-in-parens": ["error", "never"], "space-infix-ops": "error", "space-unary-ops": "error", "spaced-comment": ["error", "always"], "switch-colon-spacing": "error", "arrow-body-style": ["error", "as-needed"], "arrow-parens": ["error", "always"], "arrow-spacing": "error", "no-duplicate-imports": "error", "no-var": "error", "prefer-const": "error", "sort-imports": [ "warn", { "ignoreCase": false, "ignoreDeclarationSort": true, "ignoreMemberSort": false, "memberSyntaxSortOrder": ["none", "all", "multiple", "single"], "allowSeparatedGroups": true } ], "import/no-unresolved": "error", "import/order": [ "error", { "groups": [ "builtin", // Built-in imports (come from NodeJS native) go first "external", // <- External imports "internal", // <- Absolute imports ["sibling", "parent"], // <- Relative imports, the sibling and parent types they can be mingled together "index", // <- Index imports "unknown" // <- Unknown ], "newlines-between": "always", "alphabetize": { /* Sort in ascending order. Options: ["ignore", "asc", "desc"] */ "order": "asc", /* Ignore case. Options: [true, false] */ "caseInsensitive": true } } ], "object-curly-spacing": ["error", "always"], "lines-between-class-members": [ "error", "always", { "exceptAfterSingleLine": true } ], "quotes": [ "error", "single", { "avoidEscape": true, "allowTemplateLiterals": false } ] }, "overrides": [ { "files": ["**/*.ts"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 2020, "sourceType": "module", "project": "./tsconfig.json" }, "extends": [ "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/recommended-requiring-type-checking", "plugin:import/typescript" ], "plugins": ["@typescript-eslint"], "rules": { "@typescript-eslint/array-type": "off", "semi": "off", "@typescript-eslint/semi": ["error", "always"], "@typescript-eslint/no-empty-function": "warn", "@typescript-eslint/member-ordering": "error", "@typescript-eslint/await-thenable": "error", "@typescript-eslint/no-floating-promises": "error", "@typescript-eslint/promise-function-async": "error", "@typescript-eslint/no-misused-promises": "error", "no-shadow": "off", // This one is generating false positive no-shadow errors on exported/const enums "@typescript-eslint/no-shadow": "error" } }, { "files": ["**/*.js"], "extends": "plugin:node/recommended", "rules": { "node/shebang": "off" } } ] }