split jshttp from jsutil

This commit is contained in:
syumai 2023-02-23 23:20:21 +09:00
parent 88f0dc1798
commit de512c97e0
5 changed files with 19 additions and 13 deletions

View File

@ -9,6 +9,7 @@ import (
"strings"
"syscall/js"
"github.com/syumai/workers/internal/jshttp"
"github.com/syumai/workers/internal/jsutil"
)
@ -92,7 +93,7 @@ func toHeader(headers js.Value) http.Header {
func toJSRequest(req *http.Request) js.Value {
jsReqOptions := jsutil.NewObject()
jsReqOptions.Set("method", req.Method)
jsReqOptions.Set("headers", jsutil.ToJSHeader(req.Header))
jsReqOptions.Set("headers", jshttp.ToJSHeader(req.Header))
jsReqBody := js.Undefined()
if req.Body != nil {
jsReqBody = jsutil.ConvertReaderToReadableStream(req.Body)

View File

@ -7,6 +7,7 @@ import (
"net/http"
"syscall/js"
"github.com/syumai/workers/internal/jshttp"
"github.com/syumai/workers/internal/jsutil"
"github.com/syumai/workers/internal/runtimecontext"
)
@ -47,14 +48,14 @@ func handleRequest(reqObj js.Value, runtimeCtxObj js.Value) (js.Value, error) {
if httpHandler == nil {
return js.Value{}, fmt.Errorf("Serve must be called before handleRequest.")
}
req, err := jsutil.ToRequest(reqObj)
req, err := jshttp.ToRequest(reqObj)
if err != nil {
panic(err)
}
ctx := runtimecontext.New(context.Background(), runtimeCtxObj)
req = req.WithContext(ctx)
reader, writer := io.Pipe()
w := &jsutil.ResponseWriterBuffer{
w := &jshttp.ResponseWriterBuffer{
HeaderValue: http.Header{},
StatusCode: http.StatusOK,
Reader: reader,
@ -66,7 +67,7 @@ func handleRequest(reqObj js.Value, runtimeCtxObj js.Value) (js.Value, error) {
defer writer.Close()
httpHandler.ServeHTTP(w, req)
}()
return jsutil.ToJSResponse(w)
return jshttp.ToJSResponse(w)
}
// Server serves http.Handler on Cloudflare Workers.

View File

@ -1,4 +1,4 @@
package jsutil
package jshttp
import (
"io"
@ -7,6 +7,8 @@ import (
"strconv"
"strings"
"syscall/js"
"github.com/syumai/workers/internal/jsutil"
)
// ToBody converts JavaScripts sides ReadableStream (can be null) to io.ReadCloser.
@ -16,13 +18,13 @@ func ToBody(streamOrNull js.Value) io.ReadCloser {
return nil
}
sr := streamOrNull.Call("getReader")
return io.NopCloser(ConvertStreamReaderToReader(sr))
return io.NopCloser(jsutil.ConvertStreamReaderToReader(sr))
}
// ToHeader converts JavaScript sides Headers to http.Header.
// - Headers: https://developer.mozilla.org/ja/docs/Web/API/Headers
func ToHeader(headers js.Value) http.Header {
entries := ArrayFrom(headers.Call("entries"))
entries := jsutil.ArrayFrom(headers.Call("entries"))
headerLen := entries.Length()
h := http.Header{}
for i := 0; i < headerLen; i++ {

View File

@ -1,12 +1,14 @@
package jsutil
package jshttp
import (
"net/http"
"syscall/js"
"github.com/syumai/workers/internal/jsutil"
)
func ToJSHeader(header http.Header) js.Value {
h := HeadersClass.New()
h := jsutil.HeadersClass.New()
for key, values := range header {
for _, value := range values {
h.Call("append", key, value)
@ -21,10 +23,10 @@ func ToJSResponse(w *ResponseWriterBuffer) (js.Value, error) {
if status == 0 {
status = http.StatusOK
}
respInit := NewObject()
respInit := jsutil.NewObject()
respInit.Set("status", status)
respInit.Set("statusText", http.StatusText(status))
respInit.Set("headers", ToJSHeader(w.Header()))
readableStream := ConvertReaderToReadableStream(w.Reader)
return ResponseClass.New(readableStream, respInit), nil
readableStream := jsutil.ConvertReaderToReadableStream(w.Reader)
return jsutil.ResponseClass.New(readableStream, respInit), nil
}

View File

@ -1,4 +1,4 @@
package jsutil
package jshttp
import (
"io"