109 lines
3.2 KiB
JavaScript
109 lines
3.2 KiB
JavaScript
/** @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",
|
|
},
|
|
},
|
|
};
|