Web Streams API#

安定性: 2 - Stable

WHATWG Streams Standard の実装です。

概要#

WHATWG Streams Standard (または "web streams") は、ストリーミングデータを扱うためのAPIを定義します。これはNode.jsのStreams APIと似ていますが、後発であり、多くのJavaScript環境でストリーミングデータを扱うための「標準」APIとなっています。

主に3種類のオブジェクトがあります

  • ReadableStream - ストリーミングデータのソースを表します。
  • WritableStream - ストリーミングデータの宛先を表します。
  • TransformStream - ストリーミングデータを変換するためのアルゴリズムを表します。

ReadableStream の例#

この例では、現在の performance.now() タイムスタンプを1秒ごとに永久にプッシュする単純な ReadableStream を作成します。ストリームからデータを読み取るために非同期イテラブルが使用されます。

import {
  ReadableStream,
} from 'node:stream/web';

import {
  setInterval as every,
} from 'node:timers/promises';

import {
  performance,
} from 'node:perf_hooks';

const SECOND = 1000;

const stream = new ReadableStream({
  async start(controller) {
    for await (const _ of every(SECOND))
      controller.enqueue(performance.now());
  },
});

for await (const value of stream)
  console.log(value);const {
  ReadableStream,
} = require('node:stream/web');

const {
  setInterval: every,
} = require('node:timers/promises');

const {
  performance,
} = require('node:perf_hooks');

const SECOND = 1000;

const stream = new ReadableStream({
  async start(controller) {
    for await (const _ of every(SECOND))
      controller.enqueue(performance.now());
  },
});

(async () => {
  for await (const value of stream)
    console.log(value);
})();

Node.js ストリームとの相互運用性#

Node.jsストリームは、stream.Readablestream.Writablestream.Duplexオブジェクトに存在するtoWebおよびfromWebメソッドを介して、webストリームに変換したり、その逆を行ったりすることができます。

詳細については、関連するドキュメントを参照してください

API#

クラス: ReadableStream#

new ReadableStream([underlyingSource [, strategy]])#
  • underlyingSource <Object>
    • start <Function> ReadableStream が作成されるとすぐに呼び出されるユーザー定義関数。
    • pull <Function> ReadableStream の内部キューが一杯でないときに繰り返し呼び出されるユーザー定義関数。操作は同期または非同期で行うことができます。非同期の場合、以前に返された promise が解決されるまで、この関数は再度呼び出されません。
    • cancel <Function> ReadableStream がキャンセルされたときに呼び出されるユーザー定義関数。
      • reason <any>
      • 戻り値: undefined で解決される promise。
    • type <string> 'bytes' または undefined でなければなりません。
    • autoAllocateChunkSize <number> type'bytes' に等しい場合にのみ使用されます。ゼロ以外の値に設定すると、ビューバッファが ReadableByteStreamController.byobRequest に自動的に割り当てられます。設定されていない場合、デフォルトリーダー ReadableStreamDefaultReader を介してデータを転送するためにストリームの内部キューを使用する必要があります。
  • strategy <Object>
    • highWaterMark <number> バックプレッシャーが適用される前の最大内部キューサイズ。
    • size <Function> 各データチャンクのサイズを識別するために使用されるユーザー定義関数。
readableStream.locked#

readableStream.locked プロパティはデフォルトで false であり、ストリームのデータを消費するアクティブなリーダーがある間は true に切り替えられます。

readableStream.cancel([reason])#
  • reason <any>
  • 戻り値: キャンセルが完了すると undefined で解決される promise。
readableStream.getReader([options])#
import { ReadableStream } from 'node:stream/web';

const stream = new ReadableStream();

const reader = stream.getReader();

console.log(await reader.read());const { ReadableStream } = require('node:stream/web');

const stream = new ReadableStream();

const reader = stream.getReader();

reader.read().then(console.log);

readableStream.lockedtrue にします。

readableStream.pipeThrough(transform[, options])#
  • transform <Object>
    • readable <ReadableStream> この ReadableStream から受け取った、潜在的に変更されたデータを transform.writable がプッシュする ReadableStream
    • writable <WritableStream> この ReadableStream のデータが書き込まれる WritableStream
  • options <Object>
    • preventAbort <boolean> true の場合、この ReadableStream のエラーは transform.writable が中断される原因にはなりません。
    • preventCancel <boolean> true の場合、宛先 transform.writable のエラーは、この ReadableStream がキャンセルされる原因にはなりません。
    • preventClose <boolean> true の場合、この ReadableStream を閉じても transform.writable は閉じられません。
    • signal <AbortSignal> <AbortController> を使用してデータ転送をキャンセルできます。
  • 戻り値: <ReadableStream> transform.readable から。

