{
  "env": {
    "browser": true,
    "node": true,
    "es6": true,
    "es2017": true
  },
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/eslint-recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:@typescript-eslint/recommended-requiring-type-checking"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": "./tsconfig.json"
  },
  "plugins": ["@typescript-eslint"],
  "rules": {
    "eol-last": ["error", "never"],
    "semi": ["off", "never"],
    "brace-style": "off",
    "indent": "off",
    "space-before-function-paren": ["off", "never"],
    "@typescript-eslint/semi": ["error", "never"],
    "@typescript-eslint/brace-style": ["error"],
    "@typescript-eslint/indent": ["error", 2],
    "@typescript-eslint/space-before-function-paren": ["error", "never"],
    "@typescript-eslint/no-var-requires": ["off"],
    "@typescript-eslint/no-empty-function": ["error", {
      "allow": [
        "constructors"
      ]
    }],
    "@typescript-eslint/no-explicit-any": ["error"],
    "@typescript-eslint/interface-name-prefix": ["off"],
    "@typescript-eslint/member-delimiter-style": ["error", {
      "multiline": {
        "delimiter": "none"
      },
      "singleline": {
        "delimiter": "semi",
        "requireLast": false
      }
    }],
    "@typescript-eslint/explicit-function-return-type": "off",
    "@typescript-eslint/no-use-before-define": ["error", {
      "functions": false,
      "classes": false
    }],
    "prefer-arrow-callback": ["error", {
      "allowUnboundThis": true
    }],
    "no-multi-spaces": ["error", {
      "ignoreEOLComments": true
    }],
    "block-spacing": "error",
    "no-trailing-spaces": "error",
    "no-whitespace-before-property": "error",
    "space-before-blocks": "error",
    "spaced-comment": ["error", "always", {
      "block": {
        "balanced": true,
        "exceptions": ["*"]
      }
    }],
    "arrow-spacing": "error"
  }
}