From 4b6bf29b83d5c191bc14c9ea2e9ab9a546eb7e02 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Sun, 15 Mar 2026 09:55:13 +0800 Subject: [PATCH] Improve ergonomics around rejecting a promise with a proper JS error --- src/browser/js/PromiseResolver.zig | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/browser/js/PromiseResolver.zig b/src/browser/js/PromiseResolver.zig index f2aac0e0..d02740ac 100644 --- a/src/browser/js/PromiseResolver.zig +++ b/src/browser/js/PromiseResolver.zig @@ -63,6 +63,20 @@ pub fn reject(self: PromiseResolver, comptime source: []const u8, value: anytype }; } +const RejectError = union(enum) { + generic: []const u8, + type_error: []const u8, +}; +pub fn rejectError(self: PromiseResolver, comptime source: []const u8, err: RejectError) void { + const handle = switch (err) { + .type_error => |str| self.local.isolate.createTypeError(str), + .generic => |str| self.local.isolate.createError(str) + }; + self._reject(js.Value{.handle = handle, .local = self.local}) catch |reject_err| { + log.err(.bug, "rejectError", .{ .source = source, .err = reject_err, .persistent = false }); + }; +} + fn _reject(self: PromiseResolver, value: anytype) !void { const local = self.local; const js_val = try local.zigValueToJs(value, .{});