Skip to content

Commit 52c3e08

Browse files
fix(client): unmarshal stream events into fresh memory (#340)
1 parent c0b4842 commit 52c3e08

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

Diff for: packages/ssestream/ssestream.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -161,17 +161,19 @@ func (s *Stream[T]) Next() bool {
161161
s.done = true
162162
continue
163163
}
164-
164+
165+
var nxt T
165166
if s.decoder.Event().Type == "" || strings.HasPrefix(s.decoder.Event().Type, "response.") {
166167
ep := gjson.GetBytes(s.decoder.Event().Data, "error")
167168
if ep.Exists() {
168169
s.err = fmt.Errorf("received error while streaming: %s", ep.String())
169170
return false
170171
}
171-
s.err = json.Unmarshal(s.decoder.Event().Data, &s.cur)
172+
s.err = json.Unmarshal(s.decoder.Event().Data, &nxt)
172173
if s.err != nil {
173174
return false
174175
}
176+
s.cur = nxt
175177
return true
176178
} else {
177179
ep := gjson.GetBytes(s.decoder.Event().Data, "error")
@@ -181,10 +183,11 @@ func (s *Stream[T]) Next() bool {
181183
}
182184
event := s.decoder.Event().Type
183185
data := s.decoder.Event().Data
184-
s.err = json.Unmarshal([]byte(fmt.Sprintf(`{ "event": %q, "data": %s }`, event, data)), &s.cur)
186+
s.err = json.Unmarshal([]byte(fmt.Sprintf(`{ "event": %q, "data": %s }`, event, data)), &nxt)
185187
if s.err != nil {
186188
return false
187189
}
190+
s.cur = nxt
188191
return true
189192
}
190193
}

0 commit comments

Comments
 (0)