in source/console/src/util/Utils.ts [177:234]
export function validatePayload(payload: IAttribute[]) {
let index = 0;
let msgString = I18n.get('error.message.title');
let error: IErrors<IAttribute>;
try {
for (index; index < payload.length; index++) {
let payloadFields = Object.keys(payload[index]);
//check if payload at index has name and type and they are valid
if (!payloadFields.includes('name')) {
throw Error(`\n${msgString}: ${I18n.get('missing.field')} 'name'`);
} else {
error = validateField('name', payload[index].name);
if (Object.keys(error).length > 0) {
throw Error(`name\n${msgString}: ${error['name']}`);
}
}
if (!payloadFields.includes('type')) {
throw Error(`\n${msgString}: ${I18n.get('missing.field')} 'type'`)
} else {
error = validateField('type', payload[index].type)
if (Object.keys(validateField('type', payload[index].type)).length > 0) {
throw Error(`type\n${msgString}: ${error['type']}`);
}
}
//get attribute fields that should exist
let attrFields = getAttrFields(payload[index].type) as Array<keyof IAttribute>;
//If returned no fields, not a valid attribute
if (attrFields.length === 0) {
throw Error(`\n${msgString}: ${payload[index].type} ${I18n.get('not.valid')}`);
}
attrFields.forEach((field: keyof IAttribute) => {
//Check if field exists
if (!payloadFields.includes(field)) {
//If field is optional, skip iteration
if (!('default charSet length'.includes(field))) {
throw Error(`\n${msgString}: ${field} ${I18n.get('is.required')}`);
}
}
//if object, recursively check fields
if (payload[index].payload) {
validatePayload(payload[index].payload!);
}
//Validate fields
let errors: IErrors<IAttribute> = validateField(field, payload[index][field]);
if (Object.keys(errors).length > 0) {
throw Error(`${field}\n${msgString}: ${errors[field]}`);
}
})
}
} catch (err) {
if(err instanceof Error){
throw new Error(`payload[${index}].${err.message}`);
}
}
}