Now that transform streams are supported in Chrome, Safari, and Firefox, they're finally ready for prime time!
The Streams API lets you break down a resource that you want to receive, send, or transform into small chunks, and then process these chunks bit by bit. Recently, Firefox 102
started to support TransformStream,
which means TransformStream is now
finally usable across browsers. Transform streams allow you to pipe from a
ReadableStream to a
WritableStream, executing a
transformation on the chunks, or consume the transformed result directly,
as shown in the following example.
class UpperCaseTransformStream {
constructor() {
return new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
},
});
}
}
button.addEventListener('click', async () => {
const response = await fetch('/script.js');
const readableStream = response.body
.pipeThrough(new TextDecoderStream())
.pipeThrough(new UpperCaseTransformStream());
const reader = readableStream.getReader();
pre.textContent = '';
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
pre.textContent += value;
}
});