import { ReadableStreamLike } from '../types'; | |
import { isFunction } from './isFunction'; | |
export async function* readableStreamLikeToAsyncGenerator<T>(readableStream: ReadableStreamLike<T>): AsyncGenerator<T> { | |
const reader = readableStream.getReader(); | |
try { | |
while (true) { | |
const { value, done } = await reader.read(); | |
if (done) { | |
return; | |
} | |
yield value!; | |
} | |
} finally { | |
reader.releaseLock(); | |
} | |
} | |
export function isReadableStreamLike<T>(obj: any): obj is ReadableStreamLike<T> { | |
// We don't want to use instanceof checks because they would return | |
// false for instances from another Realm, like an <iframe>. | |
return isFunction(obj?.getReader); | |
} | |