この <ReadableStream> を、transform 引数で提供される <ReadableStream><WritableStream> のペアに接続し、この <ReadableStream> からのデータが transform.writable に書き込まれ、場合によっては変換されてから transform.readable にプッシュされるようにします。パイプラインが設定されると、transform.readable が返されます。

パイプ操作がアクティブな間、readableStream.lockedtrue にします。

import {
  ReadableStream,
  TransformStream,
} from 'node:stream/web';

const stream = new ReadableStream({
  start(controller) {
    controller.enqueue('a');
  },
});

const transform = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(chunk.toUpperCase());
  },
});

const transformedStream = stream.pipeThrough(transform);

for await (const chunk of transformedStream)
  console.log(chunk);
  // Prints: Aconst {
  ReadableStream,
  TransformStream,
} = require('node:stream/web');

const stream = new ReadableStream({
  start(controller) {
    controller.enqueue('a');
  },
});

const transform = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(chunk.toUpperCase());
  },
});

const transformedStream = stream.pipeThrough(transform);

(async () => {
  for await (const chunk of transformedStream)
    console.log(chunk);
    // Prints: A
})();
readableStream.pipeTo(destination[, options])#
  • destination <WritableStream> この ReadableStream のデータが書き込まれる <WritableStream>
  • options <Object>
    • preventAbort <boolean> true の場合、この ReadableStream のエラーは destination が中断される原因にはなりません。
    • preventCancel <boolean> true の場合、destination のエラーはこの ReadableStream がキャンセルされる原因にはなりません。
    • preventClose <boolean> true の場合、この ReadableStream を閉じても destination は閉じられません。
    • signal <AbortSignal> <AbortController> を使用してデータ転送をキャンセルできます。
  • 戻り値: undefined で解決される promise

パイプ操作がアクティブな間、readableStream.lockedtrue にします。

readableStream.tee()#

この ReadableStream のデータが転送される、新しい <ReadableStream> インスタンスのペアを返します。各インスタンスは同じデータを受け取ります。

readableStream.lockedtrue にします。

readableStream.values([options])#
  • options <Object>
    • preventCancel <boolean> true の場合、非同期イテレータが突然終了したときに <ReadableStream> が閉じられるのを防ぎます。デフォルト: false

この ReadableStream のデータを消費するために使用できる非同期イテレータを作成して返します。

非同期イテレータがアクティブな間、readableStream.lockedtrue にします。

import { Buffer } from 'node:buffer';

const stream = new ReadableStream(getSomeSource());

for await (const chunk of stream.values({ preventCancel: true }))
  console.log(Buffer.from(chunk).toString()); 
非同期イテレーション#

<ReadableStream> オブジェクトは、for await 構文を使用して非同期イテレータプロトコルをサポートします。

import { Buffer } from 'node:buffer';

const stream = new ReadableStream(getSomeSource());

for await (const chunk of stream)
  console.log(Buffer.from(chunk).toString()); 

非同期イテレータは、終了するまで <ReadableStream> を消費します。

デフォルトでは、非同期イテレータが早期に終了した場合 (breakreturn、または throw のいずれかによる)、<ReadableStream> は閉じられます。<ReadableStream> が自動的に閉じられるのを防ぐには、readableStream.values() メソッドを使用して非同期イテレータを取得し、preventCancel オプションを true に設定します。

<ReadableStream> はロックされていてはなりません (つまり、既存のアクティブなリーダーがあってはなりません)。非同期イテレーション中、<ReadableStream> はロックされます。

postMessage() を使った転送#

<ReadableStream> インスタンスは <MessagePort> を使用して転送できます。

const stream = new ReadableStream(getReadableSourceSomehow());

const { port1, port2 } = new MessageChannel();

port1.onmessage = ({ data }) => {
  data.getReader().read().then((chunk) => {
    console.log(chunk);
  });
};

port2.postMessage(stream, [stream]); 

