aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp21
-rw-r--r--src/bun.js/builtins/js/ProcessObjectInternals.js19
2 files changed, 35 insertions, 5 deletions
diff --git a/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp
index c95df0649..62c5048be 100644
--- a/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp
+++ b/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp
@@ -473,7 +473,7 @@ const char* const s_processObjectInternalsGetStdioWriteStreamCode =
const JSC::ConstructAbility s_processObjectInternalsGetStdinStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_processObjectInternalsGetStdinStreamCodeConstructorKind = JSC::ConstructorKind::None;
const JSC::ImplementationVisibility s_processObjectInternalsGetStdinStreamCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
-const int s_processObjectInternalsGetStdinStreamCodeLength = 3773;
+const int s_processObjectInternalsGetStdinStreamCodeLength = 4076;
static const JSC::Intrinsic s_processObjectInternalsGetStdinStreamCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_processObjectInternalsGetStdinStreamCode =
"(function (fd, rawRequire, Bun) {\n" \
@@ -485,6 +485,7 @@ const char* const s_processObjectInternalsGetStdinStreamCode =
" var StdinStream = class StdinStream extends Duplex {\n" \
" #reader;\n" \
" //\n" \
+ "\n" \
" #readRef;\n" \
" #writeStream;\n" \
"\n" \
@@ -579,10 +580,24 @@ const char* const s_processObjectInternalsGetStdinStreamCode =
"\n" \
" async #readInternal() {\n" \
" try {\n" \
- " const { done, value } = await this.#reader.read();\n" \
+ " var done, value;\n" \
+ " const read = this.#reader.readMany();\n" \
+ "\n" \
+ " //\n" \
+ " if (!read?.then) {\n" \
+ " ({ done, value } = read);\n" \
+ " } else {\n" \
+ " ({ done, value } = await read);\n" \
+ " }\n" \
"\n" \
" if (!done) {\n" \
- " this.push(value);\n" \
+ " this.push(value[0]);\n" \
+ "\n" \
+ " //\n" \
+ " const length = value.length;\n" \
+ " for (let i = 1; i < length; i++) {\n" \
+ " this.push(value[i]);\n" \
+ " }\n" \
" } else {\n" \
" this.push(null);\n" \
" this.pause();\n" \
diff --git a/src/bun.js/builtins/js/ProcessObjectInternals.js b/src/bun.js/builtins/js/ProcessObjectInternals.js
index 2353f6b7e..2a3c67242 100644
--- a/src/bun.js/builtins/js/ProcessObjectInternals.js
+++ b/src/bun.js/builtins/js/ProcessObjectInternals.js
@@ -444,6 +444,7 @@ function getStdinStream(fd, rawRequire, Bun) {
var StdinStream = class StdinStream extends Duplex {
#reader;
// TODO: investigate https://github.com/oven-sh/bun/issues/1607
+
#readRef;
#writeStream;
@@ -531,10 +532,24 @@ function getStdinStream(fd, rawRequire, Bun) {
async #readInternal() {
try {
- const { done, value } = await this.#reader.read();
+ var done, value;
+ const read = this.#reader.readMany();
+
+ // read same-tick if possible
+ if (!read?.then) {
+ ({ done, value } = read);
+ } else {
+ ({ done, value } = await read);
+ }
if (!done) {
- this.push(value);
+ this.push(value[0]);
+
+ // shouldn't actually happen, but just in case
+ const length = value.length;
+ for (let i = 1; i < length; i++) {
+ this.push(value[i]);
+ }
} else {
this.push(null);
this.pause();