func transformApplicationIntoComponent()

in cmd/hub/compose/elaborate.go [530:597]


func transformApplicationIntoComponent(stack *manifest.Manifest, components []manifest.Manifest) []manifest.Manifest {
	name := nameWithoutVersion(stack.Meta.Name)

	stack.Lifecycle.Order = append(stack.Lifecycle.Order, name)

	applicationRef := manifest.ComponentRef{
		Name:   name,
		Source: stack.Meta.Source,
	}
	stack.Components = append(stack.Components, applicationRef)

	componentOutputs := make([]manifest.Output, 0, len(stack.Outputs))
	stackOutputs := make([]manifest.Output, 0, len(stack.Outputs))
	for _, output := range stack.Outputs {
		if !util.Empty(output.Value) || output.FromTfVar != "" {
			componentOutputs = append(componentOutputs, output)
			stackOutput := manifest.Output{
				Name:        output.Name,
				Value:       fmt.Sprintf("${%s:%s}", name, output.Name),
				Brief:       output.Brief,
				Description: output.Description,
			}
			stackOutputs = append(stackOutputs, stackOutput)
		} else {
			stackOutputs = append(stackOutputs, output)
		}
	}

	componentParameters := make([]manifest.Parameter, 0, len(stack.Parameters))
	stackParameters := make([]manifest.Parameter, 0, len(stack.Parameters))
	for _, param := range stack.Parameters {
		if param.Component == "" || param.Component == name {
			componentParameters = append(componentParameters,
				manifest.Parameter{
					Name: param.Name,
					Env:  param.Env,
				})
		}
		param.Env = ""
		stackParameters = append(stackParameters, param)
	}

	componentManifest := manifest.Manifest{
		Version: stack.Version,
		Kind:    "component",
		Meta:    stack.Meta,
		Lifecycle: manifest.Lifecycle{
			Bare:            stack.Lifecycle.Bare,
			Verbs:           stack.Lifecycle.Verbs,
			ReadyConditions: stack.Lifecycle.ReadyConditions,
			Requires:        stack.Lifecycle.Requires,
			Options:         stack.Lifecycle.Options,
		},
		Provides:   stack.Provides,
		Requires:   stack.Requires,
		Parameters: componentParameters,
		Templates:  stack.Templates,
		Outputs:    componentOutputs,
	}
	componentManifest.Meta.Name = name
	components = append(components, componentManifest)

	stack.Outputs = stackOutputs
	stack.Parameters = stackParameters
	stack.Templates = manifest.TemplateSetup{}

	return components
}