diff options
author | 2022-03-01 22:21:39 -0800 | |
---|---|---|
committer | 2022-03-01 22:21:39 -0800 | |
commit | 87c71207e30db17808014020900ad5c88c8d5ae6 (patch) | |
tree | 1d0aa2eaf28f62aea8a278d68b8deeda4291337c | |
parent | 149bbc12b523119d7be8739cd8f55e2867b8a866 (diff) | |
download | bun-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.zig | 96 |
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, |