From 9557b44a62485a1d89d9d8c864c189f51f4db7e4 Mon Sep 17 00:00:00 2001 From: Jose Pfuturi Date: Mon, 20 Mar 2017 22:26:15 -0500 Subject: [PATCH] add defaut values from constructor --- index.js | 14 +++-- index.ts | 6 ++- libs/utils.js | 1 + spec/common/dateconverter.d.ts | 3 ++ spec/common/dateconverter.js | 2 +- spec/index.js | 79 ++++++++++++++-------------- spec/serialize.d.ts | 0 spec/serialize.js | 95 +++++++++++++++++----------------- 8 files changed, 108 insertions(+), 92 deletions(-) create mode 100644 spec/common/dateconverter.d.ts create mode 100644 spec/serialize.d.ts diff --git a/index.js b/index.js index fa42fbc..d30e18a 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ "use strict"; -require('reflect-metadata'); -var utils_1 = require('./libs/utils'); +Object.defineProperty(exports, "__esModule", { value: true }); +require("reflect-metadata"); +var utils_1 = require("./libs/utils"); /** * Decorator variable name * @@ -76,7 +77,7 @@ function getJsonProperty(target, propertyKey) { function hasAnyNullOrUndefined() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { - args[_i - 0] = arguments[_i]; + args[_i] = arguments[_i]; } return args.some(function (arg) { return arg === null || arg === undefined; }); } @@ -142,7 +143,12 @@ function deserialize(Clazz, json) { instance[key] = decoratorMetaData.customConverter.fromJson(json[decoratorMetaData.name || key]); } else { - instance[key] = decoratorMetaData ? mapFromJson(decoratorMetaData, instance, json, key) : json[key]; + if (decoratorMetaData) { + instance[key] = mapFromJson(decoratorMetaData, instance, json, key); + } + else { + instance[key] = json[key] ? instance[key] = json[key] : instance[key] = instance[key]; + } } }); return instance; diff --git a/index.ts b/index.ts index 5ef5a14..9cb01f3 100644 --- a/index.ts +++ b/index.ts @@ -186,7 +186,11 @@ export function deserialize(Clazz: {new(): T}, json: I if (decoratorMetaData && decoratorMetaData.customConverter) { instance[key] = decoratorMetaData.customConverter.fromJson(json[decoratorMetaData.name || key]); } else { - instance[key] = decoratorMetaData ? mapFromJson(decoratorMetaData, instance, json, key) : json[key]; + if(decoratorMetaData){ + instance[key] = mapFromJson(decoratorMetaData, instance, json, key); + } else { + instance[key] = json[key] ? instance[key] = json[key] : instance[key] = instance[key]; + } } }); diff --git a/libs/utils.js b/libs/utils.js index f3f446f..022e6f6 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -1,4 +1,5 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); function isTargetType(val, type) { return typeof val === type; } diff --git a/spec/common/dateconverter.d.ts b/spec/common/dateconverter.d.ts new file mode 100644 index 0000000..9110a10 --- /dev/null +++ b/spec/common/dateconverter.d.ts @@ -0,0 +1,3 @@ +import { ICustomConverter } from '../../index'; +declare const dateConverter: ICustomConverter; +export default dateConverter; diff --git a/spec/common/dateconverter.js b/spec/common/dateconverter.js index fa45d35..e404315 100644 --- a/spec/common/dateconverter.js +++ b/spec/common/dateconverter.js @@ -1,4 +1,5 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); var dateConverter = { fromJson: function (data) { return new Date(data); @@ -7,6 +8,5 @@ var dateConverter = { return 'some-date'; } }; -Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dateConverter; //# sourceMappingURL=dateconverter.js.map \ No newline at end of file diff --git a/spec/index.js b/spec/index.js index db7db24..7a7d76d 100644 --- a/spec/index.js +++ b/spec/index.js @@ -8,24 +8,25 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var chai_1 = require('chai'); -var index_1 = require('../index'); -var dateconverter_1 = require('./common/dateconverter'); +Object.defineProperty(exports, "__esModule", { value: true }); +var chai_1 = require("chai"); +var index_1 = require("../index"); +var dateconverter_1 = require("./common/dateconverter"); var Student = (function () { function Student() { this.dateOfBirth = undefined; this.fullName = void 0; } - __decorate([ - index_1.JsonProperty('name'), - __metadata('design:type', String) - ], Student.prototype, "fullName", void 0); - __decorate([ - index_1.JsonProperty({ name: 'dob', customConverter: dateconverter_1.default }), - __metadata('design:type', Date) - ], Student.prototype, "dateOfBirth", void 0); return Student; }()); +__decorate([ + index_1.JsonProperty('name'), + __metadata("design:type", String) +], Student.prototype, "fullName", void 0); +__decorate([ + index_1.JsonProperty({ name: 'dob', customConverter: dateconverter_1.default }), + __metadata("design:type", Date) +], Student.prototype, "dateOfBirth", void 0); var Address = (function () { function Address() { this.firstLine = void 0; @@ -33,20 +34,20 @@ var Address = (function () { this.city = void 0; this.student = void 0; } - __decorate([ - index_1.JsonProperty('first-line'), - __metadata('design:type', String) - ], Address.prototype, "firstLine", void 0); - __decorate([ - index_1.JsonProperty('second-line'), - __metadata('design:type', String) - ], Address.prototype, "secondLine", void 0); - __decorate([ - index_1.JsonProperty({ clazz: Student }), - __metadata('design:type', Student) - ], Address.prototype, "student", void 0); return Address; }()); +__decorate([ + index_1.JsonProperty('first-line'), + __metadata("design:type", String) +], Address.prototype, "firstLine", void 0); +__decorate([ + index_1.JsonProperty('second-line'), + __metadata("design:type", String) +], Address.prototype, "secondLine", void 0); +__decorate([ + index_1.JsonProperty({ clazz: Student }), + __metadata("design:type", Student) +], Address.prototype, "student", void 0); var Person = (function () { function Person() { this.name = void 0; @@ -55,24 +56,24 @@ var Person = (function () { this.addressArr = void 0; this.address = void 0; } - __decorate([ - index_1.JsonProperty('Name'), - __metadata('design:type', String) - ], Person.prototype, "name", void 0); - __decorate([ - index_1.JsonProperty('xing'), - __metadata('design:type', String) - ], Person.prototype, "surname", void 0); - __decorate([ - index_1.JsonProperty({ clazz: Address, name: 'AddressArr' }), - __metadata('design:type', Array) - ], Person.prototype, "addressArr", void 0); - __decorate([ - index_1.JsonProperty({ clazz: Address, name: 'Address' }), - __metadata('design:type', Address) - ], Person.prototype, "address", void 0); return Person; }()); +__decorate([ + index_1.JsonProperty('Name'), + __metadata("design:type", String) +], Person.prototype, "name", void 0); +__decorate([ + index_1.JsonProperty('xing'), + __metadata("design:type", String) +], Person.prototype, "surname", void 0); +__decorate([ + index_1.JsonProperty({ clazz: Address, name: 'AddressArr' }), + __metadata("design:type", Array) +], Person.prototype, "addressArr", void 0); +__decorate([ + index_1.JsonProperty({ clazz: Address, name: 'Address' }), + __metadata("design:type", Address) +], Person.prototype, "address", void 0); describe('index()', function () { it('simple json object #1', function () { var json = { diff --git a/spec/serialize.d.ts b/spec/serialize.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/spec/serialize.js b/spec/serialize.js index f1398f1..d4f331b 100644 --- a/spec/serialize.js +++ b/spec/serialize.js @@ -8,21 +8,22 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var chai_1 = require('chai'); -var index_1 = require('../index'); -var dateconverter_1 = require('./common/dateconverter'); +Object.defineProperty(exports, "__esModule", { value: true }); +var chai_1 = require("chai"); +var index_1 = require("../index"); +var dateconverter_1 = require("./common/dateconverter"); describe('serialize', function () { it('should use the property name given in the meta data', function () { var ClassWithPrimitiveProp = (function () { function ClassWithPrimitiveProp() { this.name = undefined; } - __decorate([ - index_1.JsonProperty('theName'), - __metadata('design:type', String) - ], ClassWithPrimitiveProp.prototype, "name", void 0); return ClassWithPrimitiveProp; }()); + __decorate([ + index_1.JsonProperty('theName'), + __metadata("design:type", String) + ], ClassWithPrimitiveProp.prototype, "name", void 0); var instance = new ClassWithPrimitiveProp(); instance.name = 'Jim'; var serializedInstance = index_1.serialize(instance); @@ -36,12 +37,12 @@ describe('serialize', function () { function PrimitiveProp() { this.someProp = primitiveType; } - __decorate([ - index_1.JsonProperty('someProp'), - __metadata('design:type', Object) - ], PrimitiveProp.prototype, "someProp", void 0); return PrimitiveProp; }()); + __decorate([ + index_1.JsonProperty('someProp'), + __metadata("design:type", Object) + ], PrimitiveProp.prototype, "someProp", void 0); var instance = new PrimitiveProp(); // instance.someProp = primitiveType; var serializedInstance = index_1.serialize(instance); @@ -54,12 +55,12 @@ describe('serialize', function () { function ClassWithUnspecObject() { this.date = new Date(); } - __decorate([ - index_1.JsonProperty('date'), - __metadata('design:type', Date) - ], ClassWithUnspecObject.prototype, "date", void 0); return ClassWithUnspecObject; }()); + __decorate([ + index_1.JsonProperty('date'), + __metadata("design:type", Date) + ], ClassWithUnspecObject.prototype, "date", void 0); var instance = new ClassWithUnspecObject(); var serializedInstance = index_1.serialize(instance); chai_1.expect(serializedInstance.date).to.equal(instance.date); @@ -69,12 +70,12 @@ describe('serialize', function () { function ClassWithCustomConv() { this.date = new Date(); } - __decorate([ - index_1.JsonProperty({ name: 'date', customConverter: dateconverter_1.default }), - __metadata('design:type', Date) - ], ClassWithCustomConv.prototype, "date", void 0); return ClassWithCustomConv; }()); + __decorate([ + index_1.JsonProperty({ name: 'date', customConverter: dateconverter_1.default }), + __metadata("design:type", Date) + ], ClassWithCustomConv.prototype, "date", void 0); var instance = new ClassWithCustomConv(); var serializedInstance = index_1.serialize(instance); chai_1.expect(serializedInstance.date).to.equal('some-date'); @@ -85,16 +86,16 @@ describe('serialize', function () { this.name = 'John'; this.lastName = 'Doe'; } - __decorate([ - index_1.JsonProperty('name'), - __metadata('design:type', String) - ], ClassWithExcludedProp.prototype, "name", void 0); - __decorate([ - index_1.JsonProperty({ name: 'lastName', excludeToJson: true }), - __metadata('design:type', String) - ], ClassWithExcludedProp.prototype, "lastName", void 0); return ClassWithExcludedProp; }()); + __decorate([ + index_1.JsonProperty('name'), + __metadata("design:type", String) + ], ClassWithExcludedProp.prototype, "name", void 0); + __decorate([ + index_1.JsonProperty({ name: 'lastName', excludeToJson: true }), + __metadata("design:type", String) + ], ClassWithExcludedProp.prototype, "lastName", void 0); var instance = new ClassWithExcludedProp(); var serializedInstance = index_1.serialize(instance); chai_1.expect(serializedInstance.name).to.equal('John'); @@ -105,22 +106,22 @@ describe('serialize', function () { function OtherClass() { this.date = new Date(); } - __decorate([ - index_1.JsonProperty({ name: 'date', customConverter: dateconverter_1.default }), - __metadata('design:type', Date) - ], OtherClass.prototype, "date", void 0); return OtherClass; }()); + __decorate([ + index_1.JsonProperty({ name: 'date', customConverter: dateconverter_1.default }), + __metadata("design:type", Date) + ], OtherClass.prototype, "date", void 0); var ClassWithClassProp = (function () { function ClassWithClassProp() { this.other = new OtherClass(); } - __decorate([ - index_1.JsonProperty({ name: 'other', clazz: OtherClass }), - __metadata('design:type', OtherClass) - ], ClassWithClassProp.prototype, "other", void 0); return ClassWithClassProp; }()); + __decorate([ + index_1.JsonProperty({ name: 'other', clazz: OtherClass }), + __metadata("design:type", OtherClass) + ], ClassWithClassProp.prototype, "other", void 0); var instance = new ClassWithClassProp(); var serializedInstance = index_1.serialize(instance); chai_1.expect(serializedInstance.other.date).to.equal('some-date'); @@ -131,12 +132,12 @@ describe('serialize', function () { function ClassWithArrayProp() { this.items = [new Date(), new Date()]; } - __decorate([ - index_1.JsonProperty('items'), - __metadata('design:type', Array) - ], ClassWithArrayProp.prototype, "items", void 0); return ClassWithArrayProp; }()); + __decorate([ + index_1.JsonProperty('items'), + __metadata("design:type", Array) + ], ClassWithArrayProp.prototype, "items", void 0); var instance = new ClassWithArrayProp(); var serializedInstance = index_1.serialize(instance); chai_1.expect(serializedInstance.items).to.be.instanceof(Array); @@ -149,22 +150,22 @@ describe('serialize', function () { function OtherClass() { this.date = new Date(); } - __decorate([ - index_1.JsonProperty({ name: 'date', customConverter: dateconverter_1.default }), - __metadata('design:type', Date) - ], OtherClass.prototype, "date", void 0); return OtherClass; }()); + __decorate([ + index_1.JsonProperty({ name: 'date', customConverter: dateconverter_1.default }), + __metadata("design:type", Date) + ], OtherClass.prototype, "date", void 0); var ClassWithArrayProp = (function () { function ClassWithArrayProp() { this.items = [new OtherClass(), new OtherClass()]; } - __decorate([ - index_1.JsonProperty({ name: 'items', clazz: OtherClass }), - __metadata('design:type', Array) - ], ClassWithArrayProp.prototype, "items", void 0); return ClassWithArrayProp; }()); + __decorate([ + index_1.JsonProperty({ name: 'items', clazz: OtherClass }), + __metadata("design:type", Array) + ], ClassWithArrayProp.prototype, "items", void 0); var instance = new ClassWithArrayProp(); var serializedInstance = index_1.serialize(instance); chai_1.expect(serializedInstance.items).to.be.instanceof(Array);