using Elsa.Extensions;
using Elsa.Http.Models;
using Elsa.JavaScript.Notifications;
using Elsa.JavaScript.TypeDefinitions.Contracts;
using Elsa.JavaScript.TypeDefinitions.Models;
using Elsa.Mediator.Contracts;
using JetBrains.Annotations;
namespace Elsa.Http.Scripting.JavaScript;
///
/// Configures the JavaScript engine with additional .NET types that can be instantiated.
///
[PublicAPI]
public class HttpJavaScriptHandler : INotificationHandler, ITypeDefinitionProvider
{
private readonly ITypeDescriber _typeDescriber;
///
/// Initializes a new instance of the class.
///
public HttpJavaScriptHandler(ITypeDescriber typeDescriber)
{
_typeDescriber = typeDescriber;
}
///
public Task HandleAsync(EvaluatingJavaScript notification, CancellationToken cancellationToken)
{
var engine = notification.Engine;
engine.RegisterType();
engine.RegisterType();
return Task.CompletedTask;
}
///
public ValueTask> GetTypeDefinitionsAsync(TypeDefinitionContext context)
{
var definitions = GetTypeDefinitions(context);
return new(definitions);
}
private IEnumerable GetTypeDefinitions(TypeDefinitionContext context)
{
yield return _typeDescriber.DescribeType(typeof(HttpRequestHeaders));
yield return _typeDescriber.DescribeType(typeof(Downloadable));
}
}