From a842bac2dd68d42906a423619487f313e27a42a4 Mon Sep 17 00:00:00 2001 From: justAnArthur Date: Tue, 23 Dec 2025 14:18:21 +0100 Subject: [PATCH 1/4] fix(openapi-fetch): omit serializing for already serialized data --- .changeset/plain-views-rhyme.md | 5 +++++ packages/openapi-fetch/src/index.js | 2 +- packages/openapi-fetch/test/common/request.test.ts | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 .changeset/plain-views-rhyme.md diff --git a/.changeset/plain-views-rhyme.md b/.changeset/plain-views-rhyme.md new file mode 100644 index 000000000..bbf19d189 --- /dev/null +++ b/.changeset/plain-views-rhyme.md @@ -0,0 +1,5 @@ +--- +"openapi-fetch": patch +--- + +fix omit serializing for already serialized data diff --git a/packages/openapi-fetch/src/index.js b/packages/openapi-fetch/src/index.js index be3b153a3..b54435a55 100644 --- a/packages/openapi-fetch/src/index.js +++ b/packages/openapi-fetch/src/index.js @@ -597,7 +597,7 @@ export function defaultPathSerializer(pathname, pathParams) { * @type {import("./index.js").defaultBodySerializer} */ export function defaultBodySerializer(body, headers) { - if (body instanceof FormData) { + if (body instanceof FormData || typeof body === "string" || body instanceof URLSearchParams || body instanceof Blob) { return body; } if (headers) { diff --git a/packages/openapi-fetch/test/common/request.test.ts b/packages/openapi-fetch/test/common/request.test.ts index 7aa87e563..bed067364 100644 --- a/packages/openapi-fetch/test/common/request.test.ts +++ b/packages/openapi-fetch/test/common/request.test.ts @@ -358,3 +358,17 @@ describe("request", () => { }); }); }); + +test("serialized body is not serialized again", async () => { + let body = "pre-serialized body", + bodySerialized = ""; + + const client = createObservedClient({}, async (req) => { + bodySerialized = await req.text(); + return Response.json({}); + }); + await client.POST("/resources", { + body, + }); + expect(bodySerialized).toBe(body); +}); From a3beb19ad75664aa603a26bb061ab2f25b12deb7 Mon Sep 17 00:00:00 2001 From: justAnArthur Date: Tue, 23 Dec 2025 14:25:01 +0100 Subject: [PATCH 2/4] dev: fixing code formatting --- packages/openapi-fetch/test/common/request.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/openapi-fetch/test/common/request.test.ts b/packages/openapi-fetch/test/common/request.test.ts index bed067364..c3068cdb9 100644 --- a/packages/openapi-fetch/test/common/request.test.ts +++ b/packages/openapi-fetch/test/common/request.test.ts @@ -361,7 +361,7 @@ describe("request", () => { test("serialized body is not serialized again", async () => { let body = "pre-serialized body", - bodySerialized = ""; + bodySerialized = ""; const client = createObservedClient({}, async (req) => { bodySerialized = await req.text(); From d3eaa8a6f89b89e5b8e588e3eb2193820579c41b Mon Sep 17 00:00:00 2001 From: justAnArthur Date: Tue, 23 Dec 2025 14:28:42 +0100 Subject: [PATCH 3/4] fix: ts error --- packages/openapi-fetch/test/common/request.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/openapi-fetch/test/common/request.test.ts b/packages/openapi-fetch/test/common/request.test.ts index c3068cdb9..2ffa0792b 100644 --- a/packages/openapi-fetch/test/common/request.test.ts +++ b/packages/openapi-fetch/test/common/request.test.ts @@ -363,7 +363,7 @@ test("serialized body is not serialized again", async () => { let body = "pre-serialized body", bodySerialized = ""; - const client = createObservedClient({}, async (req) => { + const client = createObservedClient({}, async (req) => { bodySerialized = await req.text(); return Response.json({}); }); From d8424bb76dc3b4955894c7266ed49d8efbbad3a2 Mon Sep 17 00:00:00 2001 From: justAnArthur Date: Tue, 23 Dec 2025 14:37:01 +0100 Subject: [PATCH 4/4] test(openapi-fetch): removed custom additional test and updated existing one --- .../openapi-fetch/test/common/request.test.ts | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/packages/openapi-fetch/test/common/request.test.ts b/packages/openapi-fetch/test/common/request.test.ts index 2ffa0792b..edb773e89 100644 --- a/packages/openapi-fetch/test/common/request.test.ts +++ b/packages/openapi-fetch/test/common/request.test.ts @@ -213,30 +213,32 @@ describe("request", () => { }); test.each(BODY_ACCEPTING_METHODS)("`''` body (with body serializer) - %s", async (method) => { + const body = '' const bodySerializer = vi.fn((body) => `Serialized: ${JSON.stringify(body)}`); const { bodyUsed, bodyText } = await fireRequestAndGetBodyInformation({ bodySerializer, method, fetchOptions: { - body: "", + body, }, }); expect(bodyUsed).toBe(true); - expect(bodyText).toBe('Serialized: ""'); + expect(bodyText).toBe(`Serialized: ${body}`); expect(bodySerializer).toBeCalled(); }); test.each(BODY_ACCEPTING_METHODS)("`''` body (without body serializer) - %s", async (method) => { + const body = '' const { bodyUsed, bodyText } = await fireRequestAndGetBodyInformation({ method, fetchOptions: { - body: "", + body, }, }); expect(bodyUsed).toBe(true); - expect(bodyText).toBe('""'); + expect(bodyText).toBe(body); }); test.each(BODY_ACCEPTING_METHODS)("`0` body (with body serializer) - %s", async (method) => { @@ -358,17 +360,3 @@ describe("request", () => { }); }); }); - -test("serialized body is not serialized again", async () => { - let body = "pre-serialized body", - bodySerialized = ""; - - const client = createObservedClient({}, async (req) => { - bodySerialized = await req.text(); - return Response.json({}); - }); - await client.POST("/resources", { - body, - }); - expect(bodySerialized).toBe(body); -});