module.exports = {
  root: true,
  parser: "babel-eslint",
  parserOptions: {
    "ecmaFeatures": {
      "jsx": true
    }
  },
  env: {
    "browser": true,
    "commonjs": true,
    "es6": true,
  },
  globals: {
    "process": false
  },
  plugins: [
    "react",
    "react-hooks"
  ],
  rules: {
    "quotes": [
      1,
      "single",
      {
        "avoidEscape": true
      }
    ],
    "no-console": 1,
    "no-restricted-globals": [
      2,
      "length"
    ],
    "no-global-assign": 0,
    "no-unsafe-negation": 0,
    "react/prop-types": 0,
    "react/jsx-no-target-blank": 0,
    "react/no-unescaped-entities": 0,
    "react/display-name": 1,
    "react-hooks/rules-of-hooks": "error",
    "react-hooks/exhaustive-deps": "warn"
  },
  settings: {
    "react": {
      "version": "detect"
    }
  },
  overrides: [
    {
      files: [ "**/*.{ts,tsx}" ],
      parser: "@typescript-eslint/parser",
      parserOptions: {
        "ecmaFeatures": {
          "jsx": true
        },
        "tsconfigRootDir": __dirname,
        "project": [ "./tsconfig.json" ]
      },
      plugins: [ "@typescript-eslint" ],
      rules: {
        "@typescript-eslint/no-empty-function": 0,
        "@typescript-eslint/no-use-before-define": 0,
        "@typescript-eslint/member-delimiter-style": [2, {
          multiline: {
            delimiter: "none"
          }
        }],
        "@typescript-eslint/explicit-function-return-type": 0,
        "@typescript-eslint/camelcase": 1,
        '@typescript-eslint/prefer-string-starts-ends-with': 1,
        '@typescript-eslint/no-unnecessary-type-assertion': 1,  // has false positives (Object.values result) v 2.29.0
        '@typescript-eslint/no-inferrable-types': 1,  // causes problems with unknown values v 2.29.0 typescript v 3.8.3
      },
      extends: [
        "plugin:@typescript-eslint/eslint-recommended",
        "plugin:@typescript-eslint/recommended",
        "plugin:@typescript-eslint/recommended-requiring-type-checking"
      ]
    },
    {
      files: [ "**/*.test.js" ],
      env: {
        mocha: true
      }
    }
  ],
  extends: [
    "eslint:recommended",
    "plugin:react/recommended",
    "prettier",
    "prettier/react",
    "prettier/@typescript-eslint"
  ]
}