{
    "env": {
      "node": true,
      "es6": true
    },
    "root": true,
    "ignorePatterns": [
      "dist/"
    ],
    "extends": [
      "eslint:recommended"
    ],
    "rules": {
      "indent": [
        "error",
        4
      ],
      "quotes": [
        "error",
        "single"
      ]
    },
    "overrides": [
      {
        "files": [
          "**/*.ts"
        ],
        "parser": "@typescript-eslint/parser",
        "parserOptions": {
          "sourceType": "module",
          "ecmaFeatures": {
            "impliedStrict": true
          },
          "project": [
            "./tsconfig.json"
          ]
        },
        "plugins": [
          "@typescript-eslint"
        ],
        "extends": [
          "eslint:recommended",
          "plugin:@typescript-eslint/eslint-recommended",
          "plugin:@typescript-eslint/recommended"
        ],
        "rules": {
          "@typescript-eslint/comma-spacing": [
            "error"
          ],
          "@typescript-eslint/explicit-function-return-type": [
            "error",
            {
              "allowExpressions": true
            }
          ],
          "@typescript-eslint/func-call-spacing": [
            "error"
          ],
          "@typescript-eslint/member-delimiter-style": [
            "error"
          ],
          "@typescript-eslint/indent": [
            "error",
            4,
            {
              "SwitchCase": 0
            }
          ],
          "@typescript-eslint/prefer-nullish-coalescing": [
            "error"
          ],
          "@typescript-eslint/prefer-optional-chain": [
            "error"
          ],
          "@typescript-eslint/prefer-reduce-type-parameter": [
            "error"
          ],
          "@typescript-eslint/prefer-return-this-type": [
            "error"
          ],
          "@typescript-eslint/quotes": [
            "error",
            "single"
          ],
          "@typescript-eslint/type-annotation-spacing": [
            "error"
          ],
          "@typescript-eslint/semi": [
            "error"
          ],
          "@typescript-eslint/space-before-function-paren": [
            "error",
            {
              "anonymous": "never",
              "named": "never",
              "asyncArrow": "always"
            }
          ]
        }
      }
    ]
  }