Gerar páginas, componentes e passos de processo com o mesmo pipeline que o IGRP Studio usa no Page Builder.
igrp generate (alias igrp gen) invoca o mesmo pipeline de geração que o IGRP Studio dispara quando gravas no Page Builder — a CLI delega no pacote @igrp/igrp-studio-nextjs-engine. É útil para reuso interno do Studio (a partir de um protótipo de especificações) e para pipelines externos — CI, agentes de IA, demos — que partem de um manifesto JSON em vez de passar pela UI.
igrp generate page --manifest page.json --project ./my-app
igrp generate component --manifest component.json --project ./my-app
igrp generate process-step --manifest step.json --project ./my-appFlags comuns
| Flag | Efeito |
|---|---|
--manifest <path> | Ficheiro JSON com o manifesto (PageConfig / ComponentConfig / ProcessStepConfig). |
--stdin | Lê o manifesto via stdin — mutuamente exclusivo com --manifest. Útil quando o JSON vem de um LLM ou de um script. |
--project <path> | Raiz do projeto iGRP de destino. Se omitido, a CLI sobe na hierarquia a partir do cwd à procura de .igrpstudio/ — o mesmo comportamento do git. |
--init | Cria a estrutura .igrpstudio/{pages,components,process} se ainda não existir. Sem esta flag, gerar contra uma pasta sem marker falha com exit 1 — é um guardrail contra escritas acidentais. |
--dry-run | Valida e mostra o caminho de saída sem escrever nada. |
--quiet | Suprime logs de sucesso; útil quando estás a fazer pipe da saída. |
Como funciona a deteção de projeto
O ficheiro .igrpstudio/ na raiz do projeto é o marker oficial que identifica uma pasta como projeto iGRP — o mesmo papel que .git/ desempenha para o git. O engine mantém lá dentro o source-of-truth JSON de cada artefacto (pages/<id>.json, components/<id>.json, process/<id>.json). O .tsx gerado vai para a zona gerida pelo Studio, src/app/(igrp)/(generated)/:
| Tipo | JSON (.igrpstudio/) | Código gerado |
|---|---|---|
page | pages/<pageName>.json | src/app/(igrp)/(generated)/<path>/page.tsx |
component | components/<name>.json | src/app/(igrp)/(generated)/<pagePath>/components/<name>.tsx, ou src/components/<name>.tsx sem pagePath |
process-step | process/<processKey>/<key>.json | src/app/(igrp)/(generated)/process/[...process]/(<processKey>)/<key>.tsx |
| Cenário | Resolução |
|---|---|
Corres igrp gen page ... dentro do projeto | --project é opcional — a CLI sobe até encontrar .igrpstudio/. |
| Pipeline/CI noutro contexto | Passa --project /caminho/projecto explicitamente. |
Pasta nova, ainda sem .igrpstudio/ | Passa --project ./novo --init para criar a estrutura. |
Exemplo ponta a ponta
O engine precisa de um projeto Next.js iGRP (criado pelo Studio ou pelo template): lê src/app/igrp.config.ts e valida o manifesto. Numa pasta vazia com --init a geração falha com ENOENT … src/app/igrp.config.ts (exit 2).
cd ~/igrp/demo/projects/registos # projeto Next.js criado no Studio
cat > hello.json <<'EOF'
{
"type": "page",
"pageName": "hello",
"path": "hello",
"components": {},
"types": [],
"imports": [],
"states": [],
"functions": []
}
EOF
igrp gen page --manifest hello.json
ls "src/app/(igrp)/(generated)/hello/page.tsx"
ls .igrpstudio/pages/hello.jsonpath sem barra inicial
path segue a regra do Page Manager: segmentos separados por /, sem / no início (hello, clientes/[id], (admin)/relatorios). "/hello" falha a validação com exit 2.
O mesmo vale para passos de processo — por exemplo, regenerar um passo a partir do JSON que o Studio guardou:
igrp gen process-step --manifest .igrpstudio/process/registo-entidade/qualificacao.v1.json
# ✓ wrote src/app/(igrp)/(generated)/process/[...process]/(registo-entidade)/qualificacao.v1.tsxO ficheiro resultante é idêntico ao que o Studio gera ao gravar (mesmo engine, @igrp/igrp-studio-nextjs-engine 0.2.0-beta.38 na CLI 1.7.9).
Mais exemplos
# Forma curta com o alias 'gen', dentro do projeto (auto-deteta .igrpstudio/)
cd ~/projects/my-app
igrp gen page --manifest specs/dashboard.json
# Pipeline/CI: caminhos absolutos, sem auto-deteção
igrp generate page \
--manifest /tmp/specs/users.json \
--project /var/builds/my-app
# Via stdin — útil quando o manifesto sai de um LLM ou de um script
cat page.json | igrp gen page --stdin --project ./my-app
# Diretamente de um endpoint HTTP
curl -s https://api.exemplo.cv/specs/page/42 | igrp gen page --stdin --project ./my-app
# Gerar várias páginas a partir de um glob (pipeline shell)
for f in specs/*.json; do
igrp gen page --manifest "$f" --project ./my-app --quiet
done
# Dry-run: ver o que seria escrito sem tocar no filesystem
igrp gen page --manifest page.json --project ./my-app --dry-run
# Modo silencioso para piping (só erros saem em stderr)
igrp gen page --manifest page.json --project ./my-app --quiet \
&& echo "ok" || echo "falhou com exit $?"Exatamente o mesmo pipeline do Studio
igrp generate não é um gerador paralelo simplificado — é literalmente o mesmo código que o Studio corre em "Page Builder save". Um manifesto válido produz sempre o mesmo .tsx que produziria clicar em Guardar no Studio.
Códigos de saída
| Código | Significado |
|---|---|
0 | Sucesso. |
1 | Validação falhou — JSON inválido, type errado, identificador inválido, ou pasta sem .igrpstudio/ e sem --init. |
2 | O engine falhou — validação do manifesto pelo engine (p.ex. path inválido), projeto sem src/app/igrp.config.ts, erro de filesystem ou exceção interna. |
A seguir
- Skills — instalar cápsulas de conhecimento que ensinam um agente de IA a escrever estes manifestos corretamente.
Última atualização:
