{
    "parser": "@babel/eslint-parser",
    "parserOptions": {
        "ecmaVersion": 2022,
        "ecmaFeatures": {
            "impliedStrict": true
        },
        "sourceType": "module",
        "allowImportExportEverywhere": true
    },
    "env": {
        "browser": true,
        "es6": true,
        "node": true
    },
    "extends": "eslint:recommended",
    "rules": {
        // enable additional rules
        "no-eval": "error",
        "no-implied-eval": "error",
        "dot-notation": "error",
        "eqeqeq": ["error", "smart"],
        "no-caller": "error",
        "no-extra-bind": "error",
        "no-unused-expressions": "error",
        "no-useless-call": "error",
        "no-useless-return": "error",
        "radix": "warn",

        // modify rules from base configurations
        "no-unused-vars": ["error", {
            "args": "none",
            "vars": "all"
        }],
        "no-empty": ["error", {
            "allowEmptyCatch": true
        }],

        // disable rules from base configurations
        "no-control-regex": "off",
        "require-atomic-updates": "off",
        "no-async-promise-executor": "off",

        // stylistic conventions
        "brace-style": ["error", "1tbs"],
        "space-before-blocks": ["error", "always"],
        "block-spacing": "error",
        "array-bracket-spacing": "error",
        "comma-spacing": "error",
        "spaced-comment": ["error", "always", { "exceptions": ["/"] } ],
        "comma-style": "error",
        "computed-property-spacing": "error",
        "no-trailing-spaces": "warn",
        "eol-last": "error",
        "func-call-spacing": "error",
        "key-spacing": ["warn", {
            "mode": "minimum"
        }],
        "indent": ["error", 4, {
            "ignoreComments": true,
            "ArrayExpression": "first",
            "SwitchCase": 1
        }],
        "linebreak-style": ["error", "unix"],
        "quotes": ["error", "double", {
            "avoidEscape": true,
            "allowTemplateLiterals": true
        }],
        "camelcase": ["error", {
            "properties": "always"
        }],
        "semi": ["error", "always"],
        "unicode-bom": "error",
        "require-jsdoc": ["error", {
            "require": {
                "FunctionDeclaration": true,
                "MethodDefinition": true,
                "ClassDeclaration": true,
                "ArrowFunctionExpression": true
            }
        }],
        "keyword-spacing": ["error", {
            "before": true,
            "after": true
        }],
        "no-multiple-empty-lines": ["warn", {
            "max": 2,
            "maxEOF": 1,
            "maxBOF": 0
        }],
        "no-whitespace-before-property": "error",
        "operator-linebreak": ["error", "after"],
        "space-in-parens": "error",
        "no-var": "error",
        "prefer-const": "error"
    },
    "overrides": [
        {
            "files": "tests/**/*",
            "rules": {
                "no-unused-expressions": "off",
                "no-console": "off"
            }
        }
    ],
    "globals": {
        "$": false,
        "jQuery": false,
        "log": false,
        "app": false,

        "COMPILE_TIME": false,
        "COMPILE_MSG": false,
        "PKG_VERSION": false
    }
}