Skip to content

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:

TaskDescriçãoCache
buildCompila apps e packages (dependência em cascata: ^build)Sim
generateGera artefatos derivados (TypeDoc local, specs OpenAPI, etc.)Sim
devInicia apps em modo desenvolvimentoNão
dev:preparenuxt prepare — gera tipos NuxtNão
lintESLint em todo o monorepoSim
typecheckTypeScript em todo o monorepoSim
test:runVitest em todos os packages com testesSim

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 build

Catá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.