Skip to content

Commit b829396

Browse files
authored
Merge pull request #110 from sparebytes/master
Fix transform of null primitive values
2 parents 9ef3048 + a5df6f1 commit b829396

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

src/TransformOperationExecutor.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,18 @@ export class TransformOperationExecutor {
5757
return newValue;
5858

5959
} else if (targetType === String && !isMap) {
60+
if (value === null || value === undefined)
61+
return value;
6062
return String(value);
6163

6264
} else if (targetType === Number && !isMap) {
65+
if (value === null || value === undefined)
66+
return value;
6367
return Number(value);
6468

6569
} else if (targetType === Boolean && !isMap) {
70+
if (value === null || value === undefined)
71+
return value;
6672
return Boolean(value);
6773

6874
} else if ((targetType === Date || value instanceof Date) && !isMap) {

test/functional/basic-functionality.spec.ts

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,18 @@ describe("basic functionality", () => {
507507

508508
@Type(type => String)
509509
lastVisitDate: string;
510+
511+
@Type(type => String)
512+
nullableString?: null | string;
513+
514+
@Type(type => Number)
515+
nullableNumber?: null | number;
516+
517+
@Type(type => Boolean)
518+
nullableBoolean?: null | boolean;
519+
520+
@Type(type => Date)
521+
nullableDate?: null | Date;
510522
}
511523

512524
const date = new Date();
@@ -517,14 +529,22 @@ describe("basic functionality", () => {
517529
user.isActive = "1" as any;
518530
user.registrationDate = date.toString() as any;
519531
user.lastVisitDate = date as any;
532+
user.nullableString = null as any;
533+
user.nullableNumber = null as any;
534+
user.nullableBoolean = null as any;
535+
user.nullableDate = null as any;
520536

521537
const fromPlainUser = {
522538
firstName: 321,
523539
lastName: 123,
524540
password: "123",
525541
isActive: "1",
526542
registrationDate: date.toString(),
527-
lastVisitDate: date
543+
lastVisitDate: date,
544+
nullableString: null as null | string,
545+
nullableNumber: null as null | string,
546+
nullableBoolean: null as null | string,
547+
nullableDate: null as null | string,
528548
};
529549

530550
const fromExistUser = new User();
@@ -539,6 +559,10 @@ describe("basic functionality", () => {
539559
isActive: true,
540560
registrationDate: new Date(date.toString()),
541561
lastVisitDate: date.toString(),
562+
nullableString: null,
563+
nullableNumber: null,
564+
nullableBoolean: null,
565+
nullableDate: null,
542566
});
543567

544568
const existUser = { id: 1, age: 27 };
@@ -553,6 +577,10 @@ describe("basic functionality", () => {
553577
isActive: true,
554578
registrationDate: new Date(date.toString()),
555579
lastVisitDate: date.toString(),
580+
nullableString: null,
581+
nullableNumber: null,
582+
nullableBoolean: null,
583+
nullableDate: null,
556584
});
557585
plainUser2.should.be.equal(existUser);
558586

@@ -565,6 +593,10 @@ describe("basic functionality", () => {
565593
isActive: true,
566594
registrationDate: new Date(date.toString()),
567595
lastVisitDate: date.toString(),
596+
nullableString: null,
597+
nullableNumber: null,
598+
nullableBoolean: null,
599+
nullableDate: null,
568600
});
569601

570602
const fromExistTransformedUser = plainToClassFromExist(fromExistUser, fromPlainUser, { strategy: "exposeAll" });
@@ -577,6 +609,10 @@ describe("basic functionality", () => {
577609
isActive: true,
578610
registrationDate: new Date(date.toString()),
579611
lastVisitDate: date.toString(),
612+
nullableString: null,
613+
nullableNumber: null,
614+
nullableBoolean: null,
615+
nullableDate: null,
580616
});
581617

582618
const classToClassUser = classToClass(user, { strategy: "exposeAll" });
@@ -589,6 +625,10 @@ describe("basic functionality", () => {
589625
isActive: true,
590626
registrationDate: new Date(date.toString()),
591627
lastVisitDate: date.toString(),
628+
nullableString: null,
629+
nullableNumber: null,
630+
nullableBoolean: null,
631+
nullableDate: null,
592632
});
593633

594634
const classToClassFromExistUser = classToClassFromExist(user, fromExistUser, { strategy: "exposeAll" });
@@ -603,6 +643,10 @@ describe("basic functionality", () => {
603643
isActive: true,
604644
registrationDate: new Date(date.toString()),
605645
lastVisitDate: date.toString(),
646+
nullableString: null,
647+
nullableNumber: null,
648+
nullableBoolean: null,
649+
nullableDate: null,
606650
});
607651
});
608652

@@ -1694,4 +1738,4 @@ describe("basic functionality", () => {
16941738
transformedClass.should.be.instanceOf(TestClass);
16951739
});
16961740

1697-
});
1741+
});

0 commit comments

Comments
 (0)