diff options
author | crowlKats <13135287+crowlKats@users.noreply.github.com> | 2020-11-19 13:39:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-19 07:39:45 -0500 |
commit | 723fbb8f68eeaf6e5c14d9f8ac2c32f986ed60d9 (patch) | |
tree | acf5fc7dbf171fc902a09757756689a309b04b35 /std/io/streams.ts | |
parent | 315d889afa38e976b106a3769cab206db31d5ce8 (diff) |
feat(std/io): ReadableStream from AsyncIterator & WritableStream from Writer (#8378)
Diffstat (limited to 'std/io/streams.ts')
-rw-r--r-- | std/io/streams.ts | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/std/io/streams.ts b/std/io/streams.ts index 1d4e3e12c..2c4fbb6b9 100644 --- a/std/io/streams.ts +++ b/std/io/streams.ts @@ -1,7 +1,7 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -/** Create a `Writer` from a `WritablseStreamDefaultReader`. */ -export function fromStreamWriter( +/** Create a `Writer` from a `WritableStreamDefaultReader`. */ +export function writerFromStreamWriter( streamWriter: WritableStreamDefaultWriter<Uint8Array>, ): Deno.Writer { return { @@ -13,8 +13,8 @@ export function fromStreamWriter( }; } -/** Create a `Reader` from a `ReadableSteramDefaultReader`. */ -export function fromStreamReader( +/** Create a `Reader` from a `ReadableStreamDefaultReader`. */ +export function readerFromStreamReader( streamReader: ReadableStreamDefaultReader<Uint8Array>, ): Deno.Reader { const buffer = new Deno.Buffer(); @@ -34,3 +34,31 @@ export function fromStreamReader( }, }; } + +/** Create a `WritableStream` from a `Writer`. */ +export function writableStreamFromWriter( + writer: Deno.Writer, +): WritableStream<Uint8Array> { + return new WritableStream({ + async write(chunk) { + await Deno.writeAll(writer, chunk); + }, + }); +} + +/** Create a `ReadableStream` from an `AsyncIterator`. */ +export function readableStreamFromAsyncIterator<T>( + iterator: AsyncIterableIterator<T>, +): ReadableStream<T> { + return new ReadableStream({ + async pull(controller) { + const { value, done } = await iterator.next(); + + if (done) { + controller.close(); + } else { + controller.enqueue(value); + } + }, + }); +} |