@@ -14,9 +14,9 @@ export default class AbortSignal extends EventTarget {
14
14
protected declare static [ PropertySymbol . window ] : BrowserWindow ;
15
15
protected declare [ PropertySymbol . window ] : BrowserWindow ;
16
16
17
- // Public properties
18
- public readonly aborted : boolean = false ;
19
- public readonly reason : Error | null = null ;
17
+ // Internal properties
18
+ public [ PropertySymbol . aborted ] : boolean = false ;
19
+ public [ PropertySymbol . reason ] : any = undefined ;
20
20
21
21
// Events
22
22
public onabort : ( ( this : AbortSignal , event : Event ) => void ) | null = null ;
@@ -28,9 +28,7 @@ export default class AbortSignal extends EventTarget {
28
28
super ( ) ;
29
29
30
30
if ( ! this [ PropertySymbol . window ] ) {
31
- throw new TypeError (
32
- `Failed to construct '${ this . constructor . name } ': '${ this . constructor . name } ' was constructed outside a Window context.`
33
- ) ;
31
+ throw new TypeError ( `Failed to construct 'AbortSignal': Illegal constructor` ) ;
34
32
}
35
33
}
36
34
@@ -41,22 +39,59 @@ export default class AbortSignal extends EventTarget {
41
39
return 'AbortSignal' ;
42
40
}
43
41
42
+ /**
43
+ * Returns true if the signal has been aborted.
44
+ *
45
+ * @returns True if the signal has been aborted.
46
+ */
47
+ public get aborted ( ) : boolean {
48
+ return this [ PropertySymbol . aborted ] ;
49
+ }
50
+
51
+ /**
52
+ * Setter for aborted. Value will be ignored as the property is read-only.
53
+ *
54
+ * @param _value Aborted.
55
+ */
56
+ public set aborted ( _value : boolean ) {
57
+ // Do nothing
58
+ }
59
+
60
+ /**
61
+ * Returns the reason the signal was aborted.
62
+ *
63
+ * @returns Reason.
64
+ */
65
+ public get reason ( ) : any {
66
+ return this [ PropertySymbol . reason ] ;
67
+ }
68
+
69
+ /**
70
+ * Setter for reason. Value will be ignored as the property is read-only.
71
+ *
72
+ * @param _value Reason.
73
+ */
74
+ public set reason ( _value : any ) {
75
+ // Do nothing
76
+ }
77
+
44
78
/**
45
79
* Aborts the signal.
46
80
*
47
81
* @param [reason] Reason.
48
82
*/
49
- public [ PropertySymbol . abort ] ( reason ?: Error ) : void {
83
+ public [ PropertySymbol . abort ] ( reason ?: any ) : void {
50
84
if ( this . aborted ) {
51
85
return ;
52
86
}
53
- ( < Error > this . reason ) =
54
- reason ||
55
- new this [ PropertySymbol . window ] . DOMException (
56
- 'signal is aborted without reason' ,
57
- DOMExceptionNameEnum . abortError
58
- ) ;
59
- ( < boolean > this . aborted ) = true ;
87
+ this [ PropertySymbol . reason ] =
88
+ reason !== undefined
89
+ ? reason
90
+ : new this [ PropertySymbol . window ] . DOMException (
91
+ 'signal is aborted without reason' ,
92
+ DOMExceptionNameEnum . abortError
93
+ ) ;
94
+ this [ PropertySymbol . aborted ] = true ;
60
95
this . dispatchEvent ( new Event ( 'abort' ) ) ;
61
96
}
62
97
@@ -75,15 +110,16 @@ export default class AbortSignal extends EventTarget {
75
110
* @param [reason] Reason.
76
111
* @returns AbortSignal instance.
77
112
*/
78
- public static abort ( reason ?: Error ) : AbortSignal {
113
+ public static abort ( reason ?: any ) : AbortSignal {
79
114
const signal = new this ( ) ;
80
- ( < Error > signal . reason ) =
81
- reason ||
82
- new this [ PropertySymbol . window ] . DOMException (
83
- 'signal is aborted without reason' ,
84
- DOMExceptionNameEnum . abortError
85
- ) ;
86
- ( < boolean > signal . aborted ) = true ;
115
+ signal [ PropertySymbol . reason ] =
116
+ reason !== undefined
117
+ ? reason
118
+ : new this [ PropertySymbol . window ] . DOMException (
119
+ 'signal is aborted without reason' ,
120
+ DOMExceptionNameEnum . abortError
121
+ ) ;
122
+ signal [ PropertySymbol . aborted ] = true ;
87
123
return signal ;
88
124
}
89
125
@@ -118,8 +154,8 @@ export default class AbortSignal extends EventTarget {
118
154
*/
119
155
public static any ( signals : AbortSignal [ ] ) : AbortSignal {
120
156
for ( const signal of signals ) {
121
- if ( signal . aborted ) {
122
- return this . abort ( signal . reason ) ;
157
+ if ( signal [ PropertySymbol . aborted ] ) {
158
+ return this . abort ( signal [ PropertySymbol . reason ] ) ;
123
159
}
124
160
}
125
161
@@ -135,7 +171,7 @@ export default class AbortSignal extends EventTarget {
135
171
for ( const signal of signals ) {
136
172
const handler = ( ) : void => {
137
173
stopListening ( ) ;
138
- anySignal [ PropertySymbol . abort ] ( signal . reason ) ;
174
+ anySignal [ PropertySymbol . abort ] ( signal [ PropertySymbol . reason ] ) ;
139
175
} ;
140
176
handlers . set ( signal , handler ) ;
141
177
signal . addEventListener ( 'abort' , handler ) ;
0 commit comments