@@ -37,6 +37,7 @@ const {
37
37
ERR_INVALID_STATE ,
38
38
ERR_INVALID_THIS ,
39
39
} ,
40
+ hideStackFrames,
40
41
} = require ( 'internal/errors' ) ;
41
42
42
43
const {
@@ -140,6 +141,25 @@ const kError = Symbol('kError');
140
141
const kPull = Symbol ( 'kPull' ) ;
141
142
const kRelease = Symbol ( 'kRelease' ) ;
142
143
144
+ let releasedError ;
145
+ let releasingError ;
146
+
147
+ const lazyReadableReleasedError = hideStackFrames ( ( ) => {
148
+ releasedError ??= new ERR_INVALID_STATE . TypeError ( 'Reader released' ) ;
149
+ // Avoid V8 leak
150
+ // eslint-disable-next-line no-unused-expressions
151
+ releasedError . stack ;
152
+ return releasedError ;
153
+ } ) ;
154
+
155
+ const lazyReadableReleasingError = hideStackFrames ( ( ) => {
156
+ releasingError ??= new ERR_INVALID_STATE . TypeError ( 'Releasing reader' ) ;
157
+ // Avoid V8 leak
158
+ // eslint-disable-next-line no-unused-expressions
159
+ releasingError . stack ;
160
+ return releasingError ;
161
+ } ) ;
162
+
143
163
const getNonWritablePropertyDescriptor = ( value ) => {
144
164
return {
145
165
__proto__ : null ,
@@ -2029,7 +2049,7 @@ function readableStreamDefaultReaderRelease(reader) {
2029
2049
readableStreamReaderGenericRelease ( reader ) ;
2030
2050
readableStreamDefaultReaderErrorReadRequests (
2031
2051
reader ,
2032
- new ERR_INVALID_STATE . TypeError ( 'Releasing reader' )
2052
+ lazyReadableReleasingError ( ) ,
2033
2053
) ;
2034
2054
}
2035
2055
@@ -2044,7 +2064,7 @@ function readableStreamBYOBReaderRelease(reader) {
2044
2064
readableStreamReaderGenericRelease ( reader ) ;
2045
2065
readableStreamBYOBReaderErrorReadIntoRequests (
2046
2066
reader ,
2047
- new ERR_INVALID_STATE . TypeError ( 'Releasing reader' )
2067
+ lazyReadableReleasingError ( ) ,
2048
2068
) ;
2049
2069
}
2050
2070
@@ -2062,13 +2082,12 @@ function readableStreamReaderGenericRelease(reader) {
2062
2082
assert ( stream !== undefined ) ;
2063
2083
assert ( stream [ kState ] . reader === reader ) ;
2064
2084
2085
+ const releasedStateError = lazyReadableReleasedError ( ) ;
2065
2086
if ( stream [ kState ] . state === 'readable' ) {
2066
- reader [ kState ] . close . reject ?. (
2067
- new ERR_INVALID_STATE . TypeError ( 'Reader released' ) ) ;
2087
+ reader [ kState ] . close . reject ?. ( releasedStateError ) ;
2068
2088
} else {
2069
2089
reader [ kState ] . close = {
2070
- promise : PromiseReject (
2071
- new ERR_INVALID_STATE . TypeError ( 'Reader released' ) ) ,
2090
+ promise : PromiseReject ( releasedStateError ) ,
2072
2091
resolve : undefined ,
2073
2092
reject : undefined ,
2074
2093
} ;
0 commit comments