ReadableStream.from(iterable)#

  • iterable <Iterable> Symbol.asyncIterator または Symbol.iterator イテラブルプロトコルを実装したオブジェクト。

イテラブルから新しい <ReadableStream> を作成するユーティリティメソッドです。

import { ReadableStream } from 'node:stream/web';

async function* asyncIterableGenerator() {
  yield 'a';
  yield 'b';
  yield 'c';
}

const stream = ReadableStream.from(asyncIterableGenerator());

for await (const chunk of stream)
  console.log(chunk); // Prints: 'a', 'b', 'c'const { ReadableStream } = require('node:stream/web');

async function* asyncIterableGenerator() {
  yield 'a';
  yield 'b';
  yield 'c';
}

(async () => {
  const stream = ReadableStream.from(asyncIterableGenerator());

  for await (const chunk of stream)
    console.log(chunk); // Prints: 'a', 'b', 'c'
})();

結果の <ReadableStream><WritableStream> にパイプするには、<Iterable><Buffer>, <TypedArray>, または <DataView> オブジェクトのシーケンスを生成 (yield) する必要があります。

import { ReadableStream } from 'node:stream/web';
import { Buffer } from 'node:buffer';

async function* asyncIterableGenerator() {
  yield Buffer.from('a');
  yield Buffer.from('b');
  yield Buffer.from('c');
}

const stream = ReadableStream.from(asyncIterableGenerator());

await stream.pipeTo(createWritableStreamSomehow());const { ReadableStream } = require('node:stream/web');
const { Buffer } = require('node:buffer');

async function* asyncIterableGenerator() {
  yield Buffer.from('a');
  yield Buffer.from('b');
  yield Buffer.from('c');
}

const stream = ReadableStream.from(asyncIterableGenerator());

(async () => {
  await stream.pipeTo(createWritableStreamSomehow());
})();

クラス: ReadableStreamDefaultReader#

デフォルトでは、引数なしで readableStream.getReader() を呼び出すと、ReadableStreamDefaultReader のインスタンスが返されます。デフォルトリーダーは、ストリームを通過するデータのチャンクを不透明な値として扱います。これにより、<ReadableStream> は一般的にあらゆる JavaScript 値で動作できます。

new ReadableStreamDefaultReader(stream)#

指定された <ReadableStream> にロックされた新しい <ReadableStreamDefaultReader> を作成します。

readableStreamDefaultReader.cancel([reason])#
  • reason <any>
  • 戻り値: undefined で解決される promise。

<ReadableStream> をキャンセルし、基になるストリームがキャンセルされたときに解決される promise を返します。

readableStreamDefaultReader.closed#
  • 型: <Promise> 関連付けられた <ReadableStream> が閉じられたときに undefined で解決されます。ストリームがエラーになった場合、またはストリームが閉じる前にリーダーのロックが解放された場合は拒否されます。
readableStreamDefaultReader.read()#
  • 戻り値: オブジェクトで解決される promise

基になる <ReadableStream> から次のデータチャンクを要求し、データが利用可能になるとそのデータで解決される promise を返します。

readableStreamDefaultReader.releaseLock()#

このリーダーの基になる <ReadableStream> に対するロックを解放します。

クラス: ReadableStreamBYOBReader#

ReadableStreamBYOBReader は、バイト指向の <ReadableStream> (ReadableStream が作成されたときに underlyingSource.type'bytes' に設定されているもの) の代替コンシューマーです。

BYOB は「bring your own buffer」(独自のバッファを持ち込む) の略です。これは、余分なコピーを避けてバイト指向のデータをより効率的に読み取ることを可能にするパターンです。

import {
  open,
} from 'node:fs/promises';

import {
  ReadableStream,
} from 'node:stream/web';

import { Buffer } from 'node:buffer';

class Source {
  type = 'bytes';
  autoAllocateChunkSize = 1024;

  async start(controller) {
    this.file = await open(new URL(import.meta.url));
    this.controller = controller;
  }

  async pull(controller) {
    const view = controller.byobRequest?.view;
    const {
      bytesRead,
    } = await this.file.read({
      buffer: view,
      offset: view.byteOffset,
      length: view.byteLength,
    });

    if (bytesRead === 0) {
      await this.file.close();
      this.controller.close();
    }
    controller.byobRequest.respond(bytesRead);
  }
}

const stream = new ReadableStream(new Source());

