Appearance
Monorepo — Turborepo + pnpm workspaces
Estrutura de workspaces
O monorepo usa pnpm workspaces com três escopos:
apps/* # Apps Nuxt (calculadoras, APIs, docs)
packages/* # Packages TypeScript puros (domínio, módulos)
services/* # Serviços auxiliares (publicação etc.)Turborepo — pipeline de tarefas
O Turborepo orquestra as tarefas declaradas no turbo.json com cache inteligente e execução em paralelo:
| Task | Descrição | Cache |
|---|---|---|
build | Compila apps e packages (dependência em cascata: ^build) | Sim |
generate | Gera artefatos derivados (TypeDoc local, specs OpenAPI, etc.) | Sim |
dev | Inicia apps em modo desenvolvimento | Não |
dev:prepare | nuxt prepare — gera tipos Nuxt | Não |
lint | ESLint em todo o monorepo | Sim |
typecheck | TypeScript em todo o monorepo | Sim |
test:run | Vitest em todos os packages com testes | Sim |
Executar task em um único package
bash
pnpm --filter @fc/prev-tc dev
pnpm --filter @fc/calculos-previdenciarios test:run
pnpm --filter @fc/docs-tec buildCatálogo de dependências
Todas as versões são centralizadas em pnpm-workspace.yaml com catálogos nomeados. Isso garante consistência entre packages e elimina incompatibilidades:
yaml
# pnpm-workspace.yaml — versões catalogadas (estrutura conceitual)
catalogs:
nuxt:
nuxt: <major-mais-recente>
quasar:
quasar: <major-mais-recente>
test:
vitest: <major-mais-recente>
docs:
vitepress: <major-mais-recente>
typedoc: <major-mais-recente>As versões efetivas em uso ficam centralizadas no pnpm-workspace.yaml versionado no repositório.
Para referenciar no package.json de um package:
jsonc
{
"devDependencies": {
"nuxt": "catalog:nuxt",
"vitest": "catalog:test"
}
}Packages sem compilação
Os packages/ exportam TypeScript puro diretamente. Não há step de build para os packages de domínio:
jsonc
// packages/calculos-previdenciarios/package.json
{
"main": "./src/index.ts",
"exports": {
".": "./src/index.ts",
"./utilidades-apis/*": "./src/utilidades-apis/*.ts"
}
}As apps Nuxt e os tests importam o fonte TypeScript diretamente — o Vite/Nuxt transpila na hora.