< Summary

Information
Class: Elsa.Expressions.CSharp.Options.CSharpOptions
Assembly: Elsa.Expressions.CSharp
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Expressions.CSharp/Options/CSharpOptions.cs
Line coverage
75%
Covered lines: 24
Uncovered lines: 8
Coverable lines: 32
Total lines: 99
Line coverage: 75%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_ConfigureScriptOptionsCallbacks()100%11100%
get_ConfigureScriptCallbacks()100%11100%
get_Assemblies()100%11100%
.ctor()100%11100%
get_Namespaces()100%11100%
get_ScriptCacheTimeout()100%11100%
get_DisableWrappers()100%11100%
ConfigureScriptOptions(...)100%210%
AppendScript(...)100%11100%
AppendScript(...)100%210%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Expressions.CSharp/Options/CSharpOptions.cs

#LineLine coverage
 1using System.Reflection;
 2using System.Text.Json;
 3using System.Text.Json.Nodes;
 4using System.Text.Json.Serialization;
 5using Elsa.Expressions.CSharp.Contexts;
 6using Elsa.Expressions.CSharp.Models;
 7using Elsa.Expressions.Models;
 8using Microsoft.CodeAnalysis.Scripting;
 9
 10namespace Elsa.Expressions.CSharp.Options;
 11
 12/// <summary>
 13/// Options for the C# expression evaluator.
 14/// </summary>
 15public class CSharpOptions
 16{
 17    /// <summary>
 18    /// A list of callbacks that is invoked when a C# expression is evaluated. Use this to configure the <see cref="Scri
 19    /// </summary>
 120    public ICollection<Func<ScriptOptions, ExpressionExecutionContext, ScriptOptions>> ConfigureScriptOptionsCallbacks {
 21
 22    /// <summary>
 23    /// A list of callbacks that is invoked when a C# expression is evaluated. Use this to configure the <see cref="Scri
 24    /// </summary>
 325    public ICollection<Func<Script, ExpressionExecutionContext, Script>> ConfigureScriptCallbacks { get; } = new List<Fu
 26
 27    /// <summary>
 28    /// A list of assemblies that will be referenced when evaluating a C# expression.
 29    /// </summary>
 130    public ISet<Assembly> Assemblies { get; } = new HashSet<Assembly>(new[]
 131    {
 132        typeof(Globals).Assembly, // Elsa.Expressions.CSharp
 133        typeof(Enumerable).Assembly, // System.Linq
 134        typeof(Guid).Assembly, // System.Runtime
 135        typeof(JsonSerializer).Assembly, // System.Text.Json
 136        typeof(IDictionary<string, object>).Assembly, // System.Collections
 137    });
 38
 39    /// <summary>
 40    /// A list of namespaces that will be imported when evaluating a C# expression.
 41    /// </summary>
 142    public ISet<string> Namespaces { get; } = new HashSet<string>(new[]
 143    {
 144        typeof(Globals).Namespace!, // Elsa.Expressions.CSharp
 145        typeof(Enumerable).Namespace!, // System.Linq
 146        typeof(Guid).Namespace!, // System
 147        typeof(JsonSerializer).Namespace!, // System.Text.Json
 148        typeof(JsonConverter).Namespace!, // System.Text.Json.Serialization
 149        typeof(JsonNode).Namespace!, // System.Text.Json.Nodes
 150        typeof(IDictionary<string, object>).Namespace!, // System.Collections.Generic
 151    });
 52
 53    /// <summary>
 54    /// The timeout for script caching.
 55    /// </summary>
 56    /// <remarks>
 57    /// The <c>ScriptCacheTimeout</c> property specifies the duration for which the scripts are cached in the C# engine.
 58    /// If the value of <c>ScriptCacheTimeout</c> is <c>null</c>, the scripts are cached indefinitely. If a time value i
 59    /// </remarks>
 160    public TimeSpan? ScriptCacheTimeout { get; set; } = TimeSpan.FromDays(1);
 61
 62    /// <summary>
 63    /// Disables the generation of variable wrappers. E.g. <c>Variables.MyVariable</c> will no longer be available for v
 64    /// This is useful if your application requires the use of invalid JavaScript variable names.
 65    /// </summary>
 166    public bool DisableWrappers { get; set; }
 67
 68    /// <summary>
 69    /// Configures the <see cref="ScriptOptions"/>.
 70    /// </summary>
 71    /// <param name="configurator">A callback that is invoked before a C# expression is evaluated. Use this to configure
 72    public CSharpOptions ConfigureScriptOptions(Action<ScriptOptionsConfigurationContext> configurator)
 73    {
 074        ConfigureScriptOptionsCallbacks.Add((scriptOptions, context) =>
 075        {
 076            configurator(new ScriptOptionsConfigurationContext(scriptOptions, context));
 077            return scriptOptions;
 078        });
 079        return this;
 80    }
 81
 82    /// <summary>
 83    /// Appends a C# script to the current script.
 84    /// </summary>
 85    public CSharpOptions AppendScript(string script)
 86    {
 287        ConfigureScriptCallbacks.Add((s, _) => s.ContinueWith(script));
 288        return this;
 89    }
 90
 91    /// <summary>
 92    /// Appends a C# script to the current script.
 93    /// </summary>
 94    public CSharpOptions AppendScript(Func<ExpressionExecutionContext, string> script)
 95    {
 096        ConfigureScriptCallbacks.Add((s, c) => s.ContinueWith(script(c)));
 097        return this;
 98    }
 99}