diff options
author | 2022-08-25 19:23:49 -0700 | |
---|---|---|
committer | 2022-08-25 19:23:49 -0700 | |
commit | e0b35b3086b00fb27f950a72a082b360a3dad891 (patch) | |
tree | 590a469ba79c20c19dcd5ff7d75afcfbd9dc9c9c /src | |
parent | 49bec758b7441662e4a3e8757a58a4403d6a308b (diff) | |
download | bun-e0b35b3086b00fb27f950a72a082b360a3dad891.tar.gz bun-e0b35b3086b00fb27f950a72a082b360a3dad891.tar.zst bun-e0b35b3086b00fb27f950a72a082b360a3dad891.zip |
Fix `Request` and `Response` in macros
Diffstat (limited to 'src')
-rw-r--r-- | src/js_ast.zig | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/src/js_ast.zig b/src/js_ast.zig index c04819398..7ff8476ac 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -7820,28 +7820,40 @@ pub const Macro = struct { if (_entry.found_existing) { return _entry.value_ptr.*; } - var private_data = JSCBase.JSPrivateDataPtr.from(JSC.C.JSObjectGetPrivate(value.asObjectRef()).?); + var blob_: ?JSC.WebCore.Blob = null; var mime_type: ?HTTP.MimeType = null; - switch (private_data.tag()) { - .JSNode => { - var node = private_data.as(JSNode); - _entry.value_ptr.* = node.toExpr(); - node.visited = true; - node.updateSymbolsMap(Visitor, this.visitor); - return _entry.value_ptr.*; - }, - .ResolveError, .BuildError => { - this.macro.vm.runErrorHandler(value, null); - return error.MacroFailed; - }, - .Blob => { - var blob = private_data.as(JSC.WebCore.Blob); - blob_ = blob.*; - blob.* = JSC.WebCore.Blob.initEmpty(blob.globalThis); - }, - else => {}, + if (value.jsType() == .DOMWrapper) { + if (value.as(JSC.WebCore.Response)) |resp| { + mime_type = HTTP.MimeType.init(resp.mimeType(null)); + blob_ = resp.body.use(); + } else if (value.as(JSC.WebCore.Request)) |resp| { + mime_type = HTTP.MimeType.init(resp.mimeType()); + blob_ = resp.body.use(); + } + } else { + var private_data = JSCBase.JSPrivateDataPtr.from(JSC.C.JSObjectGetPrivate(value.asObjectRef()).?); + + switch (private_data.tag()) { + .JSNode => { + var node = private_data.as(JSNode); + _entry.value_ptr.* = node.toExpr(); + node.visited = true; + node.updateSymbolsMap(Visitor, this.visitor); + return _entry.value_ptr.*; + }, + .ResolveError, .BuildError => { + this.macro.vm.runErrorHandler(value, null); + return error.MacroFailed; + }, + .Blob => { + var blob = private_data.as(JSC.WebCore.Blob); + blob_ = blob.*; + blob.* = JSC.WebCore.Blob.initEmpty(blob.globalThis); + }, + else => {}, + } } if (blob_) |*blob| { |