- Download 2023 Curso Rateio Sugestões:
t.me/drivedodinheirobot
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)
Referência: %t.me/drivedodinheirobot%