Skip to content

Commit 4540f14

Browse files
committed
lib: reuse invalid state errors on webstreams
Signed-off-by: RafaelGSS <[email protected]>
1 parent a03529d commit 4540f14

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

lib/internal/webstreams/readablestream.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const {
3737
ERR_INVALID_STATE,
3838
ERR_INVALID_THIS,
3939
},
40+
hideStackFrames,
4041
} = require('internal/errors');
4142

4243
const {
@@ -140,6 +141,21 @@ const kError = Symbol('kError');
140141
const kPull = Symbol('kPull');
141142
const kRelease = Symbol('kRelease');
142143

144+
let releasedError;
145+
let releasingError;
146+
147+
const lazyReadableReleasedError = hideStackFrames(() => {
148+
releasedError ??= new ERR_INVALID_STATE.TypeError('Reader released');
149+
releasedError.stack;
150+
return releasedError;
151+
});
152+
153+
const lazyReadableReleasingError = hideStackFrames(() => {
154+
releasingError ??= new ERR_INVALID_STATE.TypeError('Releasing reader');
155+
releasingError.stack;
156+
return releasingError;
157+
});
158+
143159
const getNonWritablePropertyDescriptor = (value) => {
144160
return {
145161
__proto__: null,
@@ -2029,7 +2045,7 @@ function readableStreamDefaultReaderRelease(reader) {
20292045
readableStreamReaderGenericRelease(reader);
20302046
readableStreamDefaultReaderErrorReadRequests(
20312047
reader,
2032-
new ERR_INVALID_STATE.TypeError('Releasing reader')
2048+
lazyReadableReleasingError(),
20332049
);
20342050
}
20352051

@@ -2044,7 +2060,7 @@ function readableStreamBYOBReaderRelease(reader) {
20442060
readableStreamReaderGenericRelease(reader);
20452061
readableStreamBYOBReaderErrorReadIntoRequests(
20462062
reader,
2047-
new ERR_INVALID_STATE.TypeError('Releasing reader')
2063+
lazyReadableReleasingError(),
20482064
);
20492065
}
20502066

@@ -2062,13 +2078,12 @@ function readableStreamReaderGenericRelease(reader) {
20622078
assert(stream !== undefined);
20632079
assert(stream[kState].reader === reader);
20642080

2081+
const releasedStateError = lazyReadableReleasedError();
20652082
if (stream[kState].state === 'readable') {
2066-
reader[kState].close.reject?.(
2067-
new ERR_INVALID_STATE.TypeError('Reader released'));
2083+
reader[kState].close.reject?.(releasedStateError);
20682084
} else {
20692085
reader[kState].close = {
2070-
promise: PromiseReject(
2071-
new ERR_INVALID_STATE.TypeError('Reader released')),
2086+
promise: PromiseReject(releasedStateError),
20722087
resolve: undefined,
20732088
reject: undefined,
20742089
};

lib/internal/webstreams/writablestream.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const {
2424
ERR_INVALID_STATE,
2525
ERR_INVALID_THIS,
2626
},
27+
hideStackFrames,
2728
} = require('internal/errors');
2829

2930
const {
@@ -77,6 +78,14 @@ const kAbort = Symbol('kAbort');
7778
const kCloseSentinel = Symbol('kCloseSentinel');
7879
const kError = Symbol('kError');
7980

81+
let releasedError;
82+
83+
const lazyWritableReleasedError = hideStackFrames(() => {
84+
releasedError ??= new ERR_INVALID_STATE.TypeError('Writer has been released');
85+
releasedError.stack;
86+
return releasedError;
87+
});
88+
8089
const getNonWritablePropertyDescriptor = (value) => {
8190
return {
8291
__proto__: null,
@@ -970,10 +979,9 @@ function writableStreamDefaultWriterRelease(writer) {
970979
} = writer[kState];
971980
assert(stream !== undefined);
972981
assert(stream[kState].writer === writer);
973-
const releasedError =
974-
new ERR_INVALID_STATE.TypeError('Writer has been released');
975-
writableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);
976-
writableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);
982+
const releasedStateError = lazyWritableReleasedError();
983+
writableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedStateError);
984+
writableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedStateError);
977985
stream[kState].writer = undefined;
978986
writer[kState].stream = undefined;
979987
}

0 commit comments

Comments
 (0)