{{#if (equals answers.framework "react")}}
parser: '@babel/eslint-parser'
plugins:
  - react
  - react-hooks
globals:
  localStorage: true
  fetch: true
  process: true
{{/if}}
parserOptions:
  ecmaVersion: 2017
  sourceType: module
{{#if (equals answers.framework "react")}}
  ecmaFeatures:
    jsx: true
{{/if}}
extends:
  - eslint:recommended
{{#if (equals answers.framework "react")}}
  - plugin:react/recommended
{{/if}}
env:
  es6: true
  node: true
rules:
  no-unused-vars: error
  object-shorthand: error
  eqeqeq: error
  no-floating-decimal: error
  no-var: error
  no-multi-spaces: error
  no-useless-return: error
  no-undef-init: error
  no-trailing-spaces: error
  no-unneeded-ternary: error
  no-whitespace-before-property: error
  nonblock-statement-body-position: error
  space-infix-ops: error
  space-unary-ops: error
  switch-colon-spacing: error
  arrow-body-style: error
  arrow-spacing: error
  generator-star-spacing: error
  no-useless-computed-key: error
  no-useless-rename: error
  new-cap: error
  no-lonely-if: error
  prefer-const: error
  prefer-spread: error
  prefer-template: error
  rest-spread-spacing: error
  sort-imports: off
  template-curly-spacing: error
  yield-star-spacing: error
  multiline-comment-style:
    - error
    - separate-lines
  indent:
    - error
    - 2
  semi:
    - error
    - never
  func-call-spacing:
    - error
    - never
  yoda:
    - error
    - never
  curly:
    - error
    - multi-line
    - consistent
  quotes:
    - error
    - single
    - avoidEscape: true
  dot-location:
    - error
    - property
  array-bracket-spacing:
    - error
    - never
  array-bracket-newline:
    - error
    - consistent
  block-spacing:
    - error
    - always
  brace-style:
    - error
    - 1tbs
  comma-dangle:
    - error
    - always-multiline
  comma-style:
    - error
    - last
  computed-property-spacing:
    - error
    - never
  function-paren-newline:
    - error
    - multiline
  implicit-arrow-linebreak:
    - error
    - beside
  key-spacing:
    - error
    - afterColon: true
      beforeColon: false
      mode: strict
  keyword-spacing:
    - error
    - before: true
      after: true
  line-comment-position:
    - error
    - above
  linebreak-style:
    - error
    - unix
  lines-between-class-members:
    - error
    - always
    - exceptAfterSingleLine: true
  no-multiple-empty-lines:
    - error
    - max: 2
  no-empty:
    - error
    - allowEmptyCatch: true
  object-curly-newline:
    - error
    - multiline: true
      consistent: true
  object-curly-spacing:
    - error
    - always
  one-var-declaration-per-line:
    - error
    - initializations
  padded-blocks:
    - error
    - never
  quote-props:
    - error
    - as-needed
  space-before-blocks:
    - error
    - always
  space-before-function-paren:
    - error
    - never
  space-in-parens:
    - error
    - never
  spaced-comment:
    - error
    - always
  arrow-parens:
    - error
    - as-needed
  no-implicit-coercion:
    - error
    - allow:
      - '!!'
overrides:
  - files:
      - '**/*.ts'
      - '**/*.tsx'
    extends:
      - plugin:@typescript-eslint/recommended
      - plugin:@typescript-eslint/recommended-requiring-type-checking
    parser: '@typescript-eslint/parser'
    parserOptions:
      project:
        - ./tsconfig.json
        - ./tests/tsconfig.json
    plugins:
      - '@typescript-eslint'
    rules:
      # The third-party dependency type declaration is not perfect
      # Enabling these three rules will seriously reduce development efficiency
      '@typescript-eslint/no-unsafe-call': off
      '@typescript-eslint/no-unsafe-member-access': off
      '@typescript-eslint/no-unsafe-assignment': off
      # TypeORM helpers don't meed the capIsNew rule(eg. In(), Not()).
      new-cap:
        - error
        - capIsNew: false
      '@typescript-eslint/no-floating-promises': error
      'semi': off
      '@typescript-eslint/semi':
        - error
        - never
      'indent': off
      '@typescript-eslint/indent':
        - error
        - 2
      '@typescript-eslint/explicit-member-accessibility':
        - error
        - overrides:
            accessors: off
            constructors: off
            properties: no-public
      '@typescript-eslint/explicit-function-return-type':
        - error
        - allowHigherOrderFunctions: true
          allowExpressions: true
          allowTypedFunctionExpressions: true
      '@typescript-eslint/member-delimiter-style':
        - error
        - multiline:
            delimiter: none
      'no-unused-vars': off
      '@typescript-eslint/no-unused-vars': error
      'func-call-spacing': off
      '@typescript-eslint/func-call-spacing':
        - error
        - never
