parser: "@typescript-eslint/parser"
env:
  browser: true
  es6: true # Map, etc.
  jest: true
  node: true

parserOptions:
  ecmaVersion: 2018
  sourceType: module

extends:
  - eslint:recommended
  - plugin:@typescript-eslint/recommended
  - plugin:import/recommended
  - plugin:import/typescript
  - plugin:prettier/recommended
  # Prettier should always be last
  # Removes eslint rules that conflict with prettier.
  - prettier

rules:
  # Sometimes you need to add args to implement a function signature even
  # if they are unused.
  "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }]
  # For overloads.
  no-dupe-class-members: off
  "@typescript-eslint/no-use-before-define": off
  "@typescript-eslint/no-non-null-assertion": off
  "@typescript-eslint/ban-types": off
  "@typescript-eslint/no-var-requires": off
  "@typescript-eslint/explicit-module-boundary-types": off
  "@typescript-eslint/no-explicit-any": off
  "@typescript-eslint/no-extra-semi": off
  eqeqeq: error
  import/order:
    [error, { alphabetize: { order: "asc" }, groups: [["builtin", "external", "internal"], "parent", "sibling"] }]
  no-async-promise-executor: off

settings:
  import/resolver:
    typescript:
      alwaysTryTypes: true