elsa-core/src/scripting/Elsa.Scripting.JavaScript/Extensions/JavaScriptServiceCollectionExtensions.cs
2021-05-30 12:51:58 +02:00

45 lines
2.2 KiB
C#

using Elsa.Scripting.JavaScript.Options;
using Elsa.Scripting.JavaScript.Services;
using System;
using Elsa;
using Elsa.Activities.JavaScript;
using Elsa.Expressions;
using Elsa.Scripting.JavaScript.Typings;
// ReSharper disable once CheckNamespace
namespace Microsoft.Extensions.DependencyInjection
{
public static class JavaScriptServiceCollectionExtensions
{
public static IServiceCollection AddJavaScriptExpressionEvaluator(this IServiceCollection services)
{
return services
.AddScoped<ITypeScriptDefinitionService, TypeScriptDefinitionService>()
.AddScoped<IJavaScriptService, JintJavaScriptEvaluator>()
.AddTransient(s => new JintEvaluationResultConverterFactory(s).GetConverter())
.AddTransient<IConvertsEnumerableToObject>(s => new EnumerableResultConverter(default))
.TryAddProvider<IExpressionHandler, JavaScriptExpressionHandler>(ServiceLifetime.Scoped)
.AddJavaScriptTypeDefinitionProvider<PrimitiveTypeDefinitionProvider>()
.AddJavaScriptTypeDefinitionProvider<EnumTypeDefinitionProvider>()
.AddJavaScriptTypeDefinitionProvider<EnumerableTypeDefinitionProvider>()
.AddJavaScriptTypeDefinitionProvider<WorkflowContextTypeDefinitionProvider>()
.AddJavaScriptTypeDefinitionProvider<WorkflowVariablesTypeDefinitionProvider>()
.AddJavaScriptTypeDefinitionProvider<CommonTypesTypeDefinitionProvider>()
.AddNotificationHandlers(typeof(JavaScriptServiceCollectionExtensions));
}
public static IServiceCollection AddJavaScriptTypeDefinitionProvider<T>(this IServiceCollection services) where T: class, ITypeDefinitionProvider => services.AddScoped<ITypeDefinitionProvider, T>();
public static IServiceCollection WithJavaScriptOptions(this IServiceCollection services, Action<ScriptOptions> configureOptions)
{
services.Configure(configureOptions);
return services;
}
public static ElsaOptionsBuilder AddJavaScriptActivities(this ElsaOptionsBuilder options)
{
return options.AddActivitiesFrom<RunJavaScript>();
}
}
}