Skip to content

Instantly share code, notes, and snippets.

@qwtel
Created October 12, 2020 09:02

Revisions

  1. qwtel created this gist Oct 12, 2020.
    21 changes: 21 additions & 0 deletions whatwg-stream-to-async-iterable.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    export async function* streamToAsyncIterable<T>(stream: ReadableStream<T>): AsyncIterableIterator<T> {
    const reader = stream.getReader();
    try {
    while (true) {
    const { done, value } = await reader.read();
    if (done) return;
    yield value;
    }
    } finally { reader.releaseLock() }
    }

    export function asyncIterableToStream<T>(asyncIterable: AsyncIterable<T>): ReadableStream<T> {
    const { readable, writable } = new TransformStream<T, T>();
    (async () => {
    const writer = writable.getWriter();
    try {
    for await (const x of asyncIterable) writer.write(x);
    } finally { writer.close() }
    })();
    return readable;
    }