diff --git a/src/browser/js/Local.zig b/src/browser/js/Local.zig index 9a09cbcc..e1ec6be3 100644 --- a/src/browser/js/Local.zig +++ b/src/browser/js/Local.zig @@ -1488,11 +1488,14 @@ pub fn parseJSON(self: *const Local, json: []const u8) !js.Value { }; } -pub fn throw(self: *const Local, err: []const u8) js.Exception { - const handle = self.isolate.createError(err); +pub fn newException(self: *const Local, ex: anytype) js.Exception { + const js_val = self.zigValueToJs(ex, .{}) catch { + return .{ .local = self, .handle = self.isolate.createError("internal error") }; + }; + return .{ .local = self, - .handle = handle, + .handle = js_val.handle, }; } diff --git a/src/browser/tests/event/abort_controller.html b/src/browser/tests/event/abort_controller.html index 8d9d8736..b68dcddb 100644 --- a/src/browser/tests/event/abort_controller.html +++ b/src/browser/tests/event/abort_controller.html @@ -123,7 +123,8 @@ const signal = AbortSignal.abort(); testing.expectEqual(true, signal.aborted); - testing.expectEqual("AbortError", signal.reason); + testing.expectEqual(true, signal.reason instanceof DOMException); + testing.expectEqual("AbortError", signal.reason.name); } @@ -229,7 +230,8 @@ a1.abort(); testing.expectEqual(true, s1.aborted) testing.expectEqual(s1, target) - testing.expectEqual('AbortError', s1.reason) + testing.expectEqual(true, s1.reason instanceof DOMException) + testing.expectEqual('AbortError', s1.reason.name) testing.expectEqual(1, called) @@ -237,7 +239,80 @@ var s2 = AbortSignal.abort('over 9000'); testing.expectEqual(true, s2.aborted); testing.expectEqual('over 9000', s2.reason); - testing.expectEqual('AbortError', AbortSignal.abort().reason); + testing.expectEqual('AbortError', AbortSignal.abort().reason.name); + + + + + + + + + + +