diff --git a/docs/hello-state/api.wasm b/docs/hello-state/api.wasm index edced6d..ff4dec6 100755 Binary files a/docs/hello-state/api.wasm and b/docs/hello-state/api.wasm differ diff --git a/docs/hello/api.wasm b/docs/hello/api.wasm index 9d414c0..d3cf2f8 100755 Binary files a/docs/hello/api.wasm and b/docs/hello/api.wasm differ diff --git a/internal/whutil/package.go b/internal/whutil/package.go deleted file mode 100644 index 561cde7..0000000 --- a/internal/whutil/package.go +++ /dev/null @@ -1,4 +0,0 @@ -// Package whutil stands for WASM HTTP utilities. -// -// It contains internal utilities for github.com/nlepage/go-wasm-http-server. -package whutil diff --git a/internal/whutil/promise.go b/promise.go similarity index 73% rename from internal/whutil/promise.go rename to promise.go index 3e95959..989a332 100644 --- a/internal/whutil/promise.go +++ b/promise.go @@ -1,24 +1,27 @@ -package whutil +package wasmhttp import ( "syscall/js" ) -// Promise is JS Promise +// Promise is a JavaScript Promise type Promise struct { js.Value } -type PromiseResolve func(...interface{}) js.Value - -type PromiseReject func(...interface{}) js.Value - -// NewPromise creates a new JS Promise -func NewPromise(cb func(resolve PromiseResolve, reject PromiseReject)) Promise { +// NewPromise creates a new JavaScript Promise +func NewPromise(cb func(resolve func(interface{}), reject func(interface{}))) Promise { var cbFunc js.Func cbFunc = js.FuncOf(func(_ js.Value, args []js.Value) interface{} { defer cbFunc.Release() - cb(args[0].Invoke, args[1].Invoke) + cb( + func(value interface{}) { + args[0].Invoke(value) + }, + func(value interface{}) { + args[1].Invoke(value) + }, + ) return js.Undefined() }) return Promise{js.Global().Get("Promise").New(cbFunc)} diff --git a/internal/whutil/request.go b/request.go similarity index 75% rename from internal/whutil/request.go rename to request.go index b207506..9ebc204 100644 --- a/internal/whutil/request.go +++ b/request.go @@ -1,4 +1,4 @@ -package whutil +package wasmhttp import ( "bytes" @@ -6,13 +6,8 @@ import ( "syscall/js" ) -// Request is a JS Request -type Request struct { - js.Value -} - -// HTTPRequest builds and returns the equivalent http.Request -func (r Request) HTTPRequest() (*http.Request, error) { +// Request builds and returns the equivalent http.Request +func Request(r js.Value) (*http.Request, error) { jsBody := js.Global().Get("Uint8Array").New(Promise{r.Call("arrayBuffer")}.Await()) body := make([]byte, jsBody.Get("length").Int()) js.CopyBytesToGo(body, jsBody) diff --git a/internal/whutil/response_writer.go b/response_writer.go similarity index 98% rename from internal/whutil/response_writer.go rename to response_writer.go index 848277a..c776c9c 100644 --- a/internal/whutil/response_writer.go +++ b/response_writer.go @@ -1,4 +1,4 @@ -package whutil +package wasmhttp import ( "bytes" diff --git a/serve.go b/serve.go index 031d493..beb8c8c 100644 --- a/serve.go +++ b/serve.go @@ -5,8 +5,6 @@ import ( "net/http" "strings" "syscall/js" - - "github.com/nlepage/go-wasm-http-server/internal/whutil" ) // Serve serves HTTP requests using handler or http.DefaultServeMux if handler is nil. @@ -28,9 +26,7 @@ func Serve(handler http.Handler) func() { } var cb = js.FuncOf(func(_ js.Value, args []js.Value) interface{} { - var jsReq = whutil.Request{args[0]} - - var resPromise = whutil.NewPromise(func(resolve whutil.PromiseResolve, reject whutil.PromiseReject) { + var resPromise = NewPromise(func(resolve func(interface{}), reject func(interface{})) { go func() { defer func() { if r := recover(); r != nil { @@ -42,12 +38,12 @@ func Serve(handler http.Handler) func() { } }() - var req, err = jsReq.HTTPRequest() + var req, err = Request(args[0]) if err != nil { panic(err) } - var res = whutil.NewResponseWriter() + var res = NewResponseWriter() h.ServeHTTP(res, req)