extends:
  - eslint:recommended
  - plugin:@typescript-eslint/eslint-recommended
  - plugin:@typescript-eslint/recommended
  - plugin:@typescript-eslint/recommended-requiring-type-checking
  - plugin:prettier/recommended
plugins:
  - '@typescript-eslint'
parser: '@typescript-eslint/parser'
parserOptions:
  sourceType: module
  ecmaVersion: 2020
  project: ./tsconfig.json
rules:
  prettier/prettier:
    - error
    - singleQuote: true
  camelcase: "off"
  '@typescript-eslint/naming-convention':
    - warn
    - selector: default
      format:
      - camelCase
    - selector: variable
      format:
      - camelCase
      - UPPER_CASE
      leadingUnderscore: allow
      trailingUnderscore: allow
    - selector: class
      format:
      - PascalCase
      trailingUnderscore: allow
    - selector: parameter
      format:
      - camelCase
      leadingUnderscore: allow
    - selector: memberLike
      modifiers:
      - private
      format:
      - camelCase
      leadingUnderscore: require
    - selector: typeLike
      format:
      - PascalCase
  '@typescript-eslint/no-use-before-define': off
  no-empty-function: off
  '@typescript-eslint/no-empty-function':
    - error
    - allow:
      - constructors
  'no-fallthrough': warn
  '@typescript-eslint/unbound-method': off
  '@typescript-eslint/no-unsafe-assignment': off
  '@typescript-eslint/restrict-plus-operands': off
  '@typescript-eslint/no-unsafe-return': off
  '@typescript-eslint/no-unsafe-member-access': off
  '@typescript-eslint/no-unsafe-argument': off
  '@typescript-eslint/no-unsafe-call': off
  'no-inner-declarations': off
  'no-global-assign': off
  'prefer-const': warn
