File tree Expand file tree Collapse file tree 1 file changed +13
-9
lines changed Expand file tree Collapse file tree 1 file changed +13
-9
lines changed Original file line number Diff line number Diff line change @@ -52,18 +52,18 @@ export interface LogEntry {
52
52
}
53
53
54
54
/** @internal */
55
- function removeCircular ( obj : any , refs : any [ ] = [ ] ) : any {
55
+ function removeCircular ( obj : any , refs : Set < any > = new Set ( ) ) : any {
56
56
if ( typeof obj !== "object" || ! obj ) {
57
57
return obj ;
58
58
}
59
59
// If the object defines its own toJSON, prefer that.
60
- if ( obj . toJSON ) {
60
+ if ( obj . toJSON && typeof obj . toJSON === "function" ) {
61
61
return obj . toJSON ( ) ;
62
62
}
63
- if ( refs . includes ( obj ) ) {
63
+ if ( refs . has ( obj ) ) {
64
64
return "[Circular]" ;
65
65
} else {
66
- refs . push ( obj ) ;
66
+ refs . add ( obj ) ;
67
67
}
68
68
let returnObj : any ;
69
69
if ( Array . isArray ( obj ) ) {
@@ -72,13 +72,17 @@ function removeCircular(obj: any, refs: any[] = []): any {
72
72
returnObj = { } ;
73
73
}
74
74
for ( const k in obj ) {
75
- if ( refs . includes ( obj [ k ] ) ) {
76
- returnObj [ k ] = "[Circular]" ;
77
- } else {
78
- returnObj [ k ] = removeCircular ( obj [ k ] , refs ) ;
75
+ try {
76
+ if ( refs . has ( obj [ k ] ) ) {
77
+ returnObj [ k ] = "[Circular]" ;
78
+ } else {
79
+ returnObj [ k ] = removeCircular ( obj [ k ] , refs ) ;
80
+ }
81
+ } catch {
82
+ returnObj [ k ] = "[Error - cannot serialize]" ;
79
83
}
80
84
}
81
- refs . pop ( ) ;
85
+ refs . delete ( obj ) ;
82
86
return returnObj ;
83
87
}
84
88
You can’t perform that action at this time.
0 commit comments