import globals from "globals" import babelParser from "@babel/eslint-parser" import svelteParser from "svelte-eslint-parser" import tsParser from "@typescript-eslint/parser" import eslintPluginJest from "eslint-plugin-jest" import eslintPluginSvelte from "eslint-plugin-svelte" import eslintPluginLocalRules from "eslint-plugin-local-rules" import eslintPluginVitest from "@vitest/eslint-plugin" import eslint from "@eslint/js" import tseslint from "typescript-eslint" export default [ eslint.configs.recommended, { ignores: [ "**/node_modules", "**/dist", "**/public", "**/bundle.js", "**/coverage", "packages/server/builder", "packages/server/client", "packages/builder/.routify", "packages/sdk/sdk", "**/*.ivm.bundle.js", "packages/server/build/oldClientVersions/**/**/*", ], }, { plugins: { "local-rules": eslintPluginLocalRules, }, languageOptions: { globals: { ...globals.browser, ...globals.jest, ...globals.node, GeolocationPositionError: true, }, parser: babelParser, ecmaVersion: 2019, sourceType: "module", parserOptions: { allowImportExportEverywhere: true, }, }, rules: { "no-self-compare": "error", "no-template-curly-in-string": "error", "no-unmodified-loop-condition": "error", "no-unreachable-loop": "error", "no-implied-eval": "error", "no-extend-native": "error", "no-labels": "error", "no-lone-blocks": "error", "no-new-wrappers": "error", "no-octal-escape": "error", "no-return-assign": "error", "no-useless-concat": "error", "no-useless-constructor": "error", "no-useless-rename": "error", "no-var": "error", "no-void": "error", "no-unused-vars": [ "error", { varsIgnorePattern: "^_", argsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", ignoreRestSiblings: true, caughtErrors: "none", }, ], }, }, ...eslintPluginSvelte.configs["flat/recommended"].map(config => ({ ...config, files: ["**/*.svelte"], languageOptions: { parser: svelteParser, ecmaVersion: 2019, sourceType: "script", parserOptions: { parser: "@typescript-eslint/parser", allowImportExportEverywhere: true, }, }, })), ...tseslint.configs.strict.map(config => ({ ...config, files: ["**/*.ts"], languageOptions: { globals: { NodeJS: true, }, parser: tsParser, }, rules: { "local-rules/no-barrel-imports": "error", "local-rules/no-budibase-imports": "error", "local-rules/no-console-error": "error", "@typescript-eslint/no-inferrable-types": "error", "@typescript-eslint/adjacent-overload-signatures": "error", "@typescript-eslint/class-literal-property-style": "error", "@typescript-eslint/no-confusing-non-null-assertion": "error", "@typescript-eslint/no-unnecessary-parameter-property-assignment": "error", "@typescript-eslint/no-useless-empty-export": "error", "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": [ "error", { varsIgnorePattern: "^_", argsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", ignoreRestSiblings: true, caughtErrors: "none", }, ], "no-redeclare": "off", "@typescript-eslint/no-redeclare": "error", // @typescript-eslint/no-dupe-class-members supersedes no-dupe-class-members "no-dupe-class-members": "off", "@typescript-eslint/no-dupe-class-members": "error", "no-useless-constructor": "off", "@typescript-eslint/no-useless-constructor": "error", }, })), { files: ["**/*.spec.ts", "**/*.spec.js"], plugins: { jest: eslintPluginJest, vitest: eslintPluginVitest, }, languageOptions: { globals: { ...eslintPluginJest.environments.globals.globals, ...eslintPluginVitest.environments.env.globals, NodeJS: true, }, parser: tsParser, }, rules: { ...eslintPluginVitest.configs.recommended.rules, ...eslintPluginJest.configs.recommended.rules, "no-console": "warn", "vitest/expect-expect": "off", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-disabled-tests": "off", "jest/no-standalone-expect": "off", "local-rules/no-test-com": "error", "local-rules/email-domain-example-com": "error", }, }, { files: [ "packages/builder/**/*", "packages/client/**/*", "packages/frontend-core/**/*", ], rules: { "no-console": [ "error", { allow: ["warn", "error", "debug"], }, ], }, }, ]