From 9e97a4a812816374ec31d96d7a3f951f7f916577 Mon Sep 17 00:00:00 2001 From: aki-0421 <118268728+aki-0421@users.noreply.github.com> Date: Tue, 11 Apr 2023 21:04:19 +0900 Subject: [PATCH] R: refactor with bind func --- cloudflare/fetch/bind.go | 33 +++++++++++++++++++++++++++++++++ cloudflare/fetch/http.go | 22 ---------------------- 2 files changed, 33 insertions(+), 22 deletions(-) create mode 100644 cloudflare/fetch/bind.go delete mode 100644 cloudflare/fetch/http.go diff --git a/cloudflare/fetch/bind.go b/cloudflare/fetch/bind.go new file mode 100644 index 0000000..d82b6db --- /dev/null +++ b/cloudflare/fetch/bind.go @@ -0,0 +1,33 @@ +package fetch + +import ( + "errors" + "net/http" + "syscall/js" + + "github.com/syumai/workers/internal/jshttp" + "github.com/syumai/workers/internal/jsutil" +) + +// fetch is a function that reproduces cloudflare fetch. +// Docs: https://developers.cloudflare.com/workers/runtime-apis/fetch/ +func fetch(namespace js.Value, req *http.Request /* TO DO: options here */) (*http.Response, error) { + if namespace.IsUndefined() { + return nil, errors.New("fetch function not found") + } + + promise := namespace.Call("fetch", + // The Request object to fetch. + // Docs: https://developers.cloudflare.com/workers/runtime-apis/request + jshttp.ToJSRequest(req), + // The content of the request. + // Docs: https://developers.cloudflare.com/workers/runtime-apis/request#requestinit + jsutil.NewObject(), + ) + jsRes, err := jsutil.AwaitPromise(promise) + if err != nil { + return nil, err + } + + return jshttp.ToResponse(jsRes) +} diff --git a/cloudflare/fetch/http.go b/cloudflare/fetch/http.go deleted file mode 100644 index 35a8faa..0000000 --- a/cloudflare/fetch/http.go +++ /dev/null @@ -1,22 +0,0 @@ -package fetch - -import ( - "net/http" - - "github.com/syumai/workers/internal/jshttp" - "github.com/syumai/workers/internal/jsutil" -) - -// Do sends an HTTP request and returns an HTTP response -func (c *Client) Do(req *Request) (*http.Response, error) { - jsReq := jshttp.ToJSRequest(req.Request) - - init := jsutil.NewObject() - promise := c.namespace.Call("fetch", jsReq, init) - jsRes, err := jsutil.AwaitPromise(promise) - if err != nil { - return nil, err - } - - return jshttp.ToResponse(jsRes) -}