@amirmarmul/waba-common
Version:

49 lines (48 loc) • 1.74 kB
JavaScript
;
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;