stream: use webidl validation semantics for args · nodejs/node@76538d5 · GitHub
Skip to content

Commit 76538d5

Browse files
jasnelladuh95
authored andcommitted
stream: use webidl validation semantics for args
Signed-off-by: James M Snell <jasnell@gmail.com> Assisted-by: Opencode PR-URL: #65658 Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
1 parent 649a4ab commit 76538d5

19 files changed

Lines changed: 651 additions & 278 deletions

‎doc/api/stream_iter.md‎

Lines changed: 16 additions & 3 deletions

‎lib/internal/fs/promises.js‎

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -161,17 +161,19 @@ const lazyReadableStream = getLazy(() =>
161161
let newStreamsPull;
162162
let newStreamsPullSync;
163163
let newStreamsParsePullArgs;
164-
let newStreamsToUint8Array;
164+
let newStreamsToWriterUint8Array;
165165
let newStreamsConvertChunks;
166+
let newStreamsGetWriterSignal;
166167
function lazyNewStreams() {
167168
if (newStreamsPull === undefined) {
168169
const pullModule = require('internal/streams/iter/pull');
169170
newStreamsPull = pullModule.pull;
170171
newStreamsPullSync = pullModule.pullSync;
171172
const utils = require('internal/streams/iter/utils');
172173
newStreamsParsePullArgs = utils.parsePullArgs;
173-
newStreamsToUint8Array = utils.toUint8Array;
174+
newStreamsToWriterUint8Array = utils.toWriterUint8Array;
174175
newStreamsConvertChunks = utils.convertChunks;
176+
newStreamsGetWriterSignal = utils.getWriterSignal;
175177
}
176178
}
177179

@@ -882,24 +884,18 @@ if (getOptionValue('--experimental-stream-iter')) {
882884
return {
883885
__proto__: null,
884886
write(chunk, options = kNullPrototo) {
887+
chunk = newStreamsToWriterUint8Array(chunk);
888+
const signal = newStreamsGetWriterSignal(options);
885889
if (error) {
886890
return PromiseReject(error);
887891
}
888892
if (closed) {
889893
return PromiseReject(
890894
new ERR_INVALID_STATE.TypeError('The writer is closed'));
891895
}
892-
validateObject(options, 'options');
893-
const {
894-
signal,
895-
} = options;
896-
if (signal !== undefined) {
897-
validateAbortSignal(signal, 'options.signal');
898-
if (signal.aborted) {
899-
return PromiseReject(signal.reason);
900-
}
896+
if (signal?.aborted) {
897+
return PromiseReject(signal.reason);
901898
}
902-
chunk = newStreamsToUint8Array(chunk);
903899
if (bytesRemaining >= 0 && chunk.byteLength > bytesRemaining) {
904900
return PromiseReject(
905901
new ERR_OUT_OF_RANGE('write', `<= ${bytesRemaining} bytes`,
@@ -912,24 +908,18 @@ if (getOptionValue('--experimental-stream-iter')) {
912908
},
913909

914910
writev(chunks, options = kNullPrototo) {
911+
chunks = newStreamsConvertChunks(chunks);
912+
const signal = newStreamsGetWriterSignal(options);
915913
if (error) {
916914
return PromiseReject(error);
917915
}
918916
if (closed) {
919917
return PromiseReject(
920918
new ERR_INVALID_STATE.TypeError('The writer is closed'));
921919
}
922-
validateObject(options, 'options');
923-
const {
924-
signal,
925-
} = options;
926-
if (signal !== undefined) {
927-
validateAbortSignal(signal, 'options.signal');
928-
if (signal?.aborted) {
929-
return PromiseReject(signal.reason);
930-
}
920+
if (signal?.aborted) {
921+
return PromiseReject(signal.reason);
931922
}
932-
chunks = newStreamsConvertChunks(chunks);
933923
let totalSize = 0;
934924
for (let i = 0; i < chunks.length; i++) {
935925
totalSize += chunks[i].byteLength;
@@ -946,8 +936,8 @@ if (getOptionValue('--experimental-stream-iter')) {
946936
},
947937

948938
writeSync(chunk) {
939+
chunk = newStreamsToWriterUint8Array(chunk);
949940
if (error || closed || asyncPending) return false;
950-
chunk = newStreamsToUint8Array(chunk);
951941
const length = chunk.byteLength;
952942
if (length > syncWriteThreshold) return false;
953943
if (length === 0) return true;
@@ -977,8 +967,8 @@ if (getOptionValue('--experimental-stream-iter')) {
977967
},
978968

979969
writevSync(chunks) {
980-
if (error || closed || asyncPending) return false;
981970
chunks = newStreamsConvertChunks(chunks);
971+
if (error || closed || asyncPending) return false;
982972
let totalSize = 0;
983973
for (let i = 0; i < chunks.length; i++) {
984974
totalSize += chunks[i].byteLength;
@@ -1013,6 +1003,7 @@ if (getOptionValue('--experimental-stream-iter')) {
10131003
},
10141004

10151005
end(options = kNullPrototo) {
1006+
const signal = newStreamsGetWriterSignal(options);
10161007
if (error) {
10171008
return PromiseReject(error);
10181009
}
@@ -1022,15 +1013,8 @@ if (getOptionValue('--experimental-stream-iter')) {
10221013
if (closing) {
10231014
return pendingEndPromise;
10241015
}
1025-
validateObject(options, 'options');
1026-
const {
1027-
signal,
1028-
} = options;
1029-
if (signal !== undefined) {
1030-
validateAbortSignal(signal, 'options.signal');
1031-
if (signal.aborted) {
1032-
return PromiseReject(signal.reason);
1033-
}
1016+
if (signal?.aborted) {
1017+
return PromiseReject(signal.reason);
10341018
}
10351019
closing = true;
10361020
pendingEndPromise = PromisePrototypeThen(

‎lib/internal/quic/quic.js‎

Lines changed: 36 additions & 26 deletions

0 commit comments

Comments
 (0)