mirror of
https://github.com/syumai/workers.git
synced 2025-03-10 17:29:11 +00:00
split jshttp from jsutil
This commit is contained in:
parent
88f0dc1798
commit
de512c97e0
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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++ {
|
@ -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
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package jsutil
|
||||
package jshttp
|
||||
|
||||
import (
|
||||
"io"
|
Loading…
x
Reference in New Issue
Block a user