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);
+
+
+
+
+
+
+
+
+
+
+