async function read(stream) {
  const reader = stream.getReader({ mode: 'byob' });

  const chunks = [];
  let result;
  do {
    result = await reader.read(Buffer.alloc(100));
    if (result.value !== undefined)
      chunks.push(Buffer.from(result.value));
  } while (!result.done);

  return Buffer.concat(chunks);
}

const data = await read(stream);
console.log(Buffer.from(data).toString()); 
new ReadableStreamBYOBReader(stream)#

指定された <ReadableStream> にロックされた新しい ReadableStreamBYOBReader を作成します。

readableStreamBYOBReader.cancel([reason])#
  • reason <any>
  • 戻り値: undefined で解決される promise。

<ReadableStream> をキャンセルし、基になるストリームがキャンセルされたときに解決される promise を返します。

readableStreamBYOBReader.closed#
  • 型: <Promise> 関連付けられた <ReadableStream> が閉じられたときに undefined で解決されます。ストリームがエラーになった場合、またはストリームが閉じる前にリーダーのロックが解放された場合は拒否されます。
readableStreamBYOBReader.read(view[, options])#
  • view <Buffer> | <TypedArray> | <DataView>
  • options <Object>
    • min <number> 設定されている場合、返される promise は min 個の要素が利用可能になった時点で解決されます。設定されていない場合、promise は少なくとも1つの要素が利用可能になった時点で解決されます。
  • 戻り値: オブジェクトで解決される promise

基になる <ReadableStream> から次のデータチャンクを要求し、データが利用可能になるとそのデータで解決される promise を返します。

プールされた <Buffer> オブジェクトインスタンスをこのメソッドに渡さないでください。プールされた Buffer オブジェクトは Buffer.allocUnsafe() または Buffer.from() を使用して作成されるか、さまざまな node:fs モジュールのコールバックによって返されることがよくあります。これらのタイプの Buffer は、すべてのプールされた Buffer インスタンスからのすべてのデータを含む共有の基になる <ArrayBuffer> オブジェクトを使用します。Buffer, <TypedArray>, または <DataView>readableStreamBYOBReader.read() に渡されると、ビューの基になる ArrayBufferデタッチ され、その ArrayBuffer 上に存在する可能性のあるすべての既存のビューが無効になります。これはアプリケーションに壊滅的な結果をもたらす可能性があります。

readableStreamBYOBReader.releaseLock()#

このリーダーの基になる <ReadableStream> に対するロックを解放します。

クラス: ReadableStreamDefaultController#

すべての <ReadableStream> には、ストリームのキューの内部状態と管理を担当するコントローラーがあります。ReadableStreamDefaultController は、バイト指向でない ReadableStream のデフォルトのコントローラー実装です。

readableStreamDefaultController.close()#

このコントローラーが関連付けられている <ReadableStream> を閉じます。

readableStreamDefaultController.desiredSize#

<ReadableStream> のキューを埋めるために残っているデータの量を返します。

readableStreamDefaultController.enqueue([chunk])#

<ReadableStream> のキューに新しいデータチャンクを追加します。

readableStreamDefaultController.error([error])#

<ReadableStream> がエラーになり閉じる原因となるエラーを通知します。

クラス: ReadableByteStreamController#

すべての <ReadableStream> には、ストリームのキューの内部状態と管理を担当するコントローラーがあります。ReadableByteStreamController は、バイト指向の ReadableStream 用です。

readableByteStreamController.byobRequest#
readableByteStreamController.close()#

このコントローラーが関連付けられている <ReadableStream> を閉じます。

readableByteStreamController.desiredSize#

<ReadableStream> のキューを埋めるために残っているデータの量を返します。

readableByteStreamController.enqueue(chunk)#

<ReadableStream> のキューに新しいデータチャンクを追加します。

readableByteStreamController.error([error])#

<ReadableStream> がエラーになり閉じる原因となるエラーを通知します。

クラス: ReadableStreamBYOBRequest#

バイト指向ストリームで ReadableByteStreamController を使用し、ReadableStreamBYOBReader を使用する場合、readableByteStreamController.byobRequest プロパティは、現在の読み取り要求を表す ReadableStreamBYOBRequest インスタンスへのアクセスを提供します。このオブジェクトは、読み取り要求のために提供された ArrayBuffer/TypedArray へのアクセスを得るために使用され、データが提供されたことを通知するためのメソッドを提供します。

