extends:
    - "eslint:recommended"
    - "plugin:node/recommended"
rules:
    array-bracket-spacing: "error"
    array-callback-return: "error"
    arrow-body-style: ["error", "as-needed"]
    arrow-parens: ["error", "as-needed"]
    arrow-spacing: "error"
    indent: ["error", 4, {SwitchCase: 1}]
    block-spacing: "error"
    brace-style: ["error", "1tbs"]
    camelcase: "error"
    callback-return: ["error", ["cb", "callback", "next"]]
    class-methods-use-this: "error"
    comma-dangle: "error"
    comma-spacing: "error"
    comma-style: ["error", "last"]
    computed-property-spacing: "error"
    consistent-return: "error"
    curly: ["error", "all"]
    default-case: "error"
    dot-location: ["error", "property"]
    dot-notation: ["error", { allowKeywords: true }]
    eol-last: "error"
    eqeqeq: "error"
    func-call-spacing: "error"
    func-style: ["error", "declaration"]
    function-paren-newline: ["error", "consistent"]
    generator-star-spacing: "error"
    guard-for-in: "error"
    handle-callback-err: ["error", "err"]
    key-spacing: ["error", { beforeColon: false, afterColon: true }]
    keyword-spacing: "error"
    lines-around-comment: ["error", {
        beforeBlockComment: true,
        afterBlockComment: false,
        beforeLineComment: true,
        afterLineComment: false
    }]
    max-len: ["error", 160, {
        "ignoreComments": true,
        "ignoreUrls": true,
        "ignoreStrings": true,
        "ignoreTemplateLiterals": true,
        "ignoreRegExpLiterals": true
    }]
    max-statements-per-line: "error"
    new-cap: "error"
    new-parens: "error"
    no-alert: "error"
    no-array-constructor: "error"
    no-buffer-constructor: "error"
    no-caller: "error"
    no-confusing-arrow: "error"
    no-console: "error"
    no-delete-var: "error"
    no-else-return: ["error", { allowElseIf: false }]
    no-eval: "error"
    no-extend-native: "error"
    no-extra-bind: "error"
    no-fallthrough: "error"
    no-floating-decimal: "error"
    no-global-assign: "error"
    no-implied-eval: "error"
    no-invalid-this: "error"
    no-iterator: "error"
    no-label-var: "error"
    no-labels: "error"
    no-lone-blocks: "error"
    no-loop-func: "error"
    no-mixed-requires: "error"
    no-mixed-spaces-and-tabs: ["error", false]
    no-multi-spaces: "error"
    no-multi-str: "error"
    no-multiple-empty-lines: ["error", {max: 2, maxBOF: 0, maxEOF: 0}]
    no-nested-ternary: "error"
    no-new: "error"
    no-new-func: "error"
    no-new-object: "error"
    no-new-require: "error"
    no-new-wrappers: "error"
    no-octal: "error"
    no-octal-escape: "error"
    no-param-reassign: "error"
    no-path-concat: "error"
    no-process-exit: "error"
    no-proto: "error"
    no-redeclare: "error"
    no-restricted-properties: [
        "error",
        { property: "substring", message: "Use .slice instead of .substring." },
        { property: "substr", message: "Use .slice instead of .substr." },
        { object: "assert", property: "equal", message: "Use assert.strictEqual instead of assert.equal." },
        { object: "assert", property: "notEqual", message: "Use assert.notStrictEqual instead of assert.notEqual." },
        { object: "assert", property: "deepEqual", message: "Use assert.deepStrictEqual instead of assert.deepEqual." },
        { object: "assert", property: "notDeepEqual", message: "Use assert.notDeepStrictEqual instead of assert.notDeepEqual." }
    ]
    no-return-assign: "error"
    no-script-url: "error"
    no-self-assign: "error"
    no-self-compare: "error"
    no-sequences: "error"
    no-shadow: "error"
    no-tabs: "error"
    no-throw-literal: "error"
    no-trailing-spaces: "error"
    no-undef: ["error", {typeof: true}]
    no-undef-init: "error"
    no-undefined: "error"
    no-underscore-dangle: ["error", {allowAfterThis: true}]
    no-unmodified-loop-condition: "error"
    no-unneeded-ternary: "error"
    no-unused-expressions: "error"
    no-unused-vars: ["error", {vars: "all", args: "after-used"}]
    no-use-before-define: "error"
    no-useless-call: "error"
    no-useless-computed-key: "error"
    no-useless-concat: "error"
    no-useless-constructor: "error"
    no-useless-escape: "error"
    no-useless-rename: "error"
    no-useless-return: "error"
    no-whitespace-before-property: "error"
    no-var: "error"
    object-curly-newline: ["error", { "consistent": true, "multiline": true }]
    object-curly-spacing: ["error", "always"]
    object-property-newline: ["error", { "allowAllPropertiesOnSameLine": true }]
    object-shorthand: "error"
    one-var-declaration-per-line: "error"
    operator-assignment: "error"
    operator-linebreak: "error"
    padding-line-between-statements: [
        "error",
        {
            blankLine: "always",
            prev: ["const", "let", "var"],
            next: "*"
        },
        {
            blankLine: "any",
            prev: ["const", "let", "var"],
            next: ["const", "let", "var"]
        }
    ]
    prefer-arrow-callback: "error"
    prefer-const: "error"
    prefer-numeric-literals: "error"
    prefer-promise-reject-errors: "error"
    prefer-rest-params: "error"
    prefer-spread: "error"
    prefer-template: "error"
    quotes: ["error", "double", {avoidEscape: true}]
    quote-props: ["error", "as-needed"]
    radix: "error"
    require-jsdoc: "error"
    require-unicode-regexp: "error"
    rest-spread-spacing: "error"
    semi: "error"
    semi-spacing: ["error", {before: false, after: true}]
    semi-style: "error"
    space-before-blocks: "error"
    space-before-function-paren: ["error", "never"]
    space-in-parens: "error"
    space-infix-ops: "error"
    space-unary-ops: ["error", {words: true, nonwords: false}]
    spaced-comment: ["error", "always", { exceptions: ["-"]}]
    strict: ["error", "global"]
    switch-colon-spacing: "error"
    symbol-description: "error"
    template-curly-spacing: ["error", "never"]
    template-tag-spacing: "error"
    unicode-bom: "error"
    valid-jsdoc: ["error", {
        prefer: { "return": "returns"},
        preferType: {
            "String": "string",
            "Number": "number",
            "Boolean": "boolean",
            "array": "Array",
            "object": "Object",
            "function": "Function"
        }
    }]
    wrap-iife: "error"
    yield-star-spacing: "error"
    yoda: ["error", "never"]
