From 3cb9e2046ba652a75f2be6b8acdb13d7e70a852c Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 26 Jan 2026 17:11:14 -0500 Subject: [PATCH 1/2] Document fromReadableStream method of Streams - Refs #1254 --- .../src/content/docs/docs/stream/creating.mdx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/content/src/content/docs/docs/stream/creating.mdx b/content/src/content/docs/docs/stream/creating.mdx index e28359e2e..938bacd8c 100644 --- a/content/src/content/docs/docs/stream/creating.mdx +++ b/content/src/content/docs/docs/stream/creating.mdx @@ -279,6 +279,30 @@ Effect.runPromise(Stream.runCollect(stream)).then(console.log) In this code, we define an async iterable and then create a stream named `stream` from it. Additionally, we provide an error handler function to manage any potential errors that may occur during the conversion. +### fromReadableStream + +If you have a [ReadableStream](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream) from a web API, you can pull it into a `Stream` using `fromReadableStream`. On many platforms, ReadableStream instances are iterable, so you can also use `fromAsyncIterable` for this purpose. + +```ts +import { Effect, Stream } from "effect" + +const countStream = new ReadableStream({ + start(controller) { + controller.enqueue(1) + controller.enqueue(2) + controller.close() + } +}) + +const stream = Stream.fromReadableStream( + () => countStream, + (e) => new Error(String(e)) // Error Handling +) + +Effect.runPromise(Stream.runCollect(stream)).then(console.log) +// { _id: 'Chunk', values: [ 1, 2 ] } +``` + ## From Repetition ### Repeating a Single Value From 945759ee0c4c6101dbe3dce6717e4c845cb28175 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Wed, 28 Jan 2026 13:49:03 -0500 Subject: [PATCH 2/2] Construct new stream instance for each call --- content/src/content/docs/docs/stream/creating.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/src/content/docs/docs/stream/creating.mdx b/content/src/content/docs/docs/stream/creating.mdx index 938bacd8c..39023bc6a 100644 --- a/content/src/content/docs/docs/stream/creating.mdx +++ b/content/src/content/docs/docs/stream/creating.mdx @@ -286,7 +286,7 @@ If you have a [ReadableStream](https://developer.mozilla.org/en-US/docs/Web/API/ ```ts import { Effect, Stream } from "effect" -const countStream = new ReadableStream({ +const getCountStream = () => new ReadableStream({ start(controller) { controller.enqueue(1) controller.enqueue(2) @@ -295,7 +295,7 @@ const countStream = new ReadableStream({ }) const stream = Stream.fromReadableStream( - () => countStream, + getCountStream, (e) => new Error(String(e)) // Error Handling )