{
  "root": true,
  "ignorePatterns": ["**/*"],
  "plugins": ["@nrwl/nx", "import", "jsdoc", "eslint-plugin-tsdoc", "markdown"],
  "extends": ["plugin:prettier/recommended"],
  "overrides": [
    {
      "files": ["**/*.md"],
      "processor": "markdown/markdown"
    },
    {
      "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
      "rules": {
        "@nrwl/nx/enforce-module-boundaries": [
          "error",
          {
            "enforceBuildableLibDependency": true,
            "allow": [],
            "depConstraints": [
              {
                "sourceTag": "scope:shared",
                "onlyDependOnLibsWithTags": ["scope:shared"]
              },
              {
                "sourceTag": "scope:icons",
                "onlyDependOnLibsWithTags": ["scope:shared", "scope:icons"]
              },
              {
                "sourceTag": "scope:ui",
                "onlyDependOnLibsWithTags": ["scope:shared", "scope:icons", "scope:ui"]
              },
              {
                "sourceTag": "scope:platform",
                "onlyDependOnLibsWithTags": ["scope:shared", "scope:icons", "scope:ui", "scope:platform"]
              },
              {
                "sourceTag": "scope:site",
                "onlyDependOnLibsWithTags": ["scope:shared", "scope:icons", "scope:ui", "scope:site"]
              }
            ]
          }
        ],
        "import/order": [
          "error",
          {
            "groups": ["type", "builtin", "external", "internal", ["parent", "sibling", "index"]],
            "pathGroups": [
              {
                "pattern": "@react-devui/**",
                "group": "internal",
                "position": "after"
              },
              {
                "pattern": "*.scss",
                "group": "index",
                "patternOptions": { "matchBase": true },
                "position": "after"
              }
            ],
            "pathGroupsExcludedImportTypes": ["type", "builtin"],
            "newlines-between": "always",
            "alphabetize": {
              "order": "asc",
              "caseInsensitive": false
            },
            "warnOnUnassignedImports": true
          }
        ]
      }
    },
    {
      "files": ["*.ts", "*.tsx"],
      "extends": ["plugin:@nrwl/nx/typescript"],
      "rules": {
        "tsdoc/syntax": "warn",
        "no-unreachable": "error",
        "@typescript-eslint/array-type": "error",
        "@typescript-eslint/consistent-type-definitions": ["error", "interface"],
        "@typescript-eslint/consistent-type-imports": "error",
        "@typescript-eslint/method-signature-style": "error",
        "@typescript-eslint/no-confusing-non-null-assertion": "error",
        "@typescript-eslint/no-implicit-any-catch": "error",
        "@typescript-eslint/no-inferrable-types": [
          "error",
          {
            "ignoreParameters": true,
            "ignoreProperties": true
          }
        ],
        "no-unused-vars": "off",
        "@typescript-eslint/no-unused-vars": [
          "error",
          {
            "ignoreRestSiblings": false
          }
        ],
        "no-unused-expressions": "off",
        "@typescript-eslint/no-unused-expressions": ["error"]
      }
    },
    {
      "files": ["*.js", "*.jsx"],
      "extends": ["plugin:@nrwl/nx/javascript", "plugin:jsdoc/recommended"],
      "rules": {
        "jsdoc/require-jsdoc": "off"
      }
    },
    {
      "files": ["*.tsx", "*.jsx"],
      "rules": {}
    },
    {
      "files": ["**/*.md/*.ts", "**/*.md/*.tsx"],
      "rules": {
        "no-unused-vars": "off",
        "@typescript-eslint/no-unused-vars": "off",
        "@typescript-eslint/no-explicit-any": "off"
      }
    }
  ]
}