@gpkit/arch-rules
v1.0.0
Published
Perfiles de arquitectura: dependency-cruiser (fronteras de capa) + ESLint (checks de patrón que depcruise no puede expresar).
Downloads
51
Readme
@gpkit/arch-rules
Perfil de reglas para dependency-cruiser que verifica las fronteras entre las capas de un servicio backend organizado por funcionalidades: que el dominio no conozca la infraestructura, que una funcionalidad no importe las interioridades de otra y que el código de aplicación no dependa del de infraestructura como código.
Es un archivo de configuración. No aporta código en tiempo de ejecución.
npm i -D @gpkit/arch-rules dependency-cruiserPerfil serverless-nest
// .dependency-cruiser.js
module.exports = require('@gpkit/arch-rules/serverless-nest');// package.json
{ "scripts": { "arch:check": "depcruise --config .dependency-cruiser.js src" } }Asume esta estructura, con una carpeta por funcionalidad y tres capas dentro:
src/
<funcionalidad>/
domain/
application/
infrastructure/
common/
infra/ infraestructura como código| Regla | Qué impide |
| ---------------------------------- | ------------------------------------------------------------------ |
| no-cross-feature-internals | Que una funcionalidad importe las interioridades de otra |
| no-application-in-domain | Que domain/ dependa de application/ |
| no-infrastructure-in-domain | Que domain/ dependa de infrastructure/ |
| no-infrastructure-in-application | Que application/ dependa de infrastructure/ |
| no-common-imports-feature | Que common/ dependa de una funcionalidad concreta |
| no-src-imports-infra | Que el código de aplicación importe la infraestructura como código |
| no-infra-imports-domain | Que la infraestructura como código importe el dominio |
Cada violación se reporta con el archivo, la línea y el nombre de la regla, y devuelve un código de salida distinto de cero.
Perfil de ESLint para infraestructura
// eslint.config.mjs
import infra from '@gpkit/arch-rules/eslint-infra';Reglas que dependency-cruiser no puede expresar porque miran dentro del archivo en lugar del grafo de importaciones.
Ejecución automática
Para que las reglas bloqueen, se ejecutan en el pre-push y en la integración continua:
npm i -D husky
npx husky init# .husky/pre-push
npm run arch:checkEn pre-push y no en pre-commit: recorrer el grafo completo tarda varios segundos, un
coste que interesa pagar antes de publicar la rama y no en cada commit.
El mismo paso va en el pipeline, porque un hook local se omite con --no-verify.
