The pipeThrough()
method of the ReadableStream
interface provides a chainable way of piping the current stream through a transform stream or any other writable/readable pair.
Piping a stream will generally lock it for the duration of the pipe, preventing other readers from locking it.
pipeThrough(transformStream)
pipeThrough(transformStream, options)
The readable
side of the transformStream
.
In the following example (see Unpack chunks of a PNG for the full code running live, and png-transform-stream for the source code), an image is fetched and its body retrieved as a ReadableStream
.
Next, we log the contents of the readable stream, use pipeThrough()
to send it to a new function that creates a gray-scaled version of the stream, then log the new stream's contents too.
fetch("png-logo.png")
.then((response) => response.body)
.then((rs) => logReadableStream("Fetch Response Stream", rs))
.then((body) => body.pipeThrough(new PNGTransformStream()))
.then((rs) => logReadableStream("PNG Chunk Stream", rs));