@@ -23,6 +23,11 @@ const {
2323 emitExperimentalWarning
2424} = require ( 'internal/util' ) ;
2525const { inspect } = require ( 'internal/util/inspect' ) ;
26+ const {
27+ codes : {
28+ ERR_INVALID_THIS ,
29+ }
30+ } = require ( 'internal/errors' ) ;
2631
2732const kAborted = Symbol ( 'kAborted' ) ;
2833
@@ -37,13 +42,21 @@ function customInspect(self, obj, depth, options) {
3742 return `${ self . constructor . name } ${ inspect ( obj , opts ) } ` ;
3843}
3944
45+ function validateAbortSignal ( obj ) {
46+ if ( obj ?. [ kAborted ] === undefined )
47+ throw new ERR_INVALID_THIS ( 'AbortSignal' ) ;
48+ }
49+
4050class AbortSignal extends EventTarget {
4151 constructor ( ) {
4252 // eslint-disable-next-line no-restricted-syntax
4353 throw new TypeError ( 'Illegal constructor' ) ;
4454 }
4555
46- get aborted ( ) { return ! ! this [ kAborted ] ; }
56+ get aborted ( ) {
57+ validateAbortSignal ( this ) ;
58+ return ! ! this [ kAborted ] ;
59+ }
4760
4861 [ customInspectSymbol ] ( depth , options ) {
4962 return customInspect ( this , {
@@ -89,14 +102,27 @@ function abortSignal(signal) {
89102// initializers for now:
90103// https://bugs.chromium.org/p/v8/issues/detail?id=10704
91104const kSignal = Symbol ( 'signal' ) ;
105+
106+ function validateAbortController ( obj ) {
107+ if ( obj ?. [ kSignal ] === undefined )
108+ throw new ERR_INVALID_THIS ( 'AbortController' ) ;
109+ }
110+
92111class AbortController {
93112 constructor ( ) {
94113 this [ kSignal ] = createAbortSignal ( ) ;
95114 emitExperimentalWarning ( 'AbortController' ) ;
96115 }
97116
98- get signal ( ) { return this [ kSignal ] ; }
99- abort ( ) { abortSignal ( this [ kSignal ] ) ; }
117+ get signal ( ) {
118+ validateAbortController ( this ) ;
119+ return this [ kSignal ] ;
120+ }
121+
122+ abort ( ) {
123+ validateAbortController ( this ) ;
124+ abortSignal ( this [ kSignal ] ) ;
125+ }
100126
101127 [ customInspectSymbol ] ( depth , options ) {
102128 return customInspect ( this , {
0 commit comments