From d1834b5a92669c51ff73ce8f6aa3a80895270030 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Wed, 14 Dec 2022 18:05:27 -0800 Subject: [process.stdin] Support reading from process.stdin in the same tick --- .../builtins/cpp/ProcessObjectInternalsBuiltins.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp') 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" \ -- cgit v1.2.3