@@ -2,6 +2,7 @@ import { AnthropicError } from './error';
22import { type ReadableStream } from './internal/shim-types' ;
33import { makeReadableStream } from './internal/shims' ;
44import { LineDecoder } from './internal/decoders/line' ;
5+ import { ReadableStreamToAsyncIterable } from './internal/shims' ;
56
67import { APIError } from './error' ;
78
@@ -93,7 +94,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
9394 async function * iterLines ( ) : AsyncGenerator < string , void , unknown > {
9495 const lineDecoder = new LineDecoder ( ) ;
9596
96- const iter = readableStreamAsyncIterable < Bytes > ( readableStream ) ;
97+ const iter = ReadableStreamToAsyncIterable < Bytes > ( readableStream ) ;
9798 for await ( const chunk of iter ) {
9899 for ( const line of lineDecoder . decode ( chunk ) ) {
99100 yield line ;
@@ -207,7 +208,7 @@ export async function* _iterSSEMessages(
207208 const sseDecoder = new SSEDecoder ( ) ;
208209 const lineDecoder = new LineDecoder ( ) ;
209210
210- const iter = readableStreamAsyncIterable < Bytes > ( response . body ) ;
211+ const iter = ReadableStreamToAsyncIterable < Bytes > ( response . body ) ;
211212 for await ( const sseChunk of iterSSEChunks ( iter ) ) {
212213 for ( const line of lineDecoder . decode ( sseChunk ) ) {
213214 const sse = sseDecoder . decode ( line ) ;
@@ -360,36 +361,3 @@ function partition(str: string, delimiter: string): [string, string, string] {
360361
361362 return [ str , '' , '' ] ;
362363}
363-
364- /**
365- * Most browsers don't yet have async iterable support for ReadableStream,
366- * and Node has a very different way of reading bytes from its "ReadableStream".
367- *
368- * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
369- */
370- export function readableStreamAsyncIterable < T > ( stream : any ) : AsyncIterableIterator < T > {
371- if ( stream [ Symbol . asyncIterator ] ) return stream ;
372-
373- const reader = stream . getReader ( ) ;
374- return {
375- async next ( ) {
376- try {
377- const result = await reader . read ( ) ;
378- if ( result ?. done ) reader . releaseLock ( ) ; // release lock when stream becomes closed
379- return result ;
380- } catch ( e ) {
381- reader . releaseLock ( ) ; // release lock when stream becomes errored
382- throw e ;
383- }
384- } ,
385- async return ( ) {
386- const cancelPromise = reader . cancel ( ) ;
387- reader . releaseLock ( ) ;
388- await cancelPromise ;
389- return { done : true , value : undefined } ;
390- } ,
391- [ Symbol . asyncIterator ] ( ) {
392- return this ;
393- } ,
394- } ;
395- }
0 commit comments