Skip to content

TypeScript e monorepo sem mistério ​

Você vai aprender: reconhecer uma aplicação, um pacote e a responsabilidade de um tipo.

Um repositório, vários programas ​

A raiz declara os workspaces apps/* e packages/*. Cada aplicação tem uma entrada e um processo próprio. Os pacotes compartilham contratos ou acesso a bibliotecas.

ÁreaPapel
apps/inverter-to-mqttExecuta coleta e publicação
apps/mqtt-to-dbExecuta assinatura e persistência
apps/adminExecuta API e interface administrativa
apps/mqtt-device-simulatorPublica exemplos fictícios no broker configurado
packages/mqttCompartilha formato, publicação e assinatura
packages/dbCompartilha schema e cliente Prisma

O import de @campus/mqtt aponta ao pacote do repositório. Não é o endereço do broker.

Tipos não validam uma mensagem externa sozinhos ​

TypeScript ajuda durante desenvolvimento e compilação. Dados vindos da rede continuam sendo texto/bytes desconhecidos. O contrato usa Zod para validar em execução.

ReceivedTelemetry tem duas variantes: ok: true com dados válidos e ok: false com erro e conteúdo bruto. O if separa esses caminhos. Esse padrão é uma união discriminada.

Dependências passadas como parâmetros ​

Runtime recebe relógio, cliente, funções e banco como dependências. Nos testes, essas dependências podem ser objetos falsos em memória. Na entrada main.ts, recebem implementações reais.

Isso explica por que ler ou testar uma transformação é diferente de iniciar a aplicação.

Três perguntas para cada arquivo ​

  1. O que recebe?
  2. O que devolve ou envia?
  3. Acessa rede, banco, hardware ou apenas transforma valores?

Comece por mapa do código, depois leia preparação e fila.

Revisão: 06/10/2026. Base: package.json da raiz, interfaces MQTT e runtimes. Não é um tutorial completo da linguagem.

IFSP Campus Boituva · Energia, automação e software em um mesmo projeto