From 4a4c85a425f647d983cd890d990e0a6cf620d168 Mon Sep 17 00:00:00 2001 From: Federico Biccheddu Date: Fri, 5 Dec 2025 01:12:30 +0100 Subject: [PATCH 1/3] feat: support `URL` in `HttpClientRequest.prependUrl` --- packages/platform/src/HttpClientRequest.ts | 4 ++-- .../platform/src/internal/httpClientRequest.ts | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/platform/src/HttpClientRequest.ts b/packages/platform/src/HttpClientRequest.ts index c79db130e29..a51ea28b028 100644 --- a/packages/platform/src/HttpClientRequest.ts +++ b/packages/platform/src/HttpClientRequest.ts @@ -211,8 +211,8 @@ export const setUrl: { * @category combinators */ export const prependUrl: { - (path: string): (self: HttpClientRequest) => HttpClientRequest - (self: HttpClientRequest, path: string): HttpClientRequest + (path: string | URL): (self: HttpClientRequest) => HttpClientRequest + (self: HttpClientRequest, path: string | URL): HttpClientRequest } = internal.prependUrl /** diff --git a/packages/platform/src/internal/httpClientRequest.ts b/packages/platform/src/internal/httpClientRequest.ts index 73d0132ce2a..05311b9ee6d 100644 --- a/packages/platform/src/internal/httpClientRequest.ts +++ b/packages/platform/src/internal/httpClientRequest.ts @@ -264,19 +264,22 @@ export const appendUrl = dual< /** @internal */ export const prependUrl = dual< - (path: string) => (self: ClientRequest.HttpClientRequest) => ClientRequest.HttpClientRequest, - (self: ClientRequest.HttpClientRequest, path: string) => ClientRequest.HttpClientRequest ->(2, (self, url) => - makeInternal( + (path: string | URL) => (self: ClientRequest.HttpClientRequest) => ClientRequest.HttpClientRequest, + (self: ClientRequest.HttpClientRequest, path: string | URL) => ClientRequest.HttpClientRequest +>(2, (self, url) => { + const clone = typeof url === "string" ? url : url.toString() + + return makeInternal( self.method, - url.endsWith("/") && self.url.startsWith("/") ? + clone.endsWith("/") && self.url.startsWith("/") ? url + self.url.slice(1) : url + self.url, self.urlParams, self.hash, self.headers, self.body - )) + ) +}) /** @internal */ export const updateUrl = dual< From dadecb172224b54f5e0a0936737dc76e470cc325 Mon Sep 17 00:00:00 2001 From: Federico Biccheddu Date: Fri, 5 Dec 2025 01:12:57 +0100 Subject: [PATCH 2/3] test: support `URL` in `HttpClientRequest.prependUrl` --- .../platform/test/HttpClientRequest.test.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/platform/test/HttpClientRequest.test.ts diff --git a/packages/platform/test/HttpClientRequest.test.ts b/packages/platform/test/HttpClientRequest.test.ts new file mode 100644 index 00000000000..0cabc6b66a3 --- /dev/null +++ b/packages/platform/test/HttpClientRequest.test.ts @@ -0,0 +1,19 @@ +import * as HttpClientRequest from "@effect/platform/HttpClientRequest" +import { describe, it } from "@effect/vitest" +import { deepStrictEqual } from "@effect/vitest/utils" + +describe("HttpClientRequest", () => { + const intialRequest = HttpClientRequest.make("GET")("/test") + + it("prependUrl with a string", () => { + const result = intialRequest.pipe(HttpClientRequest.prependUrl("https://example.com")) + + deepStrictEqual(result.url, "https://example.com/test") + }) + + it("prependUrl with an URL instance", () => { + const result = intialRequest.pipe(HttpClientRequest.prependUrl(new URL("https://example.com"))) + + deepStrictEqual(result.url, "https://example.com/test") + }) +}) From 374dcb6c46f9bb68696366fe11cb35be1864c3b0 Mon Sep 17 00:00:00 2001 From: Federico Biccheddu Date: Fri, 5 Dec 2025 01:17:44 +0100 Subject: [PATCH 3/3] docs: add changeset --- .changeset/light-comics-rest.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/light-comics-rest.md diff --git a/.changeset/light-comics-rest.md b/.changeset/light-comics-rest.md new file mode 100644 index 00000000000..845683c53df --- /dev/null +++ b/.changeset/light-comics-rest.md @@ -0,0 +1,5 @@ +--- +"@effect/platform": minor +--- + +Support `URL` in `HttpClientRequest.prependUrl` parameter