Criando uma Transform Stream
A stream de transformação em Node é uma classe que permite a transformação de dados de entrada à medida que eles fluem através da stream. Essa classe é uma subclasse de Duplex.
O método _transform é responsável por transformar os dados de entrada e emitir os dados transformados para a próxima etapa da stream. Ao criar uma stream Transform, é necessário implementar este método para definir como os dados devem ser modificados.
Parâmetros do método _transform
-
chunk: Este parâmetro representa um pedaço de dados de entrada que está sendo processado pela stream. Assim como nos métodos
_writee_readdas streams Writable e Readable, ochunkpode ser uma string, um buffer ou qualquer outro tipo de dado. -
encoding: Este parâmetro especifica a codificação dos dados no
chunk. Ele é útil quando os dados na stream estão sendo transmitidos em uma codificação específica, como UTF-8. -
callback: Este parâmetro é uma função de callback que deve ser chamada quando o processamento do
chunké concluído. A função de callback recebe dois parâmetros opcionais:erroredata.erroré utilizado para indicar se ocorreu algum erro durante o processamento, enquantodataé utilizado para enviar os dados transformados para a próxima etapa da stream.
Exemplo
import { Transform } from 'node:stream'
class InverseNumberStream extends Transform {
_transform(chunk, encoding, callback) {
const transformed = Number(chunk.toString()) * -1
callback(null, Buffer.from(String(transformed)))
}
}
new OneToHundredStream()
.pipe(new InverseNumberStream())
.pipe(new MultiplyByTenStream())$ node src/streams.js
-10
-20
-30
-40
...No exemplo acima, uma stream de transformação chamada InverseNumberStream é criada, estendendo a classe Transform. Esta stream é projetada para inverter os números recebidos como entrada, multiplicando cada número por -1.
O resultado da InverseNumberStream é então encadeado com uma stream chamada MultiplyByTenStream, que foi definida anteriormente. Dessa forma, MultiplyByTenStream multiplica cada número recebido por 10.