@@ -14,29 +14,41 @@ var $toString = callBound('Object.prototype.toString');
14
14
var stackDesc = gOPD ( $Error . prototype , 'stack' ) ;
15
15
var stackGetter = stackDesc && stackDesc . get && callBind ( stackDesc . get ) ;
16
16
17
+ var domExceptionClonable = ! ! ( $structuredClone && $structuredClone ( new DOMException ( ) ) instanceof $Error ) ;
18
+
17
19
module . exports = function isError ( arg ) {
18
20
if ( ! arg || ( typeof arg !== 'object' && typeof arg !== 'function' ) ) {
19
21
return false ; // step 1
20
22
}
21
23
22
- if ( isNativeError ) { // node 10+
23
- return isNativeError ( arg ) ;
24
- }
25
-
26
24
if ( $structuredClone ) {
27
25
try {
28
- return $structuredClone ( arg ) instanceof $Error ;
26
+ if ( $structuredClone ( arg ) instanceof $Error ) {
27
+ return true ;
28
+ } else if ( domExceptionClonable ) {
29
+ return false ;
30
+ }
29
31
} catch ( e ) {
30
32
return false ;
31
33
}
32
34
}
33
35
34
- if ( ! hasToStringTag || ! ( Symbol . toStringTag in arg ) ) {
35
- var str = $toString ( arg ) ;
36
- return str === '[object Error]' // errors
37
- || str === '[object DOMException]' // browsers
38
- || str === '[object DOMError]' // browsers, deprecated
39
- || str === '[object Exception]' ; // sentry
36
+ if ( isNativeError && isNativeError ( arg ) ) { // node 10+
37
+ return true ;
38
+ }
39
+
40
+ var str = $toString ( arg ) ;
41
+
42
+ if (
43
+ str === '[object DOMException]' // browsers
44
+ || ( ( ! hasToStringTag || ! ( Symbol . toStringTag in arg ) )
45
+ && (
46
+ str === '[object DOMError]' // browsers, deprecated
47
+ || str === '[object Exception]' // sentry
48
+ )
49
+ )
50
+ ) {
51
+ return true ;
40
52
}
41
53
42
54
// Firefox
@@ -56,5 +68,5 @@ module.exports = function isError(arg) {
56
68
}
57
69
58
70
// fallback for envs with toStringTag but without structuredClone
59
- return arg instanceof Error ;
71
+ return arg instanceof Error || arg instanceof DOMException ;
60
72
} ;
0 commit comments