2022-05-26 10:47:31 +00:00
|
|
|
using Elsa.Expressions.Models;
|
|
|
|
|
using Elsa.Expressions.Services;
|
|
|
|
|
using Elsa.JavaScript.Expressions;
|
|
|
|
|
using Elsa.Workflows.Core.Services;
|
2022-01-11 12:28:21 +00:00
|
|
|
|
2022-05-26 10:47:31 +00:00
|
|
|
namespace Elsa.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();
|
|
|
|
|
}
|