diff options
author | 2022-06-27 05:31:58 -0700 | |
---|---|---|
committer | 2022-06-27 05:31:58 -0700 | |
commit | 6544b2b57ee8b6ae8f805f975aa3bc3895c46881 (patch) | |
tree | 578bca52db65a54c4a353a35c7050aa34b60bd4f /src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp | |
parent | 3943ce5ac52e00a02ce9c5644cf715845d5275b0 (diff) | |
download | bun-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.cpp | 56 |
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" \ |