using System.Text.Json.Serialization; using Elsa.Workflows.Core; using Elsa.Workflows.Core.Attributes; using Elsa.Workflows.Core.Models; using Elsa.Workflows.Management.Models; using IJavaScriptEvaluator = Elsa.JavaScript.Contracts.IJavaScriptEvaluator; namespace Elsa.JavaScript.Activities; [Activity("Elsa", "Scripting", "Executes JavaScript code", DisplayName = "Run JavaScript")] public class RunJavaScript : CodeActivity { [JsonConstructor] public RunJavaScript() { } public RunJavaScript(string script) { Script = new Input(script); } [Input(UIHint = InputUIHints.CodeEditor, OptionsProvider = typeof(RunJavaScriptOptionsProvider))] public Input Script { get; set; } = new(""); protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) { var script = context.Get(Script); // If no script was specified, there's nothing to do. if (string.IsNullOrWhiteSpace(script)) return; // Get a JavaScript evaluator. var javaScriptEvaluator = context.GetRequiredService(); // Run the script. var result = await javaScriptEvaluator.EvaluateAsync(script, typeof(object), context.ExpressionExecutionContext, cancellationToken: context.CancellationToken); // Set the result as output, if any. context.Set(Result, result); } }