@@ -69,6 +69,8 @@ const {
6969let _MessageChannel ;
7070let markTransferMode ;
7171
72+ const kDontThrowSymbol = Symbol ( 'kDontThrowSymbol' ) ;
73+
7274// Loading the MessageChannel and markTransferable have to be done lazily
7375// because otherwise we'll end up with a require cycle that ends up with
7476// an incomplete initialization of abort_controller.
@@ -137,8 +139,33 @@ function setWeakAbortSignalTimeout(weakRef, delay) {
137139}
138140
139141class AbortSignal extends EventTarget {
140- constructor ( ) {
141- throw new ERR_ILLEGAL_CONSTRUCTOR ( ) ;
142+
143+ /**
144+ * @param {{
145+ * aborted? : boolean,
146+ * reason? : any,
147+ * transferable? : boolean,
148+ * composite? : boolean,
149+ * }} [init]
150+ */
151+ constructor ( dontThrowSymbol = undefined , init = kEmptyObject ) {
152+ if ( dontThrowSymbol !== kDontThrowSymbol ) {
153+ throw new ERR_ILLEGAL_CONSTRUCTOR ( ) ;
154+ }
155+ super ( ) ;
156+
157+ const {
158+ aborted = false ,
159+ reason = undefined ,
160+ transferable = false ,
161+ composite = false ,
162+ } = init ;
163+ this [ kAborted ] = aborted ;
164+ this [ kReason ] = reason ;
165+ this [ kComposite ] = composite ;
166+ if ( transferable ) {
167+ lazyMarkTransferMode ( this , false , true ) ;
168+ }
142169 }
143170
144171 /**
@@ -176,7 +203,7 @@ class AbortSignal extends EventTarget {
176203 */
177204 static abort (
178205 reason = new DOMException ( 'This operation was aborted' , 'AbortError' ) ) {
179- return createAbortSignal ( { aborted : true , reason } ) ;
206+ return new AbortSignal ( kDontThrowSymbol , { aborted : true , reason } ) ;
180207 }
181208
182209 /**
@@ -185,7 +212,7 @@ class AbortSignal extends EventTarget {
185212 */
186213 static timeout ( delay ) {
187214 validateUint32 ( delay , 'delay' , false ) ;
188- const signal = createAbortSignal ( ) ;
215+ const signal = new AbortSignal ( kDontThrowSymbol ) ;
189216 signal [ kTimeout ] = true ;
190217 clearTimeoutRegistry . register (
191218 signal ,
@@ -199,7 +226,7 @@ class AbortSignal extends EventTarget {
199226 */
200227 static any ( signals ) {
201228 validateAbortSignalArray ( signals , 'signals' ) ;
202- const resultSignal = createAbortSignal ( { composite : true } ) ;
229+ const resultSignal = new AbortSignal ( kDontThrowSymbol , { composite : true } ) ;
203230 if ( ! signals . length ) {
204231 return resultSignal ;
205232 }
@@ -319,7 +346,7 @@ class AbortSignal extends EventTarget {
319346}
320347
321348function ClonedAbortSignal ( ) {
322- return createAbortSignal ( { transferable : true } ) ;
349+ return new AbortSignal ( kDontThrowSymbol , { transferable : true } ) ;
323350}
324351ClonedAbortSignal . prototype [ kDeserialize ] = ( ) => { } ;
325352
@@ -337,33 +364,6 @@ ObjectDefineProperty(AbortSignal.prototype, SymbolToStringTag, {
337364
338365defineEventHandler ( AbortSignal . prototype , 'abort' ) ;
339366
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-
367367function abortSignal ( signal , reason ) {
368368 if ( signal [ kAborted ] ) return ;
369369 signal [ kAborted ] = true ;
@@ -385,15 +385,15 @@ class AbortController {
385385 * @type {AbortSignal }
386386 */
387387 get signal ( ) {
388- this . #signal ??= createAbortSignal ( ) ;
388+ this . #signal ??= new AbortSignal ( kDontThrowSymbol ) ;
389389 return this . #signal;
390390 }
391391
392392 /**
393393 * @param {any } [reason]
394394 */
395395 abort ( reason = new DOMException ( 'This operation was aborted' , 'AbortError' ) ) {
396- abortSignal ( this . #signal ??= createAbortSignal ( ) , reason ) ;
396+ abortSignal ( this . #signal ??= new AbortSignal ( kDontThrowSymbol ) , reason ) ;
397397 }
398398
399399 [ customInspectSymbol ] ( depth , options ) {
@@ -404,7 +404,7 @@ class AbortController {
404404
405405 static [ kMakeTransferable ] ( ) {
406406 const controller = new AbortController ( ) ;
407- controller . #signal = createAbortSignal ( { transferable : true } ) ;
407+ controller . #signal = new AbortSignal ( kDontThrowSymbol , { transferable : true } ) ;
408408 return controller ;
409409 }
410410}
0 commit comments