hts/packages/isdk/core/util/async-iterable-stream.ts

23 lines
668 B
TypeScript

export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;
export function createAsyncIterableStream<S, T>(
source: ReadableStream<S>,
transformer: Transformer<S, T>,
): AsyncIterableStream<T> {
const transformedStream: any = source.pipeThrough(
new TransformStream(transformer),
);
transformedStream[Symbol.asyncIterator] = () => {
const reader = transformedStream.getReader();
return {
async next(): Promise<IteratorResult<string>> {
const { done, value } = await reader.read();
return done ? { done: true, value: undefined } : { done: false, value };
},
};
};
return transformedStream;
}