diff options
Diffstat (limited to 'cli/js/io.ts')
-rw-r--r-- | cli/js/io.ts | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/cli/js/io.ts b/cli/js/io.ts index b5af34224..023718100 100644 --- a/cli/js/io.ts +++ b/cli/js/io.ts @@ -84,23 +84,32 @@ export async function copy(dst: Writer, src: Reader): Promise<number> { return n; } -export function toAsyncIterator(r: Reader): AsyncIterableIterator<Uint8Array> { - const b = new Uint8Array(1024); - return { - [Symbol.asyncIterator](): AsyncIterableIterator<Uint8Array> { - return this; - }, - - async next(): Promise<IteratorResult<Uint8Array>> { - const result = await r.read(b); - if (result === EOF) { - return { value: new Uint8Array(), done: true }; - } - - return { - value: b.subarray(0, result), - done: false, - }; - }, - }; +export async function* iter( + r: Reader, + bufSize?: number +): AsyncIterableIterator<Uint8Array> { + const b = new Uint8Array(bufSize ?? 1024); + while (true) { + const result = await r.read(b); + if (result === EOF) { + break; + } + + yield b.subarray(0, result); + } +} + +export function* iterSync( + r: SyncReader, + bufSize?: number +): IterableIterator<Uint8Array> { + const b = new Uint8Array(bufSize ?? 1024); + while (true) { + const result = r.readSync(b); + if (result === EOF) { + break; + } + + yield b.subarray(0, result); + } } |