Skip to content

Commit 267977e

Browse files
authored
feat: 204 to undefined (#1968)
* fix: 204 to undefined * changeset
1 parent f50d5c2 commit 267977e

File tree

4 files changed

+16
-10
lines changed

4 files changed

+16
-10
lines changed

.changeset/rude-pumas-wonder.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"openapi-fetch": minor
3+
---
4+
5+
204 responses or response with a Content-Length of 0 will now return undefined instead of an empty object

packages/openapi-fetch/src/index.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,8 @@ export default function createClient(clientOptions) {
151151
}
152152

153153
// handle empty content
154-
// note: we return `{}` because we want user truthy checks for `.data` or `.error` to succeed
155154
if (response.status === 204 || response.headers.get("Content-Length") === "0") {
156-
return response.ok ? { data: {}, response } : { error: {}, response };
155+
return response.ok ? { data: undefined, response } : { error: undefined, response };
157156
}
158157

159158
// parse response (falling back to .text() when necessary)

packages/openapi-fetch/test/http-methods/delete.test.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { describe, expect, test } from "vitest";
1+
import { describe, expect, test, assertType } from "vitest";
22
import { createObservedClient } from "../helpers.js";
33
import type { paths } from "./schemas/delete.js";
44

@@ -10,7 +10,8 @@ describe("DELETE", () => {
1010
});
1111

1212
// assert correct data was returned
13-
expect(data).toEqual({});
13+
assertType<undefined>(data);
14+
expect(data).toEqual(undefined);
1415
expect(response.status).toBe(204);
1516

1617
// assert error is empty
@@ -27,7 +28,7 @@ describe("DELETE", () => {
2728
expect(method).toBe("DELETE");
2829
});
2930

30-
test("returns empty object on Content-Length: 0", async () => {
31+
test("returns undefined on Content-Length: 0", async () => {
3132
const client = createObservedClient<paths>(
3233
{},
3334
async () => new Response(null, { status: 200, headers: { "Content-Length": "0" } }),
@@ -39,7 +40,8 @@ describe("DELETE", () => {
3940
});
4041

4142
// assert correct data was returned
42-
expect(data).toEqual({});
43+
assertType<undefined>(data);
44+
expect(data).toEqual(undefined);
4345

4446
// assert error is empty
4547
expect(error).toBeUndefined();

packages/openapi-fetch/test/never-response/never-response.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ describe("GET", () => {
5858
// assert correct URL was called
5959
expect(actualPathname).toBe("/posts/123");
6060

61-
// assert 204 to be transformed to empty object
62-
expect(data).toEqual({});
61+
// assert 204 to be transformed to be undefined
62+
expect(data).toEqual(undefined);
6363
expect(response.status).toBe(204);
6464

6565
// assert error is empty
@@ -128,8 +128,8 @@ describe("GET", () => {
128128
// assert correct method was called
129129
expect(method).toBe("GET");
130130

131-
// assert 204 to be transformed to empty object
132-
expect(data).toEqual({});
131+
// assert 204 to be transformed to undefined
132+
expect(data).toEqual(undefined);
133133
});
134134

135135
test("gracefully handles invalid JSON for errors", async () => {

0 commit comments

Comments
 (0)