node:stream
O módulo node:stream no Azion Runtime: a interface abstrata para dados em streaming, exemplos de cada tipo de stream e as APIs suportadas.
O módulo node:stream fornece a interface abstrata do Node.js para dados em streaming: as classes Readable, Writable, Duplex, Transform e PassThrough. Um stream lê ou grava dados como um fluxo contínuo de chunks, então uma function processa um grande volume de dados sem manter todos eles na memória ao mesmo tempo.
Exemplos
Cada exemplo é uma function completa que importa de node:stream. A resposta abaixo de cada exemplo é a que uma function com deploy feito retorna.
Streams básicos de leitura e escrita
Esta function cria um stream de leitura e um stream de escrita, conecta os dois com pipe() e responde quando o pipe está configurado:
A function responde com:
Stream Transform para processamento de dados
Um stream Transform altera os dados à medida que eles passam por ele. Esta function conecta dois transforms e um coletor com pipeline(): o primeiro converte cada linha para maiúsculas e o segundo numera cada linha:
A function responde com as linhas numeradas e em maiúsculas:
Stream PassThrough para encaminhamento de dados
Um stream PassThrough encaminha dados sem alterá-los. Esta function grava três chunks em um stream desse tipo e coleta cada chunk à medida que ele passa:
A function responde com os chunks que coletou:
Stream Duplex para comunicação bidirecional
Um stream Duplex é ao mesmo tempo de leitura e de escrita. Esta function grava dois chunks em um stream duplex e lê três chunks dele:
A function registra Written: Data to write e Written: More data no log e responde com os chunks que leu:
Processamento do corpo da requisição com streams
Esta function lê o corpo da requisição chunk por chunk, passa cada chunk por dois transforms e conta os bytes:
Para uma requisição POST cujo corpo é streamed request body for the stream sample, a function responde com a contagem de bytes, o número de chunks e o início do corpo:
APIs suportadas
A tabela lista o status de cada API de node:stream no Azion Runtime:
| API | Status |
|---|---|
stream.Readable | 🟢 Com suporte |
stream.Writable | 🟢 Com suporte |
stream.Duplex | 🟢 Com suporte |
stream.Transform | 🟢 Com suporte |
stream.PassThrough | 🟢 Com suporte |
stream.pipeline() | 🟢 Com suporte |
stream.compose() | 🟡 Parcialmente suportado |
stream.finished() | 🟡 Parcialmente suportado |
readable.pipe() | 🟢 Com suporte |
readable.on('data') | 🟢 Com suporte |
readable.on('end') | 🟢 Com suporte |
readable.on('error') | 🟢 Com suporte |
writable.write() | 🟢 Com suporte |
writable.end() | 🟢 Com suporte |
transform.push() | 🟢 Com suporte |
stream.pipeline() recebe um callback, como mostra o exemplo com Transform. A forma com promise, pipeline() de node:stream/promises, lança Error: [unenv] stream.promises.pipeline is not implemented yet! em uma function após o deploy e com azion dev.