elsa-core/src/scripting/Elsa.Scripting.JavaScript/Providers/JavaScriptExpressionSyntaxProvider.cs

53 lines
1.8 KiB
C#
Raw Normal View History

2022-01-11 12:28:21 +00:00
using Elsa.Contracts;
using Elsa.Management.Contracts;
using Elsa.Management.Models;
2022-01-12 10:15:07 +00:00
using Elsa.Scripting.JavaScript.Expressions;
2022-01-11 12:28:21 +00:00
2022-01-12 10:15:07 +00:00
namespace Elsa.Scripting.JavaScript.Providers;
2022-01-11 12:28:21 +00:00
public class JavaScriptExpressionSyntaxProvider : IExpressionSyntaxProvider
{
2022-01-12 10:43:46 +00:00
public const string SyntaxName = "JavaScript";
2022-01-11 12:28:21 +00:00
private readonly IIdentityGenerator _identityGenerator;
public JavaScriptExpressionSyntaxProvider(IIdentityGenerator identityGenerator)
{
_identityGenerator = identityGenerator;
}
public ValueTask<IEnumerable<ExpressionSyntaxDescriptor>> GetDescriptorsAsync(CancellationToken cancellationToken = default)
{
var javaScript = CreateJavaScriptDescriptor();
return ValueTask.FromResult<IEnumerable<ExpressionSyntaxDescriptor>>(new[] { javaScript });
}
2022-01-12 10:43:46 +00:00
private ExpressionSyntaxDescriptor CreateJavaScriptDescriptor() => new()
{
Syntax = SyntaxName,
Type = typeof(JavaScriptExpression),
CreateExpression = CreateJavaScriptExpression,
CreateLocationReference = context =>
2022-01-11 12:28:21 +00:00
{
2022-01-12 10:43:46 +00:00
var reference = new JavaScriptExpressionReference(context.GetExpression<JavaScriptExpression>());
2022-01-11 12:28:21 +00:00
2022-01-12 10:43:46 +00:00
if (string.IsNullOrWhiteSpace(reference.Id))
reference.Id = GenerateId();
2022-01-11 12:28:21 +00:00
2022-01-12 10:43:46 +00:00
return reference;
},
CreateSerializableObject = context => new
{
Type = SyntaxName,
context.GetExpression<JavaScriptExpression>().Value
}
};
2022-01-11 12:28:21 +00:00
private IExpression CreateJavaScriptExpression(ExpressionConstructorContext context)
{
2022-01-11 13:23:11 +00:00
var script = context.Element.TryGetProperty("value", out var p) ? p.ToString() : "";
2022-01-11 12:28:21 +00:00
return new JavaScriptExpression(script);
}
2022-01-12 10:43:46 +00:00
2022-01-11 12:28:21 +00:00
private string GenerateId() => _identityGenerator.GenerateId();
}