diff --git a/browser/request_mapping.go b/browser/request_mapping.go index 7932c4646..d7c94cc8a 100644 --- a/browser/request_mapping.go +++ b/browser/request_mapping.go @@ -4,30 +4,56 @@ import ( "github.com/dop251/goja" "github.com/grafana/xk6-browser/common" + "github.com/grafana/xk6-browser/k6ext" ) // mapRequest to the JS module. func mapRequest(vu moduleVU, r *common.Request) mapping { rt := vu.Runtime() maps := mapping{ - "allHeaders": r.AllHeaders, + "allHeaders": func() *goja.Promise { + return k6ext.Promise(vu.Context(), func() (any, error) { + return r.AllHeaders(), nil + }) + }, "frame": func() *goja.Object { mf := mapFrame(vu, r.Frame()) return rt.ToValue(mf).ToObject(rt) }, - "headerValue": r.HeaderValue, - "headers": r.Headers, - "headersArray": r.HeadersArray, + "headerValue": func(name string) *goja.Promise { + return k6ext.Promise(vu.Context(), func() (any, error) { + return r.HeaderValue(name), nil + }) + }, + "headers": func(name string) *goja.Promise { + return k6ext.Promise(vu.Context(), func() (any, error) { + return r.Headers(), nil + }) + }, + "headersArray": func(name string) *goja.Promise { + return k6ext.Promise(vu.Context(), func() (any, error) { + return r.HeadersArray(), nil + }) + }, "isNavigationRequest": r.IsNavigationRequest, "method": r.Method, "postData": r.PostData, "postDataBuffer": r.PostDataBuffer, "resourceType": r.ResourceType, - "response": func() *goja.Object { - mr := mapResponse(vu, r.Response()) - return rt.ToValue(mr).ToObject(rt) + "response": func(name string) *goja.Promise { + return k6ext.Promise(vu.Context(), func() (any, error) { + resp := r.Response() + if resp == nil { + return nil, nil + } + return mapResponse(vu, resp), nil + }) + }, + "size": func(name string) *goja.Promise { + return k6ext.Promise(vu.Context(), func() (any, error) { + return r.Size(), nil + }) }, - "size": r.Size, "timing": r.Timing, "url": r.URL, }