{
    "extends": [
        "eslint:recommended",
        "plugin:jsdoc/recommended-typescript",
        "prettier"
    ],
    "env": {
        "node": true,
        "es6": true
    },
    "rules": {
        "eqeqeq": [2, "smart"],
        "no-caller": 2,
        "dot-notation": 2,
        "no-var": 2,
        "prefer-const": 2,
        "prefer-arrow-callback": [2, { "allowNamedFunctions": true }],
        "arrow-body-style": [2, "as-needed"],
        "object-shorthand": 2,
        "prefer-template": 2,
        "one-var": [2, "never"],
        "prefer-destructuring": [2, { "object": true }],
        "capitalized-comments": 2,
        "multiline-comment-style": [2, "starred-block"],
        "spaced-comment": 2,
        "yoda": [2, "never"],
        "curly": [2, "multi-line"],
        "no-else-return": 2,

        "jsdoc/tag-lines": [2, "any", { "startLines": 1 }],
        "jsdoc/check-tag-names": [2, { "definedTags": ["category"] }]
    },
    "overrides": [
        {
            "files": "*.ts",
            "extends": [
                "plugin:@typescript-eslint/eslint-recommended",
                "plugin:@typescript-eslint/recommended",
                "prettier"
            ],
            "parserOptions": {
                "sourceType": "module",
                "project": "./tsconfig.eslint.json"
            },
            "rules": {
                "@typescript-eslint/no-use-before-define": [
                    2,
                    { "functions": false }
                ],
                "@typescript-eslint/consistent-type-definitions": [
                    2,
                    "interface"
                ],
                "@typescript-eslint/prefer-function-type": 2,
                "@typescript-eslint/no-unnecessary-type-arguments": 2,
                "@typescript-eslint/prefer-string-starts-ends-with": 2,
                "@typescript-eslint/prefer-readonly": 2,
                "@typescript-eslint/prefer-includes": 2,
                "@typescript-eslint/switch-exhaustiveness-check": 2,

                "dot-notation": 0
            }
        }
    ]
}
