{
    "env": {
        "browser": true,
        "node": true
    },
    "parserOptions": {
        "ecmaVersion": 2018,
        "sourceType": "module",
        "ecmaFeatures": {
            "impliedStrict": true
        }
    },
    "rules": {
        "indent": "off",
        "arrow-parens": [
            "off",
            "as-needed"
        ],
        "brace-style": "off",
        "comma-spacing": "off",
        "space-infix-ops": "error",
        "comma-dangle": "off",
        "eqeqeq": [
            "error",
            "smart"
        ],
        "import/order": "off",
        "no-eval": "warn",
        "no-new-wrappers": "warn",
        "no-trailing-spaces": "error",
        "no-unsafe-finally": "warn",
        "no-var": "error",
        "spaced-comment": "error",
        "semi": "warn",
        "no-restricted-syntax": [
            "error",
            {
                "selector": "ExportDefaultDeclaration",
                "message": "Default exports are not allowed"
            }
        ],
        "no-throw-literal": "error",
        "key-spacing": "error",
        "object-curly-spacing": ["error", "always"],
        "array-bracket-spacing": "error",
        "space-in-parens": "error",
        "computed-property-spacing": "error",
        "prefer-const": ["error", {
            "destructuring": "all",
            "ignoreReadBeforeAssign": false
        }],
        "space-before-function-paren": "off",
        "func-call-spacing": "off",
        "no-multi-spaces": "error",
        "block-spacing": "error",
        "keyword-spacing": "off",
        "space-before-blocks": "error",
        "semi-spacing": "error"
    },
    "overrides": [
        {
            "files": ["**/*.ts", "**/*.tsx"],
            "parser": "@typescript-eslint/parser",
            "parserOptions": {
                "project": ["tsconfig.json", "tsconfig.commonjs.json"],
                "sourceType": "module"
            },
            "plugins": [
                "@typescript-eslint"
            ],
            "rules": {
                "@typescript-eslint/ban-types": "off",
                "@typescript-eslint/class-name-casing": "off",
                "@typescript-eslint/indent": [
                    "error",
                    4
                ],
                "@typescript-eslint/member-delimiter-style": [
                    "off",
                    {
                        "multiline": {
                            "delimiter": "none",
                            "requireLast": true
                        },
                        "singleline": {
                            "delimiter": "semi",
                            "requireLast": false
                        }
                    }
                ],
                "@typescript-eslint/prefer-namespace-keyword": "warn",
                "@typescript-eslint/quotes": [
                    "error",
                    "single",
                    {
                        "avoidEscape": true,
                        "allowTemplateLiterals": true
                    }
                ],
                "@typescript-eslint/semi": [
                    "off",
                    null
                ],
                "@typescript-eslint/type-annotation-spacing": "error",
                "@typescript-eslint/brace-style": [
                    "error",
                    "1tbs", { "allowSingleLine": true }
                ],
                "@typescript-eslint/comma-spacing": "error",
                "@typescript-eslint/space-before-function-paren": ["error", {
                    "anonymous": "always",
                    "named": "never",
                    "asyncArrow": "always"
                }],
                "@typescript-eslint/func-call-spacing": ["error"],
                "@typescript-eslint/keyword-spacing": ["error"]
            }
        }
    ]
}