From b361ad72ce65894a250fd0543b0e09d1a9a7edc5 Mon Sep 17 00:00:00 2001 From: Debadree Chatterjee Date: Tue, 18 Jul 2023 15:20:22 +0530 Subject: [PATCH] stream: implement ReadableStream.from Fixes: https://github.com/nodejs/node/issues/48389 PR-URL: https://github.com/nodejs/node/pull/48395 Reviewed-By: Matteo Collina Reviewed-By: Matthew Aitken Reviewed-By: Benjamin Gruenbaum --- doc/api/webstreams.md | 43 ++ lib/internal/webstreams/readablestream.js | 59 +++ lib/internal/webstreams/util.js | 53 ++ test/fixtures/wpt/README.md | 2 +- .../streams/piping/general-addition.any.js | 15 + .../wpt/streams/readable-streams/from.any.js | 474 ++++++++++++++++++ .../owning-type-message-port.any.js | 49 ++ .../owning-type-video-frame.any.js | 128 +++++ .../readable-streams/owning-type.any.js | 91 ++++ .../read-task-handling.window.js | 46 ++ .../transform-stream-members.any.js | 16 + .../invalid-realm.tentative.window.js | 17 + test/fixtures/wpt/versions.json | 2 +- test/wpt/status/streams.json | 43 ++ 14 files changed, 1036 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/wpt/streams/piping/general-addition.any.js create mode 100644 test/fixtures/wpt/streams/readable-streams/from.any.js create mode 100644 test/fixtures/wpt/streams/readable-streams/owning-type-message-port.any.js create mode 100644 test/fixtures/wpt/streams/readable-streams/owning-type-video-frame.any.js create mode 100644 test/fixtures/wpt/streams/readable-streams/owning-type.any.js create mode 100644 test/fixtures/wpt/streams/readable-streams/read-task-handling.window.js create mode 100644 test/fixtures/wpt/streams/transferable/transform-stream-members.any.js create mode 100644 test/fixtures/wpt/streams/transform-streams/invalid-realm.tentative.window.js diff --git a/doc/api/webstreams.md b/doc/api/webstreams.md index a413beb7174fd4..bb3374e1480e73 100644 --- a/doc/api/webstreams.md +++ b/doc/api/webstreams.md @@ -387,6 +387,49 @@ port1.onmessage = ({ data }) => { port2.postMessage(stream, [stream]); ``` +### `ReadableStream.from(iterable)` + + + +* `iterable` {Iterable} Object implementing the `Symbol.asyncIterator` or + `Symbol.iterator` iterable protocol. + +A utility method that creates a new {ReadableStream} from an iterable. + +```mjs +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' +``` + +```cjs +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' +})(); +``` + ### Class: `ReadableStreamDefaultReader`