Tamanho do Pacote & Formatos de Módulo
O SDK é fornecido tanto em uma construção CommonJS quanto em uma ESM, e mantém suas duas dependências pesadas — Zod e socket.io-client — fora do gráfico de importação até que sejam realmente usadas. Um projeto que chama um único método, desativa a validação e nunca abre um socket carrega 43 kB minificado (9.7 kB gzip), reduzido de 536 kB (110 kB gzip).
O que é incluído no pacote
| Campo | Valor | Usado por |
|---|---|---|
main | dist/index.js | Node e qualquer consumidor CommonJS |
module | esm/index.js | Bundlers (webpack, Vite, Rollup, esbuild) |
types | dist/index.d.ts | TypeScript |
sideEffects | false | Bundlers, para descartar módulos não utilizados |
Não há mapa "exports", então cada importação profunda existente — oneentry/dist/<module>/<module>Interfaces e o resto — resolve exatamente como antes. O Node continua resolvendo a construção CommonJS através de main; nada sobre sua configuração atual precisa mudar.
sideEffects: false informa ao bundler que importar um módulo do SDK nunca faz nada por conta própria, o que torna o tree-shaking possível: os módulos que você não toca são descartados da saída.
Zod carrega apenas quando a validação é executada
A validação de resposta está desativada por padrão. Os esquemas de resposta costumavam ser importados estaticamente por cada módulo, o que puxava o Zod para cada pacote mesmo quando nada era validado. Esquemas e os auxiliares de validação agora são carregados sob demanda, na primeira vez que uma resposta realmente precisa ser validada.
- Com
validation.enabled: false(o padrão), Zod e os esquemas por módulo (341 kB) acabam em partes que nunca são solicitadas. - Com
validation.enabled: true, o comportamento permanece inalterado — os esquemas são simplesmente buscados na primeira vez que são necessários. - No Node,
require('oneentry')não carrega mais o Zod na inicialização.
Para um projeto que chama um único método com a validação desativada, o código que realmente carrega cai de 536 kB para 83 kB minificado (110 kB → 22 kB gzip) — e desce para 43 kB uma vez que o socket.io também é deixado de fora (veja abaixo).
ℹ️ Esse número assume um bundler fazendo divisão de código — o padrão no webpack, Vite e Rollup. Um pacote forçado em um único arquivo ainda encolhe, mas apenas para ~427 kB, porque o Zod é então embutido mesmo que nunca seja executado.
Nenhuma API pública foi alterada. O auxiliar interno _validateResponse se tornou async, o que é relevante apenas se você estendeu as classes base do SDK por conta própria.
socket.io carrega apenas quando você abre um socket
WS.connect() mantém sua assinatura síncrona e ainda retorna um Socket do socket.io, mas socket.io-client (~41 kB) agora é importado na primeira vez que connect() é chamado.
Até que a parte seja resolvida, o objeto retornado enfileira tudo o que você faz com ele — on, emit, disconnect — e reproduz isso no socket real no mesmo tick em que o socket é criado, antes que a conexão possa entregar qualquer coisa, para que nenhum evento seja perdido:
// Nothing changes in normal use — handlers registered here always fire.
const socket = WS.connect();
socket.on('connect', () => console.log('WebSocket connected'));
socket.on('my_event', (payload) => console.log(payload));
Ler o estado da conexão cedo continua preciso, porque um socket recém-criado também não está conectado: id é undefined e connected é false tanto no comportamento antigo quanto no novo.
A única diferença: um método que precisa retornar algo (por exemplo, listeners()) não pode responder antes que a parte chegue, e objetos aninhados como socket.io só são acessíveis uma vez que é carregado. Registrar manipuladores e emitir — o uso normal — não é afetado.
Tamanho do pacote em um relance
| Cenário | Minificado | Gzip |
|---|---|---|
| Antes (cada consumidor) | 536 kB | 110 kB |
| Validação desativada, sem socket | 43 kB | 9.7 kB |
| Validação desativada, socket aberto | ~83 kB | ~22 kB |
| Pacote de arquivo único, sem divisão de código | ~427 kB | — |
Obtendo a menor construção
- Deixe a validação desativada em produção. Ative-a enquanto desenvolve para capturar inconsistências de dados, depois desative — os esquemas permanecem fora do código carregado.
- Deixe seu bundler dividir o código. A divisão de código está ativada por padrão no webpack, Vite e Rollup; desativá-la embute as partes preguiçosas e recupera a maior parte da vantagem.
- Importe tipos com
import type. As importações de tipo são apagadas no tempo de compilação — veja Importando Tipos. - Desestruture apenas os módulos que você usa. Com
sideEffects: falsee a construção ESM, módulos não tocados são descartados da saída.
🔗 Documentação Relacionada
- Importando Tipos - os pontos de entrada
oneentryeoneentry/types - Validação de Resposta da API - habilitando e configurando a validação do Zod
- Módulo WS - abrindo uma conexão em tempo real