export function validatePayload()

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}`);
    }
  }
}