{
  "root": true,
  "env": {
    "browser": true,
    "es6": true,
    "jest": true,
    "node": true
  },
  "parser": "@babel/eslint-parser",
  "parserOptions": {
    "ecmaVersion": 2019,
    "sourceType": "module",
    "allowImportExportEverywhere": true
  },
  "ignorePatterns": [
    "node_modules",
    "dist",
    "public",
    "*.spec.js",
    "bundle.js"
  ],
  "extends": ["eslint:recommended"],
  "plugins": ["import", "eslint-plugin-local-rules"],
  "overrides": [
    {
      "files": ["**/*.svelte"],
      "extends": "plugin:svelte/recommended",
      "parser": "svelte-eslint-parser",
      "parserOptions": {
        "parser": "@babel/eslint-parser",
        "ecmaVersion": 2019,
        "sourceType": "module",
        "allowImportExportEverywhere": true
      }
    },
    {
      "files": ["**/*.ts"],
      "parser": "@typescript-eslint/parser",
      "plugins": ["@typescript-eslint"],
      "extends": ["eslint:recommended"],
      "globals": {
        "NodeJS": true
      },
      "rules": {
        "no-unused-vars": "off",
        "local-rules/no-barrel-imports": "error",
        "local-rules/no-budibase-imports": "error",
        "local-rules/no-console-error": "error",
        "@typescript-eslint/no-unused-vars": [
          "error",
          {
            "varsIgnorePattern": "^_",
            "argsIgnorePattern": "^_",
            "destructuredArrayIgnorePattern": "^_",
            "ignoreRestSiblings": true
          }
        ],
        "no-redeclare": "off",
        "@typescript-eslint/no-redeclare": "error",
        // have to turn this off to allow function overloading in typescript
        "no-dupe-class-members": "off"
      }
    },
    {
      "files": ["**/*.spec.ts"],
      "parser": "@typescript-eslint/parser",
      "plugins": ["jest", "@typescript-eslint"],
      "extends": ["eslint:recommended", "plugin:jest/recommended"],
      "env": {
        "jest/globals": true
      },
      "globals": {
        "NodeJS": true
      },
      "rules": {
        "no-unused-vars": "off",
        "@typescript-eslint/no-unused-vars": [
          "error",
          {
            "varsIgnorePattern": "^_",
            "argsIgnorePattern": "^_",
            "destructuredArrayIgnorePattern": "^_",
            "ignoreRestSiblings": true
          }
        ],
        "local-rules/no-test-com": "error",
        "local-rules/email-domain-example-com": "error",
        "no-console": "warn",
        // We have a lot of tests that don't have assertions, they use our test
        // API client that does the assertions for them
        "jest/expect-expect": "off",
        // We do this in some tests where the behaviour of internal tables
        // differs to external, but the API is broadly the same
        "jest/no-conditional-expect": "off",
        // have to turn this off to allow function overloading in typescript
        "no-dupe-class-members": "off",
        "no-redeclare": "off"
      }
    },
    {
      "files": [
        "packages/builder/**/*",
        "packages/client/**/*",
        "packages/frontend-core/**/*"
      ],
      "rules": {
        "no-console": ["error", { "allow": ["warn", "error", "debug"] }]
      }
    }
  ],
  "rules": {
    "no-self-assign": "off",
    "no-unused-vars": [
      "error",
      {
        "varsIgnorePattern": "^_",
        "argsIgnorePattern": "^_",
        "destructuredArrayIgnorePattern": "^_",
        "ignoreRestSiblings": true
      }
    ],
    "import/no-relative-packages": "error",
    "import/export": "error",
    "import/no-duplicates": "error",
    "import/newline-after-import": "error"
  },
  "globals": {
    "GeolocationPositionError": true
  }
}