@@ -2,6 +2,7 @@ package streams
2
2
3
3
import (
4
4
"github.com/grafana/sobek"
5
+
5
6
"go.k6.io/k6/js/common"
6
7
"go.k6.io/k6/js/modules"
7
8
)
@@ -35,10 +36,10 @@ type ReadableStreamGenericReader interface {
35
36
SetStream (stream * ReadableStream )
36
37
37
38
// GetClosed returns a [sobek.Promise] that resolves when the stream is closed.
38
- GetClosed () (p * sobek.Promise , resolve func ( any ) , reject func (any ))
39
+ GetClosed () (p * sobek.Promise , resolve , reject func (any ) error )
39
40
40
41
// SetClosed sets the [sobek.Promise] that resolves when the stream is closed.
41
- SetClosed (p * sobek.Promise , resolve func ( any ) , reject func (any ))
42
+ SetClosed (p * sobek.Promise , resolve , reject func (any ) error )
42
43
43
44
// Cancel returns a [sobek.Promise] that resolves when the stream is canceled.
44
45
Cancel (reason sobek.Value ) * sobek.Promise
@@ -47,8 +48,8 @@ type ReadableStreamGenericReader interface {
47
48
// BaseReadableStreamReader is a base implement
48
49
type BaseReadableStreamReader struct {
49
50
closedPromise * sobek.Promise
50
- closedPromiseResolveFunc func (resolve any )
51
- closedPromiseRejectFunc func (reason any )
51
+ closedPromiseResolveFunc func (resolve any ) error
52
+ closedPromiseRejectFunc func (reason any ) error
52
53
53
54
// stream is a [ReadableStream] instance that owns this reader
54
55
stream * ReadableStream
@@ -73,12 +74,12 @@ func (reader *BaseReadableStreamReader) SetStream(stream *ReadableStream) {
73
74
}
74
75
75
76
// GetClosed returns the reader's closed promise as well as its resolve and reject functions.
76
- func (reader * BaseReadableStreamReader ) GetClosed () (p * sobek.Promise , resolve func ( any ) , reject func (any )) {
77
+ func (reader * BaseReadableStreamReader ) GetClosed () (p * sobek.Promise , resolve , reject func (any ) error ) {
77
78
return reader .closedPromise , reader .closedPromiseResolveFunc , reader .closedPromiseRejectFunc
78
79
}
79
80
80
81
// SetClosed sets the reader's closed promise as well as its resolve and reject functions.
81
- func (reader * BaseReadableStreamReader ) SetClosed (p * sobek.Promise , resolve func ( any ) , reject func (any )) {
82
+ func (reader * BaseReadableStreamReader ) SetClosed (p * sobek.Promise , resolve , reject func (any ) error ) {
82
83
reader .closedPromise = p
83
84
reader .closedPromiseResolveFunc = resolve
84
85
reader .closedPromiseRejectFunc = reject
@@ -133,7 +134,10 @@ func (reader *BaseReadableStreamReader) release() {
133
134
134
135
// 4. If stream.[[state]] is "readable", reject reader.[[closedPromise]] with a TypeError exception.
135
136
if stream .state == ReadableStreamStateReadable {
136
- reader .closedPromiseRejectFunc (newTypeError (reader .runtime , "stream is readable" ).Err ())
137
+ err := reader .closedPromiseRejectFunc (newTypeError (reader .runtime , "stream is readable" ).Err ())
138
+ if err != nil {
139
+ panic (err )
140
+ }
137
141
} else { // 5. Otherwise, set reader.[[closedPromise]] to a promise rejected with a TypeError exception.
138
142
reader .closedPromise = newRejectedPromise (stream .vu , newTypeError (reader .runtime , "stream is not readable" ).Err ())
139
143
}
@@ -196,7 +200,10 @@ func ReadableStreamReaderGenericInitialize(reader ReadableStreamGenericReader, s
196
200
// 4. Otherwise, if stream.[[state]] is "closed",
197
201
case ReadableStreamStateClosed :
198
202
// 4.1 Set reader.[[closedPromise]] to a promise resolved with undefined.
199
- resolve (sobek .Undefined ())
203
+ err := resolve (sobek .Undefined ())
204
+ if err != nil {
205
+ panic (err ) // TODO(@mstoykov): probably better to move them out as errors
206
+ }
200
207
// 5. Otherwise,
201
208
default :
202
209
// 5.1 Assert: stream.[[state]] is "errored".
@@ -206,9 +213,15 @@ func ReadableStreamReaderGenericInitialize(reader ReadableStreamGenericReader, s
206
213
207
214
// 5.2 Set reader.[[closedPromise]] to a promise rejected with stream.[[storedError]].
208
215
if jsErr , ok := stream .storedError .(* jsError ); ok {
209
- reject (jsErr .Err ())
216
+ err := reject (jsErr .Err ())
217
+ if err != nil {
218
+ panic (err )
219
+ }
210
220
} else {
211
- reject (errToObj (stream .runtime , stream .storedError ))
221
+ err := reject (errToObj (stream .runtime , stream .storedError ))
222
+ if err != nil {
223
+ panic (err )
224
+ }
212
225
}
213
226
214
227
// 5.3 Set reader.[[closedPromise]].[[PromiseIsHandled]] to true.
0 commit comments