aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/webcore/streams.zig4
-rw-r--r--test/js/node/stream/node-stream.test.js26
2 files changed, 30 insertions, 0 deletions
diff --git a/src/bun.js/webcore/streams.zig b/src/bun.js/webcore/streams.zig
index 5dc4ea830..f2c5914ef 100644
--- a/src/bun.js/webcore/streams.zig
+++ b/src/bun.js/webcore/streams.zig
@@ -4433,6 +4433,10 @@ pub const FileReader = struct {
var readable_file = File{ .loop = this.globalThis().bunVM().eventLoop() };
const result = readable_file.start(&blob.data.file);
+ if (result == .empty) {
+ this.lazy_readable = .{ .empty = {} };
+ return result;
+ }
if (result != .ready) {
return result;
}
diff --git a/test/js/node/stream/node-stream.test.js b/test/js/node/stream/node-stream.test.js
index 51252a5f6..5f5b9d67a 100644
--- a/test/js/node/stream/node-stream.test.js
+++ b/test/js/node/stream/node-stream.test.js
@@ -41,6 +41,32 @@ describe("Readable", () => {
readable.pipe(writable);
});
+ it("should be able to be piped via .pipe, issue #3607", done => {
+ const path = `${tmpdir()}/${Date.now()}.testReadStreamEmptyFile.txt`;
+ writeFileSync(path, "");
+ const stream = createReadStream(path);
+ stream.on("error", err => {
+ done(err);
+ });
+
+ let called = false;
+ const writable = new Writable({
+ write(chunk, encoding, callback) {
+ called = true;
+ callback();
+ },
+ });
+ writable.on("finish", () => {
+ try {
+ expect(called).toBeFalse();
+ } catch (err) {
+ return done(err);
+ }
+ done();
+ });
+
+ stream.pipe(writable);
+ });
it("should be able to be piped via .pipe, issue #3668", done => {
const path = `${tmpdir()}/${Date.now()}.testReadStream.txt`;
writeFileSync(path, "12345");