summaryrefslogtreecommitdiff
path: root/std/io/streams.ts
blob: 3969746ef50a6cc550ff3c456609a3b1f70fed8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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);
    },
  };
}