aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/javascript/jsc/node/types.zig9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/javascript/jsc/node/types.zig b/src/javascript/jsc/node/types.zig
index e4230068a..a66efdf04 100644
--- a/src/javascript/jsc/node/types.zig
+++ b/src/javascript/jsc/node/types.zig
@@ -139,8 +139,13 @@ pub const StringOrBuffer = union(Tag) {
pub fn toJS(this: StringOrBuffer, ctx: JSC.C.JSContextRef, exception: JSC.C.ExceptionRef) JSC.C.JSValueRef {
return switch (this) {
.string => {
- var external = JSC.C.JSStringCreateExternal(this.string.ptr, this.string.len, null, external_string_finalizer);
- return JSC.C.JSValueMakeString(ctx, external);
+ const input = this.string;
+ if (strings.toUTF16Alloc(bun.default_allocator, input, false) catch null) |utf16| {
+ bun.default_allocator.free(bun.constStrToU8(input));
+ return JSC.ZigString.toExternalU16(utf16.ptr, utf16.len, ctx.ptr()).asObjectRef();
+ }
+
+ return JSC.ZigString.init(input).toExternalValue(ctx.ptr()).asObjectRef();
},
.buffer => this.buffer.toJSObjectRef(ctx, exception),
};