UNPKG

rx-form-mapper

Version:

Proper decorator-based transformation / serialization / deserialization of plain javascript classes to angular reactive forms

43 lines 6.41 kB
import { Injectable } from '@angular/core'; import { isNil } from 'lodash'; import { ModelBinder } from '../bind'; import { CustomMapperResolver } from './custom-mapper-resolver'; import { FormReader } from './form-reader'; import { FormWriter } from './form-writer'; import { ValidatorResolver } from './validator-resolver'; export class RxFormMapper { constructor(customMapperResolver, validatorResolver) { this.customMapperResolver = customMapperResolver; this.validatorResolver = validatorResolver; } fromType(type) { if (isNil(type)) { throw new Error('type cannot be inferred implicitly'); } const formWriter = new FormWriter(void (0), this.customMapperResolver, this.validatorResolver); return ModelBinder.instance.getMetadata(type).accept(formWriter); } writeForm(value, type) { if (isNil(value) && isNil(type)) { throw new Error('type cannot be inferred implicitly'); } const valueType = type !== null && type !== void 0 ? type : Object.getPrototypeOf(value).constructor; const formWriter = new FormWriter(value, this.customMapperResolver, this.validatorResolver); return ModelBinder.instance.getMetadata(valueType).accept(formWriter); } readForm(form, type) { if (isNil(type)) { throw new Error('type cannot be inferred implicitly'); } const formReader = new FormReader(form, this.customMapperResolver); return ModelBinder.instance.getMetadata(type).accept(formReader); } } RxFormMapper.decorators = [ { type: Injectable } ]; RxFormMapper.ctorParameters = () => [ { type: CustomMapperResolver }, { type: ValidatorResolver } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1tYXBwZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J4LWZvcm0tbWFwcGVyL3NyYy9saWIvc2VydmljZXMvcngtZm9ybS1tYXBwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3pELE1BQU0sT0FBTyxZQUFZO0lBQ3hCLFlBQ2tCLG9CQUEwQyxFQUMxQyxpQkFBb0M7UUFEcEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQ25ELENBQUM7SUFFRyxRQUFRLENBQUksSUFBYTtRQUMvQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDdEQ7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBYyxDQUFDO0lBQy9FLENBQUM7SUFJTSxTQUFTLENBQUksS0FBUSxFQUFFLElBQWM7UUFDM0MsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN0RDtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksYUFBSixJQUFJLGNBQUosSUFBSSxHQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUYsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFjLENBQUM7SUFFcEYsQ0FBQztJQUVNLFFBQVEsQ0FBSSxJQUFlLEVBQUUsSUFBYTtRQUNoRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDdEQ7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbkUsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7O1lBcENELFVBQVU7OztZQUxGLG9CQUFvQjtZQUdwQixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTW9kZWxCaW5kZXIgfSBmcm9tICcuLi9iaW5kJztcbmltcG9ydCB7IEN1c3RvbU1hcHBlclJlc29sdmVyIH0gZnJvbSAnLi9jdXN0b20tbWFwcGVyLXJlc29sdmVyJztcbmltcG9ydCB7IEZvcm1SZWFkZXIgfSBmcm9tICcuL2Zvcm0tcmVhZGVyJztcbmltcG9ydCB7IEZvcm1Xcml0ZXIgfSBmcm9tICcuL2Zvcm0td3JpdGVyJztcbmltcG9ydCB7IFZhbGlkYXRvclJlc29sdmVyIH0gZnJvbSAnLi92YWxpZGF0b3ItcmVzb2x2ZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnhGb3JtTWFwcGVyIHtcblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tTWFwcGVyUmVzb2x2ZXI6IEN1c3RvbU1hcHBlclJlc29sdmVyLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9yUmVzb2x2ZXI6IFZhbGlkYXRvclJlc29sdmVyXG5cdCkge31cblxuXHRwdWJsaWMgZnJvbVR5cGU8VD4odHlwZTogVHlwZTxUPik6IEZvcm1Hcm91cCB7XG5cdFx0aWYgKGlzTmlsKHR5cGUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgY2Fubm90IGJlIGluZmVycmVkIGltcGxpY2l0bHknKTtcblx0XHR9XG5cblx0XHRjb25zdCBmb3JtV3JpdGVyID0gbmV3IEZvcm1Xcml0ZXIodm9pZCgwKSwgdGhpcy5jdXN0b21NYXBwZXJSZXNvbHZlciwgdGhpcy52YWxpZGF0b3JSZXNvbHZlcik7XG5cdFx0cmV0dXJuIE1vZGVsQmluZGVyLmluc3RhbmNlLmdldE1ldGFkYXRhKHR5cGUpLmFjY2VwdChmb3JtV3JpdGVyKSBhcyBGb3JtR3JvdXA7XG5cdH1cblxuXHRwdWJsaWMgd3JpdGVGb3JtPFQ+KHZhbHVlOiBUKTogRm9ybUdyb3VwO1xuXHRwdWJsaWMgd3JpdGVGb3JtPFQ+KHZhbHVlOiBULCB0eXBlOiBUeXBlPFQ+KTogRm9ybUdyb3VwO1xuXHRwdWJsaWMgd3JpdGVGb3JtPFQ+KHZhbHVlOiBULCB0eXBlPzogVHlwZTxUPik6IEZvcm1Hcm91cCB7XG5cdFx0aWYgKGlzTmlsKHZhbHVlKSAmJiBpc05pbCh0eXBlKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCd0eXBlIGNhbm5vdCBiZSBpbmZlcnJlZCBpbXBsaWNpdGx5Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWVUeXBlID0gdHlwZSA/PyBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpLmNvbnN0cnVjdG9yO1xuXHRcdGNvbnN0IGZvcm1Xcml0ZXIgPSBuZXcgRm9ybVdyaXRlcih2YWx1ZSwgdGhpcy5jdXN0b21NYXBwZXJSZXNvbHZlciwgdGhpcy52YWxpZGF0b3JSZXNvbHZlcik7XG5cdFx0cmV0dXJuIE1vZGVsQmluZGVyLmluc3RhbmNlLmdldE1ldGFkYXRhKHZhbHVlVHlwZSkuYWNjZXB0KGZvcm1Xcml0ZXIpIGFzIEZvcm1Hcm91cDtcblxuXHR9XG5cblx0cHVibGljIHJlYWRGb3JtPFQ+KGZvcm06IEZvcm1Hcm91cCwgdHlwZTogVHlwZTxUPiApOiBUIHtcblx0XHRpZiAoaXNOaWwodHlwZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcigndHlwZSBjYW5ub3QgYmUgaW5mZXJyZWQgaW1wbGljaXRseScpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZvcm1SZWFkZXIgPSBuZXcgRm9ybVJlYWRlcihmb3JtLCB0aGlzLmN1c3RvbU1hcHBlclJlc29sdmVyKTtcblx0XHRyZXR1cm4gTW9kZWxCaW5kZXIuaW5zdGFuY2UuZ2V0TWV0YWRhdGEodHlwZSkuYWNjZXB0KGZvcm1SZWFkZXIpO1xuXHR9XG59XG4iXX0=