From a829fa8f57a2063492aab564ec1f15da21eb851c Mon Sep 17 00:00:00 2001 From: Marcos Casagrande Date: Sat, 27 Jun 2020 22:55:01 +0200 Subject: feat(std/io): add fromStreamReader, fromStreamWriter (#5789) --- std/io/streams.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 std/io/streams.ts (limited to 'std/io/streams.ts') 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 +): Deno.Writer { + return { + async write(p: Uint8Array): Promise { + await streamWriter.ready; + await streamWriter.write(p); + return p.length; + }, + }; +} + +export function fromStreamReader( + streamReader: ReadableStreamDefaultReader +): Deno.Reader { + const buffer = new Deno.Buffer(); + + return { + async read(p: Uint8Array): Promise { + if (buffer.empty()) { + const res = await streamReader.read(); + if (res.done) { + return null; // EOF + } + + await Deno.writeAll(buffer, res.value); + } + + return buffer.read(p); + }, + }; +} -- cgit v1.2.3