From aa7b5deb6e475bd5cc11fc38f047b9b6a15592e6 Mon Sep 17 00:00:00 2001 From: Will-hxw Date: Sun, 17 May 2026 19:35:22 +0800 Subject: [PATCH 1/2] fix(openapi-react-query): propagate undefined errors from openapi-fetch Use instead of truthiness check to properly handle cases where openapi-fetch returns for non-OK responses with empty bodies. Closes #2070 --- packages/openapi-react-query/src/index.ts | 10 +++---- .../openapi-react-query/test/index.test.tsx | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/packages/openapi-react-query/src/index.ts b/packages/openapi-react-query/src/index.ts index fb9683164..b6c2ef14e 100644 --- a/packages/openapi-react-query/src/index.ts +++ b/packages/openapi-react-query/src/index.ts @@ -200,7 +200,7 @@ export default function createClient; const fn = client[mth] as ClientMethod; const { data, error, response } = await fn(path, { signal, ...(init as any) }); // TODO: find a way to avoid as any - if (error) { + if (!response.ok) { throw error; } if (response.status === 204 || response.headers.get("Content-Length") === "0") { @@ -247,8 +247,8 @@ export default function createClient { const mth = method.toUpperCase() as Uppercase; const fn = client[mth] as ClientMethod; - const { data, error } = await fn(path, init as InitWithUnknowns); - if (error) { + const { data, error, response } = await fn(path, init as InitWithUnknowns); + if (!response.ok) { throw error; } diff --git a/packages/openapi-react-query/test/index.test.tsx b/packages/openapi-react-query/test/index.test.tsx index 78715e643..89a34ac89 100644 --- a/packages/openapi-react-query/test/index.test.tsx +++ b/packages/openapi-react-query/test/index.test.tsx @@ -336,6 +336,33 @@ describe("client", () => { expect(data).toBeUndefined(); }); + it("should propagate error when response is not ok with empty body", async () => { + const fetchClient = createFetchClient({ baseUrl }); + const client = createClient(fetchClient); + + useMockRequestHandler({ + baseUrl, + method: "get", + path: "/string-array", + status: 500, + headers: { + "Content-Length": "0", + }, + body: undefined, + }); + + const { result } = renderHook(() => client.useQuery("get", "/string-array"), { + wrapper, + }); + + await waitFor(() => expect(result.current.isFetching).toBe(false)); + + const { data, error } = result.current; + + expect(error).toBeUndefined(); + expect(data).toBeUndefined(); + }); + it("should resolve data properly and have error as null when queryFn returns null", async () => { const fetchClient = createFetchClient({ baseUrl }); const client = createClient(fetchClient); From 19e40ed836bbdb59283fd070175a88f71b97f02c Mon Sep 17 00:00:00 2001 From: Will-hxw Date: Sun, 17 May 2026 19:43:40 +0800 Subject: [PATCH 2/2] chore: add changeset --- .changeset/fix-propagate-undefined-errors.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/fix-propagate-undefined-errors.md diff --git a/.changeset/fix-propagate-undefined-errors.md b/.changeset/fix-propagate-undefined-errors.md new file mode 100644 index 000000000..ea43cf486 --- /dev/null +++ b/.changeset/fix-propagate-undefined-errors.md @@ -0,0 +1,7 @@ +--- +"openapi-react-query": patch +--- + +fix(openapi-react-query): propagate undefined errors from openapi-fetch + +Use `!response.ok` instead of `error` truthiness check to properly handle cases where openapi-fetch returns `error: undefined` for non-OK responses with empty bodies.