aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ciro Spaciari <ciro.spaciari@gmail.com> 2023-09-15 21:19:26 -0700
committerGravatar GitHub <noreply@github.com> 2023-09-15 21:19:26 -0700
commitcb057e61ba5cd8ab152aac3872291bf32dbf435b (patch)
tree33795a2352548c4cf9913f7f4b0c8ed52a66a743
parentb54e3f3c042bc37418a646728428910cafc502ef (diff)
downloadbun-cb057e61ba5cd8ab152aac3872291bf32dbf435b.tar.gz
bun-cb057e61ba5cd8ab152aac3872291bf32dbf435b.tar.zst
bun-cb057e61ba5cd8ab152aac3872291bf32dbf435b.zip
fix(request) handle undefined/null/empty signal on request (#5503)
* handle undefined/null/empty signal on request * better approach
-rw-r--r--src/bun.js/webcore/request.zig3
-rw-r--r--test/js/web/request/request.test.ts37
2 files changed, 38 insertions, 2 deletions
diff --git a/src/bun.js/webcore/request.zig b/src/bun.js/webcore/request.zig
index fc38e1825..db073fccc 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 000000000..ac6008eb4
--- /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");
+});