@@ -11,7 +11,7 @@ export class TransformOperationExecutor {
11
11
// Private Properties
12
12
// -------------------------------------------------------------------------
13
13
14
- private transformedTypes : { level : number , object : Object } [ ] = [ ] ;
14
+ private transformedTypesMap = new Map < Object , { level : number , object : Object } > ( ) ;
15
15
16
16
// -------------------------------------------------------------------------
17
17
// Constructor
@@ -77,8 +77,10 @@ export class TransformOperationExecutor {
77
77
if ( ! targetType && value . constructor !== Object /* && operationType === "classToPlain"*/ ) targetType = value . constructor ;
78
78
if ( ! targetType && source ) targetType = source . constructor ;
79
79
80
- // add transformed type to prevent circular references
81
- this . transformedTypes . push ( { level : level , object : value } ) ;
80
+ if ( this . options . enableCircularCheck ) {
81
+ // add transformed type to prevent circular references
82
+ this . transformedTypesMap . set ( value , { level : level , object : value } ) ;
83
+ }
82
84
83
85
const keys = this . getKeys ( targetType , value ) ;
84
86
let newValue : any = source ? source : { } ;
@@ -222,7 +224,8 @@ export class TransformOperationExecutor {
222
224
223
225
// preventing circular references
224
226
private isCircular ( object : Object , level : number ) {
225
- return ! ! this . transformedTypes . find ( transformed => transformed . object === object && transformed . level < level ) ;
227
+ const transformed = this . transformedTypesMap . get ( object ) ;
228
+ return transformed !== undefined && transformed . level < level ;
226
229
}
227
230
228
231
private getReflectedType ( target : Function , propertyName : string ) {
0 commit comments