aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-11 06:02:48 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-11 08:04:55 -0700
commitf6cd941522ddf70a0b374fd030375bd2352cb3b9 (patch)
tree29922515037e646f3d0adcc4a6c88b69fe41d26f
parenta6c216db000ee2a68b238905a917430545cc594f (diff)
downloadbun-f6cd941522ddf70a0b374fd030375bd2352cb3b9.tar.gz
bun-f6cd941522ddf70a0b374fd030375bd2352cb3b9.tar.zst
bun-f6cd941522ddf70a0b374fd030375bd2352cb3b9.zip
Fixes https://github.com/oven-sh/bun/issues/195
-rw-r--r--src/bun.js/bindings/exports.zig3
-rw-r--r--src/bun.js/webcore/response.zig60
-rw-r--r--test/bun.js/inspect.test.js10
3 files changed, 70 insertions, 3 deletions
diff --git a/src/bun.js/bindings/exports.zig b/src/bun.js/bindings/exports.zig
index 3a00ea210..12a13e705 100644
--- a/src/bun.js/bindings/exports.zig
+++ b/src/bun.js/bindings/exports.zig
@@ -1722,7 +1722,8 @@ pub const ZigConsoleClient = struct {
return;
},
.Request => {
- this.printAs(.JSON, Writer, writer_, value, .Object, enable_ansi_colors);
+ var request = priv_data.as(JSC.WebCore.Request);
+ request.writeFormat(this, writer_, enable_ansi_colors) catch {};
return;
},
else => {},
diff --git a/src/bun.js/webcore/response.zig b/src/bun.js/webcore/response.zig
index d8bb01008..056f8e2fd 100644
--- a/src/bun.js/webcore/response.zig
+++ b/src/bun.js/webcore/response.zig
@@ -3727,7 +3727,7 @@ pub const Body = struct {
try formatter.writeIndent(Writer, writer);
try writer.writeAll("bodyUsed: ");
formatter.printAs(.Boolean, Writer, writer, JSC.JSValue.jsBoolean(this.value == .Used), .BooleanObject, enable_ansi_colors);
- try formatter.printComma(Writer, writer, enable_ansi_colors);
+ formatter.printComma(Writer, writer, enable_ansi_colors) catch unreachable;
try writer.writeAll("\n");
// if (this.init.headers) |headers| {
@@ -4164,6 +4164,32 @@ pub const Request = struct {
method: Method = Method.GET,
uws_request: ?*uws.Request = null,
+ pub fn writeFormat(this: *const Request, formatter: *JSC.Formatter, writer: anytype, comptime enable_ansi_colors: bool) !void {
+ const Writer = @TypeOf(writer);
+ try formatter.writeIndent(Writer, writer);
+ try writer.print("Request ({}) {{\n", .{bun.fmt.size(this.body.slice().len)});
+ {
+ formatter.indent += 1;
+ defer formatter.indent -|= 1;
+
+ try formatter.writeIndent(Writer, writer);
+ try writer.writeAll("method: \"");
+ try writer.writeAll(std.mem.span(@tagName(this.method)));
+ try writer.writeAll("\"");
+ formatter.printComma(Writer, writer, enable_ansi_colors) catch unreachable;
+ try writer.writeAll("\n");
+
+ try formatter.writeIndent(Writer, writer);
+ try writer.writeAll("url: \"");
+ try writer.print(comptime Output.prettyFmt("<r><b>{}<r>", enable_ansi_colors), .{this.url});
+ try writer.writeAll("\"");
+ formatter.printComma(Writer, writer, enable_ansi_colors) catch unreachable;
+ }
+ try writer.writeAll("\n");
+ try formatter.writeIndent(Writer, writer);
+ try writer.writeAll("}");
+ }
+
pub fn fromRequestContext(ctx: *RequestContext, global: *JSGlobalObject) !Request {
var req = Request{
.url = ZigString.init(std.mem.span(ctx.getFullURL())),
@@ -4414,7 +4440,37 @@ pub const Request = struct {
switch (arguments.len) {
0 => {},
1 => {
- request.url = JSC.JSValue.fromRef(arguments[0]).getZigString(ctx.ptr());
+ const urlOrObject = JSC.JSValue.c(arguments[0]);
+ if (urlOrObject.isString()) {
+ request.url = urlOrObject.getZigString(ctx.ptr());
+ } else {
+ if (Body.Init.init(getAllocator(ctx), ctx, arguments[0]) catch null) |req_init| {
+ request.headers = req_init.headers;
+ request.method = req_init.method;
+ }
+
+ if (urlOrObject.get(ctx.ptr(), "url")) |url| {
+ request.url = url.getZigString(ctx.ptr()).clone(bun.default_allocator) catch {
+ return js.JSValueMakeUndefined(ctx.ptr());
+ };
+ }
+
+ if (urlOrObject.get(ctx.ptr(), "body")) |body_| {
+ if (Blob.fromJS(ctx.ptr(), body_, true, false)) |blob| {
+ if (blob.size > 0) {
+ request.body = Body.Value{ .Blob = blob };
+ }
+ } else |err| {
+ if (err == error.InvalidArguments) {
+ JSC.JSError(getAllocator(ctx), "Expected an Array", .{}, ctx, exception);
+ return null;
+ }
+
+ JSC.JSError(getAllocator(ctx), "Invalid Body", .{}, ctx, exception);
+ return null;
+ }
+ }
+ }
},
else => {
request.url = JSC.JSValue.fromRef(arguments[0]).getZigString(ctx.ptr());
diff --git a/test/bun.js/inspect.test.js b/test/bun.js/inspect.test.js
index d58b8a6bc..aa38f5c2d 100644
--- a/test/bun.js/inspect.test.js
+++ b/test/bun.js/inspect.test.js
@@ -1,5 +1,15 @@
import { it, expect } from "bun:test";
+it("Request object", () => {
+ expect(Bun.inspect(new Request({ url: "https://example.com" })).trim()).toBe(
+ `
+Request (0 KB) {
+ method: "GET",
+ url: "https://example.com",
+}`.trim()
+ );
+});
+
// https://github.com/oven-sh/bun/issues/561
it("TypedArray prints", () => {
// TODO: add tests for all variants of typed arrays