aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-26 06:01:22 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-26 06:01:22 -0700
commit77a0f335cb0f18af4e03713583b98e0e1b024b33 (patch)
treef6ed90a992cb46677ab597bba4f6db2fbfcba3b1 /src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp
parent31cfcf2c9f40520dac72530ec62e765d3a0de221 (diff)
downloadbun-77a0f335cb0f18af4e03713583b98e0e1b024b33.tar.gz
bun-77a0f335cb0f18af4e03713583b98e0e1b024b33.tar.zst
bun-77a0f335cb0f18af4e03713583b98e0e1b024b33.zip
wip ReadableStream for HTTP(s) Server
Diffstat (limited to 'src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp')
-rw-r--r--src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp124
1 files changed, 110 insertions, 14 deletions
diff --git a/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp
index 09e96a121..ca82613a7 100644
--- a/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp
+++ b/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp
@@ -762,15 +762,111 @@ const char* const s_readableStreamInternalsIsReadableStreamDefaultControllerCode
"})\n" \
;
-const JSC::ConstructAbility s_readableStreamInternalsAssignDirectStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
-const JSC::ConstructorKind s_readableStreamInternalsAssignDirectStreamCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_readableStreamInternalsAssignDirectStreamCodeLength = 60;
-static const JSC::Intrinsic s_readableStreamInternalsAssignDirectStreamCodeIntrinsic = JSC::NoIntrinsic;
-const char* const s_readableStreamInternalsAssignDirectStreamCode =
- "(function () {\n" \
+const JSC::ConstructAbility s_readableStreamInternalsAssignToStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_readableStreamInternalsAssignToStreamCodeConstructorKind = JSC::ConstructorKind::None;
+const int s_readableStreamInternalsAssignToStreamCodeLength = 2534;
+static const JSC::Intrinsic s_readableStreamInternalsAssignToStreamCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_readableStreamInternalsAssignToStreamCode =
+ "(function (stream, sink) {\n" \
" \"use strict\";\n" \
"\n" \
- " var stream = this;\n" \
+ " //\n" \
+ " const underlyingSource = @getByIdDirectPrivate(stream, \"underlyingSource\");\n" \
+ "\n" \
+ " //\n" \
+ " if (underlyingSource) {\n" \
+ " var originalClose = underlyingSource.close;\n" \
+ " var reader;\n" \
+ " var close = (reason) => {\n" \
+ " originalClose && originalClose(reason);\n" \
+ " try {\n" \
+ " reader && reader.releaseLock();\n" \
+ " } catch (e) {}\n" \
+ " @readableStreamClose(stream, reason);\n" \
+ " \n" \
+ " }\n" \
+ " var pull = underlyingSource.pull;\n" \
+ " \n" \
+ " @putByIdDirectPrivate(stream, \"readableStreamController\", sink);\n" \
+ " @putByIdDirectPrivate(stream, \"start\", @undefined);\n" \
+ " @putByIdDirectPrivate(stream, \"underlyingSource\", @undefined);\n" \
+ "\n" \
+ " @startDirectStream.@call(sink, stream, pull, close);\n" \
+ "\n" \
+ " if (!pull) {\n" \
+ " close();\n" \
+ " return;\n" \
+ " }\n" \
+ "\n" \
+ " if (!@isCallable(pull)) {\n" \
+ " close();\n" \
+ " @throwTypeError(\"pull is not a function\");\n" \
+ " return;\n" \
+ " }\n" \
+ "\n" \
+ " //\n" \
+ " reader = stream.getReader();\n" \
+ "\n" \
+ " pull(sink);\n" \
+ " return;\n" \
+ " }\n" \
+ "\n" \
+ " \n" \
+ " return (async function() {\n" \
+ " \"use strict\";\n" \
+ "\n" \
+ " var didClose = false;\n" \
+ "\n" \
+ "\n" \
+ " try {\n" \
+ " var reader = stream.getReader();\n" \
+ " reader.closed.then(() => {\n" \
+ " if (!didClose && sink) {\n" \
+ " didClose = true;\n" \
+ " sink.end();\n" \
+ " }\n" \
+ " }, (e) => {\n" \
+ " if (!didClose && sink) {\n" \
+ " didClose = true;\n" \
+ " sink.close(e);\n" \
+ " }\n" \
+ " });\n" \
+ "\n" \
+ " var many = reader.readMany();\n" \
+ " if (many && @isPromise(many)) {\n" \
+ " many = await many;\n" \
+ " }\n" \
+ "\n" \
+ " if (many.done) {\n" \
+ " didClose = true;\n" \
+ " sink.end();\n" \
+ " return;\n" \
+ " }\n" \
+ "\n" \
+ " sink.start();\n" \
+ " var wroteCount = many.value.length;\n" \
+ " for (var i = 0, values = many.value, length = many.value.length; i < length; i++) {\n" \
+ " sink.write(values[i]);\n" \
+ " }\n" \
+ "\n" \
+ " if (wroteCount > 0) {\n" \
+ " sink.drain();\n" \
+ " }\n" \
+ " \n" \
+ " while (true) {\n" \
+ " var result = await reader.read();\n" \
+ " if (result.done) {\n" \
+ " didClose = true;\n" \
+ " return sink.end();\n" \
+ " }\n" \
+ "\n" \
+ " sink.write(result.value);\n" \
+ " }\n" \
+ " } catch (e) {\n" \
+ " globalThis.console.error(e);\n" \
+ "\n" \
+ " }\n" \
+ " })();\n" \
"})\n" \
;
@@ -823,11 +919,11 @@ const char* const s_readableStreamInternalsHandleDirectStreamErrorRejectCode =
"})\n" \
;
-const JSC::ConstructAbility s_readableStreamInternalsOnPullDirectStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
-const JSC::ConstructorKind s_readableStreamInternalsOnPullDirectStreamCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_readableStreamInternalsOnPullDirectStreamCodeLength = 1701;
-static const JSC::Intrinsic s_readableStreamInternalsOnPullDirectStreamCodeIntrinsic = JSC::NoIntrinsic;
-const char* const s_readableStreamInternalsOnPullDirectStreamCode =
+const JSC::ConstructAbility s_readableStreamInternalsOnPullArrayBufferSinkCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_readableStreamInternalsOnPullArrayBufferSinkCodeConstructorKind = JSC::ConstructorKind::None;
+const int s_readableStreamInternalsOnPullArrayBufferSinkCodeLength = 1701;
+static const JSC::Intrinsic s_readableStreamInternalsOnPullArrayBufferSinkCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_readableStreamInternalsOnPullArrayBufferSinkCode =
"(function (controller)\n" \
"{\n" \
" \n" \
@@ -1049,7 +1145,7 @@ const char* const s_readableStreamInternalsOnDrainDirectStreamCode =
const JSC::ConstructAbility s_readableStreamInternalsInitializeArrayBufferStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_readableStreamInternalsInitializeArrayBufferStreamCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_readableStreamInternalsInitializeArrayBufferStreamCodeLength = 930;
+const int s_readableStreamInternalsInitializeArrayBufferStreamCodeLength = 933;
static const JSC::Intrinsic s_readableStreamInternalsInitializeArrayBufferStreamCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_readableStreamInternalsInitializeArrayBufferStreamCode =
"(function (underlyingSource, highWaterMark)\n" \
@@ -1066,7 +1162,7 @@ const char* const s_readableStreamInternalsInitializeArrayBufferStreamCode =
"\n" \
" var controller = {\n" \
" @underlyingSource: underlyingSource,\n" \
- " @pull: @onPullDirectStream,\n" \
+ " @pull: @onPullArrayBufferSink,\n" \
" @controlledReadableStream: this,\n" \
" @sink: sink,\n" \
" close: @onCloseDirectStream,\n" \