File: ValueForms\ReplacementValueFormFactory.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;
using System.Text.RegularExpressions;

namespace Microsoft.TemplateEngine.Orchestrator.RunnableProjects.ValueForms
{
    internal class ReplacementValueFormSettings
    {
        public ReplacementValueFormSettings(Regex match, string? replacement)
        {
            Match = match;
            Replacement = replacement;
        }

        internal Regex Match { get; }

        internal string? Replacement { get; }
    }

    internal class ReplacementValueFormFactory : ConfigurableValueFormFactory<ReplacementValueFormSettings>
    {
        internal const string FormIdentifier = "replace";

        internal ReplacementValueFormFactory() : base(FormIdentifier) { }

        protected override string Process(string value, ReplacementValueFormSettings? configuration)
        {
            if (configuration == null)
            {
                return value;
            }
            return configuration.Match.Replace(value, configuration.Replacement);
        }

        protected override ReplacementValueFormSettings ReadConfiguration(JsonObject jObject)
        {
            return new ReplacementValueFormSettings(new Regex(jObject.ToString("pattern")), jObject.ToString("replacement"));
        }
    }
}