From 96371b683cbc984020347664eccfbd4309ce1ae7 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Wed, 14 Aug 2024 21:14:08 +0200 Subject: [PATCH] Update dependencies and streamline JavaScript engine configuration Refactor InputFunctionsDefinitionProvider to remove unused parameter. Simplify JintJavaScriptEvaluator object wrapping configuration and update Jint package to version 4.0.1. Add type Random to ConfigureEngineWithCommonTypes and enhance error handling in TaskReporter. --- Directory.Packages.props | 2 +- .../ConfigureEngineWithCommonTypes.cs | 1 + .../InputFunctionsDefinitionProvider.cs | 4 ++-- .../Services/JintJavaScriptEvaluator.cs | 14 +++++-------- .../CommonTypesDefinitionProvider.cs | 6 +++--- .../ActivityDescriptors/List/Endpoint.cs | 5 ++--- .../Services/TaskReporter.cs | 21 ++++++++++++++----- 7 files changed, 30 insertions(+), 23 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 711b1cdf2..560465af2 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -44,7 +44,7 @@ - + diff --git a/src/modules/Elsa.JavaScript/Handlers/ConfigureEngineWithCommonTypes.cs b/src/modules/Elsa.JavaScript/Handlers/ConfigureEngineWithCommonTypes.cs index 3443dcb60..3a695f5ec 100644 --- a/src/modules/Elsa.JavaScript/Handlers/ConfigureEngineWithCommonTypes.cs +++ b/src/modules/Elsa.JavaScript/Handlers/ConfigureEngineWithCommonTypes.cs @@ -19,6 +19,7 @@ public class ConfigureEngineWithCommonTypes : INotificationHandler(); engine.RegisterType(); engine.RegisterType(); + engine.RegisterType(); return Task.CompletedTask; } diff --git a/src/modules/Elsa.JavaScript/Providers/InputFunctionsDefinitionProvider.cs b/src/modules/Elsa.JavaScript/Providers/InputFunctionsDefinitionProvider.cs index 67f66978e..cee375298 100644 --- a/src/modules/Elsa.JavaScript/Providers/InputFunctionsDefinitionProvider.cs +++ b/src/modules/Elsa.JavaScript/Providers/InputFunctionsDefinitionProvider.cs @@ -2,6 +2,7 @@ using Elsa.JavaScript.Contracts; using Elsa.JavaScript.TypeDefinitions.Abstractions; using Elsa.JavaScript.TypeDefinitions.Models; using Elsa.Workflows.Activities; +using Elsa.Workflows.Management; using Humanizer; using JetBrains.Annotations; @@ -9,8 +10,7 @@ namespace Elsa.JavaScript.Providers; /// Produces s for common functions. [UsedImplicitly] -internal class InputFunctionsDefinitionProvider(ITypeAliasRegistry typeAliasRegistry, IWorkflowDefinitionService workflowDefinitionService) - : FunctionDefinitionProvider +internal class InputFunctionsDefinitionProvider(ITypeAliasRegistry typeAliasRegistry) : FunctionDefinitionProvider { protected override ValueTask> GetFunctionDefinitionsAsync(TypeDefinitionContext context) { diff --git a/src/modules/Elsa.JavaScript/Services/JintJavaScriptEvaluator.cs b/src/modules/Elsa.JavaScript/Services/JintJavaScriptEvaluator.cs index 36a7ac604..cece9a3a2 100644 --- a/src/modules/Elsa.JavaScript/Services/JintJavaScriptEvaluator.cs +++ b/src/modules/Elsa.JavaScript/Services/JintJavaScriptEvaluator.cs @@ -1,5 +1,7 @@ +using System.Diagnostics.CodeAnalysis; using System.Security.Cryptography; using System.Text; +using Acornima.Ast; using Elsa.Expressions.Helpers; using Elsa.Expressions.Models; using Elsa.JavaScript.Contracts; @@ -8,7 +10,6 @@ using Elsa.JavaScript.Notifications; using Elsa.JavaScript.ObjectConverters; using Elsa.JavaScript.Options; using Elsa.Mediator.Contracts; -using Esprima.Ast; using Jint; using Jint.Runtime.Interop; using Microsoft.Extensions.Caching.Memory; @@ -46,18 +47,13 @@ public class JintJavaScriptEvaluator(IConfiguration configuration, INotification options ??= new ExpressionEvaluatorOptions(); var engineOptions = new Jint.Options(); - ; if (_jintOptions.AllowClrAccess) engineOptions.AllowClr(); - // Wrap objects in ObjectWrapper instances and set their prototype to Array.prototype if they are array-like. - engineOptions.SetWrapObjectHandler((engine, target, type) => - { - ConfigureClrAccess(opts); - ConfigureObjectWrapper(opts); - ConfigureObjectConverters(opts); - }); + ConfigureClrAccess(engineOptions); + ConfigureObjectWrapper(engineOptions); + ConfigureObjectConverters(engineOptions); engineOptions.Interop.ObjectConverters.Add(new ByteArrayConverter()); diff --git a/src/modules/Elsa.JavaScript/TypeDefinitions/Providers/CommonTypesDefinitionProvider.cs b/src/modules/Elsa.JavaScript/TypeDefinitions/Providers/CommonTypesDefinitionProvider.cs index af218a03b..33df93bb5 100644 --- a/src/modules/Elsa.JavaScript/TypeDefinitions/Providers/CommonTypesDefinitionProvider.cs +++ b/src/modules/Elsa.JavaScript/TypeDefinitions/Providers/CommonTypesDefinitionProvider.cs @@ -12,8 +12,8 @@ internal class CommonTypeDefinitionProvider(ITypeDescriber typeDescriber) : Type { protected override IEnumerable GetTypeDefinitions(TypeDefinitionContext context) { - yield return _typeDescriber.DescribeType(typeof(Guid)); - yield return _typeDescriber.DescribeType(typeof(JsonObject)); - yield return _typeDescriber.DescribeType(typeof(Random)); + yield return typeDescriber.DescribeType(typeof(Guid)); + yield return typeDescriber.DescribeType(typeof(JsonObject)); + yield return typeDescriber.DescribeType(typeof(Random)); } } \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/ActivityDescriptors/List/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/ActivityDescriptors/List/Endpoint.cs index 42059bfc7..7d5423695 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/ActivityDescriptors/List/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/ActivityDescriptors/List/Endpoint.cs @@ -1,13 +1,12 @@ using Elsa.Abstractions; using Elsa.Workflows.Contracts; -using Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity; -using Elsa.Workflows.Management.Contracts; +using Elsa.Workflows.Management; using JetBrains.Annotations; namespace Elsa.Workflows.Api.Endpoints.ActivityDescriptors.List; [PublicAPI] -internal class List(IActivityRegistry registry, IActivityRegistryPopulator registryPopulator, WorkflowDefinitionActivityProvider workflowDefinitionActivityProvider) : ElsaEndpointWithoutRequest +internal class List(IActivityRegistry registry, IActivityRegistryPopulator registryPopulator) : ElsaEndpointWithoutRequest { public override void Configure() { diff --git a/src/modules/Elsa.Workflows.Runtime/Services/TaskReporter.cs b/src/modules/Elsa.Workflows.Runtime/Services/TaskReporter.cs index 90ae08266..ac7f07cf7 100644 --- a/src/modules/Elsa.Workflows.Runtime/Services/TaskReporter.cs +++ b/src/modules/Elsa.Workflows.Runtime/Services/TaskReporter.cs @@ -1,25 +1,36 @@ +using Elsa.Workflows.Contracts; +using Elsa.Workflows.Helpers; using Elsa.Workflows.Runtime.Activities; +using Elsa.Workflows.Runtime.Options; using Elsa.Workflows.Runtime.Stimuli; namespace Elsa.Workflows.Runtime; /// -public class TaskReporter(IStimulusSender stimulusSender) : ITaskReporter +public class TaskReporter(IBookmarkQueue stimulusSender, IStimulusHasher stimulusHasher) : ITaskReporter { + private static readonly string ActivityTypeName = ActivityTypeNameHelper.GenerateTypeName(); + /// public async Task ReportCompletionAsync(string taskId, object? result = default, CancellationToken cancellationToken = default) { - var bookmarkPayload = new RunTaskStimulus(taskId, default!); + var stimulus = new RunTaskStimulus(taskId, default!); var input = new Dictionary { [RunTask.InputKey] = result! }; - var sender = new StimulusMetadata + var bookmarkQueueItem = new NewBookmarkQueueItem { - Input = input, + ActivityTypeName = ActivityTypeName, + StimulusHash = stimulusHasher.Hash(ActivityTypeName, stimulus), + Options = new ResumeBookmarkOptions + { + Input = input + } }; - await stimulusSender.SendAsync(bookmarkPayload, sender, cancellationToken: cancellationToken); + + await stimulusSender.EnqueueAsync(bookmarkQueueItem, cancellationToken); } } \ No newline at end of file