root: true

env:
  browser: true
  jest/globals: true

globals:
  page: true
  browser: true
  context: true

extends:
  - airbnb-base
  - plugin:@typescript-eslint/recommended
  - plugin:@typescript-eslint/recommended-requiring-type-checking
  - plugin:prettier/recommended
  - plugin:jest/recommended

parser: '@typescript-eslint/parser'

parserOptions:
  project:
    - './tsconfig.json'

plugins:
  - '@typescript-eslint'
  - prettier
  - import
  - jest
  - jest-extended

rules:
  "@typescript-eslint/dot-notation": error
  no-shadow: off
  import/no-default-export: off
  import/prefer-default-export: off
  import/no-extraneous-dependencies:
    - error
    - devDependencies:
        - '**/*.config.ts'
        - '**/scripts/*.[tj]s'
        - '**/test/**/*.ts'
  import/extensions:
    - error
    - ignorePackages
    - js: never
      ts: never
      json: always

  '@typescript-eslint/explicit-function-return-type': off
  '@typescript-eslint/explicit-module-boundary-types': off
  '@typescript-eslint/no-unsafe-member-access': off
  '@typescript-eslint/no-unsafe-return': off
  '@typescript-eslint/no-unsafe-assignment': off
  '@typescript-eslint/no-unsafe-call': off
  '@typescript-eslint/no-explicit-any': off
  '@typescript-eslint/no-unsafe-declaration-merging': off
  '@typescript-eslint/unbound-method': error
  '@typescript-eslint/no-unused-vars':
    - error
    - ignoreRestSiblings: true

  camelcase:
    - error

  sort-imports:
    - error
    - ignoreCase: false
      ignoreDeclarationSort: true
      ignoreMemberSort: false
      memberSyntaxSortOrder:
        - none
        - all
        - multiple
        - single
      allowSeparatedGroups: true

overrides:
  - files:
      - '**/*.ts'
    rules:
      camelcase: off

  - files:
      - '**/test/**/*.ts'
    plugins:
      - jest

    rules:
      '@typescript-eslint/unbound-method': off
      '@typescript-eslint/no-var-requires': off
      global-require: off
      jest/no-mocks-import: off
      jest/unbound-method: error
      max-classes-per-file: off

  - files:
      - '**/__mocks__/**/*.ts'
    rules:
      import/no-default-export: 'off'

settings:
  import/resolver:
    typescript:
