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.
This commit is contained in:
parent
d0316687c1
commit
96371b683c
|
|
@ -44,7 +44,7 @@
|
||||||
<PackageVersion Include="Humanizer.Core" Version="2.14.1" />
|
<PackageVersion Include="Humanizer.Core" Version="2.14.1" />
|
||||||
<PackageVersion Include="IronCompress" Version="1.5.2" />
|
<PackageVersion Include="IronCompress" Version="1.5.2" />
|
||||||
<PackageVersion Include="JetBrains.Annotations" Version="2024.2.0" />
|
<PackageVersion Include="JetBrains.Annotations" Version="2024.2.0" />
|
||||||
<PackageVersion Include="Jint" Version="4.0.0" />
|
<PackageVersion Include="Jint" Version="4.0.1" />
|
||||||
<PackageVersion Include="LinqKit.Core" Version="1.2.5" />
|
<PackageVersion Include="LinqKit.Core" Version="1.2.5" />
|
||||||
<PackageVersion Include="MailKit" Version="4.7.1.1" />
|
<PackageVersion Include="MailKit" Version="4.7.1.1" />
|
||||||
<PackageVersion Include="MassTransit" Version="8.2.3" />
|
<PackageVersion Include="MassTransit" Version="8.2.3" />
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ public class ConfigureEngineWithCommonTypes : INotificationHandler<EvaluatingJav
|
||||||
engine.RegisterType<DateTimeOffset>();
|
engine.RegisterType<DateTimeOffset>();
|
||||||
engine.RegisterType<TimeSpan>();
|
engine.RegisterType<TimeSpan>();
|
||||||
engine.RegisterType<Guid>();
|
engine.RegisterType<Guid>();
|
||||||
|
engine.RegisterType<Random>();
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ using Elsa.JavaScript.Contracts;
|
||||||
using Elsa.JavaScript.TypeDefinitions.Abstractions;
|
using Elsa.JavaScript.TypeDefinitions.Abstractions;
|
||||||
using Elsa.JavaScript.TypeDefinitions.Models;
|
using Elsa.JavaScript.TypeDefinitions.Models;
|
||||||
using Elsa.Workflows.Activities;
|
using Elsa.Workflows.Activities;
|
||||||
|
using Elsa.Workflows.Management;
|
||||||
using Humanizer;
|
using Humanizer;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
|
|
||||||
|
|
@ -9,8 +10,7 @@ namespace Elsa.JavaScript.Providers;
|
||||||
|
|
||||||
/// Produces <see cref="FunctionDefinition"/>s for common functions.
|
/// Produces <see cref="FunctionDefinition"/>s for common functions.
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
internal class InputFunctionsDefinitionProvider(ITypeAliasRegistry typeAliasRegistry, IWorkflowDefinitionService workflowDefinitionService)
|
internal class InputFunctionsDefinitionProvider(ITypeAliasRegistry typeAliasRegistry) : FunctionDefinitionProvider
|
||||||
: FunctionDefinitionProvider
|
|
||||||
{
|
{
|
||||||
protected override ValueTask<IEnumerable<FunctionDefinition>> GetFunctionDefinitionsAsync(TypeDefinitionContext context)
|
protected override ValueTask<IEnumerable<FunctionDefinition>> GetFunctionDefinitionsAsync(TypeDefinitionContext context)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Acornima.Ast;
|
||||||
using Elsa.Expressions.Helpers;
|
using Elsa.Expressions.Helpers;
|
||||||
using Elsa.Expressions.Models;
|
using Elsa.Expressions.Models;
|
||||||
using Elsa.JavaScript.Contracts;
|
using Elsa.JavaScript.Contracts;
|
||||||
|
|
@ -8,7 +10,6 @@ using Elsa.JavaScript.Notifications;
|
||||||
using Elsa.JavaScript.ObjectConverters;
|
using Elsa.JavaScript.ObjectConverters;
|
||||||
using Elsa.JavaScript.Options;
|
using Elsa.JavaScript.Options;
|
||||||
using Elsa.Mediator.Contracts;
|
using Elsa.Mediator.Contracts;
|
||||||
using Esprima.Ast;
|
|
||||||
using Jint;
|
using Jint;
|
||||||
using Jint.Runtime.Interop;
|
using Jint.Runtime.Interop;
|
||||||
using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
|
|
@ -46,18 +47,13 @@ public class JintJavaScriptEvaluator(IConfiguration configuration, INotification
|
||||||
options ??= new ExpressionEvaluatorOptions();
|
options ??= new ExpressionEvaluatorOptions();
|
||||||
|
|
||||||
var engineOptions = new Jint.Options();
|
var engineOptions = new Jint.Options();
|
||||||
;
|
|
||||||
|
|
||||||
if (_jintOptions.AllowClrAccess)
|
if (_jintOptions.AllowClrAccess)
|
||||||
engineOptions.AllowClr();
|
engineOptions.AllowClr();
|
||||||
|
|
||||||
// Wrap objects in ObjectWrapper instances and set their prototype to Array.prototype if they are array-like.
|
ConfigureClrAccess(engineOptions);
|
||||||
engineOptions.SetWrapObjectHandler((engine, target, type) =>
|
ConfigureObjectWrapper(engineOptions);
|
||||||
{
|
ConfigureObjectConverters(engineOptions);
|
||||||
ConfigureClrAccess(opts);
|
|
||||||
ConfigureObjectWrapper(opts);
|
|
||||||
ConfigureObjectConverters(opts);
|
|
||||||
});
|
|
||||||
|
|
||||||
engineOptions.Interop.ObjectConverters.Add(new ByteArrayConverter());
|
engineOptions.Interop.ObjectConverters.Add(new ByteArrayConverter());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ internal class CommonTypeDefinitionProvider(ITypeDescriber typeDescriber) : Type
|
||||||
{
|
{
|
||||||
protected override IEnumerable<TypeDefinition> GetTypeDefinitions(TypeDefinitionContext context)
|
protected override IEnumerable<TypeDefinition> GetTypeDefinitions(TypeDefinitionContext context)
|
||||||
{
|
{
|
||||||
yield return _typeDescriber.DescribeType(typeof(Guid));
|
yield return typeDescriber.DescribeType(typeof(Guid));
|
||||||
yield return _typeDescriber.DescribeType(typeof(JsonObject));
|
yield return typeDescriber.DescribeType(typeof(JsonObject));
|
||||||
yield return _typeDescriber.DescribeType(typeof(Random));
|
yield return typeDescriber.DescribeType(typeof(Random));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
using Elsa.Abstractions;
|
using Elsa.Abstractions;
|
||||||
using Elsa.Workflows.Contracts;
|
using Elsa.Workflows.Contracts;
|
||||||
using Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity;
|
using Elsa.Workflows.Management;
|
||||||
using Elsa.Workflows.Management.Contracts;
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
|
|
||||||
namespace Elsa.Workflows.Api.Endpoints.ActivityDescriptors.List;
|
namespace Elsa.Workflows.Api.Endpoints.ActivityDescriptors.List;
|
||||||
|
|
||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
internal class List(IActivityRegistry registry, IActivityRegistryPopulator registryPopulator, WorkflowDefinitionActivityProvider workflowDefinitionActivityProvider) : ElsaEndpointWithoutRequest<Response>
|
internal class List(IActivityRegistry registry, IActivityRegistryPopulator registryPopulator) : ElsaEndpointWithoutRequest<Response>
|
||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,36 @@
|
||||||
|
using Elsa.Workflows.Contracts;
|
||||||
|
using Elsa.Workflows.Helpers;
|
||||||
using Elsa.Workflows.Runtime.Activities;
|
using Elsa.Workflows.Runtime.Activities;
|
||||||
|
using Elsa.Workflows.Runtime.Options;
|
||||||
using Elsa.Workflows.Runtime.Stimuli;
|
using Elsa.Workflows.Runtime.Stimuli;
|
||||||
|
|
||||||
namespace Elsa.Workflows.Runtime;
|
namespace Elsa.Workflows.Runtime;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public class TaskReporter(IStimulusSender stimulusSender) : ITaskReporter
|
public class TaskReporter(IBookmarkQueue stimulusSender, IStimulusHasher stimulusHasher) : ITaskReporter
|
||||||
{
|
{
|
||||||
|
private static readonly string ActivityTypeName = ActivityTypeNameHelper.GenerateTypeName<RunTask>();
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public async Task ReportCompletionAsync(string taskId, object? result = default, CancellationToken cancellationToken = default)
|
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<string, object>
|
var input = new Dictionary<string, object>
|
||||||
{
|
{
|
||||||
[RunTask.InputKey] = result!
|
[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<RunTask>(bookmarkPayload, sender, cancellationToken: cancellationToken);
|
|
||||||
|
await stimulusSender.EnqueueAsync(bookmarkQueueItem, cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue