{
  "env": {
    "es2021": true,
    "node": true
  },
  "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
  "overrides": [
    {
      "env": {
        "node": true
      },
      "files": [".eslintrc.{js,cjs}"],
      "parserOptions": {
        "sourceType": "script"
      }
    }
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": "latest"
  },
  "plugins": ["@stylistic", "@stylistic/jsx"],
  "rules": {
    "@stylistic/indent": ["error", 4],
    "@stylistic/linebreak-style": ["error", "unix"],
    "@stylistic/quotes": [
      "error",
      "double",
      {
        "allowTemplateLiterals": true
      }
    ],
    "@stylistic/semi": ["error", "always"],
    "@stylistic/array-bracket-newline": ["error", "always"],
    "newline-per-chained-call": [
      "error",
      {
        "ignoreChainWithDepth": 1
      }
    ],
    "@stylistic/comma-dangle": ["error", "always-multiline"],
    "@stylistic/brace-style": "error",
    "@stylistic/arrow-parens": ["error", "always"],
    "@stylistic/arrow-spacing": [
      "error",
      {
        "before": true,
        "after": true
      }
    ],
    "@stylistic/block-spacing": ["error", "always"],
    "@stylistic/comma-spacing": [
      "error",
      {
        "before": false,
        "after": true
      }
    ],
    "@stylistic/computed-property-spacing": ["error", "never"],
    "@stylistic/dot-location": ["error", "property"],
    "@stylistic/function-call-spacing": ["error", "never"],
    "@stylistic/function-call-argument-newline": ["error", "consistent"],
    "@stylistic/function-paren-newline": ["error", "consistent"],
    "@stylistic/implicit-arrow-linebreak": ["error", "beside"],
    "@stylistic/indent-binary-ops": ["error", 4],
    "@stylistic/key-spacing": [
      "error",
      {
        "beforeColon": false,
        "afterColon": true,
        "mode": "strict"
      }
    ],
    "@stylistic/keyword-spacing": [
      "error",
      {
        "before": true,
        "after": true
      }
    ],
    "@stylistic/lines-around-comment": [
      "error",
      {
        "beforeBlockComment": true
      }
    ],
    "@stylistic/lines-between-class-members": ["error", "always"],
    "@stylistic/new-parens": ["error", "always"],
    "@stylistic/jsx/jsx-indent": [
      "error",
      4,
      {
        "checkAttributes": true,
        "indentLogicalExpressions": true
      }
    ],
    "@stylistic/jsx/jsx-closing-bracket-location": [
      "error",
      {
        "nonEmpty": "props-aligned",
        "selfClosing": "after-props"
      }
    ],
    "@stylistic/jsx/jsx-one-expression-per-line": [
      "error",
      {
        "allow": "none"
      }
    ]
  }
}
