From 1f065df97dee838550be2b607e3985a5632394eb Mon Sep 17 00:00:00 2001 From: Taesu Date: Fri, 12 Jun 2026 16:42:05 -0700 Subject: [PATCH] fix(fetch): normalize repeated leading slashes in request paths --- packages/better-fetch/src/test/url.test.ts | 7 +++++++ packages/better-fetch/src/url.ts | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/better-fetch/src/test/url.test.ts b/packages/better-fetch/src/test/url.test.ts index 3b54b72..cebc749 100644 --- a/packages/better-fetch/src/test/url.test.ts +++ b/packages/better-fetch/src/test/url.test.ts @@ -25,6 +25,13 @@ describe("url", () => { expect(url.toString()).toBe("http://localhost:4001/query?id=1"); }); + it("normalizes repeated leading slashes before joining with base URL", () => { + const url = getURL("///accounts/list", { + baseURL: "https://api.example.com", + }); + expect(url.toString()).toBe("https://api.example.com/accounts/list"); + }); + it("omits null and undefined query values", () => { const url = getURL("/query", { query: { id: "1", nullValue: null, undefinedValue: undefined }, diff --git a/packages/better-fetch/src/url.ts b/packages/better-fetch/src/url.ts index 1f9af3d..05a3ba0 100644 --- a/packages/better-fetch/src/url.ts +++ b/packages/better-fetch/src/url.ts @@ -57,7 +57,7 @@ export function getURL(url: string, option?: BetterFetchOption) { } path = path.split("/").map(encodeURIComponent).join("/"); - if (path.startsWith("/")) path = path.slice(1); + path = path.replace(/^\/+/, ""); let queryParamString = queryParams.toString(); queryParamString = queryParamString.length > 0