readableStreamBYOBRequest.respond(bytesWritten)#

readableStreamBYOBRequest.viewbytesWritten バイト数が書き込まれたことを通知します。

readableStreamBYOBRequest.respondWithNewView(view)#

新しい BufferTypedArray、または DataView に書き込まれたバイトで要求が満たされたことを通知します。

readableStreamBYOBRequest.view#

クラス: WritableStream#

WritableStream は、ストリームデータが送信される宛先です。

import {
  WritableStream,
} from 'node:stream/web';

const stream = new WritableStream({
  write(chunk) {
    console.log(chunk);
  },
});

await stream.getWriter().write('Hello World'); 
new WritableStream([underlyingSink[, strategy]])#
  • underlyingSink <Object>
    • start <Function> WritableStream が作成されるとすぐに呼び出されるユーザー定義関数。
    • write <Function> データチャンクが WritableStream に書き込まれたときに呼び出されるユーザー定義関数。
    • close <Function> WritableStream が閉じられたときに呼び出されるユーザー定義関数。
      • 戻り値: undefined で解決される promise。
    • abort <Function> WritableStream を突然閉じるために呼び出されるユーザー定義関数。
      • reason <any>
      • 戻り値: undefined で解決される promise。
    • type <any> type オプションは将来の使用のために予約されており、必ず undefined でなければなりません。
  • strategy <Object>
    • highWaterMark <number> バックプレッシャーが適用される前の最大内部キューサイズ。
    • size <Function> 各データチャンクのサイズを識別するために使用されるユーザー定義関数。
writableStream.abort([reason])#
  • reason <any>
  • 戻り値: undefined で解決される promise。

WritableStream を突然終了します。キューに入れられたすべての書き込みはキャンセルされ、関連する promise は拒否されます。

writableStream.close()#
  • 戻り値: undefined で解決される promise。

追加の書き込みが予期されない場合に WritableStream を閉じます。

writableStream.getWriter()#

WritableStream にデータを書き込むために使用できる新しいライターインスタンスを作成して返します。

writableStream.locked#

writableStream.locked プロパティはデフォルトで false であり、この WritableStream にアクティブなライターがアタッチされている間は true に切り替えられます。

postMessage() を使った転送#

<WritableStream> インスタンスは <MessagePort> を使用して転送できます。

const stream = new WritableStream(getWritableSinkSomehow());

const { port1, port2 } = new MessageChannel();

port1.onmessage = ({ data }) => {
  data.getWriter().write('hello');
};

port2.postMessage(stream, [stream]); 

クラス: WritableStreamDefaultWriter#

new WritableStreamDefaultWriter(stream)#

指定された WritableStream にロックされた新しい WritableStreamDefaultWriter を作成します。

writableStreamDefaultWriter.abort([reason])#
  • reason <any>
  • 戻り値: undefined で解決される promise。

WritableStream を突然終了します。キューに入れられたすべての書き込みはキャンセルされ、関連する promise は拒否されます。

writableStreamDefaultWriter.close()#
  • 戻り値: undefined で解決される promise。

追加の書き込みが予期されない場合に WritableStream を閉じます。

writableStreamDefaultWriter.closed#
  • 型: <Promise> 関連付けられた <WritableStream> が閉じられたときに undefined で解決されます。ストリームがエラーになった場合、またはストリームが閉じる前にライターのロックが解放された場合は拒否されます。
writableStreamDefaultWriter.desiredSize#

<WritableStream> のキューを埋めるのに必要なデータの量。

writableStreamDefaultWriter.ready#
  • 型: <Promise> ライターが使用可能になったときに undefined で解決されます。
writableStreamDefaultWriter.releaseLock()#

このライターの基になる <ReadableStream> に対するロックを解放します。

writableStreamDefaultWriter.write([chunk])#
  • chunk <any>
  • 戻り値: undefined で解決される promise。

<WritableStream> のキューに新しいデータチャンクを追加します。

クラス: WritableStreamDefaultController#

WritableStreamDefaultController<WritableStream> の内部状態を管理します。

writableStreamDefaultController.error([error])#

WritableStream データの処理中にエラーが発生したことを通知するためにユーザーコードによって呼び出されます。呼び出されると、<WritableStream> は中断され、現在保留中の書き込みはキャンセルされます。

