diff --git a/lib/internal/webstreams/adapters.js b/lib/internal/webstreams/adapters.js index 1ade5d32951ff5..2a9c028030e1c0 100644 --- a/lib/internal/webstreams/adapters.js +++ b/lib/internal/webstreams/adapters.js @@ -216,7 +216,7 @@ function newWritableStreamFromStreamWritable(streamWritable, options = kEmptyObj closed.reject(error); closed = undefined; } - controller.error(error); + controller?.error(error); controller = undefined; return; } @@ -226,7 +226,7 @@ function newWritableStreamFromStreamWritable(streamWritable, options = kEmptyObj closed = undefined; return; } - controller.error(new AbortError()); + controller?.error(new AbortError()); controller = undefined; }); diff --git a/test/parallel/test-whatwg-webstreams-adapters-to-readablewritablepair.js b/test/parallel/test-whatwg-webstreams-adapters-to-readablewritablepair.js index 5062b9e179ac1e..cbe505ab956a5b 100644 --- a/test/parallel/test-whatwg-webstreams-adapters-to-readablewritablepair.js +++ b/test/parallel/test-whatwg-webstreams-adapters-to-readablewritablepair.js @@ -10,6 +10,7 @@ const { } = require('internal/webstreams/adapters'); const { + Duplex, PassThrough, } = require('stream'); @@ -254,3 +255,27 @@ const { code: 'ERR_INVALID_ARG_TYPE' }); } + +{ + const duplex = new Duplex({ + allowHalfOpen: false, + read() {}, + write(chunk, enc, cb) { cb(); }, + final(cb) { setImmediate(cb); }, + }); + + const { + readable, + writable, + } = newReadableWritablePairFromDuplex(duplex); + + const reader = readable.getReader(); + const writer = writable.getWriter(); + + duplex.push(null); + + reader.read().then(common.mustCall(({ done }) => { + assert.strictEqual(done, true); + writer.close().then(common.mustCall()); + })); +}