123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- {
- "$schema": "https://json.schemastore.org/eslintrc.json",
- "plugins": ["@typescript-eslint", "import"],
- "parserOptions": {
- "project": "tsconfig.json"
- },
- "extends": [
- "plugin:@typescript-eslint/recommended",
- "plugin:@typescript-eslint/recommended-requiring-type-checking",
- "plugin:import/recommended",
- "plugin:import/typescript",
- "prettier",
- "next/core-web-vitals"
- ],
- "rules": {
- // sort imports
- "import/order": "error",
- // no let exports
- "import/no-mutable-exports": "error",
- "import/no-cycle": "error",
- "import/no-default-export": "error",
- "import/no-unresolved": "off",
- // allow {} even though it's unsafe but comes handy
- "@typescript-eslint/ban-types": [
- "error",
- {
- "types": {
- "{}": false
- }
- }
- ],
- "@typescript-eslint/consistent-type-imports": [
- "error",
- {
- "prefer": "type-imports",
- "fixStyle": "inline-type-imports",
- "disallowTypeAnnotations": false
- }
- ],
- "import/no-duplicates": ["error", { "prefer-inline": true }],
- // false negatives
- "import/namespace": ["off"],
- // we allow empty interfaces
- "no-empty-pattern": "off",
- "@typescript-eslint/no-empty-interface": "off",
- // we allow empty functions
- "@typescript-eslint/no-empty-function": "off",
- // we sometimes use async functions that don't await anything
- "@typescript-eslint/require-await": "off",
- // make sure to `await` inside try…catch
- "@typescript-eslint/return-await": ["error", "in-try-catch"],
- // allow unused vars prefixed with `_`
- "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" }],
- // numbers and booleans are fine in template strings
- "@typescript-eslint/restrict-template-expressions": [
- "error",
- { "allowNumber": true, "allowBoolean": true }
- ],
- // @todo
- "@typescript-eslint/no-explicit-any": "off",
- "@typescript-eslint/no-misused-promises": [
- "error",
- {
- "checksVoidReturn": false
- }
- ]
- },
- "overrides": [
- {
- "files": ["src/app/**/{page,layout,error,loading,not-found}.tsx", "*.ts"],
- "rules": {
- "import/no-default-export": "off"
- }
- },
- {
- "files": ["src/checkout/**/*.{ts,tsx}"],
- "rules": {
- "no-restricted-imports": [
- "error",
- {
- "patterns": [
- {
- "group": ["next/*", "@next/*", "next"],
- "message": "Usage of Next.js-specific imports inside src/checkout is forbidden. Checkout is a standalone component and should not depend on Next.js."
- }
- ]
- }
- ]
- }
- },
- {
- "files": ["__tests__/**/*.{ts,tsx}"],
- "extends": ["plugin:playwright/recommended"]
- }
- ],
- "ignorePatterns": ["*.js", "*.jsx", "*.cjs", "src/checkout/src/graphql"]
- }
|