GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • MDN
  • HTML: Markup language
  • Elements
  • Global attributes
  • Attributes
  • See all…
  • Responsive images
  • HTML cheatsheet
  • Date & time formats
  • See all…
  • SVG
  • MathML
  • XML
  • CSS: Styling language

This view

  • Original page
  • New address

GeezerVison is showing developer.mozilla.org — TransformStreamDefaultController - Web APIs | MDN

TransformStreamDefaultController

Baseline
Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since June 2022.

  • See full compatibility
  • Learn more

Note: This feature is available in Web Workers.

The TransformStreamDefaultController interface of the Streams API provides methods to manipulate the associated ReadableStream and WritableStream.

When constructing a TransformStream, the TransformStreamDefaultController is created. It therefore has no constructor. The way to get an instance of TransformStreamDefaultController is via the callback methods of TransformStream().

Instance properties

TransformStreamDefaultController.desiredSize Read only

Returns the desired size to fill the readable side of the stream's internal queue.

Instance methods

TransformStreamDefaultController.enqueue()

Enqueues a chunk (single piece of data) in the readable side of the stream.

TransformStreamDefaultController.error()

Errors both the readable and writable side of the transform stream.

TransformStreamDefaultController.terminate()

Closes the readable side and errors the writable side of the stream.

Examples

In the following example, a transform stream passes through all chunks it receives as Uint8Array values, using the error() and enqueue() methods.

js
const transformContent = {
  start() {}, // required.
  async transform(chunk, controller) {
    chunk = await chunk;
    switch (typeof chunk) {
      case "object":
        // just say the stream is done I guess
        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() });
  }
}

Specifications

Specification
Streams
# ts-default-controller-class

Browser compatibility

Help improve MDN

Learn how to contribute

This page was last modified on Apr 22, 2024 by MDN contributors.

View this page on GitHub • Report a problem with this content
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.