{
    "env": {
        "node": true,
        "mocha": true,
        "es6": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:import/recommended",
        "plugin:import/typescript",
        "plugin:@typescript-eslint/recommended"
    ],
    "parser": "@typescript-eslint/parser",
    "plugins": [
        "@typescript-eslint",
        "only-warn",
        "import"
    ],
    "ignorePatterns": [
        "*.js",
        "*.d.ts"
    ],
    "rules": {
        "@typescript-eslint/no-empty-interface": "off",
        "@typescript-eslint/no-inferrable-types": "off",
        "@typescript-eslint/no-explicit-any": "off",
        "@typescript-eslint/member-delimiter-style": [
            "warn",
            {
                "multiline": {
                    "delimiter": "comma",
                    "requireLast": false
                },
                "singleline": {
                    "delimiter": "comma",
                    "requireLast": false
                },
                "multilineDetection": "brackets",
                "overrides": {
                    "interface": {
                        "multiline": {
                            "delimiter": "semi",
                            "requireLast": true
                        },
                        "singleline": {
                            "delimiter": "semi",
                            "requireLast": false
                        }
                    }
                }
            }
        ],
        "@typescript-eslint/explicit-module-boundary-types": [
            "warn",
            {
                "allowArgumentsExplicitlyTypedAsAny": true
            }
        ],
        "@typescript-eslint/semi": "warn",
        "import/first": "warn",
        "import/no-duplicates": "warn",
        "import/no-unresolved": "off", // The src directory is not used for compiled files
        "import/no-self-import": "warn",
        "import/extensions": [ "warn", "always" ],
        "import/order": [ "warn", { "newlines-between": "ignore", "alphabetize": { "order": "asc", "caseInsensitive": true } } ],
        "semi": "off", // Using @typescript-eslint/semi instead
        "no-else-return": "warn",
        "no-trailing-spaces": "warn",
        "eqeqeq": "warn",
        "template-curly-spacing": "warn",
        "no-template-curly-in-string": "warn",
        "object-curly-spacing": [
            "warn",
            "always"
        ],
        "array-bracket-spacing": [
            "warn",
            "always"
        ],
        "linebreak-style": [
            "warn",
            "unix"
        ],
        "quotes": [
            "warn",
            "single"
        ],
        "eol-last": [
            "warn",
            "always"
        ],
        "indent": [
            "warn",
            4,
            {
                "SwitchCase": 1
            }
        ],
        "no-empty": [
            "warn",
            {
                "allowEmptyCatch": true
            }
        ],
        "no-multiple-empty-lines": [
            "warn",
            {
                "max": 999,
                "maxEOF": 0
            }
        ]
    }
}