writableStreamDefaultController.signal#
  • 型: <AbortSignal> <WritableStream> が中断されたときに、保留中の書き込みまたはクローズ操作をキャンセルするために使用できる AbortSignal

クラス: TransformStream#

TransformStream は、<ReadableStream><WritableStream> から構成され、WritableStream に書き込まれたデータが受信され、潜在的に変換された後、ReadableStream のキューにプッシュされるように接続されています。

import {
  TransformStream,
} from 'node:stream/web';

const transform = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(chunk.toUpperCase());
  },
});

await Promise.all([
  transform.writable.getWriter().write('A'),
  transform.readable.getReader().read(),
]); 
new TransformStream([transformer[, writableStrategy[, readableStrategy]]])#
  • transformer <Object>
    • start <Function> TransformStream が作成されるとすぐに呼び出されるユーザー定義関数。
    • transform <Function> transformStream.writable に書き込まれたデータチャンクを受け取り、潜在的に変更してから、transformStream.readable に転送するユーザー定義関数。
    • flush <Function> TransformStream の書き込み可能な側が閉じられる直前に呼び出され、変換プロセスの終了を通知するユーザー定義関数。
    • readableType <any> readableType オプションは将来の使用のために予約されており、必ず undefined でなければなりません。
    • writableType <any> writableType オプションは将来の使用のために予約されており、必ず undefined でなければなりません。
  • writableStrategy <Object>
    • highWaterMark <number> バックプレッシャーが適用される前の最大内部キューサイズ。
    • size <Function> 各データチャンクのサイズを識別するために使用されるユーザー定義関数。
  • readableStrategy <Object>
    • highWaterMark <number> バックプレッシャーが適用される前の最大内部キューサイズ。
    • size <Function> 各データチャンクのサイズを識別するために使用されるユーザー定義関数。
transformStream.readable#
transformStream.writable#
postMessage() を使った転送#

<TransformStream> インスタンスは <MessagePort> を使用して転送できます。

const stream = new TransformStream();

const { port1, port2 } = new MessageChannel();

port1.onmessage = ({ data }) => {
  const { writable, readable } = data;
  // ...
};

port2.postMessage(stream, [stream]); 

クラス: TransformStreamDefaultController#

TransformStreamDefaultControllerTransformStream の内部状態を管理します。

transformStreamDefaultController.desiredSize#

読み取り可能な側のキューを埋めるのに必要なデータの量。

transformStreamDefaultController.enqueue([chunk])#

読み取り可能な側のキューにデータチャンクを追加します。

transformStreamDefaultController.error([reason])#

変換データの処理中にエラーが発生したことを読み取り可能な側と書き込み可能な側の両方に通知し、両方の側が突然閉じられる原因となります。

transformStreamDefaultController.terminate()#

トランスポートの読み取り可能な側を閉じ、書き込み可能な側がエラーで突然閉じられる原因となります。

クラス: ByteLengthQueuingStrategy#

new ByteLengthQueuingStrategy(init)#
byteLengthQueuingStrategy.highWaterMark#
byteLengthQueuingStrategy.size#

クラス: CountQueuingStrategy#

new CountQueuingStrategy(init)#
countQueuingStrategy.highWaterMark#
countQueuingStrategy.size#

クラス: TextEncoderStream#

new TextEncoderStream()#

新しい TextEncoderStream インスタンスを作成します。

textEncoderStream.encoding#

TextEncoderStream インスタンスがサポートするエンコーディング。

textEncoderStream.readable#
textEncoderStream.writable#

クラス: TextDecoderStream#

new TextDecoderStream([encoding[, options]])#
  • encoding <string> この TextDecoder インスタンスがサポートする encoding を識別します。デフォルト: 'utf-8'
  • options <Object>
    • fatal <boolean> デコードエラーが致命的である場合は true
    • ignoreBOM <boolean> true の場合、TextDecoderStream はバイトオーダーマークをデコードされた結果に含めます。false の場合、バイトオーダーマークは出力から削除されます。このオプションは encoding'utf-8', 'utf-16be', または 'utf-16le' の場合にのみ使用されます。デフォルト: false

新しい TextDecoderStream インスタンスを作成します。

textDecoderStream.encoding#

TextDecoderStream インスタンスがサポートするエンコーディング。

textDecoderStream.fatal#

