fbpx

Javascript Expert – Erik Wendel – JS Expert


erickwendel 334549258 1360668294710209 3704678180465559798 n
Javascript Expert – Erik Wendel – JS Expert

Resolvi um novo bug crítico no Node.js core com apenas UMA LINHA de código🤯 (e 30 linhas de testes 🥳)

Pra mim, essa é a prova que quantidade de código, não tem nada a ver com produção ou impacto

Qual era o problema?

As Node.js Streams, são parte do Node.js desde o inicio e muita coisa interna do Node.js as usa para controlar eventos e processar dados sob demanda

Você pode usar as classes Readable, Writable e etc, para processar pentabytes de dados em JavaScript se precisar

O problema, é que elas trabalham com callbacks, então para ir para a forma mais moderna, há algum tempo é possível usar async generators.

Algo como

async function *(stream) {
for await (const chunk of stream) {
// manipular pedaço de dados
}
}

E isso funcionava nas versões anteriores, mas por alguma razão no Node.js 19 (experimental) isso parou de funcionar 😬

Consequentemente, quebrou todos os meus projetos 🥵

E se eu não tivesse resolvido, enquanto experimental, poderia ter quebrado centenas de milhares de pacotes que usam Node.js streams 😰

Gastei alguns bons dias discutindo e depurando o projeto Node.js para entender o que poderia fazer até que finalmente entendi

O negócio era que para fazer com que essas async generators funcionem, o modulo stream precisa ser carregado na inicialização da aplicação

Se você importasse o método async pipeline, usado para controlar o fluxo de dados, como ‘node:stream/promises’

Ele na verdade, importava tudo que tinha dentro de “promises” e não carregava o módulo “stream”

Então, a linha única de código que fiz para solucionar o problema, foi no momento que carregasse “promises”, também trouxesse o “stream”

Uma linha de código que me tomou semanas para encontrar a solução e que sem ela poderia ter causado o CAOS 😂

Só que não acaba ai, você precisa implementar testes para validar que o bug não existe mais, e aí gastei mais horas ainda para descobrir como faria esse teste

Precisei burlar o linter e dar uma “hackeada” na parada para funcionar

Dá uma olhada no PR: https://bit.ly/bug-nodejs-stream

Ah e vem estudar JS avançado comigo!

Liberamos hoje a possibilidade de parcelamento no BOLETO: (link na bio)

#javascript#opensource#nodejs

Referência: %t.me/drivedodinheirobot%


Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *