66const {
77 ObjectAssign,
88 ObjectDefineProperties,
9- ObjectSetPrototypeOf,
109 ObjectDefineProperty,
1110 PromiseResolve,
1211 SafeFinalizationRegistry,
@@ -69,6 +68,8 @@ const {
6968let _MessageChannel ;
7069let markTransferMode ;
7170
71+ const kDontThrowSymbol = Symbol ( 'kDontThrowSymbol' ) ;
72+
7273// Loading the MessageChannel and markTransferable have to be done lazily
7374// because otherwise we'll end up with a require cycle that ends up with
7475// an incomplete initialization of abort_controller.
@@ -137,8 +138,35 @@ function setWeakAbortSignalTimeout(weakRef, delay) {
137138}
138139
139140class AbortSignal extends EventTarget {
140- constructor ( ) {
141- throw new ERR_ILLEGAL_CONSTRUCTOR ( ) ;
141+
142+ /**
143+ * @param {symbol | undefined } dontThrowSymbol
144+ * @param {{
145+ * aborted? : boolean,
146+ * reason? : any,
147+ * transferable? : boolean,
148+ * composite? : boolean,
149+ * }} [init]
150+ * @private
151+ */
152+ constructor ( dontThrowSymbol = undefined , init = kEmptyObject ) {
153+ if ( dontThrowSymbol !== kDontThrowSymbol ) {
154+ throw new ERR_ILLEGAL_CONSTRUCTOR ( ) ;
155+ }
156+ super ( ) ;
157+
158+ const {
159+ aborted = false ,
160+ reason = undefined ,
161+ transferable = false ,
162+ composite = false ,
163+ } = init ;
164+ this [ kAborted ] = aborted ;
165+ this [ kReason ] = reason ;
166+ this [ kComposite ] = composite ;
167+ if ( transferable ) {
168+ lazyMarkTransferMode ( this , false , true ) ;
169+ }
142170 }
143171
144172 /**
@@ -176,7 +204,7 @@ class AbortSignal extends EventTarget {
176204 */
177205 static abort (
178206 reason = new DOMException ( 'This operation was aborted' , 'AbortError' ) ) {
179- return createAbortSignal ( { aborted : true , reason } ) ;
207+ return new AbortSignal ( kDontThrowSymbol , { aborted : true , reason } ) ;
180208 }
181209
182210 /**
@@ -185,7 +213,7 @@ class AbortSignal extends EventTarget {
185213 */
186214 static timeout ( delay ) {
187215 validateUint32 ( delay , 'delay' , false ) ;
188- const signal = createAbortSignal ( ) ;
216+ const signal = new AbortSignal ( kDontThrowSymbol ) ;
189217 signal [ kTimeout ] = true ;
190218 clearTimeoutRegistry . register (
191219 signal ,
@@ -199,7 +227,7 @@ class AbortSignal extends EventTarget {
199227 */
200228 static any ( signals ) {
201229 validateAbortSignalArray ( signals , 'signals' ) ;
202- const resultSignal = createAbortSignal ( { composite : true } ) ;
230+ const resultSignal = new AbortSignal ( kDontThrowSymbol , { composite : true } ) ;
203231 if ( ! signals . length ) {
204232 return resultSignal ;
205233 }
@@ -319,7 +347,7 @@ class AbortSignal extends EventTarget {
319347}
320348
321349function ClonedAbortSignal ( ) {
322- return createAbortSignal ( { transferable : true } ) ;
350+ return new AbortSignal ( kDontThrowSymbol , { transferable : true } ) ;
323351}
324352ClonedAbortSignal . prototype [ kDeserialize ] = ( ) => { } ;
325353
@@ -337,33 +365,6 @@ ObjectDefineProperty(AbortSignal.prototype, SymbolToStringTag, {
337365
338366defineEventHandler ( AbortSignal . prototype , 'abort' ) ;
339367
340- /**
341- * @param {{
342- * aborted? : boolean,
343- * reason? : any,
344- * transferable? : boolean,
345- * composite? : boolean,
346- * }} [init]
347- * @returns {AbortSignal }
348- */
349- function createAbortSignal ( init = kEmptyObject ) {
350- const {
351- aborted = false ,
352- reason = undefined ,
353- transferable = false ,
354- composite = false ,
355- } = init ;
356- const signal = new EventTarget ( ) ;
357- ObjectSetPrototypeOf ( signal , AbortSignal . prototype ) ;
358- signal [ kAborted ] = aborted ;
359- signal [ kReason ] = reason ;
360- signal [ kComposite ] = composite ;
361- if ( transferable ) {
362- lazyMarkTransferMode ( signal , false , true ) ;
363- }
364- return signal ;
365- }
366-
367368function abortSignal ( signal , reason ) {
368369 if ( signal [ kAborted ] ) return ;
369370 signal [ kAborted ] = true ;
@@ -385,15 +386,15 @@ class AbortController {
385386 * @type {AbortSignal }
386387 */
387388 get signal ( ) {
388- this . #signal ??= createAbortSignal ( ) ;
389+ this . #signal ??= new AbortSignal ( kDontThrowSymbol ) ;
389390 return this . #signal;
390391 }
391392
392393 /**
393394 * @param {any } [reason]
394395 */
395396 abort ( reason = new DOMException ( 'This operation was aborted' , 'AbortError' ) ) {
396- abortSignal ( this . #signal ??= createAbortSignal ( ) , reason ) ;
397+ abortSignal ( this . #signal ??= new AbortSignal ( kDontThrowSymbol ) , reason ) ;
397398 }
398399
399400 [ customInspectSymbol ] ( depth , options ) {
@@ -404,7 +405,7 @@ class AbortController {
404405
405406 static [ kMakeTransferable ] ( ) {
406407 const controller = new AbortController ( ) ;
407- controller . #signal = createAbortSignal ( { transferable : true } ) ;
408+ controller . #signal = new AbortSignal ( kDontThrowSymbol , { transferable : true } ) ;
408409 return controller ;
409410 }
410411}
0 commit comments