1 of 20
2 of 20
3 of 20
4 of 20
5 of 20
6 of 20
7 of 20
8 of 20
9 of 20
10 of 20
11 of 20
12 of 20
13 of 20
14 of 20
15 of 20
16 of 20
17 of 20
18 of 20
19 of 20
20 of 20

doc

TransformStream

The TransformStream interface of the Streams API represents a concrete implementation of the pipe chain transform stream concept.

It may be passed to the ReadableStream.pipeThrough() method in order to transform a stream of data from one format into another. For example, it might be used to decode (or encode) video frames, decompress data, or convert the stream from XML to JSON.

A transformation algorithm may be provided as an optional argument to the object constructor. If not supplied, data is not modified when piped through the stream.

TransformStream is a transferable object.

Constructor

TransformStream() Creates and returns a transform stream object, optionally specifying a transformation object and queuing strategies for the streams.

Instance properties

TransformStream.readable The readable end of a TransformStream.

TransformStream.writable The writable end of a TransformStream.

Examples

Anything-to-uint8array stream

In the following example, a transform stream passes through all chunks it receives as Uint8Array values.

  const transformContent = {
    start() {}, // required.
    async transform(chunk, controller) {
      chunk = await chunk;
      switch (typeof chunk) {
        case 'object':
          // just say the stream is done
          if (chunk === null) {
            controller.terminate();
          } else if (ArrayBuffer.isView(chunk)) {
            controller.enqueue(new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength));
          } else if (
            Array.isArray(chunk) &&
            chunk.every((value) => typeof value === 'number')
          ) {
            controller.enqueue(new Uint8Array(chunk));
          } else if (
            typeof chunk.valueOf === 'function' &&
            chunk.valueOf() !== chunk
          ) {
            this.transform(chunk.valueOf(), controller); // hack
          } else if ('toJSON' in chunk) {
            this.transform(JSON.stringify(chunk), controller);
          }
          break;
        case 'symbol':
          controller.error("Cannot send a symbol as a chunk part")
          break
        case 'undefined':
          controller.error("Cannot send undefined as a chunk part")
          break
        default:
          controller.enqueue(this.textencoder.encode(String(chunk)))
          break
      }
    },
    flush() { /* do any destructor work here */ }
  }

  class AnyToU8Stream extends TransformStream {
    constructor() {
      super({...transformContent, textencoder: new TextEncoder()})
    }
  }

For more information on TransformStream visit MDN Web Docs.


Didn’t find what you were looking for? Open a support ticket.