import { defineConfig, globalIgnores } from "eslint/config" import nextVitals from "eslint-config-next/core-web-vitals" import nextTs from "eslint-config-next/typescript" import formatjs from "eslint-plugin-formatjs" import simpleImportSort from "eslint-plugin-simple-import-sort" export default defineConfig([ ...nextVitals, ...nextTs, globalIgnores([ ".next/**", "node_modules/**", "dist/**", "build/**", "coverage/**", "*.config.js", "*.config.ts", "*.config.mjs", ]), { files: ["**/*.{js,jsx,ts,tsx,mts}"], plugins: { "simple-import-sort": simpleImportSort, formatjs, }, rules: { "no-console": "warn", "no-unused-vars": "off", "react/function-component-definition": "error", "react/jsx-curly-brace-presence": [ "error", { props: "never", children: "never", propElementValues: "always", }, ], "react-hooks/incompatible-library": "off", "import/no-relative-packages": "error", "simple-import-sort/imports": [ "warn", { groups: [ ["^\\u0000"], ["^node:"], ["^@?\\w"], ["^@scandic-hotels/(?!.*\u0000$).*$"], [ "^@/constants/?(?!.*\u0000$).*$", "^@/env/?(?!.*\u0000$).*$", "^@/lib/?(?!.*\u0000$).*$", "^@/server/?(?!.*\u0000$).*$", "^@/stores/?(?!.*\u0000$).*$", ], ["^@/(?!(types|.*\u0000$)).*$"], [ "^\\.\\.(?!/?$)", "^\\.\\./?$", "^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$", ], ["^(?!\\u0000).+\\.s?css$"], ["^node:.*\\u0000$", "^@?\\w.*\\u0000$"], [ "^@scandichotels/.*\\u0000$", "^@/types/.*", "^@/.*\\u0000$", "^[^.].*\\u0000$", "^\\..*\\u0000$", ], ], }, ], "simple-import-sort/exports": "error", "import/first": "error", "import/newline-after-import": "error", "import/no-duplicates": [ "error", { "prefer-inline": true, }, ], "@typescript-eslint/consistent-type-imports": "error", "@typescript-eslint/no-empty-object-type": "off", "@typescript-eslint/no-require-imports": "off", "@typescript-eslint/no-unused-vars": [ "error", { args: "all", argsIgnorePattern: "^_", caughtErrors: "all", caughtErrorsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", varsIgnorePattern: "^_", ignoreRestSiblings: true, }, ], "@next/next/no-html-link-for-pages": "off", "formatjs/enforce-default-message": ["error", "literal"], "formatjs/enforce-placeholders": ["error"], "formatjs/enforce-plural-rules": ["error"], "formatjs/no-literal-string-in-jsx": ["error"], "formatjs/no-multiple-whitespaces": ["error"], "formatjs/no-multiple-plurals": ["error"], "formatjs/no-invalid-icu": ["error"], "formatjs/enforce-id": ["error"], "formatjs/no-complex-selectors": ["error"], "formatjs/no-useless-message": ["error"], "formatjs/prefer-pound-in-plural": ["error"], }, }, ])