export function checkResponse()

in src/extensions/askUserForParam.ts [20:62]


export function checkResponse(response: string, spec: Param): boolean {
  let valid = true;
  let responses: string[];

  if (spec.required && (response == "" || response == undefined)) {
    utils.logWarning(`Param ${spec.param} is required, but no value was provided.`);
    return false;
  }
  if (spec.type === ParamType.MULTISELECT) {
    responses = response.split(",");
  } else {
    // For Params of type SELECT and STRING, we test against the entire response.
    responses = [response];
  }

  if (spec.validationRegex && !!response) {
    // !!response to ignore empty optional params
    const re = new RegExp(spec.validationRegex);
    _.forEach(responses, (resp) => {
      if ((spec.required || resp !== "") && !re.test(resp)) {
        const genericWarn =
          `${resp} is not a valid value for ${spec.param} since it` +
          ` does not meet the requirements of the regex validation: "${spec.validationRegex}"`;
        utils.logWarning(spec.validationErrorMessage || genericWarn);
        valid = false;
      }
    });
  }

  if (spec.type && (spec.type === ParamType.MULTISELECT || spec.type === ParamType.SELECT)) {
    _.forEach(responses, (r) => {
      // A choice is valid if it matches one of the option values.
      const validChoice = _.some(spec.options, (option: ParamOption) => {
        return r === option.value;
      });
      if (!validChoice) {
        utils.logWarning(`${r} is not a valid option for ${spec.param}.`);
        valid = false;
      }
    });
  }
  return valid;
}