ng-rao
v1.0.2
Published
Angular Reactive Architecture Operator — applies standard folder structure to Angular 19+ projects
Maintainers
Readme
ng-rao
npm i -g ng-rao
ngrao applyO nome
ng-rao vem de ng + RAO — ng de Angular, RAO de Reactive Architecture Operator.
"Reactive" não é só referência ao Angular (RxJS, signals, reactive forms) — é a proposta da ferramenta: ela reage à estrutura que encontra, analisa, planeja e orquestra a reorganização sem você fazer nada manualmente.
O que faz
Analisa todos os arquivos .ts de um projeto Angular e os move para a pasta correta com base no tipo e escopo de cada um, reescrevendo todos os imports afetados automaticamente.
| Tipo | Destino |
|------|---------|
| Guard | src/app/core/guards/ |
| Interceptor | src/app/core/interceptors/ |
| Service (providedIn: 'root') | src/app/core/services/[domain]/ |
| Service (feature-scoped) | src/app/modules/[domain]/services/ |
| Component (page roteável) | src/app/modules/[domain]/pages/[name]/ |
| Component (reutilizável) | src/app/modules/[domain]/components/[name]/ |
| Model | src/app/core/models/[domain]/ |
| Mock | src/app/core/mocks/[domain]/ |
| Pipe | src/app/shared/pipes/[name]/ |
| Normalizer | src/app/shared/normalizers/[domain]/ |
Arquivos que já estão no lugar certo são ignorados. A operação é idempotente — pode rodar mais de uma vez sem efeito colateral.
Estrutura gerada
src/app/
├── core/
│ ├── constants/ ← index.ts gerado
│ ├── guards/ ← index.ts gerado
│ ├── interceptors/ ← index.ts gerado
│ ├── mocks/
│ ├── models/
│ └── services/
├── modules/
│ └── [feature]/
│ ├── components/
│ ├── pages/
│ └── services/ ← index.ts gerado
└── shared/
├── components/ ← index.ts gerado
├── normalizers/
└── pipes/ ← index.ts geradoOs index.ts gerados são barrels com comentário de uso. Nunca sobrescrevem nada que já exista.
Comandos
ngrao apply
Executa a reorganização. Pede confirmação antes de mover.
ngrao apply # modo interativo
ngrao apply --yes # pula confirmaçãongrao preview
Mostra o que seria feito sem alterar nada no disco. Seguro para rodar em qualquer projeto.
ngrao previewngrao check
Verifica se o projeto está organizado. Sai com código 1 se houver arquivos fora do lugar — útil em CI.
ngrao checkngrao barrel <path>
Gera um index.ts barrel para uma pasta específica. Não sobrescreve se já existir.
ngrao barrel src/app/core/guardsComo funciona
1 — Classificação
Varre src/app/ recursivamente e determina três atributos por arquivo:
kind — detectado pelo sufixo do arquivo:
.guard.ts .service.ts .interceptor.ts .component.ts .model.ts .mock.ts .pipe.ts .normalizer.ts
scope:
guard/interceptor→ semprecorepipe/normalizer→ sempresharedservicecomprovidedIn: 'root'→core; sem →feature; dentro deshared/→sharedmodel/mockdentro deshared/→shared; fora →corecomponentdentro deshared/→shared; fora →feature
domain — por prioridade:
- Path contém
modules/[feature]/→ usafeature - Path contém
core/[type]/[domain]/→ usadomain - Fallback: primeiro segmento do nome (
alarms-list.service.ts→alarms)
role (só para components):
Lê todos os *-routing.module.ts. Se a classe aparece em component: XxxComponent, é page. Senão, component.
2 — Planejamento
Gera um plano de ações sem tocar no disco:
create_dir— pastas da estrutura base que ainda não existemmove— arquivo fora do lugar → novo caminhoskip— arquivo já está no lugar certocreate_barrel—index.tspara pastas que precisam de barrel
3 — Execução
Aplica o plano e reescreve os imports relativos em todos os .ts do projeto — inclusive nos arquivos que também foram movidos.
Arquivos nunca movidos
app.component.ts- Arquivos dentro de
shared/(já estão no lugar) - Arquivos dentro de
sub-components/ index.ts(barrels)*.spec.ts*.module.ts*-routing.module.ts*.sandbox.ts
Testado em projetos reais
Antes da publicação, ngrao preview foi rodado contra 39 projetos Angular públicos no GitHub — de 3 a 326 arquivos .ts. Zero crashes.
| Projeto | Arquivos | Moves | |---------|----------|-------| | akveo/ngx-admin | 236 | 169 | | aviabird/angularspree | 326 | 100 | | OwenKelvin/Angular-School-Management-System | 201 | 65 | | gothinkster/angular-realworld-example-app | 46 | 31 | | mtwn105/Clinix-Angular | 59 | 45 |
Detalhes completos em HOW_WE_TESTED.md.
Instalação
# global
npm i -g ng-rao
# ou como devDependency
npm i -D ng-rao
npx ngrao applyCompatibilidade
- Angular 19+ com Standalone Components
- Node.js 18+
- Funciona com ou sem NgModules
Créditos
Criado por Vinícius Negrão — @negra1m
Licença
MIT
