diff options
author | 2022-07-11 06:02:48 -0700 | |
---|---|---|
committer | 2022-07-11 08:04:55 -0700 | |
commit | f6cd941522ddf70a0b374fd030375bd2352cb3b9 (patch) | |
tree | 29922515037e646f3d0adcc4a6c88b69fe41d26f /src | |
parent | a6c216db000ee2a68b238905a917430545cc594f (diff) | |
download | bun-f6cd941522ddf70a0b374fd030375bd2352cb3b9.tar.gz bun-f6cd941522ddf70a0b374fd030375bd2352cb3b9.tar.zst bun-f6cd941522ddf70a0b374fd030375bd2352cb3b9.zip |
Fixes https://github.com/oven-sh/bun/issues/195
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/bindings/exports.zig | 3 | ||||
-rw-r--r-- | src/bun.js/webcore/response.zig | 60 |
2 files changed, 60 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()); |