TransformStreamDefaultController

TransformStreamDefaultController`ストリーム API のインターフェイスで、関連する ReadableStreamWritableStream を操作するメソッドを提供します。

TransformStream を作成すると、 TransformStreamDefaultController が作成されます。そのため、コンストラクターはありません。 TransformStreamDefaultController のインスタンスを取得するには、 TransformStream() のコールバックメソッドを使用します。

インスタンスプロパティ

TransformStreamDefaultController.desiredSize 読取専用

ストリームの内部キューの読み取り可能な側を埋めるために必要なサイズを返します。

インスタンスメソッド

TransformStreamDefaultController.enqueue()

ストリームの読み取り可能な側にチャンク(単一のデータ)をキューに入れます。

TransformStreamDefaultController.error()

変換ストリームの読み取り可能な側と書き込み可能な側の両方をエラーを発生させます。

TransformStreamDefaultController.terminate()

ストリームの読み取り可能な側を閉じ、書き込み可能な側にエラーを発生させます。

次の例では、変換ストリームは、 error() メソッドと enqueue() メソッドを使用して、受信したチャンクをすべて Uint8Array 値として渡します。

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() });
  }
}

仕様書

Specification
Streams Standard
# ts-default-controller-class

ブラウザーの互換性

BCD tables only load in the browser