diff --git a/lib/internal/webstreams/adapters.js b/lib/internal/webstreams/adapters.js index 2ebc18d7645cc9..1facc01f22e1e6 100644 --- a/lib/internal/webstreams/adapters.js +++ b/lib/internal/webstreams/adapters.js @@ -25,6 +25,7 @@ const { const { CountQueuingStrategy, + ByteLengthQueuingStrategy, } = require('internal/webstreams/queuingstrategies'); const { @@ -418,10 +419,8 @@ function newReadableStreamFromStreamReadable(streamReadable, options = kEmptyObj } // When not running in objectMode explicitly, we just fall - // back to a minimal strategy that just specifies the highWaterMark - // and no size algorithm. Using a ByteLengthQueuingStrategy here - // is unnecessary. - return { highWaterMark }; + // back to ByteLengthQueuingStrategy. + return new ByteLengthQueuingStrategy({ highWaterMark }); }; const strategy = evaluateStrategyOrFallback(options?.strategy); diff --git a/test/parallel/test-stream-readable-strategy-option.js b/test/parallel/test-stream-readable-strategy-option.js index a32e70ef2155ea..c4b9417d199e24 100644 --- a/test/parallel/test-stream-readable-strategy-option.js +++ b/test/parallel/test-stream-readable-strategy-option.js @@ -1,8 +1,10 @@ +// Flags: --expose-internals 'use strict'; const common = require('../common'); const { Readable } = require('stream'); const assert = require('assert'); const { strictEqual } = require('assert'); +const { kState } = require('internal/webstreams/util'); { // Strategy 2 @@ -73,3 +75,16 @@ const { strictEqual } = require('assert'); strictEqual(done, true); }); } + +{ + const readable = new Readable({ + read: common.mustCall(() => { + readable.push(null); + }), + }); + + const readableStream = Readable.toWeb(readable); + const { sizeAlgorithm: size } = readableStream[kState].controller[kState]; + + assert.strictEqual(size(new ArrayBuffer(19)), 19); +}