Skip to content
This repository was archived by the owner on Jul 5, 2024. It is now read-only.

Commit d190fa6

Browse files
authored
fix: handle NodeJS.ReadableStream (#81)
1 parent 44488a6 commit d190fa6

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

src/async/iterableUtils.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
11
import { assert } from "../internals/assert.js";
2+
import {
3+
NodeJSReadableStreamEsque,
4+
WebReadableStreamEsque,
5+
} from "../internals/esque.js";
26

37
export async function* readableStreamToAsyncIterable<T>(
4-
stream: ReadableStream<T>,
8+
stream:
9+
| NodeJSReadableStreamEsque
10+
| ReadableStream<T>
11+
| WebReadableStreamEsque,
512
): AsyncIterable<T> {
13+
if (Symbol.asyncIterator in stream) {
14+
// NodeJS.ReadableStream
15+
for await (const chunk of stream) {
16+
yield chunk as T;
17+
}
18+
19+
return;
20+
}
21+
622
// Get a lock on the stream
723
const reader = stream.getReader();
824

@@ -18,7 +34,7 @@ export async function* readableStreamToAsyncIterable<T>(
1834
}
1935

2036
// Else yield the chunk
21-
yield result.value;
37+
yield result.value as T;
2238
}
2339
} finally {
2440
reader.releaseLock();

src/internals/esque.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,19 @@
44
export interface TextDecoderEsque {
55
decode(chunk: Uint8Array): string;
66
}
7+
8+
/**
9+
* A subset of the standard ReadableStream properties needed by tRPC internally.
10+
* @see ReadableStream from lib.dom.d.ts
11+
* @internal
12+
*/
13+
export interface WebReadableStreamEsque {
14+
getReader: () => ReadableStreamDefaultReader<Uint8Array>;
15+
}
16+
17+
/**
18+
* @see NodeJS.ReadableStream from @types/node
19+
*/
20+
export interface NodeJSReadableStreamEsque {
21+
[Symbol.asyncIterator]: () => AsyncIterableIterator<unknown>;
22+
}

0 commit comments

Comments
 (0)