diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index e1e80eb953c0..81554033a302 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -62,6 +62,7 @@ const { const { validateAbortSignal, validateBuffer, + validateNumber, validateObject, kValidateObjectAllowObjects, kValidateObjectAllowObjectsAndNull, @@ -1095,8 +1096,7 @@ class ReadableStreamBYOBReader { // detached, but there's no API available to use to check that. const min = options?.min ?? 1; - if (typeof min !== 'number') - throw new ERR_INVALID_ARG_TYPE('options.min', 'number', min); + validateNumber(min, 'options.min'); if (!NumberIsInteger(min)) throw new ERR_INVALID_ARG_VALUE('options.min', min, 'must be an integer'); if (min <= 0) diff --git a/test/parallel/test-whatwg-readablebytestream-bad-buffers-and-views.js b/test/parallel/test-whatwg-readablebytestream-bad-buffers-and-views.js index a8f6ffc7535e..d69e5d2d683e 100644 --- a/test/parallel/test-whatwg-readablebytestream-bad-buffers-and-views.js +++ b/test/parallel/test-whatwg-readablebytestream-bad-buffers-and-views.js @@ -85,4 +85,38 @@ let pass = 0; .then(common.mustCall()); } +{ + // options.min must be a number. + const stream = new ReadableStream({ + start(c) { + c.enqueue(new Uint8Array([1, 2, 3])); + }, + type: 'bytes', + }); + const reader = stream.getReader({ mode: 'byob' }); + + assert + .rejects(reader.read(new Uint8Array(3), { min: 'not a number' }), { + code: 'ERR_INVALID_ARG_TYPE', + name: 'TypeError', + }) + .then(common.mustCall()); +} + +{ + // A valid numeric options.min still works as expected. + const stream = new ReadableStream({ + start(c) { + c.enqueue(new Uint8Array([1, 2, 3])); + }, + type: 'bytes', + }); + const reader = stream.getReader({ mode: 'byob' }); + + reader.read(new Uint8Array(3), { min: 1 }).then(common.mustCall(({ value, done }) => { + assert.strictEqual(done, false); + assert.deepStrictEqual([...value], [1, 2, 3]); + })); +} + process.on('exit', () => assert.strictEqual(pass, 2));