{
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended"
  ],
  "plugins": [
    "@typescript-eslint"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": 2018,
    "sourceType": "module"
  },
  "env": {
    "browser": true
  },
  "ignorePatterns": [
    "*.esm.js"
  ],
  "rules": {
    "semi": [
      "error",
      "always",
      {
        "omitLastInOneLineBlock": true
      }
    ],
    "space-in-parens": [
      "error",
      "always"
    ],
    "array-bracket-spacing": [
      "error",
      "always"
    ],
    "object-curly-spacing": [
      "error",
      "always"
    ],
    "computed-property-spacing": [
      "error",
      "always"
    ],
    "camelcase": "error",
    "comma-dangle": [
      "error",
      {
        "arrays": "always-multiline",
        "objects": "always-multiline",
        "imports": "always-multiline",
        "exports": "always-multiline",
        "functions": "never"
      }
    ],
    "comma-spacing": [
      "error",
      {
        "before": false,
        "after": true
      }
    ],
    "eqeqeq": "error",
    "indent": [
      "error",
      2,
      {
        "SwitchCase": 1,
        "VariableDeclarator": "first"
      }
    ],
    "no-console": [
      "error",
      {
        "allow": [
          "error"
        ]
      }
    ],
    "no-empty-function": [
      "error",
      {
        "allow": [
          "methods"
        ]
      }
    ],
    "@typescript-eslint/no-empty-function": [
      "error",
      {
        "allow": [
          "methods"
        ]
      }
    ],
    "@typescript-eslint/no-unused-vars": "error",
    "@typescript-eslint/no-explicit-any": "off",
    "@typescript-eslint/no-empty-interface": "off",
    "@typescript-eslint/explicit-module-boundary-types": [
      "error",
      {
        "allowArgumentsExplicitlyTypedAsAny": true
      }
    ],
    "@typescript-eslint/ban-types": [
      "error",
      {
        "types": {
          "object": false
        }
      }
    ]
  }
}
