func RunPromptsFromConfigWithSkipsIO()

in pkg/prompts/prompts.go [35:85]


func RunPromptsFromConfigWithSkipsIO(draftConfig *config.DraftConfig, Stdin io.ReadCloser, Stdout io.WriteCloser) error {
	if draftConfig == nil {
		return errors.New("draftConfig is nil")
	}

	for _, variable := range draftConfig.Variables {
		if variable.Value != "" {
			log.Debugf("Skipping prompt for %s", variable.Name)
			continue
		}

		if variable.Default.IsPromptDisabled {
			log.Debugf("Skipping prompt for %s as it has IsPromptDisabled=true", variable.Name)
			noPromptDefaultValue := GetVariableDefaultValue(draftConfig, variable)
			if noPromptDefaultValue == "" {
				return fmt.Errorf("IsPromptDisabled is true for %s but no default value was found", variable.Name)
			}
			log.Debugf("Using default value %s for %s", noPromptDefaultValue, variable.Name)
			variable.Value = noPromptDefaultValue
			continue
		}

		isVarActive, err := draftConfig.CheckActiveWhenConstraint(variable)
		if err != nil {
			return fmt.Errorf("unable to check ActiveWhen constraint: %w", err)
		}

		if !isVarActive {
			continue
		}

		log.Debugf("constructing prompt for: %s", variable.Name)
		if variable.Type == "bool" {
			input, err := RunBoolPrompt(variable, Stdin, Stdout)
			if err != nil {
				return err
			}
			variable.Value = input
		} else {
			defaultValue := GetVariableDefaultValue(draftConfig, variable)

			stringInput, err := RunDefaultableStringPrompt(defaultValue, variable, nil, Stdin, Stdout)
			if err != nil {
				return err
			}
			variable.Value = stringInput
		}
	}

	return nil
}