23 lines
668 B
TypeScript
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;
|
|
}
|