{
  "root": true,
  "plugins": [
    "@typescript-eslint"
  ],
  "extends": [
    "airbnb-base",
    "eslint:recommended",
    "plugin:@typescript-eslint/eslint-recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:prettier/recommended"
  ],
  "env": {
    "jest": true
  },
  "parser": "@typescript-eslint/parser",
  "rules": {
    "linebreak-style": [
      0,
      "error",
      "unix"
    ],
    "indent": [
      2,
      2,
      {
        "SwitchCase": 1
      }
    ],
    "no-plusplus": "off",
    "no-shadow": "off",
    "@typescript-eslint/no-shadow": [
      "error"
    ],
    "@typescript-eslint/no-explicit-any": "off",
    "class-methods-use-this": "off",
    "lines-between-class-members": "off",
    "import/prefer-default-export": "off",
    "import/extensions": [
      "error",
      "ignorePackages",
      {
        "js": "never",
        "ts": "never"
      }
    ],
    "import/no-extraneous-dependencies": [
      "warning",
      {}
    ]
  },
  "overrides": [
    {
      "files": [
        "**/*.js"
      ],
      "rules": {
        "dot-notation": "off", // Allows access to private variables in tests
        "@typescript-eslint/no-empty-function": "off", // Useful for mocking, don't usually need to do anything
        "@typescript-eslint/no-var-requires": "off"
      }
    }
  ],
  "settings": {
    "import/resolver": {
      "node": {
        "extensions": [
          ".js",
          ".ts"
        ]
      }
    }
  }
}