Streams de transformação
Modifique dados à medida que fluem por um pipeline.
Streams de transformação é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.
O que é um TransformStream?
Um TransformStream fica entre um lado legível e um lado gravável. Os blocos escritos na entrada são transformados e emitidos na saída — uma etapa de processamento que mapeia, filtra ou remodela os dados durante o fluxo.
Anatomia
Ele tem duas extremidades: writable (onde os dados entram) e readable (onde os dados transformados saem).
const ts = new TransformStream();
console.log(ts.writable, ts.readable);O método de transformação
Defina o comportamento com uma função transform(chunk, controller). Chame controller.enqueue() para emitir a saída.
const upper = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
}
});Uma entrada, várias saídas
Uma transformação pode emitir zero, um ou vários blocos para cada entrada — perfeito para dividir ou expandir dados.
const splitter = new TransformStream({
transform(line, controller) {
for (const word of line.split(" ")) controller.enqueue(word);
}
});Filtrando com transformações
Simplesmente não coloque na fila os blocos que deseja descartar.
const onlyEven = new TransformStream({
transform(n, controller) {
if (n % 2 === 0) controller.enqueue(n);
}
});O método de finalização
flush(controller) é executado uma vez quando a entrada termina — ideal para emitir sobras armazenadas em buffer ou um bloco final.
const ts = new TransformStream({
transform(c, ctrl) { ctrl.enqueue(c); },
flush(ctrl) { ctrl.enqueue("[END]"); }
});Armazenando dados entre blocos
Mantenha o estado no fechamento para unir blocos parciais, como ao montar linhas completas a partir de limites arbitrários entre bytes.
let buffer = "";
new TransformStream({
transform(chunk, ctrl) {
buffer += chunk;
const parts = buffer.split("\n");
buffer = parts.pop();
for (const line of parts) ctrl.enqueue(line);
},
flush(ctrl) { if (buffer) ctrl.enqueue(buffer); }
});Fluxos de transformação integrados
A plataforma fornece TextDecoderStream, TextEncoderStream e CompressionStream/DecompressionStream — transformações prontas para uso.
const gzip = new CompressionStream("gzip");
const compressed = inputStream.pipeThrough(gzip);Conectando com pipeThrough
readable.pipeThrough(transform) conecta uma origem a uma transformação e retorna a saída legível da transformação, pronta para a próxima etapa.
const out = sourceStream
.pipeThrough(new TextDecoderStream())
.pipeThrough(upper);Transformações assíncronas
transform pode ser assíncrona — use await dentro dela para chamar APIs ou realizar trabalho assíncrono por bloco. O fluxo aguarda a promessa.
new TransformStream({
async transform(chunk, ctrl) {
const result = await process(chunk);
ctrl.enqueue(result);
}
});Propagação de erros
Lançar uma exceção dentro de transform faz o fluxo entrar em erro; os consumidores posteriores veem o erro e o fluxo de processamento é encerrado.
new TransformStream({
transform(chunk, ctrl) {
if (!valid(chunk)) throw new Error("bad chunk");
ctrl.enqueue(chunk);
}
});Verificação rápida
Teste os fluxos de transformação.
Recapitulação: fluxos de transformação
Você criou transformações com transform e flush, mapeou, filtrou e expandiu blocos, armazenou dados entre os limites dos blocos, usou recursos integrados como CompressionStream e conectou etapas com pipeThrough. A seguir: contrapressão e encadeamento.
Perguntas Frequentes
A aula “Streams de transformação” é grátis?
Sim — o texto completo de “Streams de transformação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.
O que vou aprender em “Streams de transformação”?
Modifique dados à medida que fluem por um pipeline. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar JavaScript Academy?
Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Streams de transformação”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de JavaScript Academy?
Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Streams legíveis
- Respostas de fetch em fluxo
- Streams de transformação
- Contrapressão e canalização