{
    "parserOptions": {
        "ecmaVersion": 9,
        "ecmaFeatures": {
            "impliedStrict": true
        },
        "sourceType": "module"
    },
    "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",

        // stylistic conventions
        "brace-style": ["error", "1tbs"],
        "block-spacing": "error",
        "array-bracket-spacing": "error",
        "comma-spacing": "error",
        "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
        }],
        "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"
    },
    "globals": {
        "$": false,
        "jQuery": false,
        "log": false,

        "COMPILE_TIME": false,
        "COMPILE_MSG": false,
        "PKG_VERSION": false,
        "ENVIRONMENT_IS_WORKER": false,
        "ENVIRONMENT_IS_NODE": false,
        "ENVIRONMENT_IS_WEB": false
    }
}