From a49e37be3a935c394b4d99380f2d83e790fb34bf Mon Sep 17 00:00:00 2001 From: Stephanos Komnenos Date: Wed, 21 May 2025 12:49:39 +0000 Subject: [PATCH 1/2] Update FetchAPI constructors --- src/FetchAPI/Headers.res | 16 ++++++++-- src/FetchAPI/HeadersInit.res | 5 ++++ src/FetchAPI/Request.res | 4 +-- src/FetchAPI/Response.res | 38 +----------------------- src/FetchAPI/URLSearchParams.res | 12 ++++++-- tests/FetchAPI/Headers__test.js | 30 +++++++++++++++++++ tests/FetchAPI/Headers__test.res | 9 ++++++ tests/FetchAPI/Request__test.js | 20 +++++++++++++ tests/FetchAPI/Request__test.res | 10 +++++++ tests/FetchAPI/Response__test.js | 19 ++++++++++++ tests/FetchAPI/Response__test.res | 6 ++++ tests/FetchAPI/URLSearchParams__test.js | 16 ++++++++-- tests/FetchAPI/URLSearchParams__test.res | 6 ++-- tests/Global__test.res | 2 +- 14 files changed, 143 insertions(+), 50 deletions(-) create mode 100644 tests/FetchAPI/Headers__test.js create mode 100644 tests/FetchAPI/Headers__test.res create mode 100644 tests/FetchAPI/Request__test.js create mode 100644 tests/FetchAPI/Request__test.res create mode 100644 tests/FetchAPI/Response__test.js create mode 100644 tests/FetchAPI/Response__test.res diff --git a/src/FetchAPI/Headers.res b/src/FetchAPI/Headers.res index b559700..ed70403 100644 --- a/src/FetchAPI/Headers.res +++ b/src/FetchAPI/Headers.res @@ -5,13 +5,25 @@ open Prelude [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Headers) */ @new -external make: (~init: array>=?) => headers = "Headers" +external make: unit => headers = "Headers" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Headers) */ @new -external make2: (~init: any=?) => headers = "Headers" +external fromDict: dict => headers = "Headers" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Headers) +*/ +@new +external fromHeaders: headers => headers = "Headers" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Headers) +*/ +@new +external fromKeyValueArray: array<(string, string)> => headers = "Headers" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Headers/append) diff --git a/src/FetchAPI/HeadersInit.res b/src/FetchAPI/HeadersInit.res index 2ca2f21..50d96c9 100644 --- a/src/FetchAPI/HeadersInit.res +++ b/src/FetchAPI/HeadersInit.res @@ -9,3 +9,8 @@ external fromDict: dict => headersInit = "%identity" [Read more on MDN](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#setting_headers) */ external fromHeaders: headers => headersInit = "%identity" + +/** + [Read more on MDN](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#setting_headers) + */ +external fromKeyValueArray: array<(string, string)> => headersInit = "%identity" diff --git a/src/FetchAPI/Request.res b/src/FetchAPI/Request.res index 9b9f504..c1b71a3 100644 --- a/src/FetchAPI/Request.res +++ b/src/FetchAPI/Request.res @@ -5,13 +5,13 @@ open FileAPI [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Request) */ @new -external make: (~input: request, ~init: requestInit=?) => request = "Request" +external fromURL: (string, ~init: requestInit=?) => request = "Request" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Request) */ @new -external make2: (~input: string, ~init: requestInit=?) => request = "Request" +external fromRequest: (request, ~init: requestInit=?) => request = "Request" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Request/arrayBuffer) diff --git a/src/FetchAPI/Response.res b/src/FetchAPI/Response.res index 96e4d04..a308fd8 100644 --- a/src/FetchAPI/Response.res +++ b/src/FetchAPI/Response.res @@ -5,43 +5,7 @@ open FileAPI [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) */ @new -external make: (~body: readableStream=?, ~init: responseInit=?) => response = "Response" - -/** -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) -*/ -@new -external make2: (~body: blob=?, ~init: responseInit=?) => response = "Response" - -/** -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) -*/ -@new -external make3: (~body: DataView.t=?, ~init: responseInit=?) => response = "Response" - -/** -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) -*/ -@new -external make4: (~body: ArrayBuffer.t=?, ~init: responseInit=?) => response = "Response" - -/** -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) -*/ -@new -external make5: (~body: formData=?, ~init: responseInit=?) => response = "Response" - -/** -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) -*/ -@new -external make6: (~body: urlSearchParams=?, ~init: responseInit=?) => response = "Response" - -/** -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) -*/ -@new -external make7: (~body: string=?, ~init: responseInit=?) => response = "Response" +external make: (~body: bodyInit=?, ~init: responseInit=?) => response = "Response" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Request/arrayBuffer) diff --git a/src/FetchAPI/URLSearchParams.res b/src/FetchAPI/URLSearchParams.res index 89bf4a3..a09c66a 100644 --- a/src/FetchAPI/URLSearchParams.res +++ b/src/FetchAPI/URLSearchParams.res @@ -5,19 +5,25 @@ open Prelude [Read more on MDN](https://developer.mozilla.org/docs/Web/API/URLSearchParams) */ @new -external make: (~init: array>=?) => urlSearchParams = "URLSearchParams" +external make: unit => urlSearchParams = "URLSearchParams" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/URLSearchParams) */ @new -external make2: (~init: any=?) => urlSearchParams = "URLSearchParams" +external fromKeyValueArray: array<(string, string)> => urlSearchParams = "URLSearchParams" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/URLSearchParams) */ @new -external make3: (~init: string=?) => urlSearchParams = "URLSearchParams" +external fromDict: dict => urlSearchParams = "URLSearchParams" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/URLSearchParams) +*/ +@new +external fromString: string => urlSearchParams = "URLSearchParams" /** Appends a specified key/value pair as a new search parameter. diff --git a/tests/FetchAPI/Headers__test.js b/tests/FetchAPI/Headers__test.js new file mode 100644 index 0000000..d26eb3b --- /dev/null +++ b/tests/FetchAPI/Headers__test.js @@ -0,0 +1,30 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + + +let h = new Headers(); + +h.set("X-Test", "1"); + +let h2 = new Headers({ + "X-Vegetable": "Carrot" +}); + +let h3 = new Headers([ + [ + "X-Fruit", + "Apple" + ], + [ + "X-Vegetable", + "Carrot" + ] +]); + +console.log(h3.get("X-Fruit")); + +export { + h, + h2, + h3, +} +/* h Not a pure module */ diff --git a/tests/FetchAPI/Headers__test.res b/tests/FetchAPI/Headers__test.res new file mode 100644 index 0000000..cb6ba06 --- /dev/null +++ b/tests/FetchAPI/Headers__test.res @@ -0,0 +1,9 @@ +let h = Headers.make() + +h->Headers.set(~name="X-Test", ~value="1") + +let h2 = Headers.fromDict(dict{"X-Vegetable": "Carrot"}) + +let h3 = Headers.fromKeyValueArray([("X-Fruit", "Apple"), ("X-Vegetable", "Carrot")]) + +Console.log(h3->Headers.get("X-Fruit")) diff --git a/tests/FetchAPI/Request__test.js b/tests/FetchAPI/Request__test.js new file mode 100644 index 0000000..69cb971 --- /dev/null +++ b/tests/FetchAPI/Request__test.js @@ -0,0 +1,20 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + + +let req = new Request("https://example.com"); + +let req1 = new Request("https://example.com/api", { + method: "POST", + body: "hello" +}); + +let req2 = new Request(req1); + +console.log(await req2.text()); + +export { + req, + req1, + req2, +} +/* req Not a pure module */ diff --git a/tests/FetchAPI/Request__test.res b/tests/FetchAPI/Request__test.res new file mode 100644 index 0000000..7cbcb62 --- /dev/null +++ b/tests/FetchAPI/Request__test.res @@ -0,0 +1,10 @@ +let req = Request.fromURL("https://example.com") + +let req1 = Request.fromURL( + "https://example.com/api", + ~init={method: "POST", body: BodyInit.fromString("hello")}, +) + +let req2 = Request.fromRequest(req1) + +Console.log(await req2->Request.text) diff --git a/tests/FetchAPI/Response__test.js b/tests/FetchAPI/Response__test.js new file mode 100644 index 0000000..26894b8 --- /dev/null +++ b/tests/FetchAPI/Response__test.js @@ -0,0 +1,19 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + + +let response = new Response(undefined, { + status: 204 +}); + +let response1 = new Response("pong", { + status: 200, + headers: { + "X-Fruit": "Peach" + } +}); + +export { + response, + response1, +} +/* response Not a pure module */ diff --git a/tests/FetchAPI/Response__test.res b/tests/FetchAPI/Response__test.res new file mode 100644 index 0000000..744893e --- /dev/null +++ b/tests/FetchAPI/Response__test.res @@ -0,0 +1,6 @@ +let response = Response.make(~init={status: 204}) + +let response1 = Response.make( + ~body=BodyInit.fromString("pong"), + ~init={status: 200, headers: HeadersInit.fromDict(dict{"X-Fruit": "Peach"})}, +) diff --git a/tests/FetchAPI/URLSearchParams__test.js b/tests/FetchAPI/URLSearchParams__test.js index 4ee1bca..e3510d9 100644 --- a/tests/FetchAPI/URLSearchParams__test.js +++ b/tests/FetchAPI/URLSearchParams__test.js @@ -7,13 +7,25 @@ Array.from(params1.keys()).forEach(prim => { console.log(prim); }); -let params2 = new URLSearchParams("?foo=1&bar=b"); +let params2 = new URLSearchParams([ + [ + "foo", + "1" + ], + [ + "bar", + "b" + ] +]); Array.from(params2.values()).forEach(prim => { console.log(prim); }); -let params3 = new URLSearchParams("?foo=1&bar=b"); +let params3 = new URLSearchParams({ + foo: "1", + bar: "b" +}); Array.from(params3.entries()).forEach(param => { console.log(param[0], param[1]); diff --git a/tests/FetchAPI/URLSearchParams__test.res b/tests/FetchAPI/URLSearchParams__test.res index 00ef3db..2bec637 100644 --- a/tests/FetchAPI/URLSearchParams__test.res +++ b/tests/FetchAPI/URLSearchParams__test.res @@ -1,10 +1,10 @@ -let params1 = URLSearchParams.make3(~init="foo=1&bar=2") +let params1 = URLSearchParams.fromString("foo=1&bar=2") params1->URLSearchParams.keys->Iterator.toArray->Array.forEach(Console.log) -let params2 = URLSearchParams.make3(~init="?foo=1&bar=b") +let params2 = URLSearchParams.fromKeyValueArray([("foo", "1"), ("bar", "b")]) params2->URLSearchParams.values->Iterator.toArray->Array.forEach(Console.log) -let params3 = URLSearchParams.make3(~init="?foo=1&bar=b") +let params3 = URLSearchParams.fromDict(dict{"foo": "1", "bar": "b"}) params3 ->URLSearchParams.entries ->Iterator.toArray diff --git a/tests/Global__test.res b/tests/Global__test.res index 2f76d0e..a1eee25 100644 --- a/tests/Global__test.res +++ b/tests/Global__test.res @@ -16,7 +16,7 @@ let response2 = await fetch( ) let response3 = await fetch_withRequest( - Request.make2(~input="https://rescript-lang.org/"), + Request.fromURL("https://rescript-lang.org/"), ~init={ method: "POST", headers: HeadersInit.fromDict( From 6064df82002861063a9fa7248424e0ea3dd66b8d Mon Sep 17 00:00:00 2001 From: Stephanos Komnenos Date: Wed, 21 May 2025 16:47:06 +0000 Subject: [PATCH 2/2] Update Response constructor --- src/FetchAPI/Response.res | 56 ++++++++++++++++++++++++++++++- tests/FetchAPI/Response__test.js | 2 +- tests/FetchAPI/Response__test.res | 6 ++-- 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/FetchAPI/Response.res b/src/FetchAPI/Response.res index a308fd8..56c197d 100644 --- a/src/FetchAPI/Response.res +++ b/src/FetchAPI/Response.res @@ -5,7 +5,61 @@ open FileAPI [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) */ @new -external make: (~body: bodyInit=?, ~init: responseInit=?) => response = "Response" +external fromNull: (@as(json`null`) _, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromString: (string, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromArrayBuffer: (ArrayBuffer.t, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromTypedArray: (TypedArray.t<'t>, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromDataView: (DataView.t, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromBlob: (blob, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromFile: (file, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromURLSearchParams: (urlSearchParams, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromFormData: (formData, ~init: responseInit=?) => response = "Response" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response) +*/ +@new +external fromReadableStream: (readableStream<'t>, ~init: responseInit=?) => response = "Response" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Request/arrayBuffer) diff --git a/tests/FetchAPI/Response__test.js b/tests/FetchAPI/Response__test.js index 26894b8..9c28ae1 100644 --- a/tests/FetchAPI/Response__test.js +++ b/tests/FetchAPI/Response__test.js @@ -1,7 +1,7 @@ // Generated by ReScript, PLEASE EDIT WITH CARE -let response = new Response(undefined, { +let response = new Response(null, { status: 204 }); diff --git a/tests/FetchAPI/Response__test.res b/tests/FetchAPI/Response__test.res index 744893e..ce97d0d 100644 --- a/tests/FetchAPI/Response__test.res +++ b/tests/FetchAPI/Response__test.res @@ -1,6 +1,6 @@ -let response = Response.make(~init={status: 204}) +let response = Response.fromNull(~init={status: 204}) -let response1 = Response.make( - ~body=BodyInit.fromString("pong"), +let response1 = Response.fromString( + "pong", ~init={status: 200, headers: HeadersInit.fromDict(dict{"X-Fruit": "Peach"})}, )