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 # Removes eslint rules that conflict with prettier.
  - prettier/@typescript-eslint # Remove conflicts again.

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
  eqeqeq: error
  import/order:
    [error, { alphabetize: { order: "asc" }, groups: [["builtin", "external", "internal"], "parent", "sibling"] }]
  no-async-promise-executor: off
  # This isn't a real module, just types, which apparently doesn't resolve.
  import/no-unresolved: [error, { ignore: ["express-serve-static-core"] }]

settings:
  # Does not work with CommonJS unfortunately.
  import/ignore:
    - env-paths
    - xdg-basedir
