Arquitetura modular — totvstec-doc
O totvstec-doc é o motor: tema Docusaurus, componentes React, tools, CI e publicação.
Cada módulo (repositório satélite) é dono da própria documentação e dos exemplos .tlpp.
Visão geral
┌─────────────────────────────────────────────────────────────┐
│ totvstec-doc (motor) │
│ repos.config.json · sync-deps · generate-sidebars · CI │
│ src/components · tools · docs/index · exemplos-praticos │
└───────────────────────────┬─────────────────────────────────┘
│ sync (build)
┌───────────────────┼───────────────────┐
▼ ▼ ▼
tlpp-sample-rest tlpp-sample-rest-doc tlpp-probat-samples
Estrutura de um módulo (satélite)
Todo repositório de exemplos segue o mesmo contrato:
meu-modulo/
├── src/ ou test/ # código .tlpp
├── docs/
│ ├── sidebar.json # menu deste módulo (conceito)
│ ├── conceito/ # MDX narrativo (+ ExemploRef simples)
│ │ └── … # ou metadados/ + doc-generate/ (Doc Generate)
│ └── exemplos/ # gerado: npm run docs:exemplos
├── scripts/
│ └── generate-exemplos-docs.mjs
├── ecosystem.config.json # gerado: npm run ecosystem:export (no hub)
└── .github/workflows/notify-hub.yml
| Pasta | Responsabilidade |
|---|---|
docs/conceito/ | Trilha de leitura, conceitos, um exemplo inline por página |
docs/exemplos/ | Catálogo GitHub — tabelas de .tlpp (gerado do código) |
docs/sidebar.json | Menu lateral do módulo; exemplos são auto-descobertos |
Fonte única: repos.config.json
Cada entrada em repos declara:
| Campo | Função |
|---|---|
id, owner, name, branch | GitHub + <RepoLink id="…" /> |
sidebar.category, order | Bloco no menu principal |
sync.mdxSources | from (no satélite) → to (no site) |
sync.sidebarFile | Caminho do sidebar.json |
notifyHub.eventType | Dispara rebuild no push |
Mapeamentos atuais
| Módulo | Conceito (sync) | Exemplos (sync) |
|---|---|---|
| REST | docs/conceito → docs/tlpp/rest | docs/exemplos → …/exemplos-repositorio |
| Doc Generate | docs/metadados, docs/doc-generate | docs/exemplos → …/exemplos-doc-generate |
| PROBAT | docs/conceito → docs/tlpp/probat | docs/exemplos → …/exemplos-repositorio |
No git do hub, as pastas de destino têm apenas .gitkeep — o conteúdo real vem do sync no build.
Pipeline do motor
npm run prepare:docs # sync:deps + generate:sidebars
npm run build # prepare:docs (prebuild) + docusaurus build
sync-deps.mjs— copiadocs/de cada satélite para o hubgenerate-sidebars.mjs— lêdocs/sidebar.jsonde cada satélite, prefixa ids, monta categoria de exemplos a partir dedocs/exemplos/*.mdx- Docusaurus — publica em GitHub Pages
No CI: ci-checkout-deps.mjs clona todos os satélites listados em repos.config.json (sem checkout hardcoded).
Adicionar um novo módulo
- Criar repositório com estrutura
docs/conceito,docs/exemplos,docs/sidebar.json - Adicionar entrada em
repos.config.json(sync,sidebar,notifyHub) - Registrar submódulo em
.gitmodules - Rodar
npm run ecosystem:exporte commitarecosystem.config.jsonno satélite - Copiar
notify-hub.yml+ secretHUB_DISPATCH_TOKEN - Adicionar
eventTypeem.github/workflows/deploy.yml(repository_dispatch) - Rodar
npm run validate:repos
O menu e o sync passam a funcionar sem editar sidebars.ts manualmente.
O que fica só no hub
docs/index.mdx— entrada do sitedocs/tlpp/rest/exemplos-praticos.mdx— catálogo de repositórios (RepoCatalog)src/components/—RepoLink,ExemploRef, etc.src/pages/tools/— ferramentas no navegadorrepos.config.json— catálogo central
Fluxo de edição (dia a dia)
| Você quer… | Onde editar |
|---|---|
| Conceito de um tópico | docs/conceito/ no satélite |
Novo arquivo .tlpp | src/ ou test/ no satélite → npm run docs:exemplos |
| Item no menu (conceito) | docs/sidebar.json no satélite |
| Novo módulo inteiro | repos.config.json no hub |
| Aparência / componentes | hub (src/) |
Push no satélite → notify-hub → rebuild automático do site.