Skip to content

Commit df769d0

Browse files
committed
add ensureAsyncIterable()
1 parent 49d9b38 commit df769d0

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

src/decodeAsync.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
import { Decoder } from "./Decoder";
22
import { defaultDecodeOptions, DecodeOptions } from "./decode";
3-
import { isReadableStream, asyncIterableFromStream } from "./utils/stream";
3+
import { ensureAsyncIterabe, ReadableStreamLike } from "./utils/stream";
44

55
export type DecodeAsyncOptions = DecodeOptions;
66
export const defaultDecodeAsyncOptions = defaultDecodeOptions;
77

8-
type StreamLike<T> = AsyncIterable<T> | ReadableStream<T>;
9-
108
export async function decodeAsync(
11-
streamLike: StreamLike<Uint8Array | ArrayLike<number>>,
9+
streamLike: ReadableStreamLike<Uint8Array | ArrayLike<number>>,
1210
options: DecodeAsyncOptions = defaultDecodeOptions,
1311
): Promise<unknown> {
14-
const stream = isReadableStream(streamLike) ? asyncIterableFromStream(streamLike) : streamLike;
12+
const stream = ensureAsyncIterabe(streamLike);
1513

1614
const decoder = new Decoder(
1715
options.extensionCodec,
@@ -25,10 +23,10 @@ export async function decodeAsync(
2523
}
2624

2725
export async function* decodeArrayStream(
28-
streamLike: StreamLike<Uint8Array | ArrayLike<number>>,
26+
streamLike: ReadableStreamLike<Uint8Array | ArrayLike<number>>,
2927
options: DecodeAsyncOptions = defaultDecodeOptions,
3028
) {
31-
const stream = isReadableStream(streamLike) ? asyncIterableFromStream(streamLike) : streamLike;
29+
const stream = ensureAsyncIterabe(streamLike);
3230

3331
const decoder = new Decoder(
3432
options.extensionCodec,

src/utils/stream.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// utility for whatwg streams
22

3+
export type ReadableStreamLike<T> = AsyncIterable<T> | ReadableStream<T>;
4+
35
export function isReadableStream<T>(object: unknown): object is ReadableStream<T> {
46
return typeof ReadableStream !== "undefined" && object instanceof ReadableStream;
57
}
@@ -19,3 +21,11 @@ export async function* asyncIterableFromStream<T>(stream: ReadableStream<T>): As
1921
reader.releaseLock();
2022
}
2123
}
24+
25+
export function ensureAsyncIterabe<T>(streamLike: ReadableStreamLike<T>): AsyncIterable<T> {
26+
if (isReadableStream(streamLike)) {
27+
return asyncIterableFromStream(streamLike);
28+
} else {
29+
return streamLike;
30+
}
31+
}

0 commit comments

Comments
 (0)