using Elsa.Scripting.JavaScript.Options; using Elsa.Scripting.JavaScript.Services; using System; using Elsa; using Elsa.Activities.JavaScript; using Elsa.Expressions; using Elsa.Options; using Elsa.Scripting.JavaScript.Typings; using Elsa.Scripting.JavaScript.Providers; // ReSharper disable once CheckNamespace namespace Microsoft.Extensions.DependencyInjection { public static class JavaScriptServiceCollectionExtensions { public static IServiceCollection AddJavaScriptExpressionEvaluator(this IServiceCollection services) { return services .AddScoped() .AddTypeScriptDefinitionProvider() .AddScoped() .AddTransient(s => new JintEvaluationResultConverterFactory(s).GetConverter()) .AddTransient(s => new EnumerableResultConverter(default)) .TryAddProvider(ServiceLifetime.Scoped) .AddJavaScriptTypeDefinitionProvider() .AddJavaScriptTypeDefinitionProvider() .AddJavaScriptTypeDefinitionProvider() .AddJavaScriptTypeDefinitionProvider() .AddJavaScriptTypeDefinitionProvider() .AddJavaScriptTypeDefinitionProvider() .AddNotificationHandlers(typeof(JavaScriptServiceCollectionExtensions)); } public static IServiceCollection AddJavaScriptTypeDefinitionProvider(this IServiceCollection services) where T: class, ITypeDefinitionProvider => services.AddScoped(); public static IServiceCollection AddTypeScriptDefinitionProvider(this IServiceCollection services) where T : class, ITypeScriptDefinitionProvider => services.AddScoped(); public static IServiceCollection WithJavaScriptOptions(this IServiceCollection services, Action configureOptions) { services.Configure(configureOptions); return services; } public static ElsaOptionsBuilder AddJavaScriptActivities(this ElsaOptionsBuilder options) { return options.AddActivitiesFrom(); } } }