diff options
Diffstat (limited to 'std/io/streams.ts')
-rw-r--r-- | std/io/streams.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/std/io/streams.ts b/std/io/streams.ts new file mode 100644 index 000000000..3969746ef --- /dev/null +++ b/std/io/streams.ts @@ -0,0 +1,34 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. + +export function fromStreamWriter( + streamWriter: WritableStreamDefaultWriter<Uint8Array> +): Deno.Writer { + return { + async write(p: Uint8Array): Promise<number> { + await streamWriter.ready; + await streamWriter.write(p); + return p.length; + }, + }; +} + +export function fromStreamReader( + streamReader: ReadableStreamDefaultReader<Uint8Array> +): Deno.Reader { + const buffer = new Deno.Buffer(); + + return { + async read(p: Uint8Array): Promise<number | null> { + if (buffer.empty()) { + const res = await streamReader.read(); + if (res.done) { + return null; // EOF + } + + await Deno.writeAll(buffer, res.value); + } + + return buffer.read(p); + }, + }; +} |