using Elsa.Caching.Features; using Elsa.Expressions.Options; using Elsa.Common.Features; using Elsa.Expressions.Features; using Elsa.Extensions; using Elsa.Features.Abstractions; using Elsa.Features.Attributes; using Elsa.Features.Services; using Elsa.Expressions.JavaScript.Activities; using Elsa.Expressions.JavaScript.Contracts; using Elsa.Expressions.JavaScript.Extensions; using Elsa.Expressions.JavaScript.HostedServices; using Elsa.Expressions.JavaScript.Options; using Elsa.Expressions.JavaScript.Providers; using Elsa.Expressions.JavaScript.Services; using Elsa.Expressions.JavaScript.TypeDefinitions.Contracts; using Elsa.Expressions.JavaScript.TypeDefinitions.Services; using Elsa.Workflows; using Elsa.Workflows.Options; using Microsoft.Extensions.DependencyInjection; using Elsa.Common.Serialization; namespace Elsa.Expressions.JavaScript.Features; /// /// Installs JavaScript integration. /// [DependsOn(typeof(MediatorFeature))] [DependsOn(typeof(ExpressionsFeature))] [DependsOn(typeof(MemoryCacheFeature))] public class JavaScriptFeature : FeatureBase { /// public JavaScriptFeature(IModule module) : base(module) { } /// /// Configures the Jint options. /// private Action JintOptions { get; set; } = _ => { }; public JavaScriptFeature ConfigureJintOptions(Action configure) { JintOptions += configure; return this; } /// public override void ConfigureHostedServices() { ConfigureHostedService(); } /// public override void Configure() { Module.AddFastEndpointsAssembly(); } /// public override void Apply() { Services.Configure(JintOptions); Services.Configure(JavaScriptExceptionTypeAliasRegistrar.Register); Services.Configure(JavaScriptExceptionTypeAliasRegistrar.Register); // JavaScript services. Services .AddScoped() .AddScoped() .AddExpressionDescriptorProvider() ; // Type definition services. Services .AddScoped() .AddScoped() .AddScoped() .AddSingleton() .AddFunctionDefinitionProvider() .AddFunctionDefinitionProvider() .AddFunctionDefinitionProvider() .AddTypeDefinitionProvider() .AddTypeDefinitionProvider() .AddTypeDefinitionProvider() .AddVariableDefinitionProvider() ; // Handlers. Services.AddNotificationHandlersFrom(); // Activities. Module.UseWorkflowManagement(management => management.AddActivity()); // Type Script definitions. Services.AddFunctionDefinitionProvider(); // UI property handlers. Services.AddScoped(); } }