diff options
Diffstat (limited to 'src/bun.js/api/server.zig')
-rw-r--r-- | src/bun.js/api/server.zig | 45 |
1 files changed, 17 insertions, 28 deletions
diff --git a/src/bun.js/api/server.zig b/src/bun.js/api/server.zig index 91cfb0b54..d3a202364 100644 --- a/src/bun.js/api/server.zig +++ b/src/bun.js/api/server.zig @@ -3325,7 +3325,7 @@ pub const ServerWebSocket = struct { this_value: JSValue = .zero, websocket: uws.AnyWebSocket = undefined, closed: bool = false, - binary_type: JSC.JSValue.JSType = .Uint8Array, + binary_type: JSC.BinaryType = .Uint8Array, opened: bool = false, pub usingnamespace JSC.Codegen.JSServerWebSocket; @@ -3430,6 +3430,12 @@ pub const ServerWebSocket = struct { message, .Uint8Array, ) + else if (this.binary_type == .Buffer) + JSC.ArrayBuffer.create( + globalObject, + message, + .Buffer, + ) else JSC.ArrayBuffer.create( globalObject, @@ -4208,18 +4214,13 @@ pub const ServerWebSocket = struct { log("getBinaryType()", .{}); return switch (this.binary_type) { - .Uint8Array => ZigString.static("uint8array").toValue(globalThis), - else => ZigString.static("arraybuffer").toValue(globalThis), + .Uint8Array => ZigString.static("uint8array").toValueGC(globalThis), + .Buffer => ZigString.static("nodebuffer").toValueGC(globalThis), + .ArrayBuffer => ZigString.static("arraybuffer").toValueGC(globalThis), + else => @panic("Invalid binary type"), }; } - pub const BinaryType = bun.ComptimeStringMap(JSC.JSValue.JSType, .{ - &.{ "uint8array", .Uint8Array }, - &.{ "Uint8Array", .Uint8Array }, - &.{ "arraybuffer", .ArrayBuffer }, - &.{ "ArrayBuffer", .ArrayBuffer }, - }); - pub fn setBinaryType( this: *ServerWebSocket, globalThis: *JSC.JSGlobalObject, @@ -4227,27 +4228,15 @@ pub const ServerWebSocket = struct { ) callconv(.C) bool { log("setBinaryType()", .{}); - if (value.isEmptyOrUndefinedOrNull() or !value.isString()) { - globalThis.throw("binaryType must be either \"uint8array\" or \"arraybuffer\"", .{}); - return false; - } - - switch (BinaryType.getWithEql( - value.getZigString(globalThis), - ZigString.eqlComptime, - ) orelse // random value - .Uint8ClampedArray) { - .Uint8Array => { - this.binary_type = .Uint8Array; - - return true; - }, - .ArrayBuffer => { - this.binary_type = .ArrayBuffer; + switch (JSC.BinaryType.fromJSValue(globalThis, value) orelse + // some other value which we don't support + .Float64Array) { + .ArrayBuffer, .Buffer, .Uint8Array => |val| { + this.binary_type = val; return true; }, else => { - globalThis.throw("binaryType must be either \"uint8array\" or \"arraybuffer\"", .{}); + globalThis.throw("binaryType must be either \"uint8array\" or \"arraybuffer\" or \"nodebuffer\"", .{}); return false; }, } |