@@ -77,13 +77,19 @@ export function createJsonSseStream<T = unknown>(
7777 if ( ! trimmed ) {
7878 continue ;
7979 }
80- yield parseJsonLine < T > ( trimmed ) ;
80+ const parsed = tryParseJsonLine < T > ( trimmed ) ;
81+ if ( parsed ) {
82+ yield parsed ;
83+ }
8184 }
8285 }
8386
8487 const remaining = buffer . trim ( ) ;
8588 if ( remaining ) {
86- yield parseJsonLine < T > ( remaining ) ;
89+ const parsed = tryParseJsonLine < T > ( remaining ) ;
90+ if ( parsed ) {
91+ yield parsed ;
92+ }
8793 }
8894
8995 const exitCode = await process . exited ;
@@ -113,15 +119,35 @@ export function createJsonSseStream<T = unknown>(
113119 return { events, close, process } ;
114120}
115121
116- function parseJsonLine < T > ( line : string ) : JsonSseEvent < T > {
122+ function tryParseJsonLine < T > ( line : string ) : JsonSseEvent < T > | null {
123+ const payload = normalizeJsonPayload ( line ) ;
124+ if ( payload === null ) {
125+ return null ;
126+ }
127+
117128 try {
118- const data = JSON . parse ( line ) as T ;
129+ const data = JSON . parse ( payload ) as T ;
119130 return { data, raw : line } ;
120- } catch ( error ) {
121- const message =
122- error instanceof Error ? error . message : "Unknown JSON parse error" ;
123- throw new Error ( `Invalid JSON from bee stream: ${ message } ` ) ;
131+ } catch {
132+ return null ;
133+ }
134+ }
135+
136+ function normalizeJsonPayload ( line : string ) : string | null {
137+ if ( line . startsWith ( ":" ) ) {
138+ return null ;
139+ }
140+ if ( line . startsWith ( "event:" ) || line . startsWith ( "id:" ) ) {
141+ return null ;
142+ }
143+ if ( line . startsWith ( "data:" ) ) {
144+ const payload = line . slice ( "data:" . length ) . trimStart ( ) ;
145+ if ( ! payload || payload === "[DONE]" ) {
146+ return null ;
147+ }
148+ return payload ;
124149 }
150+ return line ;
125151}
126152
127153function readStream (
0 commit comments