File: ValueForms\ChainValueFormFactory.cs
Web Access
Project: src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Orchestrator.RunnableProjects\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.csproj (Microsoft.TemplateEngine.Orchestrator.RunnableProjects)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Text.Json.Nodes;

namespace Microsoft.TemplateEngine.Orchestrator.RunnableProjects.ValueForms
{
    internal class ChainValueFormFactory : DependentValueFormFactory<IReadOnlyList<string>>
    {
        internal const string FormIdentifier = "chain";

        internal ChainValueFormFactory()
            : base(FormIdentifier) { }

        protected override string Process(string value, IReadOnlyList<string>? steps, IReadOnlyDictionary<string, IValueForm> otherForms)
        {
            if (steps == null)
            {
                return value;
            }

            string result = value;
            foreach (string step in steps)
            {
                result = otherForms[step].Process(result, otherForms);
            }
            return result;
        }

        protected override IReadOnlyList<string> ReadConfiguration(JsonObject jObject)
        {
            return jObject.ArrayAsStrings("steps");
        }
    }
}