mirror of
https://github.com/nlepage/go-wasm-http-server.git
synced 2026-01-12 01:59:14 +00:00
feat: uses ReadableStream for request (#16)
This commit is contained in:
36
request.go
36
request.go
@@ -1,49 +1,34 @@
|
||||
package wasmhttp
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"syscall/js"
|
||||
|
||||
promise "github.com/nlepage/go-js-promise"
|
||||
|
||||
"github.com/nlepage/go-wasm-http-server/internal/jstype"
|
||||
"github.com/nlepage/go-wasm-http-server/internal/readablestream"
|
||||
"github.com/nlepage/go-wasm-http-server/internal/safejs"
|
||||
)
|
||||
|
||||
// Request builds and returns the equivalent http.Request
|
||||
func Request(ur js.Value) (*http.Request, error) {
|
||||
r := safejs.Safe(ur)
|
||||
func Request(uvalue js.Value) (*http.Request, error) {
|
||||
value := safejs.Safe(uvalue)
|
||||
|
||||
ab, err := r.Call("arrayBuffer")
|
||||
body, err := value.Get("body")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
u8a, err := jstype.Uint8Array.New(promise.Await(safejs.Unsafe(ab)))
|
||||
r, err := body.Call("getReader")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
l, err := u8a.GetInt("length")
|
||||
method, err := value.GetString("method")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
b := make([]byte, l)
|
||||
|
||||
_, err = safejs.CopyBytesToGo(b, u8a)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
method, err := r.GetString("method")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
url, err := r.GetString("url")
|
||||
url, err := value.GetString("url")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -51,15 +36,18 @@ func Request(ur js.Value) (*http.Request, error) {
|
||||
req := httptest.NewRequest(
|
||||
method,
|
||||
url,
|
||||
bytes.NewReader(b),
|
||||
readablestream.NewReader(r),
|
||||
)
|
||||
|
||||
headers, err := r.Get("headers")
|
||||
headers, err := value.Get("headers")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
headersIt, err := headers.Call("entries")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for {
|
||||
e, err := headersIt.Call("next")
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user