{ "root": true, "env": { "browser": true, "es2020": true }, "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "next/core-web-vitals", "plugin:react-hooks/recommended" ], "ignorePatterns": ["dist", ".eslintrc.ts"], "parser": "@typescript-eslint/parser", "plugins": ["react-refresh", "boundaries"], "settings": { "import/resolver": { "typescript": { "alwaysTryTypes": true } }, "boundaries/include": ["src/**/*"], "boundaries/elements": [ { "type": "app", "pattern": "app" }, { "type": "pages", "pattern": "src/pages/*", "capture": ["page"] }, { "type": "widgets", "pattern": "widgets/*", "capture": ["widget"] }, { "type": "features", "pattern": "features/*", "capture": ["feature"] }, { "type": "entities", "pattern": "entities/*", "capture": ["entity"] }, { "type": "shared", "pattern": "shared/*", "capture": ["segment"] } ] }, "rules": { "react-refresh/only-export-components": 0, "boundaries/entry-point": [ 2, { "default": "disallow", "rules": [ { "target": [ [ "shared", { "segment": "lib" } ] ], "allow": "*/index.ts" }, { "target": [ [ "shared", { "segment": "lib" } ] ], "allow": "*.(ts|tsx)" }, { "target": [ [ "shared", { "segment": "constants" } ] ], "allow": "index.ts" }, { "target": [ [ "shared", { "segment": "ui" // ("ui"|"constants") } ] ], "allow": "**" }, { "target": ["app", "pages", "widgets", "features", "entities"], "allow": "index.(ts|tsx)" } ] } ], "boundaries/element-types": [ 2, { "default": "allow", "message": "${file.type} is not allowed to import (${dependency.type})", "rules": [ { "from": ["shared"], "disallow": ["app", "pages", "widgets", "features", "entities"], "message": "Shared module must not import upper layers (${dependency.type})" }, { "from": ["entities"], "message": "Entity must not import upper layers (${dependency.type})", "disallow": ["app", "pages", "widgets", "features"] }, { "from": ["entities"], "message": "Entity must not import other entity", "disallow": [ [ "entities", { "entity": "!${entity}" } ] ] }, { "from": ["features"], "message": "Feature must not import upper layers (${dependency.type})", "disallow": ["app", "pages", "widgets"] }, { "from": ["features"], "message": "Feature must not import other feature", "disallow": [ [ "features", { "feature": "!${feature}" } ] ] }, { "from": ["widgets"], "message": "Feature must not import upper layers (${dependency.type})", "disallow": ["app", "pages"] }, { "from": ["widgets"], "message": "Widget must not import other widget", "disallow": [ [ "widgets", { "widget": "!${widget}" } ] ] }, { "from": ["pages"], "message": "Page must not import upper layers (${dependency.type})", "disallow": ["app"] }, { "from": ["pages"], "message": "Page must not import other page", "disallow": [ [ "pages", { "page": "!${page}" } ] ] } ] } ] } }