デコードエラーが TypeError のスローにつながる場合、値は true になります。

textDecoderStream.ignoreBOM#

デコード結果にバイトオーダーマークが含まれる場合、値は true になります。

textDecoderStream.readable#
textDecoderStream.writable#

クラス: CompressionStream#

new CompressionStream(format)#
  • format <string> 'deflate', 'deflate-raw', 'gzip', または 'brotli' のいずれか。
compressionStream.readable#
compressionStream.writable#

クラス: DecompressionStream#

new DecompressionStream(format)#
  • format <string> 'deflate', 'deflate-raw', 'gzip', または 'brotli' のいずれか。
decompressionStream.readable#
decompressionStream.writable#

ユーティリティコンシューマー#

ユーティリティコンシューマー関数は、ストリームを消費するための一般的なオプションを提供します。

これらは次を使用してアクセスされます

import {
  arrayBuffer,
  blob,
  buffer,
  json,
  text,
} from 'node:stream/consumers';const {
  arrayBuffer,
  blob,
  buffer,
  json,
  text,
} = require('node:stream/consumers');
streamConsumers.arrayBuffer(stream)#
import { arrayBuffer } from 'node:stream/consumers';
import { Readable } from 'node:stream';
import { TextEncoder } from 'node:util';

const encoder = new TextEncoder();
const dataArray = encoder.encode('hello world from consumers!');

const readable = Readable.from(dataArray);
const data = await arrayBuffer(readable);
console.log(`from readable: ${data.byteLength}`);
// Prints: from readable: 76const { arrayBuffer } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const { TextEncoder } = require('node:util');

const encoder = new TextEncoder();
const dataArray = encoder.encode('hello world from consumers!');
const readable = Readable.from(dataArray);
arrayBuffer(readable).then((data) => {
  console.log(`from readable: ${data.byteLength}`);
  // Prints: from readable: 76
});
streamConsumers.blob(stream)#
import { blob } from 'node:stream/consumers';

const dataBlob = new Blob(['hello world from consumers!']);

const readable = dataBlob.stream();
const data = await blob(readable);
console.log(`from readable: ${data.size}`);
// Prints: from readable: 27const { blob } = require('node:stream/consumers');

const dataBlob = new Blob(['hello world from consumers!']);

const readable = dataBlob.stream();
blob(readable).then((data) => {
  console.log(`from readable: ${data.size}`);
  // Prints: from readable: 27
});
streamConsumers.buffer(stream)#
import { buffer } from 'node:stream/consumers';
import { Readable } from 'node:stream';
import { Buffer } from 'node:buffer';

const dataBuffer = Buffer.from('hello world from consumers!');

const readable = Readable.from(dataBuffer);
const data = await buffer(readable);
console.log(`from readable: ${data.length}`);
// Prints: from readable: 27const { buffer } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const { Buffer } = require('node:buffer');

const dataBuffer = Buffer.from('hello world from consumers!');

const readable = Readable.from(dataBuffer);
buffer(readable).then((data) => {
  console.log(`from readable: ${data.length}`);
  // Prints: from readable: 27
});
streamConsumers.json(stream)#
import { json } from 'node:stream/consumers';
import { Readable } from 'node:stream';

const items = Array.from(
  {
    length: 100,
  },
  () => ({
    message: 'hello world from consumers!',
  }),
);

const readable = Readable.from(JSON.stringify(items));
const data = await json(readable);
console.log(`from readable: ${data.length}`);
// Prints: from readable: 100const { json } = require('node:stream/consumers');
const { Readable } = require('node:stream');

const items = Array.from(
  {
    length: 100,
  },
  () => ({
    message: 'hello world from consumers!',
  }),
);

const readable = Readable.from(JSON.stringify(items));
json(readable).then((data) => {
  console.log(`from readable: ${data.length}`);
  // Prints: from readable: 100
});
streamConsumers.text(stream)#
import { text } from 'node:stream/consumers';
import { Readable } from 'node:stream';

const readable = Readable.from('Hello world from consumers!');
const data = await text(readable);
console.log(`from readable: ${data.length}`);
// Prints: from readable: 27const { text } = require('node:stream/consumers');
const { Readable } = require('node:stream');

const readable = Readable.from('Hello world from consumers!');
text(readable).then((data) => {
  console.log(`from readable: ${data.length}`);
  // Prints: from readable: 27
});