|
|
- {
- "env": {
- "es6": true
- },
- "extends": [
- "eslint:recommended",
- "plugin:@typescript-eslint/strict-type-checked",
- "plugin:import/recommended",
- "plugin:import/typescript",
- "prettier"
- ],
- "parser": "@typescript-eslint/parser",
- "parserOptions": {
- "ecmaVersion": 2022,
- "sourceType": "module",
- "ecmaFeatures": {
- "impliedStrict": true
- },
- "project": true
- },
- "plugins": ["anti-trojan-source", "import", "@typescript-eslint"],
- "reportUnusedDisableDirectives": true,
- "root": true,
- "rules": {
- "anti-trojan-source/no-bidi": "error",
- "no-constant-condition": ["warn", { "checkLoops": false }],
- "no-constant-binary-expression": "error",
- "no-caller": "error",
- "no-debugger": "off",
- "no-else-return": "warn",
- "no-empty": ["warn", { "allowEmptyCatch": true }],
- "no-eval": "error",
- "no-ex-assign": "warn",
- "no-extend-native": "error",
- "no-extra-bind": "error",
- "no-extra-semi": "off",
- "no-floating-decimal": "error",
- "no-implicit-coercion": "error",
- "no-implied-eval": "error",
- "no-inner-declarations": "off",
- "no-lone-blocks": "error",
- "no-lonely-if": "error",
- "no-loop-func": "error",
- "no-mixed-spaces-and-tabs": "off",
- "no-restricted-globals": ["error", "process"],
- "no-restricted-imports": [
- "error",
- {
- "paths": [
- // Disallow node imports below
- "assert",
- "buffer",
- "child_process",
- "cluster",
- "crypto",
- "dgram",
- "dns",
- "domain",
- "events",
- "freelist",
- "fs",
- "http",
- "https",
- "module",
- "net",
- "os",
- "path",
- "process",
- "punycode",
- "querystring",
- "readline",
- "repl",
- "smalloc",
- "stream",
- "string_decoder",
- "sys",
- "timers",
- "tls",
- "tracing",
- "tty",
- "url",
- "util",
- "vm",
- "zlib"
- ],
- "patterns": [
- {
- "group": ["**/env/**/*"],
- "message": "Use @env/ instead"
- },
- {
- "group": ["src/*"],
- "message": "Use relative paths instead"
- },
- {
- "group": ["react-dom"],
- "importNames": ["Container"],
- "message": "Use our Container instead"
- }
- ]
- }
- ],
- "no-return-assign": "error",
- "no-return-await": "warn",
- "no-self-compare": "error",
- "no-sequences": "error",
- "no-template-curly-in-string": "warn",
- "no-throw-literal": "error",
- "no-unmodified-loop-condition": "warn",
- "no-unneeded-ternary": "error",
- "no-unused-expressions": "error",
- "no-use-before-define": "off",
- "no-useless-call": "error",
- "no-useless-catch": "error",
- "no-useless-computed-key": "error",
- "no-useless-concat": "error",
- "no-useless-rename": "error",
- "no-useless-return": "error",
- "no-var": "error",
- "no-with": "error",
- "object-shorthand": ["error", "never"],
- "one-var": ["error", "never"],
- "prefer-arrow-callback": "error",
- "prefer-const": [
- "error",
- {
- "destructuring": "all",
- "ignoreReadBeforeAssign": true
- }
- ],
- "prefer-numeric-literals": "error",
- "prefer-object-spread": "error",
- "prefer-promise-reject-errors": ["error", { "allowEmptyReject": true }],
- "prefer-rest-params": "error",
- "prefer-spread": "error",
- "prefer-template": "error",
- "require-atomic-updates": "off",
- "sort-imports": [
- "error",
- {
- "ignoreCase": true,
- "ignoreDeclarationSort": true,
- "ignoreMemberSort": false,
- "memberSyntaxSortOrder": ["none", "all", "multiple", "single"]
- }
- ],
- "yoda": "error",
- "import/consistent-type-specifier-style": ["error", "prefer-top-level"],
- "import/extensions": "off",
- "import/newline-after-import": "warn",
- "import/no-absolute-path": "error",
- "import/no-cycle": "off",
- "import/no-default-export": "error",
- "import/no-duplicates": ["error", { "prefer-inline": false }],
- "import/no-dynamic-require": "error",
- "import/no-self-import": "error",
- "import/no-unresolved": ["warn", { "ignore": ["vscode", "@env"] }],
- "import/no-useless-path-segments": "error",
- "import/order": [
- "warn",
- {
- "alphabetize": {
- "order": "asc",
- "orderImportKind": "asc",
- "caseInsensitive": true
- },
- "groups": ["builtin", "external", "internal", "parent", "sibling", "index"],
- "newlines-between": "never"
- }
- ],
- "@typescript-eslint/ban-types": [
- "error",
- {
- "extendDefaults": false,
- "types": {
- "String": {
- "message": "Use string instead",
- "fixWith": "string"
- },
- "Boolean": {
- "message": "Use boolean instead",
- "fixWith": "boolean"
- },
- "Number": {
- "message": "Use number instead",
- "fixWith": "number"
- },
- "Symbol": {
- "message": "Use symbol instead",
- "fixWith": "symbol"
- },
- // "Function": {
- // "message": "The `Function` type accepts any function-like value.\nIt provides no type safety when calling the function, which can be a common source of bugs.\nIt also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.\nIf you are expecting the function to accept certain arguments, you should explicitly define the function shape."
- // },
- "Object": {
- "message": "The `Object` type actually means \"any non-nullish value\", so it is marginally better than `unknown`.\n- If you want a type meaning \"any object\", you probably want `Record<string, unknown>` instead.\n- If you want a type meaning \"any value\", you probably want `unknown` instead."
- },
- "{}": {
- "message": "`{}` actually means \"any non-nullish value\".\n- If you want a type meaning \"any object\", you probably want `object` or `Record<string, unknown>` instead.\n- If you want a type meaning \"any value\", you probably want `unknown` instead.",
- "fixWith": "object"
- }
- // "object": {
- // "message": "The `object` type is currently hard to use ([see this issue](https://github.com/microsoft/TypeScript/issues/21732)).\nConsider using `Record<string, unknown>` instead, as it allows you to more easily inspect and use the keys."
- // }
- }
- }
- ],
- "@typescript-eslint/consistent-type-assertions": [
- "error",
- {
- "assertionStyle": "as",
- "objectLiteralTypeAssertions": "allow-as-parameter"
- }
- ],
- "@typescript-eslint/consistent-type-imports": ["error", { "disallowTypeAnnotations": false }],
- "@typescript-eslint/naming-convention": [
- "error",
- {
- "selector": "variable",
- "format": ["camelCase", "PascalCase"],
- "leadingUnderscore": "allow",
- "filter": {
- "regex": "^_$",
- "match": false
- }
- },
- {
- "selector": "variableLike",
- "format": ["camelCase"],
- "leadingUnderscore": "allow",
- "filter": {
- "regex": "^_$",
- "match": false
- }
- },
- {
- "selector": "memberLike",
- "modifiers": ["private"],
- "format": ["camelCase"],
- "leadingUnderscore": "allow"
- },
- {
- "selector": "memberLike",
- "modifiers": ["private", "readonly"],
- "format": ["camelCase", "PascalCase"],
- "leadingUnderscore": "allow"
- },
- {
- "selector": "memberLike",
- "modifiers": ["static", "readonly"],
- "format": ["camelCase", "PascalCase"]
- },
- {
- "selector": "interface",
- "format": ["PascalCase"],
- "custom": {
- "regex": "^I[A-Z]",
- "match": false
- }
- }
- ],
- "@typescript-eslint/no-confusing-void-expression": [
- "error",
- { "ignoreArrowShorthand": true, "ignoreVoidOperator": true }
- ],
- "@typescript-eslint/no-explicit-any": "off",
- "@typescript-eslint/no-inferrable-types": ["warn", { "ignoreParameters": true, "ignoreProperties": true }],
- "@typescript-eslint/no-invalid-void-type": "off", // Seems to error on `void` return types
- "@typescript-eslint/no-misused-promises": ["error", { "checksVoidReturn": false }],
- "@typescript-eslint/no-non-null-assertion": "off",
- "@typescript-eslint/no-redundant-type-constituents": "off",
- "@typescript-eslint/no-unnecessary-condition": "off",
- "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
- "@typescript-eslint/no-unsafe-argument": "off",
- "@typescript-eslint/no-unsafe-assignment": "off",
- "@typescript-eslint/no-unsafe-call": "off",
- "@typescript-eslint/no-unsafe-enum-comparison": "off",
- "@typescript-eslint/no-unsafe-member-access": "off",
- "@typescript-eslint/no-unused-expressions": ["warn", { "allowShortCircuit": true }],
- "@typescript-eslint/no-unused-vars": [
- "warn",
- {
- "args": "after-used",
- "argsIgnorePattern": "^_",
- "ignoreRestSiblings": true,
- "varsIgnorePattern": "^_$"
- }
- ],
- "@typescript-eslint/no-use-before-define": ["error", { "functions": false, "classes": false }],
- "@typescript-eslint/prefer-for-of": "warn",
- "@typescript-eslint/prefer-includes": "warn",
- "@typescript-eslint/prefer-literal-enum-member": ["warn", { "allowBitwiseExpressions": true }],
- "@typescript-eslint/prefer-optional-chain": "warn",
- "@typescript-eslint/prefer-reduce-type-parameter": "warn",
- "@typescript-eslint/restrict-template-expressions": [
- "error",
- { "allowAny": true, "allowBoolean": true, "allowNumber": true, "allowNullish": true }
- ],
- "@typescript-eslint/unbound-method": "off", // Too many bugs right now: https://github.com/typescript-eslint/typescript-eslint/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+unbound-method
- "@typescript-eslint/unified-signatures": ["error", { "ignoreDifferentlyNamedParameters": true }]
- },
- "settings": {
- "import/parsers": {
- "@typescript-eslint/parser": [".ts", ".tsx"]
- },
- "import/resolver": {
- "typescript": {
- "alwaysTryTypes": true // always try to resolve types under `<root>@types` directory even it doesn't contain any source code, like `@types/unist`
- }
- }
- },
- "ignorePatterns": ["dist/*", "out/*", "**/@types/*", "emojis.json", "tsconfig*.tsbuildinfo", "webpack.config*.js"],
- "overrides": [
- {
- "files": ["src/env/node/**/*"],
- "rules": {
- "no-restricted-imports": [
- "error",
- {
- "patterns": [
- {
- "group": ["src/*"],
- "message": "Use relative paths instead"
- },
- {
- "group": ["react-dom"],
- "importNames": ["Container"],
- "message": "Use our Container instead"
- }
- ]
- }
- ]
- }
- }
- ]
- }
|