@@ -541,3 +541,69 @@ function safeParseJSON(data: string): unknown {
541541 return data ;
542542 }
543543}
544+
545+ const isSafari = ( ) => {
546+ // Check if we're in a browser environment
547+ if (
548+ typeof window !== "undefined" &&
549+ typeof navigator !== "undefined" &&
550+ typeof navigator . userAgent === "string"
551+ ) {
552+ return (
553+ / ^ ( (? ! c h r o m e | a n d r o i d ) .) * s a f a r i / i. test ( navigator . userAgent ) ||
554+ / i P a d | i P h o n e | i P o d / . test ( navigator . userAgent )
555+ ) ;
556+ }
557+ // If we're not in a browser environment, return false
558+ return false ;
559+ } ;
560+
561+ /**
562+ * A polyfill for `ReadableStream.protototype[Symbol.asyncIterator]`,
563+ * aligning as closely as possible to the specification.
564+ *
565+ * @see https://streams.spec.whatwg.org/#rs-asynciterator
566+ * @see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream#async_iteration
567+ *
568+ * This is needed for Safari: https://bugs.webkit.org/show_bug.cgi?id=194379
569+ *
570+ * From https://gist.github.com/MattiasBuelens/496fc1d37adb50a733edd43853f2f60e
571+ *
572+ */
573+
574+ if ( isSafari ( ) ) {
575+ // @ts -expect-error
576+ ReadableStream . prototype . values ??= function ( { preventCancel = false } = { } ) {
577+ const reader = this . getReader ( ) ;
578+ return {
579+ async next ( ) {
580+ try {
581+ const result = await reader . read ( ) ;
582+ if ( result . done ) {
583+ reader . releaseLock ( ) ;
584+ }
585+ return result ;
586+ } catch ( e ) {
587+ reader . releaseLock ( ) ;
588+ throw e ;
589+ }
590+ } ,
591+ async return ( value : unknown ) {
592+ if ( ! preventCancel ) {
593+ const cancelPromise = reader . cancel ( value ) ;
594+ reader . releaseLock ( ) ;
595+ await cancelPromise ;
596+ } else {
597+ reader . releaseLock ( ) ;
598+ }
599+ return { done : true , value } ;
600+ } ,
601+ [ Symbol . asyncIterator ] ( ) {
602+ return this ;
603+ } ,
604+ } ;
605+ } ;
606+
607+ // @ts -expect-error
608+ ReadableStream . prototype [ Symbol . asyncIterator ] ??= ReadableStream . prototype . values ;
609+ }
0 commit comments