UNPKG

ts-db-helper

Version:
210 lines 9.37 kB
import { ModelManager } from '../managers/model-manager'; import { FieldSerializerConfigurator } from './field-serializers/field-serializer.configurator'; import { SerializerError } from '../errors/serializer.error'; import { BooleanFieldSerializer } from './field-serializers/boolean.field-serializer'; import { StringFieldSerializer } from './field-serializers/string.field-serializer'; import { RealFieldSerializer } from './field-serializers/real.field-serializer'; import { IntegerFieldSerializer } from './field-serializers/integer.field-serializer'; import { FieldSerializer } from './field-serializers/field-serializer'; import { Observable } from 'rxjs/Observable'; var Serializer = /** @class */ (function () { function Serializer(target, many) { this.many = many; this.partial = false; if (this.model && target instanceof this.model) { this.instance = target; } else if (this.model && Array.isArray(target) && target[0] instanceof this.model) { this.many = true; this.instances = target; } else if (target) { this.data = target; } else if (target !== undefined && (target === true || target === false)) { this.many = target; } } Serializer.prototype.setData = function (data) { this.data = data; }; Serializer.prototype.setInstance = function (instance) { this.instance = instance; }; Serializer.prototype.setInstances = function (instances) { this.instances = instances; }; Serializer.prototype.setPartialParse = function (partial) { this.partial = partial; }; Serializer.prototype.getData = function () { var _this = this; if (this.data) { return Observable.create(function (observer) { observer.next(_this.data); observer.complete(); }); } else { var observables = []; if (this.many) { this.data = []; var construct = this.constructor; for (var _i = 0, _a = this.instances; _i < _a.length; _i++) { var instance = _a[_i]; var serializer = new construct(instance); observables.push(serializer.getData()); } return Observable.combineLatest().map(function (results) { _this.data = results; return _this.data; }); } else { this.data = {}; for (var _b = 0, _c = this.fields; _b < _c.length; _b++) { var field = _c[_b]; var fieldSerializer = void 0; if (field instanceof FieldSerializer) { fieldSerializer = field; } else { switch (this.instance.getCommonFieldType(field).toLocaleLowerCase()) { case 'integer': fieldSerializer = new IntegerFieldSerializer(field, field, this.getFieldConfig(field)); break; case 'number': case 'real': case 'double': case 'float': case 'decimal': fieldSerializer = new RealFieldSerializer(field, field, this.getFieldConfig(field)); break; case 'string': case 'text': case 'varchar':// should be contains fieldSerializer = new StringFieldSerializer(field, field, this.getFieldConfig(field)); break; case 'boolean': fieldSerializer = new BooleanFieldSerializer(field, field, this.getFieldConfig(field)); break; default: fieldSerializer = new StringFieldSerializer(field, field, this.getFieldConfig(field)); } } observables.push(fieldSerializer.serialize(this.instance, this.data)); } return Observable.combineLatest().map(function () { return _this.data; }); } } }; Serializer.prototype.getInstance = function () { var _this = this; if (this.instance || this.instances) { return Observable.create(function (observer) { observer.next(_this.instance || _this.instances); observer.complete(); }); } else if (!this.data) { return Observable.create(function (observer) { observer.next(null); observer.complete(); }); } else { if (this.many && Array.isArray(this.data)) { var observables = []; this.instances = []; var construct = this.constructor; for (var _i = 0, _a = this.data; _i < _a.length; _i++) { var data = _a[_i]; var serializer = new construct(data); observables.push(serializer.getInstance()); } return Observable.combineLatest().map(function (results) { _this.instances = results; return _this.instances; }); } else if (!this.many && !Array.isArray(this.data)) { var observables = []; this.instance = new this.model(); for (var _b = 0, _c = this.fields; _b < _c.length; _b++) { var field = _c[_b]; var fieldSerializer = void 0; if (field instanceof FieldSerializer) { fieldSerializer = field; } else { switch (this.instance.getCommonFieldType(field).toLocaleLowerCase()) { case 'integer': fieldSerializer = new IntegerFieldSerializer(field, field); break; case 'number': case 'real': case 'double': case 'float': case 'decimal': fieldSerializer = new RealFieldSerializer(field, field); break; case 'string': case 'text': case 'varchar':// should be contains fieldSerializer = new StringFieldSerializer(field, field); break; case 'boolean': fieldSerializer = new BooleanFieldSerializer(field, field); break; default: fieldSerializer = new StringFieldSerializer(field, field); } } observables.push(fieldSerializer.deserialize(this.data, this.instance)); } return Observable.combineLatest().map(function (errs) { var errors = []; for (var _i = 0, errs_1 = errs; _i < errs_1.length; _i++) { var error = errs_1[_i]; if (error) { errors.push(error); } } if (errors.length) { throw new SerializerError('Deserialization failed', errors); } return _this.instance; }); } else { return Observable.create(function (observer) { observer.next(null); observer.complete(); }); } } }; Serializer.prototype.getFieldConfig = function (field) { var column = ModelManager.getInstance().getModel(this.model).fields[field]; if (!column) { throw new Error('Model "' + this.model.name + '" has no field "' + field + '" but is declared in Serializer "' + this.constructor.name + '"'); } var config = new FieldSerializerConfigurator(); if (column.primaryKey) { config.isOptional = false; } if (column.defaultValue) { config.defaultValue = column.defaultValue; } return config; }; Serializer.prototype.isValid = function () { return null; }; return Serializer; }()); export { Serializer }; //# sourceMappingURL=serializer.js.map