iGRPIGRP 3.0Documentation

Gerar artefactos

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-app

Flags comuns

FlagEfeito
--manifest <path>Ficheiro JSON com o manifesto (PageConfig / ComponentConfig / ProcessStepConfig).
--stdinLê 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.
--initCria 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-runValida e mostra o caminho de saída sem escrever nada.
--quietSuprime 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)/:

TipoJSON (.igrpstudio/)Código gerado
pagepages/<pageName>.jsonsrc/app/(igrp)/(generated)/<path>/page.tsx
componentcomponents/<name>.jsonsrc/app/(igrp)/(generated)/<pagePath>/components/<name>.tsx, ou src/components/<name>.tsx sem pagePath
process-stepprocess/<processKey>/<key>.jsonsrc/app/(igrp)/(generated)/process/[...process]/(<processKey>)/<key>.tsx
igrp gen <tipo>--manifest … | --stdin--projectfoi passado?nãosim.igrpstudio/ ao subira partir do cwd?.igrpstudio/ existenesse caminho?simUsa a raiz encontradanãoExit 1nada é escritonão--initfoi passado?nãosimmkdir .igrpstudio/pages · components · processsimGera o código e grava o JSONexit 0 · falha do engine → exit 2--dry-run não verifica o .igrpstudio/: só mostra o destino.
Com --project, a pasta tem de ter .igrpstudio/ (ou passas --init para a criar). Sem --project, a CLI sobe a partir do diretório atual até encontrar .igrpstudio/; se não houver, termina com exit 1 — aí o --init não ajuda.
CenárioResolução
Corres igrp gen page ... dentro do projeto--project é opcional — a CLI sobe até encontrar .igrpstudio/.
Pipeline/CI noutro contextoPassa --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.json

path 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.tsx

O 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ódigoSignificado
0Sucesso.
1Validação falhou — JSON inválido, type errado, identificador inválido, ou pasta sem .igrpstudio/ e sem --init.
2O 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.
How is this guide?

Última atualização: