Skip to content

Commit 65a48ba

Browse files
authored
Merge pull request #169 from syumai/fix-bug-fixed-stream
fix bug of FixedLengthTransformStream
2 parents fab4314 + a755611 commit 65a48ba

File tree

5 files changed

+19
-13
lines changed

5 files changed

+19
-13
lines changed

_examples/hello/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ dev:
44

55
.PHONY: build
66
build:
7-
go run ../../cmd/workers-assets-gen
8-
tinygo build -o ./build/app.wasm -target wasm -no-debug ./...
7+
go run ../../cmd/workers-assets-gen -mode=go
8+
GOOS=js GOARCH=wasm go build -o ./build/app.wasm .
99

1010
.PHONY: deploy
1111
deploy:

_examples/hello/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
This project requires these tools to be installed globally.
1616

1717
* wrangler
18-
* tinygo
18+
* Go
1919

2020
### Commands
2121

internal/jshttp/response.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,14 @@ func newJSResponse(statusCode int, headers http.Header, contentLength int64, bod
5252
status == http.StatusNotModified {
5353
return jsutil.ResponseClass.New(jsutil.Null, respInit)
5454
}
55-
var readableStream js.Value
56-
if rawBody != nil {
57-
readableStream = *rawBody
58-
} else if contentLength > 0 {
59-
readableStream = jsutil.ConvertReaderToFixedLengthStream(body, contentLength)
60-
} else {
61-
readableStream = jsutil.ConvertReaderToReadableStream(body)
62-
}
55+
readableStream := func() js.Value {
56+
if rawBody != nil {
57+
return *rawBody
58+
}
59+
if !jsutil.MaybeFixedLengthStreamClass.IsUndefined() && contentLength > 0 {
60+
return jsutil.ConvertReaderToFixedLengthStream(body, contentLength)
61+
}
62+
return jsutil.ConvertReaderToReadableStream(body)
63+
}()
6364
return jsutil.ResponseClass.New(readableStream, respInit)
6465
}

internal/jsutil/jsutil.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@ var (
1919
Uint8ClampedArrayClass = js.Global().Get("Uint8ClampedArray")
2020
ErrorClass = js.Global().Get("Error")
2121
ReadableStreamClass = js.Global().Get("ReadableStream")
22-
FixedLengthStreamClass = js.Global().Get("FixedLengthStream")
2322
DateClass = js.Global().Get("Date")
2423
Null = js.ValueOf(nil)
24+
// MaybeFixedLengthStreamClass is a class for FixedLengthStream.
25+
// * This class is only available in Cloudflare Workers.
26+
// * If this class is not available, the value will be undefined.
27+
MaybeFixedLengthStreamClass = js.Global().Get("FixedLengthStream")
2528
)
2629

2730
func NewObject() js.Value {

internal/jsutil/stream.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,12 @@ func ConvertReaderToReadableStream(reader io.ReadCloser) js.Value {
208208

209209
// ConvertReaderToFixedLengthStream converts io.ReadCloser to TransformStream.
210210
func ConvertReaderToFixedLengthStream(rc io.ReadCloser, size int64) js.Value {
211-
stream := FixedLengthStreamClass.New(js.ValueOf(size))
211+
stream := MaybeFixedLengthStreamClass.New(js.ValueOf(size))
212212
go func(writer js.Value) {
213213
defer rc.Close()
214214

215215
chunk := make([]byte, min(size, defaultChunkSize))
216+
AwaitPromise(writer.Get("ready"))
216217
for {
217218
n, err := rc.Read(chunk)
218219
if n > 0 {
@@ -221,6 +222,7 @@ func ConvertReaderToFixedLengthStream(rc io.ReadCloser, size int64) js.Value {
221222
writer.Call("write", b)
222223
}
223224
if err != nil {
225+
AwaitPromise(writer.Get("ready"))
224226
writer.Call("close")
225227
return
226228
}

0 commit comments

Comments
 (0)