{
    "env": {
        "browser": true
    },
    "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
    "parser": "@typescript-eslint/parser",
    "plugins": ["@typescript-eslint"],
    "parserOptions": {
        "project": "./tsconfig.json"
    },
    "ignorePatterns": ["dist"],
    "rules": {
        "camelcase": [
            2,
            {
                "properties": "always"
            }
        ],
        "capitalized-comments": ["warn", "always", { "ignoreConsecutiveComments": true }],
        "class-methods-use-this": 0,
        "comma-dangle": [
            2,
            "never"
        ],
        "consistent-return": 1,
        "default-case": 1,
        "default-param-last": 1,
        "dot-notation": 0,
        "function-paren-newline": 0,
        "func-style": 0,
        "indent": 2,
        "max-len": [
            "error",
            {
                "code": 80,
                "comments": 80,
                "ignoreUrls": true,
                "ignoreComments": true
            }
        ],
        "no-dupe-class-members": 2,
        "no-inner-declarations": 2,
        "no-invalid-this": 0,
        "no-shadow": 2,
        "no-undef": 0,
        "no-underscore-dangle": 2,
        "no-unused-expressions": 0,
        "no-use-before-define": 2,
        "no-useless-constructor": 2,
        "no-useless-escape": 2,
        "no-useless-return": 2,
        "object-curly-spacing": [2, "always"],
        "object-shorthand": 2,
        "prefer-const": 1,
        "prefer-spread": 0,
        "prefer-rest-params": 0,
        "require-unicode-regexp": 2,
        "quote-props": [2, "as-needed", { "keywords": true, "unnecessary": false }],
        "semi": 2,
        "@typescript-eslint/array-type": [2, { "default": "array-simple" }],
        "@typescript-eslint/consistent-type-assertions": 2,
        "@typescript-eslint/explicit-function-return-type": [
            "error",
            {
                "allowExpressions": false,
                "allowTypedFunctionExpressions": false
            }
        ],
        "@typescript-eslint/indent": [
            "error",
            4,
            {
                "FunctionExpression": { "parameters": 1 },
                "SwitchCase": 1
            }
        ],
        "@typescript-eslint/no-empty-function": 2,
        "@typescript-eslint/no-empty-interface": 2,
        "@typescript-eslint/no-explicit-any": 2,
        "@typescript-eslint/no-floating-promises": 1,
        "@typescript-eslint/no-inferrable-types": 1,
        "@typescript-eslint/no-namespace": 2,
        "@typescript-eslint/no-this-alias": 0,
        "@typescript-eslint/no-unnecessary-type-assertion": 2,
        "@typescript-eslint/no-unsafe-argument": 2,
        "@typescript-eslint/no-unsafe-assignment": 2,
        "@typescript-eslint/no-unsafe-call": 2,
        "@typescript-eslint/no-unsafe-member-access": 2,
        "@typescript-eslint/no-unsafe-return": 2,
        "@typescript-eslint/no-unsafe-declaration-merging": 2,
        "@typescript-eslint/no-unused-vars": 2,
        "@typescript-eslint/no-use-before-define": 2,
        "@typescript-eslint/no-useless-constructor": 2,
        "@typescript-eslint/prefer-as-const": 1,
        "@typescript-eslint/prefer-includes": 2,
        "@typescript-eslint/prefer-regexp-exec": 2,
        "@typescript-eslint/prefer-string-starts-ends-with": 0,
        "@typescript-eslint/restrict-plus-operands": 1,
        "@typescript-eslint/restrict-template-expressions": 1,
        "@typescript-eslint/semi": 2,
        "@typescript-eslint/unbound-method": 0
    }
}
