{
  "root": true,
  "ignorePatterns": [
    "projects/**/*"
  ],
  "overrides": [
    {
      "files": [
        "*.ts"
      ],
      "parser": "@typescript-eslint/parser",
      "parserOptions": {
        "ecmaVersion": 2020,
        "sourceType": "module",
        "project": [
          "tsconfig.json",
          "e2e/tsconfig.e2e.json"
        ],
        "createDefaultProgram": true
      },
      "extends": [
        "plugin:@typescript-eslint/recommended",
        "plugin:prettier/recommended",
        "plugin:@angular-eslint/recommended",
        "plugin:@angular-eslint/template/process-inline-templates",
        "plugin:jsdoc/recommended",
        "plugin:unicorn/recommended"
      ],
      "plugins": [
        "eslint-plugin-unicorn",
        "eslint-plugin-jsdoc",
        "prettier"
      ],
      "settings": {
        "jsdoc": {
          "mode": "typescript"
        }
      },
      "rules": {
        "unicorn/filename-case": "error",
        "unicorn/no-array-callback-reference": "off",
        "unicorn/prefer-object-from-entries": "off",
        "unicorn/prevent-abbreviations": [
          "warn",
          {
            "replacements": {
              "ref": false,
              "i": false
            }
          }
        ],
        "unicorn/no-nested-ternary": "off",
        "unicorn/better-regex": "off",

        "jsdoc/no-types": "error",
        "jsdoc/require-param": "off",
        "jsdoc/require-param-description": "error",
        "jsdoc/check-param-names": "error",
        "jsdoc/require-returns": "off",
        "jsdoc/require-param-type": "off",
        "jsdoc/require-returns-type": "off",

        "@typescript-eslint/explicit-module-boundary-types": "off",
        "@typescript-eslint/no-unused-vars": [
          "error",
          {
            "args": "after-used",
            "argsIgnorePattern": "^_"
          }
        ],
        "@typescript-eslint/lines-between-class-members": [
          "error",
          "always"
        ],
        "@typescript-eslint/no-explicit-any": "error",
        "@angular-eslint/use-lifecycle-interface": "error",

        "prettier/prettier": [
          "error",
          {
            "tabWidth": 2,
            "useTabs": false,
            "semi": true,
            "singleQuote": true,
            "quoteProps": "consistent",
            "trailingComma": "all",
            "bracketSpacing": false,
            "arrowParens": "avoid",
            "endOfLine": "lf"
          }
        ]
      }
    },
    {
      "files": [
        "*.html"
      ],
      "extends": [
        "plugin:prettier/recommended",
        "plugin:@angular-eslint/template/recommended"
      ],
      "rules": {
        "prettier/prettier": [
          "error",
          {
            "parser": "angular",
            "tabWidth": 2,
            "useTabs": false,
            "semi": true,
            "singleQuote": true,
            "quoteProps": "consistent",
            "trailingComma": "all",
            "bracketSpacing": false,
            "arrowParens": "avoid",
            "endOfLine": "lf"
          }
        ]
      }
    }
  ]
}
