aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-27 05:31:58 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-27 05:31:58 -0700
commit6544b2b57ee8b6ae8f805f975aa3bc3895c46881 (patch)
tree578bca52db65a54c4a353a35c7050aa34b60bd4f /src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp
parent3943ce5ac52e00a02ce9c5644cf715845d5275b0 (diff)
downloadbun-6544b2b57ee8b6ae8f805f975aa3bc3895c46881.tar.gz
bun-6544b2b57ee8b6ae8f805f975aa3bc3895c46881.tar.zst
bun-6544b2b57ee8b6ae8f805f975aa3bc3895c46881.zip
Faster web streams
Diffstat (limited to 'src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp')
-rw-r--r--src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp56
1 files changed, 47 insertions, 9 deletions
diff --git a/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp
index 2af23348e..d60f09e7b 100644
--- a/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp
+++ b/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp
@@ -170,42 +170,80 @@ const char* const s_readableStreamReadableStreamToArrayCode =
const JSC::ConstructAbility s_readableStreamReadableStreamToTextCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_readableStreamReadableStreamToTextCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_readableStreamReadableStreamToTextCodeLength = 215;
+const int s_readableStreamReadableStreamToTextCodeLength = 1080;
static const JSC::Intrinsic s_readableStreamReadableStreamToTextCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_readableStreamReadableStreamToTextCode =
"(function (stream) {\n" \
" \"use strict\";\n" \
"\n" \
" //\n" \
- " return globalThis.Bun.readableStreamToArrayBuffer(stream).@then(function(arrayBuffer) {\n" \
- " return new globalThis.TextDecoder().decode(arrayBuffer);\n" \
- " });\n" \
+ " var underlyingSource = @getByIdDirectPrivate(stream, \"underlyingSource\");\n" \
+ " if (underlyingSource !== @undefined) {\n" \
+ " \n" \
+ " const promise = @initializeTextStream.@call(stream, underlyingSource, @undefined);\n" \
+ " var reader = stream.getReader();\n" \
+ " return (async function() {\n" \
+ " while (@getByIdDirectPrivate(stream, \"state\") === @streamReadable) {\n" \
+ " var thisResult = await reader.read();\n" \
+ " if (thisResult.done) {\n" \
+ " break;\n" \
+ " }\n" \
+ " }\n" \
+ "\n" \
+ " try {\n" \
+ " reader.releaseLock();\n" \
+ " } catch(e) {\n" \
+ " }\n" \
+ " \n" \
+ " return await promise;\n" \
+ " })();\n" \
+ " }\n" \
+ "\n" \
+ " //\n" \
+ " var toArrayBuffer = globalThis.Bun.readableStreamToArrayBuffer(stream);\n" \
+ " if (toArrayBuffer && @isPromise(toArrayBuffer)) {\n" \
+ " return toArrayBuffer.@then(function(arrayBuffer) {\n" \
+ " return new globalThis.TextDecoder().decode(arrayBuffer);\n" \
+ " });\n" \
+ " }\n" \
+ "\n" \
+ " return new globalThis.TextDecoder().decode(arrayBuffer);\n" \
"})\n" \
;
const JSC::ConstructAbility s_readableStreamReadableStreamToJSONCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_readableStreamReadableStreamToJSONCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_readableStreamReadableStreamToJSONCodeLength = 238;
+const int s_readableStreamReadableStreamToJSONCodeLength = 121;
static const JSC::Intrinsic s_readableStreamReadableStreamToJSONCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_readableStreamReadableStreamToJSONCode =
"(function (stream) {\n" \
" \"use strict\";\n" \
"\n" \
" //\n" \
- " return globalThis.Bun.readableStreamToArrayBuffer(stream).@then(function(arrayBuffer) {\n" \
- " return globalThis.JSON.parse(new globalThis.TextDecoder().decode(arrayBuffer));\n" \
- " });\n" \
+ " return @readableStreamToText(stream).@then(globalThis.JSON.parse);\n" \
"})\n" \
;
const JSC::ConstructAbility s_readableStreamReadableStreamToBlobCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_readableStreamReadableStreamToBlobCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_readableStreamReadableStreamToBlobCodeLength = 367;
+const int s_readableStreamReadableStreamToBlobCodeLength = 834;
static const JSC::Intrinsic s_readableStreamReadableStreamToBlobCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_readableStreamReadableStreamToBlobCode =
"(function (stream) {\n" \
" \"use strict\";\n" \
"\n" \
+ " var underlyingSource = @getByIdDirectPrivate(stream, \"underlyingSource\");\n" \
+ " if (underlyingSource != @undefined) {\n" \
+ " var toArrayBuffer = globalThis.Bun.readableStreamToArrayBuffer(stream);\n" \
+ " if (toArrayBuffer && @isPromise(toArrayBuffer)) {\n" \
+ " return toArrayBuffer.@then(function(arrayBuffer) {\n" \
+ " return new globalThis.Blob([arrayBuffer]);\n" \
+ " });\n" \
+ " }\n" \
+ "\n" \
+ " return new globalThis.Blob([toArrayBuffer]);\n" \
+ " }\n" \
+ "\n" \
" \n" \
" const array = @readableStreamToArray(stream);\n" \
" if (array === null) {\n" \