aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-20 00:06:46 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-20 00:06:46 -0800
commitff7e984f0ad67ba84e7d45cbdfb2298f17441c81 (patch)
tree77fc8aafdccfffd75a66690ef727a2a6c5b66c26 /src
parent3a100af876836fcdbe9b36da0642289284cd6a1b (diff)
downloadbun-ff7e984f0ad67ba84e7d45cbdfb2298f17441c81.tar.gz
bun-ff7e984f0ad67ba84e7d45cbdfb2298f17441c81.tar.zst
bun-ff7e984f0ad67ba84e7d45cbdfb2298f17441c81.zip
Further cleanup buffer encoding
Diffstat (limited to 'src')
-rw-r--r--src/bun.js/node/types.zig74
1 files changed, 26 insertions, 48 deletions
diff --git a/src/bun.js/node/types.zig b/src/bun.js/node/types.zig
index d25023eb4..dc763ebb5 100644
--- a/src/bun.js/node/types.zig
+++ b/src/bun.js/node/types.zig
@@ -346,68 +346,46 @@ pub const SliceOrBuffer = union(Tag) {
}
pub fn fromJS(global: *JSC.JSGlobalObject, allocator: std.mem.Allocator, value: JSC.JSValue) ?SliceOrBuffer {
- return switch (value.jsType()) {
- JSC.JSValue.JSType.String, JSC.JSValue.JSType.StringObject, JSC.JSValue.JSType.DerivedStringObject, JSC.JSValue.JSType.Object => {
- var zig_str = value.toSlice(global, allocator);
- return SliceOrBuffer{ .string = zig_str };
- },
- .ArrayBuffer,
- .Int8Array,
- .Uint8Array,
- .Uint8ClampedArray,
- .Int16Array,
- .Uint16Array,
- .Int32Array,
- .Uint32Array,
- .Float32Array,
- .Float64Array,
- .BigInt64Array,
- .BigUint64Array,
- .DataView,
- => SliceOrBuffer{
+ if (!value.isEmpty() and value.isCell() and value.jsType().isTypedArray()) {
+ return SliceOrBuffer{
.buffer = JSC.MarkedArrayBuffer{
.buffer = value.asArrayBuffer(global) orelse return null,
.allocator = null,
},
- },
- else => null,
- };
+ };
+ }
+
+ if (value.isEmpty()) {
+ return null;
+ }
+
+ var str = value.toStringOrNull(global) orelse return null;
+ return SliceOrBuffer{ .string = str.toSlice(global, allocator) };
}
pub fn fromJSWithEncoding(global: *JSC.JSGlobalObject, allocator: std.mem.Allocator, value: JSC.JSValue, encoding_value: JSC.JSValue) ?SliceOrBuffer {
- if (encoding_value.isEmptyOrUndefinedOrNull())
- return fromJS(global, allocator, value);
-
- switch (value.jsType()) {
- .ArrayBuffer,
- .Int8Array,
- .Uint8Array,
- .Uint8ClampedArray,
- .Int16Array,
- .Uint16Array,
- .Int32Array,
- .Uint32Array,
- .Float32Array,
- .Float64Array,
- .BigInt64Array,
- .BigUint64Array,
- .DataView,
- => return SliceOrBuffer{
+ if (value.isCell() and value.jsType().isTypedArray()) {
+ return SliceOrBuffer{
.buffer = JSC.MarkedArrayBuffer{
.buffer = value.asArrayBuffer(global) orelse return null,
.allocator = null,
},
- },
- else => {},
+ };
}
- var encoding_str = encoding_value.toSlice(global, allocator);
- if (encoding_str.len == 0)
- return fromJS(global, allocator, value);
+ const encoding: Encoding = brk: {
+ if (encoding_value.isEmpty())
+ break :brk .utf8;
+ var encoding_str = encoding_value.toSlice(global, allocator);
+ if (encoding_str.len == 0)
+ break :brk .utf8;
+
+ defer encoding_str.deinit();
+
+ // TODO: better error
+ break :brk Encoding.from(encoding_str.slice()) orelse return null;
+ };
- defer encoding_str.deinit();
- // TODO: better error
- const encoding = Encoding.from(encoding_str.slice()) orelse return null;
if (encoding == .utf8) {
return fromJS(global, allocator, value);
}