aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-01 22:21:39 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-01 22:21:39 -0800
commit87c71207e30db17808014020900ad5c88c8d5ae6 (patch)
tree1d0aa2eaf28f62aea8a278d68b8deeda4291337c
parent149bbc12b523119d7be8739cd8f55e2867b8a866 (diff)
downloadbun-87c71207e30db17808014020900ad5c88c8d5ae6.tar.gz
bun-87c71207e30db17808014020900ad5c88c8d5ae6.tar.zst
bun-87c71207e30db17808014020900ad5c88c8d5ae6.zip
[bun.js] `ResolveError.prototype.toString()` `BuildError.prototype.toString()`
-rw-r--r--src/javascript/jsc/javascript.zig96
1 files changed, 94 insertions, 2 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig
index 03549602c..64270cc60 100644
--- a/src/javascript/jsc/javascript.zig
+++ b/src/javascript/jsc/javascript.zig
@@ -3155,13 +3155,59 @@ pub const ResolveError = struct {
}
}
+ pub fn toStringFn(this: *ResolveError, ctx: js.JSContextRef) js.JSValueRef {
+ var text = std.fmt.allocPrint(default_allocator, "ResolveError: {s}", .{this.msg.data.text}) catch return null;
+ var str = ZigString.init(text);
+ str.setOutputEncoding();
+ if (str.isUTF8()) {
+ const out = str.toValueGC(ctx.ptr());
+ default_allocator.free(text);
+ return out.asObjectRef();
+ }
+
+ return str.toExternalValue(ctx.ptr()).asObjectRef();
+ }
+
+ pub fn toString(
+ // this
+ this: *ResolveError,
+ ctx: js.JSContextRef,
+ // function
+ _: js.JSObjectRef,
+ // thisObject
+ _: js.JSObjectRef,
+ _: []const js.JSValueRef,
+ _: js.ExceptionRef,
+ ) js.JSValueRef {
+ return this.toStringFn(ctx);
+ }
+
+ pub fn convertToType(ctx: js.JSContextRef, obj: js.JSObjectRef, kind: js.JSType, _: js.ExceptionRef) callconv(.C) js.JSValueRef {
+ switch (kind) {
+ js.JSType.kJSTypeString => {
+ if (js.JSObjectGetPrivate(obj)) |priv| {
+ if (JSPrivateDataPtr.from(priv).is(ResolveError)) {
+ var this = JSPrivateDataPtr.from(priv).as(ResolveError);
+ return this.toStringFn(ctx);
+ }
+ }
+ },
+ else => {},
+ }
+
+ return obj;
+ }
+
pub const Class = NewClass(
ResolveError,
.{
.name = "ResolveError",
.read_only = true,
},
- .{},
+ .{
+ .toString = .{ .rfn = toString },
+ .convertToType = .{ .rfn = convertToType },
+ },
.{
.@"referrer" = .{
.@"get" = getReferrer,
@@ -3292,7 +3338,10 @@ pub const BuildError = struct {
.name = "BuildError",
},
} },
- .{},
+ .{
+ .convertToType = .{ .rfn = convertToType },
+ .toString = .{ .rfn = toString },
+ },
.{
.@"message" = .{
.@"get" = getMessage,
@@ -3310,6 +3359,49 @@ pub const BuildError = struct {
},
);
+ pub fn toStringFn(this: *BuildError, ctx: js.JSContextRef) js.JSValueRef {
+ var text = std.fmt.allocPrint(default_allocator, "BuildError: {s}", .{this.msg.data.text}) catch return null;
+ var str = ZigString.init(text);
+ str.setOutputEncoding();
+ if (str.isUTF8()) {
+ const out = str.toValueGC(ctx.ptr());
+ default_allocator.free(text);
+ return out.asObjectRef();
+ }
+
+ return str.toExternalValue(ctx.ptr()).asObjectRef();
+ }
+
+ pub fn toString(
+ // this
+ this: *BuildError,
+ ctx: js.JSContextRef,
+ // function
+ _: js.JSObjectRef,
+ // thisObject
+ _: js.JSObjectRef,
+ _: []const js.JSValueRef,
+ _: js.ExceptionRef,
+ ) js.JSValueRef {
+ return this.toStringFn(ctx);
+ }
+
+ pub fn convertToType(ctx: js.JSContextRef, obj: js.JSObjectRef, kind: js.JSType, _: js.ExceptionRef) callconv(.C) js.JSValueRef {
+ switch (kind) {
+ js.JSType.kJSTypeString => {
+ if (js.JSObjectGetPrivate(obj)) |priv| {
+ if (JSPrivateDataPtr.from(priv).is(BuildError)) {
+ var this = JSPrivateDataPtr.from(priv).as(BuildError);
+ return this.toStringFn(ctx);
+ }
+ }
+ },
+ else => {},
+ }
+
+ return obj;
+ }
+
pub fn create(
globalThis: *JSGlobalObject,
allocator: std.mem.Allocator,