@@ -37,6 +37,7 @@ const {
3737 ERR_INVALID_STATE ,
3838 ERR_INVALID_THIS ,
3939 } ,
40+ hideStackFrames,
4041} = require ( 'internal/errors' ) ;
4142
4243const {
@@ -140,6 +141,25 @@ const kError = Symbol('kError');
140141const kPull = Symbol ( 'kPull' ) ;
141142const 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+ // 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+
143163const getNonWritablePropertyDescriptor = ( value ) => {
144164 return {
145165 __proto__ : null ,
@@ -2029,7 +2049,7 @@ function readableStreamDefaultReaderRelease(reader) {
20292049 readableStreamReaderGenericRelease ( reader ) ;
20302050 readableStreamDefaultReaderErrorReadRequests (
20312051 reader ,
2032- new ERR_INVALID_STATE . TypeError ( 'Releasing reader' )
2052+ lazyReadableReleasingError ( ) ,
20332053 ) ;
20342054}
20352055
@@ -2044,7 +2064,7 @@ function readableStreamBYOBReaderRelease(reader) {
20442064 readableStreamReaderGenericRelease ( reader ) ;
20452065 readableStreamBYOBReaderErrorReadIntoRequests (
20462066 reader ,
2047- new ERR_INVALID_STATE . TypeError ( 'Releasing reader' )
2067+ lazyReadableReleasingError ( ) ,
20482068 ) ;
20492069}
20502070
@@ -2062,13 +2082,12 @@ function readableStreamReaderGenericRelease(reader) {
20622082 assert ( stream !== undefined ) ;
20632083 assert ( stream [ kState ] . reader === reader ) ;
20642084
2085+ const releasedStateError = lazyReadableReleasedError ( ) ;
20652086 if ( stream [ kState ] . state === 'readable' ) {
2066- reader [ kState ] . close . reject ?. (
2067- new ERR_INVALID_STATE . TypeError ( 'Reader released' ) ) ;
2087+ reader [ kState ] . close . reject ?. ( releasedStateError ) ;
20682088 } else {
20692089 reader [ kState ] . close = {
2070- promise : PromiseReject (
2071- new ERR_INVALID_STATE . TypeError ( 'Reader released' ) ) ,
2090+ promise : PromiseReject ( releasedStateError ) ,
20722091 resolve : undefined ,
20732092 reject : undefined ,
20742093 } ;
0 commit comments