summaryrefslogtreecommitdiff
path: root/std/io/streams.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/io/streams.ts')
-rw-r--r--std/io/streams.ts34
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);
+ },
+ };
+}