aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp8
-rw-r--r--src/bun.js/builtins/js/JSBufferConstructor.js6
2 files changed, 13 insertions, 1 deletions
diff --git a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp
index 213060f58..7025ea8b8 100644
--- a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp
+++ b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp
@@ -51,7 +51,7 @@ namespace WebCore {
const JSC::ConstructAbility s_jsBufferConstructorFromCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_jsBufferConstructorFromCodeConstructorKind = JSC::ConstructorKind::None;
const JSC::ImplementationVisibility s_jsBufferConstructorFromCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
-const int s_jsBufferConstructorFromCodeLength = 1832;
+const int s_jsBufferConstructorFromCodeLength = 1984;
static const JSC::Intrinsic s_jsBufferConstructorFromCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_jsBufferConstructorFromCode =
"(function (items) {\n" \
@@ -65,6 +65,12 @@ const char* const s_jsBufferConstructorFromCode =
" \"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object.\",\n" \
" );\n" \
"\n" \
+ " if (@argumentCount() === 1 && @isTypedArrayView(items)) {\n" \
+ " var out = this.allocUnsafe(items.byteLength);\n" \
+ " out.copy(items);\n" \
+ " return out;\n" \
+ " }\n" \
+ "\n" \
" //\n" \
" if (\n" \
" typeof items === \"string\" ||\n" \
diff --git a/src/bun.js/builtins/js/JSBufferConstructor.js b/src/bun.js/builtins/js/JSBufferConstructor.js
index 9f61220cc..4c3650360 100644
--- a/src/bun.js/builtins/js/JSBufferConstructor.js
+++ b/src/bun.js/builtins/js/JSBufferConstructor.js
@@ -36,6 +36,12 @@ function from(items) {
"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object.",
);
+ if (@argumentCount() === 1 && @isTypedArrayView(items)) {
+ var out = this.allocUnsafe(items.byteLength);
+ out.copy(items);
+ return out;
+ }
+
// TODO: figure out why private symbol not found
if (
typeof items === "string" ||