{
  "root": true,
  "ignorePatterns": ["**/*"],
  "overrides": [
    {
      "files": ["*.ts"],
      "extends": [
        "eslint:recommended",
        "plugin:@angular-eslint/recommended",
        "plugin:@angular-eslint/template/process-inline-templates",
        "plugin:prettier/recommended",
        "plugin:rxjs/recommended"
      ],
      "parserOptions": {
        "project": "./tsconfig.json"
      },
      "rules": {
        "rxjs/no-ignored-subscription": "warn",
        "@angular-eslint/no-conflicting-lifecycle": "error",
        "@angular-eslint/no-host-metadata-property": "error",
        "@angular-eslint/no-input-rename": "error",
        "@angular-eslint/no-inputs-metadata-property": "error",
        "@angular-eslint/no-output-native": "error",
        "@angular-eslint/no-output-on-prefix": "error",
        "@angular-eslint/no-output-rename": "error",
        "@angular-eslint/no-outputs-metadata-property": "error",
        "@angular-eslint/use-lifecycle-interface": "error",
        "@angular-eslint/use-pipe-transform-interface": "error",
        "@typescript-eslint/consistent-type-definitions": "error",
        "@typescript-eslint/dot-notation": "off",
        "@typescript-eslint/no-unsafe-call": "off",
        "@typescript-eslint/no-unsafe-assignment": "off",
        "@typescript-eslint/no-unsafe-return": "off",
        "@typescript-eslint/no-unsafe-member-access": "off",
        "@typescript-eslint/no-misused-promises": "off",
        "@typescript-eslint/no-explicit-any": "off",
        "@typescript-eslint/indent": "off",
        "@typescript-eslint/lines-between-class-members": "off",
        "@typescript-eslint/ban-types": "off",
        "@typescript-eslint/no-unsafe-argument": "off",
        "@typescript-eslint/explicit-member-accessibility": [
          "error",
          {
            "accessibility": "no-public"
          }
        ],
        "@typescript-eslint/naming-convention": [
          "error",
          {
            "selector": "memberLike",
            "modifiers": ["readonly"],
            "format": ["UPPER_CASE", "camelCase"]
          },
          {
            "selector": "enumMember",
            "format": ["UPPER_CASE"]
          },
          {
            "selector": "memberLike",
            "modifiers": ["private"],
            "format": ["camelCase"],
            "leadingUnderscore": "require"
          },
          {
            "selector": "memberLike",
            "modifiers": ["protected"],
            "format": ["camelCase"],
            "leadingUnderscore": "allow"
          },
          {
            "selector": "memberLike",
            "modifiers": ["private", "readonly"],
            "format": ["UPPER_CASE", "camelCase"],
            "leadingUnderscore": "require"
          }
        ],
        "@typescript-eslint/no-empty-function": "off",
        "@typescript-eslint/no-empty-interface": "error",
        "@typescript-eslint/no-inferrable-types": [
          "error",
          {
            "ignoreParameters": true
          }
        ],
        "@typescript-eslint/no-misused-new": "error",
        "@typescript-eslint/no-non-null-assertion": "error",
        "@typescript-eslint/no-shadow": [
          "error",
          {
            "hoist": "all"
          }
        ],
        "@typescript-eslint/no-unused-expressions": "error",
        "@typescript-eslint/prefer-function-type": "error",
        "@typescript-eslint/unified-signatures": "error",
        "@typescript-eslint/explicit-module-boundary-types": "off",
        "@typescript-eslint/no-floating-promises": "off",
        "@typescript-eslint/unbound-method": "off",
        "@typescript-eslint/restrict-template-expressions": "off",
        "@typescript-eslint/member-ordering": [
          "warn",
          {
            "default": [
              "signature",
              "call-signature",
              "#private-static-field",
              "private-static-field",
              "protected-static-field",
              "public-static-field",
              "#private-instance-field",
              "private-instance-field",
              "protected-instance-field",
              "public-instance-field",
              "private-decorated-field",
              "protected-decorated-field",
              "public-decorated-field",
              "protected-abstract-field",
              "public-abstract-field",
              "#private-field",
              "private-field",
              "protected-field",
              "public-field",
              "static-field",
              "instance-field",
              "abstract-field",
              "decorated-field",
              "field",
              "static-initialization",
              "public-constructor",
              "protected-constructor",
              "private-constructor",
              "constructor",
              "public-static-get",
              "protected-static-get",
              "private-static-get",
              "#private-static-get",
              "public-decorated-get",
              "protected-decorated-get",
              "private-decorated-get",
              "public-instance-get",
              "protected-instance-get",
              "private-instance-get",
              "#private-instance-get",
              "public-abstract-get",
              "protected-abstract-get",
              "public-get",
              "protected-get",
              "private-get",
              "#private-get",
              "static-get",
              "instance-get",
              "abstract-get",
              "decorated-get",
              "get",
              "public-static-set",
              "protected-static-set",
              "private-static-set",
              "#private-static-set",
              "public-decorated-set",
              "protected-decorated-set",
              "private-decorated-set",
              "public-instance-set",
              "protected-instance-set",
              "private-instance-set",
              "#private-instance-set",
              "public-abstract-set",
              "protected-abstract-set",
              "public-set",
              "protected-set",
              "private-set",
              "#private-set",
              "static-set",
              "instance-set",
              "abstract-set",
              "decorated-set",
              "set",
              "public-static-method",
              "protected-static-method",
              "private-static-method",
              "#private-static-method",
              "public-decorated-method",
              "protected-decorated-method",
              "private-decorated-method",
              "public-instance-method",
              "protected-instance-method",
              "private-instance-method",
              "#private-instance-method",
              "public-abstract-method",
              "protected-abstract-method",
              "public-method",
              "protected-method",
              "private-method",
              "#private-method",
              "static-method",
              "instance-method",
              "abstract-method",
              "decorated-method",
              "method"
            ]
          }
        ],
        "arrow-body-style": "error",
        "arrow-parens": ["error", "as-needed"],
        "constructor-super": "error",
        "eqeqeq": ["error", "smart"],
        "guard-for-in": "error",
        "id-blacklist": "off",
        "id-match": "off",
        "no-bitwise": "error",
        "no-caller": "error",
        "no-console": "off",
        "no-debugger": "error",
        "no-empty": "off",
        "no-eval": "error",
        "no-fallthrough": "error",
        "no-new-wrappers": "error",
        "no-restricted-imports": ["error", "rxjs/Rx"],
        "no-throw-literal": "error",
        "no-undef-init": "error",
        "no-underscore-dangle": "off",
        "no-var": "error",
        "no-else-return": "error",
        "prefer-const": "error",
        "radix": "error",
        "curly": "error",
        "class-methods-use-this": "off",
        "quotes": ["error", "single"],
        "comma-dangle": [
          "error",
          {
            "arrays": "always-multiline",
            "objects": "always-multiline",
            "imports": "always-multiline",
            "exports": "always-multiline",
            "functions": "always-multiline"
          }
        ],
        "max-len": [
          "error",
          {
            "code": 140,
            "tabWidth": 4,
            "ignoreComments": true,
            "ignorePattern": "^import .*"
          }
        ]
      }
    },
    {
      "files": ["*.html"],
      "extends": ["plugin:@angular-eslint/template/recommended"]
    },
    {
      "files": ["*.html"],
      "excludedFiles": ["*inline-template-*.component.html"],
      "extends": ["plugin:prettier/recommended"],
      "rules": {
        "prettier/prettier": [
          "error",
          {
            "parser": "angular"
          }
        ]
      }
    }
  ]
}
