OPEN SOURCE · 2023
route-schema.
Rotas type-safe para APIs tipadas
A ideia
Na maioria dos codebases TypeScript, URLs são strings com o sistema de tipos desligado. Mudar o nome de um parâmetro num lugar quebra silenciosamente os links construídos em outros nove — uma classe de bug que não deveria existir numa linguagem tipada.
O problema
A solução precisava ser adotável: sem build step, sem arquivos gerados para dessincronizar, sem custo de runtime — ou os times continuariam escrevendo template strings.
Meu papel
Autor e mantenedor.
O que tornou interessante
Inferir tanto a assinatura do builder quanto os tipos dos parâmetros a partir de uma única declaração de rota, sem codegen, empurra os template literal types do TypeScript para o limite prático.
A proposta de valor é a pequenez — cada funcionalidade que adiciona peso de runtime trabalha contra a adoção.
Decisões
- Inferência em vez de codegen
- Os tipos derivam da própria declaração — não existe build step para manter nem arquivo gerado para dessincronizar da fonte.
- Zero runtime por padrão
- A camada de tipos faz o trabalho em tempo de compilação; a superfície de runtime é uma pequena função de parse. API pequena, bundle pequeno, adoção fácil.
Resultado
- Construir uma URL com parâmetro faltando ou errado é erro de compilação, não bug de produção.
- A biblioteca shipa com menos de 2kB e zero dependências.
O que eu aprendi
O sistema de tipos é uma ferramenta de design, e contenção é uma feature — a melhor biblioteca muitas vezes é a que se recusa a crescer.
Tem um projeto nesse espaço?
Vamos conversar sobre isso