diff --git a/src/js/thirdparty/node-fetch.ts b/src/js/thirdparty/node-fetch.ts index d2b5831690..d0676ee418 100644 --- a/src/js/thirdparty/node-fetch.ts +++ b/src/js/thirdparty/node-fetch.ts @@ -126,7 +126,7 @@ var ResponsePrototype = Response.prototype; const kUrl = Symbol("kUrl"); class Request extends WebRequest { - [kUrl]: string; + [kUrl]?: string; constructor(input, init) { // node-fetch is relaxed with the URL, for example, it allows "/" as a valid URL. @@ -137,12 +137,11 @@ class Request extends WebRequest { this[kUrl] = input; } else { super(input, init); - this[kUrl] = input.url; } } get url() { - return this[kUrl]; + return this[kUrl] ?? super.url; } } diff --git a/test/regression/issue/014865.test.ts b/test/regression/issue/014865.test.ts new file mode 100644 index 0000000000..37e6b1bfbb --- /dev/null +++ b/test/regression/issue/014865.test.ts @@ -0,0 +1,8 @@ +import { test, expect } from "bun:test"; +import { Request } from "node-fetch"; + +test("node fetch Request URL field is set even with a valid URL", () => { + expect(new Request("/").url).toBe("/"); + expect(new Request("https://bun.sh/").url).toBe("https://bun.sh/"); + expect(new Request(new URL("https://bun.sh/")).url).toBe("https://bun.sh/"); +});