/** @type {import("dependency-cruiser").IConfiguration} */ module.exports = { forbidden: [ { name: "domain-is-framework-neutral", severity: "error", from: { path: "^src/domain" }, to: { path: "^(src/(application|presentation|adapters|bootstrap)|react|react-dom|@tanstack)", }, }, { name: "application-does-not-know-concrete-runtime", severity: "error", from: { path: "^src/application" }, to: { path: "^(src/(presentation|adapters|bootstrap)|react|react-dom|@tanstack)", }, }, { name: "presentation-does-not-know-adapters", severity: "error", from: { path: "^src/presentation/(?!adapters/query)" }, to: { path: "^(src/(adapters|bootstrap)|@tanstack)" }, }, { name: "page-templates-own-layout-only", severity: "error", from: { path: "^src/presentation/templates" }, to: { path: "^(src/(application|adapters|bootstrap)|src/presentation/adapters|@tanstack)", }, }, { name: "icon-vendor-is-facade-only", severity: "error", from: { path: "^src", pathNot: "^src/presentation/design-system/icons/vendors/lucide\\.tsx$", }, to: { path: "^lucide-react$" }, }, { name: "adapters-do-not-know-presentation", severity: "error", from: { path: "^src/adapters" }, to: { path: "^src/(presentation|bootstrap)" }, }, { name: "feature-domain-is-framework-neutral", severity: "error", from: { path: "^src/features/[^/]+/domain" }, to: { path: "^(src/(application|presentation|adapters|bootstrap)|src/features/[^/]+/(application|adapters|presentation)|react|react-dom|@tanstack)", }, }, { name: "feature-application-does-not-know-runtime", severity: "error", from: { path: "^src/features/[^/]+/application" }, to: { path: "^(src/(presentation|adapters|bootstrap)|src/features/[^/]+/(adapters|presentation)|react|react-dom|@tanstack)", }, }, { name: "feature-presentation-does-not-know-outbound-adapters", severity: "error", from: { path: "^src/features/[^/]+/presentation" }, to: { path: "^(src/(adapters|bootstrap)|src/features/[^/]+/adapters|@tanstack)", }, }, { name: "feature-adapters-do-not-know-presentation", severity: "error", from: { path: "^src/features/[^/]+/adapters" }, to: { path: "^(src/(presentation|bootstrap)|src/features/[^/]+/presentation)", }, }, { name: "concrete-adapters-compose-only-in-bootstrap", severity: "error", from: { path: "^src/(domain|application|presentation|contracts)" }, to: { path: "^src/adapters" }, }, { name: "no-circular-dependencies", severity: "error", from: {}, to: { circular: true }, }, ], options: { doNotFollow: { path: "node_modules" }, exclude: { path: "^(dist|artifacts|tests/fixtures)", }, enhancedResolveOptions: { exportsFields: ["exports"], conditionNames: ["import", "require", "node", "default"], }, tsConfig: { fileName: "tsconfig.app.json", }, }, };