Skip to content

Commit 5c05897

Browse files
committed
change transformedTypes to Map to boost performance and fill it only when enableCircularCheck option is on
1 parent 5c9b2f4 commit 5c05897

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/TransformOperationExecutor.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export class TransformOperationExecutor {
1111
// Private Properties
1212
// -------------------------------------------------------------------------
1313

14-
private transformedTypes: { level: number, object: Object }[] = [];
14+
private transformedTypesMap = new Map<Object, { level: number, object: Object }>();
1515

1616
// -------------------------------------------------------------------------
1717
// Constructor
@@ -77,8 +77,10 @@ export class TransformOperationExecutor {
7777
if (!targetType && value.constructor !== Object/* && operationType === "classToPlain"*/) targetType = value.constructor;
7878
if (!targetType && source) targetType = source.constructor;
7979

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+
}
8284

8385
const keys = this.getKeys(targetType, value);
8486
let newValue: any = source ? source : {};
@@ -222,7 +224,8 @@ export class TransformOperationExecutor {
222224

223225
// preventing circular references
224226
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;
226229
}
227230

228231
private getReflectedType(target: Function, propertyName: string) {

0 commit comments

Comments
 (0)