From cb057e61ba5cd8ab152aac3872291bf32dbf435b Mon Sep 17 00:00:00 2001 From: Ciro Spaciari Date: Fri, 15 Sep 2023 21:19:26 -0700 Subject: [PATCH] fix(request) handle undefined/null/empty signal on request (#5503) * handle undefined/null/empty signal on request * better approach --- src/bun.js/webcore/request.zig | 3 +-- test/js/web/request/request.test.ts | 37 +++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 test/js/web/request/request.test.ts diff --git a/src/bun.js/webcore/request.zig b/src/bun.js/webcore/request.zig index fc38e18258..db073fccc5 100644 --- a/src/bun.js/webcore/request.zig +++ b/src/bun.js/webcore/request.zig @@ -608,9 +608,8 @@ pub const Request = struct { } if (!fields.contains(.signal)) { - if (value.get(globalThis, "signal")) |signal_| { + if (value.getTruthy(globalThis, "signal")) |signal_| { fields.insert(.signal); - if (AbortSignal.fromJS(signal_)) |signal| { //Keep it alive signal_.ensureStillAlive(); diff --git a/test/js/web/request/request.test.ts b/test/js/web/request/request.test.ts new file mode 100644 index 0000000000..ac6008eb4b --- /dev/null +++ b/test/js/web/request/request.test.ts @@ -0,0 +1,37 @@ +import { test, expect } from "bun:test"; + +test("request can receive undefined signal", async () => { + const request = new Request("http://example.com/", { + method: "POST", + headers: { + "Content-Type": "text/bun;charset=utf-8", + }, + body: "bun", + signal: undefined, + }); + expect(request.method).toBe("POST"); + // @ts-ignore + const clone = new Request(request); + expect(clone.method).toBe("POST"); + expect(clone.headers.get("content-type")).toBe("text/bun;charset=utf-8"); + expect(await request.text()).toBe("bun"); + expect(await clone.text()).toBe("bun"); +}); + +test("request can receive null signal", async () => { + const request = new Request("http://example.com/", { + method: "POST", + headers: { + "Content-Type": "text/bun;charset=utf-8", + }, + body: "bun", + signal: null, + }); + expect(request.method).toBe("POST"); + // @ts-ignore + const clone = new Request(request); + expect(clone.method).toBe("POST"); + expect(clone.headers.get("content-type")).toBe("text/bun;charset=utf-8"); + expect(await request.text()).toBe("bun"); + expect(await clone.text()).toBe("bun"); +});