%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
{ "type": "module", "source": "doc/api/webstreams.md", "modules": [ { "textRaw": "Web Streams API", "name": "web_streams_api", "introduced_in": "v16.5.0", "stability": 1, "stabilityText": "Experimental", "desc": "<p>An implementation of the <a href=\"https://streams.spec.whatwg.org/\">WHATWG Streams Standard</a>.</p>\n<pre><code class=\"language-mjs\">import {\n ReadableStream,\n WritableStream,\n TransformStream,\n} from 'node:stream/web';\n</code></pre>\n<pre><code class=\"language-cjs\">const {\n ReadableStream,\n WritableStream,\n TransformStream,\n} = require('stream/web');\n</code></pre>", "modules": [ { "textRaw": "Overview", "name": "overview", "desc": "<p>The <a href=\"https://streams.spec.whatwg.org/\">WHATWG Streams Standard</a> (or \"web streams\") defines an API for handling\nstreaming data. It is similar to the Node.js <a href=\"stream.html\">Streams</a> API but emerged later\nand has become the \"standard\" API for streaming data across many JavaScript\nenvironments.</p>\n<p>There are three primary types of objects:</p>\n<ul>\n<li><code>ReadableStream</code> - Represents a source of streaming data.</li>\n<li><code>WritableStream</code> - Represents a destination for streaming data.</li>\n<li><code>TransformStream</code> - Represents an algorithm for transforming streaming data.</li>\n</ul>\n<h3>Example <code>ReadableStream</code></h3>\n<p>This example creates a simple <code>ReadableStream</code> that pushes the current\n<code>performance.now()</code> timestamp once every second forever. An async iterable\nis used to read the data from the stream.</p>\n<pre><code class=\"language-mjs\">import {\n ReadableStream\n} from 'node:stream/web';\n\nimport {\n setInterval as every\n} from 'node:timers/promises';\n\nimport {\n performance\n} from 'node:perf_hooks';\n\nconst SECOND = 1000;\n\nconst stream = new ReadableStream({\n async start(controller) {\n for await (const _ of every(SECOND))\n controller.enqueue(performance.now());\n }\n});\n\nfor await (const value of stream)\n console.log(value);\n</code></pre>\n<pre><code class=\"language-cjs\">const {\n ReadableStream\n} = require('node:stream/web');\n\nconst {\n setInterval: every\n} = require('node:timers/promises');\n\nconst {\n performance\n} = require('node:perf_hooks');\n\nconst SECOND = 1000;\n\nconst stream = new ReadableStream({\n async start(controller) {\n for await (const _ of every(SECOND))\n controller.enqueue(performance.now());\n }\n});\n\n(async () => {\n for await (const value of stream)\n console.log(value);\n})();\n</code></pre>", "type": "module", "displayName": "Overview" }, { "textRaw": "API", "name": "api", "classes": [ { "textRaw": "Class: `ReadableStream`", "type": "class", "name": "ReadableStream", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "properties": [ { "textRaw": "`locked` Type: {boolean} Set to `true` if there is an active reader for this {ReadableStream}.", "type": "boolean", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>The <code>readableStream.locked</code> property is <code>false</code> by default, and is\nswitched to <code>true</code> while there is an active reader consuming the\nstream's data.</p>", "shortDesc": "Set to `true` if there is an active reader for this {ReadableStream}." } ], "methods": [ { "textRaw": "`readableStream.cancel([reason])`", "type": "method", "name": "cancel", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined` once cancelation has been completed.", "name": "return", "desc": "A promise fulfilled with `undefined` once cancelation has been completed." }, "params": [ { "textRaw": "`reason` {any}", "name": "reason", "type": "any" } ] } ] }, { "textRaw": "`readableStream.getReader([options])`", "type": "method", "name": "getReader", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: {ReadableStreamDefaultReader|ReadableStreamBYOBReader}", "name": "return", "type": "ReadableStreamDefaultReader|ReadableStreamBYOBReader" }, "params": [ { "textRaw": "`options` {Object}", "name": "options", "type": "Object", "options": [ { "textRaw": "`mode` {string} `'byob'` or `undefined`", "name": "mode", "type": "string", "desc": "`'byob'` or `undefined`" } ] } ] } ], "desc": "<pre><code class=\"language-mjs\">import { ReadableStream } from 'node:stream/web';\n\nconst stream = new ReadableStream();\n\nconst reader = stream.getReader();\n\nconsole.log(await reader.read());\n</code></pre>\n<pre><code class=\"language-cjs\">const { ReadableStream } = require('node:stream/web');\n\nconst stream = new ReadableStream();\n\nconst reader = stream.getReader();\n\nreader.read().then(console.log);\n</code></pre>\n<p>Causes the <code>readableStream.locked</code> to be <code>true</code>.</p>" }, { "textRaw": "`readableStream.pipeThrough(transform[, options])`", "type": "method", "name": "pipeThrough", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: {ReadableStream} From `transform.readable`.", "name": "return", "type": "ReadableStream", "desc": "From `transform.readable`." }, "params": [ { "textRaw": "`transform` {Object}", "name": "transform", "type": "Object", "options": [ { "textRaw": "`readable` {ReadableStream} The `ReadableStream` to which `transform.writable` will push the potentially modified data is receives from this `ReadableStream`.", "name": "readable", "type": "ReadableStream", "desc": "The `ReadableStream` to which `transform.writable` will push the potentially modified data is receives from this `ReadableStream`." }, { "textRaw": "`writable` {WritableStream} The `WritableStream` to which this `ReadableStream`'s data will be written.", "name": "writable", "type": "WritableStream", "desc": "The `WritableStream` to which this `ReadableStream`'s data will be written." } ] }, { "textRaw": "`options` {Object}", "name": "options", "type": "Object", "options": [ { "textRaw": "`preventAbort` {boolean} When `true`, errors in this `ReadableStream` will not cause `transform.writable` to be aborted.", "name": "preventAbort", "type": "boolean", "desc": "When `true`, errors in this `ReadableStream` will not cause `transform.writable` to be aborted." }, { "textRaw": "`preventCancel` {boolean} When `true`, errors in the destination `transform.writable` do not cause this `ReadableStream` to be canceled.", "name": "preventCancel", "type": "boolean", "desc": "When `true`, errors in the destination `transform.writable` do not cause this `ReadableStream` to be canceled." }, { "textRaw": "`preventClose` {boolean} When `true`, closing this `ReadableStream` does not cause `transform.writable` to be closed.", "name": "preventClose", "type": "boolean", "desc": "When `true`, closing this `ReadableStream` does not cause `transform.writable` to be closed." }, { "textRaw": "`signal` {AbortSignal} Allows the transfer of data to be canceled using an {AbortController}.", "name": "signal", "type": "AbortSignal", "desc": "Allows the transfer of data to be canceled using an {AbortController}." } ] } ] } ], "desc": "<p>Connects this <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> to the pair of <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> and\n<a href=\"webstreams.html#class-writablestream\" class=\"type\"><WritableStream></a> provided in the <code>transform</code> argument such that the\ndata from this <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> is written in to <code>transform.writable</code>,\npossibly transformed, then pushed to <code>transform.readable</code>. Once the\npipeline is configured, <code>transform.readable</code> is returned.</p>\n<p>Causes the <code>readableStream.locked</code> to be <code>true</code> while the pipe operation\nis active.</p>\n<pre><code class=\"language-mjs\">import {\n ReadableStream,\n TransformStream,\n} from 'node:stream/web';\n\nconst stream = new ReadableStream({\n start(controller) {\n controller.enqueue('a');\n },\n});\n\nconst transform = new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk.toUpperCase());\n }\n});\n\nconst transformedStream = stream.pipeThrough(transform);\n\nfor await (const chunk of transformedStream)\n console.log(chunk);\n</code></pre>\n<pre><code class=\"language-cjs\">const {\n ReadableStream,\n TransformStream,\n} = require('node:stream/web');\n\nconst stream = new ReadableStream({\n start(controller) {\n controller.enqueue('a');\n },\n});\n\nconst transform = new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk.toUpperCase());\n }\n});\n\nconst transformedStream = stream.pipeThrough(transform);\n\n(async () => {\n for await (const chunk of transformedStream)\n console.log(chunk);\n})();\n</code></pre>" }, { "textRaw": "`readableStream.pipeTo(destination, options)`", "type": "method", "name": "pipeTo", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined`", "name": "return", "desc": "A promise fulfilled with `undefined`" }, "params": [ { "textRaw": "`destination` {WritableStream} A {WritableStream} to which this `ReadableStream`'s data will be written.", "name": "destination", "type": "WritableStream", "desc": "A {WritableStream} to which this `ReadableStream`'s data will be written." }, { "textRaw": "`options` {Object}", "name": "options", "type": "Object", "options": [ { "textRaw": "`preventAbort` {boolean} When `true`, errors in this `ReadableStream` will not cause `destination` to be aborted.", "name": "preventAbort", "type": "boolean", "desc": "When `true`, errors in this `ReadableStream` will not cause `destination` to be aborted." }, { "textRaw": "`preventCancel` {boolean} When `true`, errors in the `destination` will not cause this `ReadableStream` to be canceled.", "name": "preventCancel", "type": "boolean", "desc": "When `true`, errors in the `destination` will not cause this `ReadableStream` to be canceled." }, { "textRaw": "`preventClose` {boolean} When `true`, closing this `ReadableStream` does not cause `destination` to be closed.", "name": "preventClose", "type": "boolean", "desc": "When `true`, closing this `ReadableStream` does not cause `destination` to be closed." }, { "textRaw": "`signal` {AbortSignal} Allows the transfer of data to be canceled using an {AbortController}.", "name": "signal", "type": "AbortSignal", "desc": "Allows the transfer of data to be canceled using an {AbortController}." } ] } ] } ], "desc": "<p>Causes the <code>readableStream.locked</code> to be <code>true</code> while the pipe operation\nis active.</p>" }, { "textRaw": "`readableStream.tee()`", "type": "method", "name": "tee", "meta": { "added": [ "v16.5.0" ], "changes": [ { "version": "v16.18.0", "pr-url": "https://github.com/nodejs/node/pull/44505", "description": "Support teeing a readable byte stream." } ] }, "signatures": [ { "return": { "textRaw": "Returns: {ReadableStream\\[]}", "name": "return", "type": "ReadableStream\\[]" }, "params": [] } ], "desc": "<p>Returns a pair of new <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> instances to which this\n<code>ReadableStream</code>'s data will be forwarded. Each will receive the\nsame data.</p>\n<p>Causes the <code>readableStream.locked</code> to be <code>true</code>.</p>" }, { "textRaw": "`readableStream.values([options])`", "type": "method", "name": "values", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`options` {Object}", "name": "options", "type": "Object", "options": [ { "textRaw": "`preventCancel` {boolean} When `true`, prevents the {ReadableStream} from being closed when the async iterator abruptly terminates. **Default**: `false`.", "name": "preventCancel", "type": "boolean", "desc": "When `true`, prevents the {ReadableStream} from being closed when the async iterator abruptly terminates. **Default**: `false`." } ] } ] } ], "desc": "<p>Creates and returns an async iterator usable for consuming this\n<code>ReadableStream</code>'s data.</p>\n<p>Causes the <code>readableStream.locked</code> to be <code>true</code> while the async iterator\nis active.</p>\n<pre><code class=\"language-mjs\">import { Buffer } from 'node:buffer';\n\nconst stream = new ReadableStream(getSomeSource());\n\nfor await (const chunk of stream.values({ preventCancel: true }))\n console.log(Buffer.from(chunk).toString());\n</code></pre>" } ], "modules": [ { "textRaw": "Async Iteration", "name": "async_iteration", "desc": "<p>The <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> object supports the async iterator protocol using\n<code>for await</code> syntax.</p>\n<pre><code class=\"language-mjs\">import { Buffer } from 'node:buffer';\n\nconst stream = new ReadableStream(getSomeSource());\n\nfor await (const chunk of stream)\n console.log(Buffer.from(chunk).toString());\n</code></pre>\n<p>The async iterator will consume the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> until it terminates.</p>\n<p>By default, if the async iterator exits early (via either a <code>break</code>,\n<code>return</code>, or a <code>throw</code>), the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> will be closed. To prevent\nautomatic closing of the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>, use the <code>readableStream.values()</code>\nmethod to acquire the async iterator and set the <code>preventCancel</code> option to\n<code>true</code>.</p>\n<p>The <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> must not be locked (that is, it must not have an existing\nactive reader). During the async iteration, the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> will be locked.</p>", "type": "module", "displayName": "Async Iteration" }, { "textRaw": "Transferring with `postMessage()`", "name": "transferring_with_`postmessage()`", "desc": "<p>A <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> instance can be transferred using a <a href=\"worker_threads.html#class-messageport\" class=\"type\"><MessagePort></a>.</p>\n<pre><code class=\"language-js\">const stream = new ReadableStream(getReadableSourceSomehow());\n\nconst { port1, port2 } = new MessageChannel();\n\nport1.onmessage = ({ data }) => {\n data.getReader().read().then((chunk) => {\n console.log(chunk);\n });\n};\n\nport2.postMessage(stream, [stream]);\n</code></pre>", "type": "module", "displayName": "Transferring with `postMessage()`" } ], "signatures": [ { "params": [], "desc": "<!--lint disable maximum-line-length remark-lint-->\n<ul>\n<li><code>underlyingSource</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\" class=\"type\"><Object></a>\n<ul>\n<li><code>start</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\" class=\"type\"><Function></a> A user-defined function that is invoked immediately when\nthe <code>ReadableStream</code> is created.\n<ul>\n<li><code>controller</code> <a href=\"webstreams.html#class-readablestreamdefaultcontroller\" class=\"type\"><ReadableStreamDefaultController></a> | <a href=\"webstreams.html#class-readablebytestreamcontroller\" class=\"type\"><ReadableByteStreamController></a></li>\n<li>Returns: <code>undefined</code> or a promise fulfilled with <code>undefined</code>.</li>\n</ul>\n</li>\n<li><code>pull</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\" class=\"type\"><Function></a> A user-defined function that is called repeatedly when the\n<code>ReadableStream</code> internal queue is not full. The operation may be sync or\nasync. If async, the function will not be called again until the previously\nreturned promise is fulfilled.\n<ul>\n<li><code>controller</code> <a href=\"webstreams.html#class-readablestreamdefaultcontroller\" class=\"type\"><ReadableStreamDefaultController></a> | <a href=\"webstreams.html#class-readablebytestreamcontroller\" class=\"type\"><ReadableByteStreamController></a></li>\n<li>Returns: A promise fulfilled with <code>undefined</code>.</li>\n</ul>\n</li>\n<li><code>cancel</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\" class=\"type\"><Function></a> A user-defined function that is called when the\n<code>ReadableStream</code> is canceled.\n<ul>\n<li><code>reason</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Data_types\" class=\"type\"><any></a></li>\n<li>Returns: A promise fulfilled with <code>undefined</code>.</li>\n</ul>\n</li>\n<li><code>type</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type\" class=\"type\"><string></a> Must be <code>'bytes'</code> or <code>undefined</code>.</li>\n<li><code>autoAllocateChunkSize</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type\" class=\"type\"><number></a> Used only when <code>type</code> is equal to\n<code>'bytes'</code>.</li>\n</ul>\n</li>\n<li><code>strategy</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\" class=\"type\"><Object></a>\n<ul>\n<li><code>highWaterMark</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type\" class=\"type\"><number></a> The maximum internal queue size before backpressure\nis applied.</li>\n<li><code>size</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\" class=\"type\"><Function></a> A user-defined function used to identify the size of each\nchunk of data.\n<ul>\n<li><code>chunk</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Data_types\" class=\"type\"><any></a></li>\n<li>Returns: <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type\" class=\"type\"><number></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<!--lint enable maximum-line-length remark-lint-->" } ] }, { "textRaw": "Class: `ReadableStreamDefaultReader`", "type": "class", "name": "ReadableStreamDefaultReader", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>By default, calling <code>readableStream.getReader()</code> with no arguments\nwill return an instance of <code>ReadableStreamDefaultReader</code>. The default\nreader treats the chunks of data passed through the stream as opaque\nvalues, which allows the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> to work with generally any\nJavaScript value.</p>", "methods": [ { "textRaw": "`readableStreamDefaultReader.cancel([reason])`", "type": "method", "name": "cancel", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." }, "params": [ { "textRaw": "`reason` {any}", "name": "reason", "type": "any" } ] } ], "desc": "<p>Cancels the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> and returns a promise that is fulfilled\nwhen the underlying stream has been canceled.</p>" }, { "textRaw": "`readableStreamDefaultReader.read()`", "type": "method", "name": "read", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with an object:", "name": "return", "desc": "A promise fulfilled with an object:", "options": [ { "textRaw": "`value` {ArrayBuffer}", "name": "value", "type": "ArrayBuffer" }, { "textRaw": "`done` {boolean}", "name": "done", "type": "boolean" } ] }, "params": [] } ], "desc": "<p>Requests the next chunk of data from the underlying <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>\nand returns a promise that is fulfilled with the data once it is\navailable.</p>" }, { "textRaw": "`readableStreamDefaultReader.releaseLock()`", "type": "method", "name": "releaseLock", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [] } ], "desc": "<p>Releases this reader's lock on the underlying <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>.</p>" } ], "properties": [ { "textRaw": "`closed` Type: {Promise} Fulfilled with `undefined` when the associated {ReadableStream} is closed or rejected if the stream errors or the reader's lock is released before the stream finishes closing.", "type": "Promise", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "Fulfilled with `undefined` when the associated {ReadableStream} is closed or rejected if the stream errors or the reader's lock is released before the stream finishes closing." } ], "signatures": [ { "params": [ { "textRaw": "`stream` {ReadableStream}", "name": "stream", "type": "ReadableStream" } ], "desc": "<p>Creates a new <a href=\"webstreams.html#class-readablestreamdefaultreader\" class=\"type\"><ReadableStreamDefaultReader></a> that is locked to the\ngiven <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>.</p>" } ] }, { "textRaw": "Class: `ReadableStreamBYOBReader`", "type": "class", "name": "ReadableStreamBYOBReader", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>The <code>ReadableStreamBYOBReader</code> is an alternative consumer for\nbyte-oriented <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>s (those that are created with\n<code>underlyingSource.type</code> set equal to <code>'bytes'</code> when the\n<code>ReadableStream</code> was created).</p>\n<p>The <code>BYOB</code> is short for \"bring your own buffer\". This is a\npattern that allows for more efficient reading of byte-oriented\ndata that avoids extraneous copying.</p>\n<pre><code class=\"language-mjs\">import {\n open\n} from 'node:fs/promises';\n\nimport {\n ReadableStream\n} from 'node:stream/web';\n\nimport { Buffer } from 'node:buffer';\n\nclass Source {\n type = 'bytes';\n autoAllocateChunkSize = 1024;\n\n async start(controller) {\n this.file = await open(new URL(import.meta.url));\n this.controller = controller;\n }\n\n async pull(controller) {\n const view = controller.byobRequest?.view;\n const {\n bytesRead,\n } = await this.file.read({\n buffer: view,\n offset: view.byteOffset,\n length: view.byteLength\n });\n\n if (bytesRead === 0) {\n await this.file.close();\n this.controller.close();\n }\n controller.byobRequest.respond(bytesRead);\n }\n}\n\nconst stream = new ReadableStream(new Source());\n\nasync function read(stream) {\n const reader = stream.getReader({ mode: 'byob' });\n\n const chunks = [];\n let result;\n do {\n result = await reader.read(Buffer.alloc(100));\n if (result.value !== undefined)\n chunks.push(Buffer.from(result.value));\n } while (!result.done);\n\n return Buffer.concat(chunks);\n}\n\nconst data = await read(stream);\nconsole.log(Buffer.from(data).toString());\n</code></pre>", "methods": [ { "textRaw": "`readableStreamBYOBReader.cancel([reason])`", "type": "method", "name": "cancel", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." }, "params": [ { "textRaw": "`reason` {any}", "name": "reason", "type": "any" } ] } ], "desc": "<p>Cancels the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> and returns a promise that is fulfilled\nwhen the underlying stream has been canceled.</p>" }, { "textRaw": "`readableStreamBYOBReader.read(view)`", "type": "method", "name": "read", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with an object:", "name": "return", "desc": "A promise fulfilled with an object:", "options": [ { "textRaw": "`value` {ArrayBuffer}", "name": "value", "type": "ArrayBuffer" }, { "textRaw": "`done` {boolean}", "name": "done", "type": "boolean" } ] }, "params": [ { "textRaw": "`view` {Buffer|TypedArray|DataView}", "name": "view", "type": "Buffer|TypedArray|DataView" } ] } ], "desc": "<p>Requests the next chunk of data from the underlying <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>\nand returns a promise that is fulfilled with the data once it is\navailable.</p>\n<p>Do not pass a pooled <a href=\"buffer.html#class-buffer\" class=\"type\"><Buffer></a> object instance in to this method.\nPooled <code>Buffer</code> objects are created using <code>Buffer.allocUnsafe()</code>,\nor <code>Buffer.from()</code>, or are often returned by various <code>node:fs</code> module\ncallbacks. These types of <code>Buffer</code>s use a shared underlying\n<a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer\" class=\"type\"><ArrayBuffer></a> object that contains all of the data from all of\nthe pooled <code>Buffer</code> instances. When a <code>Buffer</code>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray\" class=\"type\"><TypedArray></a>,\nor <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView\" class=\"type\"><DataView></a> is passed in to <code>readableStreamBYOBReader.read()</code>,\nthe view's underlying <code>ArrayBuffer</code> is <em>detached</em>, invalidating\nall existing views that may exist on that <code>ArrayBuffer</code>. This\ncan have disastrous consequences for your application.</p>" }, { "textRaw": "`readableStreamBYOBReader.releaseLock()`", "type": "method", "name": "releaseLock", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [] } ], "desc": "<p>Releases this reader's lock on the underlying <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>.</p>" } ], "properties": [ { "textRaw": "`closed` Type: {Promise} Fulfilled with `undefined` when the associated {ReadableStream} is closed or rejected if the stream errors or the reader's lock is released before the stream finishes closing.", "type": "Promise", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "Fulfilled with `undefined` when the associated {ReadableStream} is closed or rejected if the stream errors or the reader's lock is released before the stream finishes closing." } ], "signatures": [ { "params": [ { "textRaw": "`stream` {ReadableStream}", "name": "stream", "type": "ReadableStream" } ], "desc": "<p>Creates a new <code>ReadableStreamBYOBReader</code> that is locked to the\ngiven <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>.</p>" } ] }, { "textRaw": "Class: `ReadableStreamDefaultController`", "type": "class", "name": "ReadableStreamDefaultController", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>Every <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> has a controller that is responsible for\nthe internal state and management of the stream's queue. The\n<code>ReadableStreamDefaultController</code> is the default controller\nimplementation for <code>ReadableStream</code>s that are not byte-oriented.</p>", "methods": [ { "textRaw": "`readableStreamDefaultController.close()`", "type": "method", "name": "close", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [] } ], "desc": "<p>Closes the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> to which this controller is associated.</p>" }, { "textRaw": "`readableStreamDefaultController.enqueue(chunk)`", "type": "method", "name": "enqueue", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" } ] } ], "desc": "<p>Appends a new chunk of data to the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>'s queue.</p>" }, { "textRaw": "`readableStreamDefaultController.error(error)`", "type": "method", "name": "error", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`error` {any}", "name": "error", "type": "any" } ] } ], "desc": "<p>Signals an error that causes the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> to error and close.</p>" } ], "properties": [ { "textRaw": "`desiredSize` Type: {number}", "type": "number", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>Returns the amount of data remaining to fill the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>'s\nqueue.</p>" } ] }, { "textRaw": "Class: `ReadableByteStreamController`", "type": "class", "name": "ReadableByteStreamController", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>Every <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> has a controller that is responsible for\nthe internal state and management of the stream's queue. The\n<code>ReadableByteStreamController</code> is for byte-oriented <code>ReadableStream</code>s.</p>", "properties": [ { "textRaw": "`byobRequest` Type: {ReadableStreamBYOBRequest}", "type": "ReadableStreamBYOBRequest", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>Returns the amount of data remaining to fill the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>'s\nqueue.</p>" }, { "textRaw": "`desiredSize` Type: {number}", "type": "number", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>Returns the amount of data remaining to fill the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>'s\nqueue.</p>" } ], "methods": [ { "textRaw": "`readableByteStreamController.close()`", "type": "method", "name": "close", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [] } ], "desc": "<p>Closes the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> to which this controller is associated.</p>" }, { "textRaw": "`readableByteStreamController.enqueue(chunk)`", "type": "method", "name": "enqueue", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`chunk`: {Buffer|TypedArray|DataView}", "name": "chunk", "type": "Buffer|TypedArray|DataView" } ] } ], "desc": "<p>Appends a new chunk of data to the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>'s queue.</p>" }, { "textRaw": "`readableByteStreamController.error(error)`", "type": "method", "name": "error", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`error` {any}", "name": "error", "type": "any" } ] } ], "desc": "<p>Signals an error that causes the <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> to error and close.</p>" } ] }, { "textRaw": "Class: `ReadableStreamBYOBRequest`", "type": "class", "name": "ReadableStreamBYOBRequest", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>When using <code>ReadableByteStreamController</code> in byte-oriented\nstreams, and when using the <code>ReadableStreamBYOBReader</code>,\nthe <code>readableByteStreamController.byobRequest</code> property\nprovides access to a <code>ReadableStreamBYOBRequest</code> instance\nthat represents the current read request. The object\nis used to gain access to the <code>ArrayBuffer</code>/<code>TypedArray</code>\nthat has been provided for the read request to fill,\nand provides methods for signaling that the data has\nbeen provided.</p>", "methods": [ { "textRaw": "`readableStreamBYOBRequest.respond(bytesWritten)`", "type": "method", "name": "respond", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`bytesWritten` {number}", "name": "bytesWritten", "type": "number" } ] } ], "desc": "<p>Signals that a <code>bytesWritten</code> number of bytes have been written\nto <code>readableStreamBYOBRequest.view</code>.</p>" }, { "textRaw": "`readableStreamBYOBRequest.respondWithNewView(view)`", "type": "method", "name": "respondWithNewView", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`view` {Buffer|TypedArray|DataView}", "name": "view", "type": "Buffer|TypedArray|DataView" } ] } ], "desc": "<p>Signals that the request has been fulfilled with bytes written\nto a new <code>Buffer</code>, <code>TypedArray</code>, or <code>DataView</code>.</p>" } ], "properties": [ { "textRaw": "`view` Type: {Buffer|TypedArray|DataView}", "type": "Buffer|TypedArray|DataView", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] } } ] }, { "textRaw": "Class: `WritableStream`", "type": "class", "name": "WritableStream", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>The <code>WritableStream</code> is a destination to which stream data is sent.</p>\n<pre><code class=\"language-mjs\">import {\n WritableStream\n} from 'node:stream/web';\n\nconst stream = new WritableStream({\n write(chunk) {\n console.log(chunk);\n }\n});\n\nawait stream.getWriter().write('Hello World');\n</code></pre>", "methods": [ { "textRaw": "`writableStream.abort([reason])`", "type": "method", "name": "abort", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." }, "params": [ { "textRaw": "`reason` {any}", "name": "reason", "type": "any" } ] } ], "desc": "<p>Abruptly terminates the <code>WritableStream</code>. All queued writes will be\ncanceled with their associated promises rejected.</p>" }, { "textRaw": "`writableStream.close()`", "type": "method", "name": "close", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." }, "params": [] } ], "desc": "<p>Closes the <code>WritableStream</code> when no additional writes are expected.</p>" }, { "textRaw": "`writableStream.getWriter()`", "type": "method", "name": "getWriter", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: {WritableStreamDefaultWriter}", "name": "return", "type": "WritableStreamDefaultWriter" }, "params": [] } ], "desc": "<p>Creates and creates a new writer instance that can be used to write\ndata into the <code>WritableStream</code>.</p>" } ], "properties": [ { "textRaw": "`locked` Type: {boolean}", "type": "boolean", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>The <code>writableStream.locked</code> property is <code>false</code> by default, and is\nswitched to <code>true</code> while there is an active writer attached to this\n<code>WritableStream</code>.</p>" } ], "modules": [ { "textRaw": "Transferring with postMessage()", "name": "transferring_with_postmessage()", "desc": "<p>A <a href=\"webstreams.html#class-writablestream\" class=\"type\"><WritableStream></a> instance can be transferred using a <a href=\"worker_threads.html#class-messageport\" class=\"type\"><MessagePort></a>.</p>\n<pre><code class=\"language-js\">const stream = new WritableStream(getWritableSinkSomehow());\n\nconst { port1, port2 } = new MessageChannel();\n\nport1.onmessage = ({ data }) => {\n data.getWriter().write('hello');\n};\n\nport2.postMessage(stream, [stream]);\n</code></pre>", "type": "module", "displayName": "Transferring with postMessage()" } ], "signatures": [ { "params": [ { "textRaw": "`underlyingSink` {Object}", "name": "underlyingSink", "type": "Object", "options": [ { "textRaw": "`start` {Function} A user-defined function that is invoked immediately when the `WritableStream` is created.", "name": "start", "type": "Function", "desc": "A user-defined function that is invoked immediately when the `WritableStream` is created.", "options": [ { "textRaw": "`controller` {WritableStreamDefaultController}", "name": "controller", "type": "WritableStreamDefaultController" }, { "textRaw": "Returns: `undefined` or a promise fulfilled with `undefined`.", "name": "return", "desc": "`undefined` or a promise fulfilled with `undefined`." } ] }, { "textRaw": "`write` {Function} A user-defined function that is invoked when a chunk of data has been written to the `WritableStream`.", "name": "write", "type": "Function", "desc": "A user-defined function that is invoked when a chunk of data has been written to the `WritableStream`.", "options": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" }, { "textRaw": "`controller` {WritableStreamDefaultController}", "name": "controller", "type": "WritableStreamDefaultController" }, { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." } ] }, { "textRaw": "`close` {Function} A user-defined function that is called when the `WritableStream` is closed.", "name": "close", "type": "Function", "desc": "A user-defined function that is called when the `WritableStream` is closed.", "options": [ { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." } ] }, { "textRaw": "`abort` {Function} A user-defined function that is called to abruptly close the `WritableStream`.", "name": "abort", "type": "Function", "desc": "A user-defined function that is called to abruptly close the `WritableStream`.", "options": [ { "textRaw": "`reason` {any}", "name": "reason", "type": "any" }, { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." } ] }, { "textRaw": "`type` {any} The `type` option is reserved for future use and _must_ be undefined.", "name": "type", "type": "any", "desc": "The `type` option is reserved for future use and _must_ be undefined." } ] }, { "textRaw": "`strategy` {Object}", "name": "strategy", "type": "Object", "options": [ { "textRaw": "`highWaterMark` {number} The maximum internal queue size before backpressure is applied.", "name": "highWaterMark", "type": "number", "desc": "The maximum internal queue size before backpressure is applied." }, { "textRaw": "`size` {Function} A user-defined function used to identify the size of each chunk of data.", "name": "size", "type": "Function", "desc": "A user-defined function used to identify the size of each chunk of data.", "options": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" }, { "textRaw": "Returns: {number}", "name": "return", "type": "number" } ] } ] } ] } ] }, { "textRaw": "Class: `WritableStreamDefaultWriter`", "type": "class", "name": "WritableStreamDefaultWriter", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "methods": [ { "textRaw": "`writableStreamDefaultWriter.abort([reason])`", "type": "method", "name": "abort", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." }, "params": [ { "textRaw": "`reason` {any}", "name": "reason", "type": "any" } ] } ], "desc": "<p>Abruptly terminates the <code>WritableStream</code>. All queued writes will be\ncanceled with their associated promises rejected.</p>" }, { "textRaw": "`writableStreamDefaultWriter.close()`", "type": "method", "name": "close", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." }, "params": [] } ], "desc": "<p>Closes the <code>WritableStream</code> when no additional writes are expected.</p>" }, { "textRaw": "`writableStreamDefaultWriter.releaseLock()`", "type": "method", "name": "releaseLock", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [] } ], "desc": "<p>Releases this writer's lock on the underlying <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a>.</p>" }, { "textRaw": "`writableStreamDefaultWriter.write([chunk])`", "type": "method", "name": "write", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." }, "params": [ { "textRaw": "`chunk`: {any}", "name": "chunk", "type": "any" } ] } ], "desc": "<p>Appends a new chunk of data to the <a href=\"webstreams.html#class-writablestream\" class=\"type\"><WritableStream></a>'s queue.</p>" } ], "properties": [ { "textRaw": "`closed` Type: {Promise} Fulfilled with `undefined` when the associated {WritableStream} is closed or rejected if the stream errors or the writer's lock is released before the stream finishes closing.", "type": "Promise", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "Fulfilled with `undefined` when the associated {WritableStream} is closed or rejected if the stream errors or the writer's lock is released before the stream finishes closing." }, { "textRaw": "`desiredSize` Type: {number}", "type": "number", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>The amount of data required to fill the <a href=\"webstreams.html#class-writablestream\" class=\"type\"><WritableStream></a>'s queue.</p>" }, { "textRaw": "`ready` type: A promise that is fulfilled with `undefined` when the writer is ready to be used.", "name": "type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "A promise that is fulfilled with `undefined` when the writer is ready to be used." } ], "signatures": [ { "params": [ { "textRaw": "`stream` {WritableStream}", "name": "stream", "type": "WritableStream" } ], "desc": "<p>Creates a new <code>WritableStreamDefaultWriter</code> that is locked to the given\n<code>WritableStream</code>.</p>" } ] }, { "textRaw": "Class: `WritableStreamDefaultController`", "type": "class", "name": "WritableStreamDefaultController", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>The <code>WritableStreamDefaultController</code> manage's the <a href=\"webstreams.html#class-writablestream\" class=\"type\"><WritableStream></a>'s\ninternal state.</p>", "properties": [ { "textRaw": "`abortReason` Type: {any} The `reason` value passed to `writableStream.abort()`.", "type": "any", "name": "Type", "desc": "The `reason` value passed to `writableStream.abort()`." }, { "textRaw": "`signal` Type: {AbortSignal} An `AbortSignal` that can be used to cancel pending write or close operations when a {WritableStream} is aborted.", "type": "AbortSignal", "name": "Type", "desc": "An `AbortSignal` that can be used to cancel pending write or close operations when a {WritableStream} is aborted." } ], "methods": [ { "textRaw": "`writableStreamDefaultController.error(error)`", "type": "method", "name": "error", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`error` {any}", "name": "error", "type": "any" } ] } ], "desc": "<p>Called by user-code to signal that an error has occurred while processing\nthe <code>WritableStream</code> data. When called, the <a href=\"webstreams.html#class-writablestream\" class=\"type\"><WritableStream></a> will be aborted,\nwith currently pending writes canceled.</p>" } ] }, { "textRaw": "Class: `TransformStream`", "type": "class", "name": "TransformStream", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>A <code>TransformStream</code> consists of a <a href=\"webstreams.html#class-readablestream\" class=\"type\"><ReadableStream></a> and a <a href=\"webstreams.html#class-writablestream\" class=\"type\"><WritableStream></a> that\nare connected such that the data written to the <code>WritableStream</code> is received,\nand potentially transformed, before being pushed into the <code>ReadableStream</code>'s\nqueue.</p>\n<pre><code class=\"language-mjs\">import {\n TransformStream\n} from 'node:stream/web';\n\nconst transform = new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk.toUpperCase());\n }\n});\n\nawait Promise.all([\n transform.writable.getWriter().write('A'),\n transform.readable.getReader().read(),\n]);\n</code></pre>", "properties": [ { "textRaw": "`readable` Type: {ReadableStream}", "type": "ReadableStream", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] } }, { "textRaw": "`writable` Type: {WritableStream}", "type": "WritableStream", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] } } ], "modules": [ { "textRaw": "Transferring with postMessage()", "name": "transferring_with_postmessage()", "desc": "<p>A <a href=\"webstreams.html#class-transformstream\" class=\"type\"><TransformStream></a> instance can be transferred using a <a href=\"worker_threads.html#class-messageport\" class=\"type\"><MessagePort></a>.</p>\n<pre><code class=\"language-js\">const stream = new TransformStream();\n\nconst { port1, port2 } = new MessageChannel();\n\nport1.onmessage = ({ data }) => {\n const { writable, readable } = data;\n // ...\n};\n\nport2.postMessage(stream, [stream]);\n</code></pre>", "type": "module", "displayName": "Transferring with postMessage()" } ], "signatures": [ { "params": [ { "textRaw": "`transformer` {Object}", "name": "transformer", "type": "Object", "options": [ { "textRaw": "`start` {Function} A user-defined function that is invoked immediately when the `TransformStream` is created.", "name": "start", "type": "Function", "desc": "A user-defined function that is invoked immediately when the `TransformStream` is created.", "options": [ { "textRaw": "`controller` {TransformStreamDefaultController}", "name": "controller", "type": "TransformStreamDefaultController" }, { "textRaw": "Returns: `undefined` or a promise fulfilled with `undefined`", "name": "return", "desc": "`undefined` or a promise fulfilled with `undefined`" } ] }, { "textRaw": "`transform` {Function} A user-defined function that receives, and potentially modifies, a chunk of data written to `transformStream.writable`, before forwarding that on to `transformStream.readable`.", "name": "transform", "type": "Function", "desc": "A user-defined function that receives, and potentially modifies, a chunk of data written to `transformStream.writable`, before forwarding that on to `transformStream.readable`.", "options": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" }, { "textRaw": "`controller` {TransformStreamDefaultController}", "name": "controller", "type": "TransformStreamDefaultController" }, { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." } ] }, { "textRaw": "`flush` {Function} A user-defined function that is called immediately before the writable side of the `TransformStream` is closed, signaling the end of the transformation process.", "name": "flush", "type": "Function", "desc": "A user-defined function that is called immediately before the writable side of the `TransformStream` is closed, signaling the end of the transformation process.", "options": [ { "textRaw": "`controller` {TransformStreamDefaultController}", "name": "controller", "type": "TransformStreamDefaultController" }, { "textRaw": "Returns: A promise fulfilled with `undefined`.", "name": "return", "desc": "A promise fulfilled with `undefined`." } ] }, { "textRaw": "`readableType` {any} the `readableType` option is reserved for future use and _must_ be `undefined`.", "name": "readableType", "type": "any", "desc": "the `readableType` option is reserved for future use and _must_ be `undefined`." }, { "textRaw": "`writableType` {any} the `writableType` option is reserved for future use and _must_ be `undefined`.", "name": "writableType", "type": "any", "desc": "the `writableType` option is reserved for future use and _must_ be `undefined`." } ] }, { "textRaw": "`writableStrategy` {Object}", "name": "writableStrategy", "type": "Object", "options": [ { "textRaw": "`highWaterMark` {number} The maximum internal queue size before backpressure is applied.", "name": "highWaterMark", "type": "number", "desc": "The maximum internal queue size before backpressure is applied." }, { "textRaw": "`size` {Function} A user-defined function used to identify the size of each chunk of data.", "name": "size", "type": "Function", "desc": "A user-defined function used to identify the size of each chunk of data.", "options": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" }, { "textRaw": "Returns: {number}", "name": "return", "type": "number" } ] } ] }, { "textRaw": "`readableStrategy` {Object}", "name": "readableStrategy", "type": "Object", "options": [ { "textRaw": "`highWaterMark` {number} The maximum internal queue size before backpressure is applied.", "name": "highWaterMark", "type": "number", "desc": "The maximum internal queue size before backpressure is applied." }, { "textRaw": "`size` {Function} A user-defined function used to identify the size of each chunk of data.", "name": "size", "type": "Function", "desc": "A user-defined function used to identify the size of each chunk of data.", "options": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" }, { "textRaw": "Returns: {number}", "name": "return", "type": "number" } ] } ] } ] } ] }, { "textRaw": "Class: `TransformStreamDefaultController`", "type": "class", "name": "TransformStreamDefaultController", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>The <code>TransformStreamDefaultController</code> manages the internal state\nof the <code>TransformStream</code>.</p>", "properties": [ { "textRaw": "`desiredSize` Type: {number}", "type": "number", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "desc": "<p>The amount of data required to fill the readable side's queue.</p>" } ], "methods": [ { "textRaw": "`transformStreamDefaultController.enqueue([chunk])`", "type": "method", "name": "enqueue", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" } ] } ], "desc": "<p>Appends a chunk of data to the readable side's queue.</p>" }, { "textRaw": "`transformStreamDefaultController.error([reason])`", "type": "method", "name": "error", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [ { "textRaw": "`reason` {any}", "name": "reason", "type": "any" } ] } ], "desc": "<p>Signals to both the readable and writable side that an error has occurred\nwhile processing the transform data, causing both sides to be abruptly\nclosed.</p>" }, { "textRaw": "`transformStreamDefaultController.terminate()`", "type": "method", "name": "terminate", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "signatures": [ { "params": [] } ], "desc": "<p>Closes the readable side of the transport and causes the writable side\nto be abruptly closed with an error.</p>" } ] }, { "textRaw": "Class: `ByteLengthQueuingStrategy`", "type": "class", "name": "ByteLengthQueuingStrategy", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "properties": [ { "textRaw": "`highWaterMark` Type: {number}", "type": "number", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] } }, { "textRaw": "`size` Type: {Function}", "type": "Function", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "options": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" }, { "textRaw": "Returns: {number}", "name": "return", "type": "number" } ] } ], "signatures": [ { "params": [ { "textRaw": "`options` {Object}", "name": "options", "type": "Object", "options": [ { "textRaw": "`highWaterMark` {number}", "name": "highWaterMark", "type": "number" } ] } ] } ] }, { "textRaw": "Class: `CountQueuingStrategy`", "type": "class", "name": "CountQueuingStrategy", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "properties": [ { "textRaw": "`highWaterMark` Type: {number}", "type": "number", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] } }, { "textRaw": "`size` Type: {Function}", "type": "Function", "name": "Type", "meta": { "added": [ "v16.5.0" ], "changes": [] }, "options": [ { "textRaw": "`chunk` {any}", "name": "chunk", "type": "any" }, { "textRaw": "Returns: {number}", "name": "return", "type": "number" } ] } ], "signatures": [ { "params": [ { "textRaw": "`options` {Object}", "name": "options", "type": "Object", "options": [ { "textRaw": "`highWaterMark` {number}", "name": "highWaterMark", "type": "number" } ] } ] } ] }, { "textRaw": "Class: `TextEncoderStream`", "type": "class", "name": "TextEncoderStream", "meta": { "added": [ "v16.6.0" ], "changes": [] }, "properties": [ { "textRaw": "`encoding` Type: {string}", "type": "string", "name": "Type", "meta": { "added": [ "v16.6.0" ], "changes": [] }, "desc": "<p>The encoding supported by the <code>TextEncoderStream</code> instance.</p>" }, { "textRaw": "`readable` Type: {ReadableStream}", "type": "ReadableStream", "name": "Type", "meta": { "added": [ "v16.6.0" ], "changes": [] } }, { "textRaw": "`writable` Type: {WritableStream}", "type": "WritableStream", "name": "Type", "meta": { "added": [ "v16.6.0" ], "changes": [] } } ], "signatures": [ { "params": [], "desc": "<p>Creates a new <code>TextEncoderStream</code> instance.</p>" } ] }, { "textRaw": "Class: `TextDecoderStream`", "type": "class", "name": "TextDecoderStream", "meta": { "added": [ "v16.6.0" ], "changes": [] }, "properties": [ { "textRaw": "`encoding` Type: {string}", "type": "string", "name": "Type", "meta": { "added": [ "v16.6.0" ], "changes": [] }, "desc": "<p>The encoding supported by the <code>TextDecoderStream</code> instance.</p>" }, { "textRaw": "`fatal` Type: {boolean}", "type": "boolean", "name": "Type", "meta": { "added": [ "v16.6.0" ], "changes": [] }, "desc": "<p>The value will be <code>true</code> if decoding errors result in a <code>TypeError</code> being\nthrown.</p>" }, { "textRaw": "`ignoreBOM` Type: {boolean}", "type": "boolean", "name": "Type", "meta": { "added": [ "v16.6.0" ], "changes": [] }, "desc": "<p>The value will be <code>true</code> if the decoding result will include the byte order\nmark.</p>" }, { "textRaw": "`readable` Type: {ReadableStream}", "type": "ReadableStream", "name": "Type", "meta": { "added": [ "v16.6.0" ], "changes": [] } }, { "textRaw": "`writable` Type: {WritableStream}", "type": "WritableStream", "name": "Type", "meta": { "added": [ "v16.6.0" ], "changes": [] } } ], "signatures": [ { "params": [ { "textRaw": "`encoding` {string} Identifies the `encoding` that this `TextDecoder` instance supports. **Default:** `'utf-8'`.", "name": "encoding", "type": "string", "default": "`'utf-8'`", "desc": "Identifies the `encoding` that this `TextDecoder` instance supports." }, { "textRaw": "`options` {Object}", "name": "options", "type": "Object", "options": [ { "textRaw": "`fatal` {boolean} `true` if decoding failures are fatal.", "name": "fatal", "type": "boolean", "desc": "`true` if decoding failures are fatal." }, { "textRaw": "`ignoreBOM` {boolean} When `true`, the `TextDecoderStream` will include the byte order mark in the decoded result. When `false`, the byte order mark will be removed from the output. This option is only used when `encoding` is `'utf-8'`, `'utf-16be'`, or `'utf-16le'`. **Default:** `false`.", "name": "ignoreBOM", "type": "boolean", "default": "`false`", "desc": "When `true`, the `TextDecoderStream` will include the byte order mark in the decoded result. When `false`, the byte order mark will be removed from the output. This option is only used when `encoding` is `'utf-8'`, `'utf-16be'`, or `'utf-16le'`." } ] } ], "desc": "<p>Creates a new <code>TextDecoderStream</code> instance.</p>" } ] } ], "modules": [ { "textRaw": "Utility Consumers", "name": "utility_consumers", "meta": { "added": [ "v16.7.0" ], "changes": [] }, "desc": "<p>The utility consumer functions provide common options for consuming\nstreams.</p>\n<p>They are accessed using:</p>\n<pre><code class=\"language-mjs\">import {\n arrayBuffer,\n blob,\n buffer,\n json,\n text,\n} from 'node:stream/consumers';\n</code></pre>\n<pre><code class=\"language-cjs\">const {\n arrayBuffer,\n blob,\n buffer,\n json,\n text,\n} = require('node:stream/consumers');\n</code></pre>", "methods": [ { "textRaw": "`streamConsumers.arrayBuffer(stream)`", "type": "method", "name": "arrayBuffer", "meta": { "added": [ "v16.7.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: {Promise} Fulfills with an `ArrayBuffer` containing the full contents of the stream.", "name": "return", "type": "Promise", "desc": "Fulfills with an `ArrayBuffer` containing the full contents of the stream." }, "params": [ { "textRaw": "`stream` {ReadableStream|stream.Readable|AsyncIterator}", "name": "stream", "type": "ReadableStream|stream.Readable|AsyncIterator" } ] } ], "desc": "<pre><code class=\"language-mjs\">import { buffer as arrayBuffer } from 'node:stream/consumers';\nimport { Readable } from 'node:stream';\nimport { TextEncoder } from 'node:util';\n\nconst encoder = new TextEncoder();\nconst dataArray = encoder.encode('hello world from consumers!');\n\nconst readable = Readable.from(dataArray);\nconst data = await arrayBuffer(readable);\nconsole.log(`from readable: ${data.byteLength}`);\n</code></pre>\n<pre><code class=\"language-cjs\">const { arrayBuffer } = require('node:stream/consumers');\nconst { Readable } = require('stream');\nconst { TextEncoder } = require('util');\n\nconst encoder = new TextEncoder();\nconst dataArray = encoder.encode(['hello world from consumers!']);\nconst readable = Readable.from(dataArray);\narrayBuffer(readable).then((data) => {\n console.log(`from readable: ${data.byteLength}`);\n});\n</code></pre>" }, { "textRaw": "`streamConsumers.blob(stream)`", "type": "method", "name": "blob", "meta": { "added": [ "v16.7.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: {Promise} Fulfills with a {Blob} containing the full contents of the stream.", "name": "return", "type": "Promise", "desc": "Fulfills with a {Blob} containing the full contents of the stream." }, "params": [ { "textRaw": "`stream` {ReadableStream|stream.Readable|AsyncIterator}", "name": "stream", "type": "ReadableStream|stream.Readable|AsyncIterator" } ] } ], "desc": "<pre><code class=\"language-mjs\">import { blob } from 'node:stream/consumers';\n\nconst dataBlob = new Blob(['hello world from consumers!']);\n\nconst readable = dataBlob.stream();\nconst data = await blob(readable);\nconsole.log(`from readable: ${data.size}`);\n</code></pre>\n<pre><code class=\"language-cjs\">const { blob } = require('node:stream/consumers');\n\nconst dataBlob = new Blob(['hello world from consumers!']);\n\nconst readable = dataBlob.stream();\nblob(readable).then((data) => {\n console.log(`from readable: ${data.size}`);\n});\n</code></pre>" }, { "textRaw": "`streamConsumers.buffer(stream)`", "type": "method", "name": "buffer", "meta": { "added": [ "v16.7.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: {Promise} Fulfills with a {Buffer} containing the full contents of the stream.", "name": "return", "type": "Promise", "desc": "Fulfills with a {Buffer} containing the full contents of the stream." }, "params": [ { "textRaw": "`stream` {ReadableStream|stream.Readable|AsyncIterator}", "name": "stream", "type": "ReadableStream|stream.Readable|AsyncIterator" } ] } ], "desc": "<pre><code class=\"language-mjs\">import { buffer } from 'node:stream/consumers';\nimport { Readable } from 'node:stream';\nimport { Buffer } from 'node:buffer';\n\nconst dataBuffer = Buffer.from('hello world from consumers!');\n\nconst readable = Readable.from(dataBuffer);\nconst data = await buffer(readable);\nconsole.log(`from readable: ${data.length}`);\n</code></pre>\n<pre><code class=\"language-cjs\">const { buffer } = require('node:stream/consumers');\nconst { Readable } = require('node:stream');\nconst { Buffer } = require('node:buffer');\n\nconst dataBuffer = Buffer.from('hello world from consumers!');\n\nconst readable = Readable.from(dataBuffer);\nbuffer(readable).then((data) => {\n console.log(`from readable: ${data.length}`);\n});\n</code></pre>" }, { "textRaw": "`streamConsumers.json(stream)`", "type": "method", "name": "json", "meta": { "added": [ "v16.7.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: {Promise} Fulfills with the contents of the stream parsed as a UTF-8 encoded string that is then passed through `JSON.parse()`.", "name": "return", "type": "Promise", "desc": "Fulfills with the contents of the stream parsed as a UTF-8 encoded string that is then passed through `JSON.parse()`." }, "params": [ { "textRaw": "`stream` {ReadableStream|stream.Readable|AsyncIterator}", "name": "stream", "type": "ReadableStream|stream.Readable|AsyncIterator" } ] } ], "desc": "<pre><code class=\"language-mjs\">import { json } from 'node:stream/consumers';\nimport { Readable } from 'node:stream';\n\nconst items = Array.from(\n {\n length: 100\n },\n () => ({\n message: 'hello world from consumers!'\n })\n);\n\nconst readable = Readable.from(JSON.stringify(items));\nconst data = await json(readable);\nconsole.log(`from readable: ${data.length}`);\n</code></pre>\n<pre><code class=\"language-cjs\">const { json } = require('node:stream/consumers');\nconst { Readable } = require('node:stream');\n\nconst items = Array.from(\n {\n length: 100\n },\n () => ({\n message: 'hello world from consumers!'\n })\n);\n\nconst readable = Readable.from(JSON.stringify(items));\njson(readable).then((data) => {\n console.log(`from readable: ${data.length}`);\n});\n</code></pre>" }, { "textRaw": "`streamConsumers.text(stream)`", "type": "method", "name": "text", "meta": { "added": [ "v16.7.0" ], "changes": [] }, "signatures": [ { "return": { "textRaw": "Returns: {Promise} Fulfills with the contents of the stream parsed as a UTF-8 encoded string.", "name": "return", "type": "Promise", "desc": "Fulfills with the contents of the stream parsed as a UTF-8 encoded string." }, "params": [ { "textRaw": "`stream` {ReadableStream|stream.Readable|AsyncIterator}", "name": "stream", "type": "ReadableStream|stream.Readable|AsyncIterator" } ] } ], "desc": "<pre><code class=\"language-mjs\">import { json, text, blob, buffer } from 'node:stream/consumers';\nimport { Readable } from 'node:stream';\n\nconst readable = Readable.from('Hello world from consumers!');\nconst data = await text(readable);\nconsole.log(`from readable: ${data.length}`);\n</code></pre>\n<pre><code class=\"language-cjs\">const { text } = require('node:stream/consumers');\nconst { Readable } = require('node:stream');\n\nconst readable = Readable.from('Hello world from consumers!');\ntext(readable).then((data) => {\n console.log(`from readable: ${data.length}`);\n});\n</code></pre>" } ], "type": "module", "displayName": "Utility Consumers" } ], "type": "module", "displayName": "API" } ], "type": "module", "displayName": "Web Streams API" } ] }