UNPKG

@amirmarmul/waba-common

Version:

![GitHub release](https://img.shields.io/github/v/release/amirmarmul/waba-common?style=flat-square)

49 lines (48 loc) 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transformAndValidate = void 0; const class_transformer_1 = require("class-transformer"); const class_validator_1 = require("class-validator"); const RequestValidationError_1 = require("../../core/errors/RequestValidationError"); function transformAndValidate(klass, object, options) { object = normalizeObject(object); const classObject = (0, class_transformer_1.plainToClass)(klass, object, { enableImplicitConversion: false }); const errors = (0, class_validator_1.validateSync)(classObject, options ? options : void 0); if (errors.length) { throw new RequestValidationError_1.RequestValidationError(errors); } return classObject; } exports.transformAndValidate = transformAndValidate; function normalizeObject(object) { let normalObject = {}; for (let key in object) { const newKey = key.replace(/\[(.*?)\]/, '$1'); if (typeof object[key] !== 'object') { normalObject[newKey] = object[key]; } else if (Array.isArray(object[key])) { normalObject[newKey] = normilizeArray(object[key]); } else if (object.hasOwnProperty(key)) { normalObject[newKey] = normalizeObject(object[key]); } } return normalObject; } function normilizeArray(array) { let normalArray = []; normalArray = array.map((item) => { if (typeof item !== 'object') { return item; } else if (Array.isArray(item)) { return normilizeArray(item); } else { return normalizeObject(item); } }); return normalArray; } exports.default = transformAndValidate;