chore: initialize from frontend template 4dc033c
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
{
|
||||
"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": "external-contract-package-single-import-path",
|
||||
"comment": "§4.1: a generated service package may only be imported from src/features/<feature>/contracts/*-contract-contribution.ts",
|
||||
"severity": "error",
|
||||
"from": {
|
||||
"path": "^src",
|
||||
"pathNot": "^src/features/[^/]+/contracts/[^/]+-contract-contribution\\.ts$"
|
||||
},
|
||||
"to": {
|
||||
"path": "^@org-contracts/"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "presentation-does-not-fetch-directly",
|
||||
"comment": "§9.2 / appendix B: a page or hook never opens a socket, worker or HTTP adapter itself",
|
||||
"severity": "error",
|
||||
"from": {
|
||||
"path": "^src/(presentation|features/[^/]+/presentation)"
|
||||
},
|
||||
"to": {
|
||||
"path": "^src/adapters/(http|realtime|service-worker|web-worker|storage)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "generic-worker-has-no-network-or-credentials",
|
||||
"comment": "§16.13 / §21.10: a CPU worker never imports HTTP, realtime or auth",
|
||||
"severity": "error",
|
||||
"from": {
|
||||
"path": "^src/adapters/web-worker"
|
||||
},
|
||||
"to": {
|
||||
"path": "^src/adapters/(http|realtime|auth|web-push)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "service-worker-entry-is-not-page-code",
|
||||
"comment": "§17.2.1: the worker realm never imports React, presentation or bootstrap page code",
|
||||
"severity": "error",
|
||||
"from": {
|
||||
"path": "^src/adapters/service-worker"
|
||||
},
|
||||
"to": {
|
||||
"path": "^(src/(presentation|bootstrap)|react|react-dom|@tanstack)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user