using Elsa.Dsl.ElsaScript.Contracts;
using Elsa.Workflows.Activities;
using Elsa.Workflows.Management;
using Elsa.Workflows.Management.Entities;
namespace Elsa.Dsl.ElsaScript.Materializers;
///
/// Materializes a from a 's ElsaScript source code.
///
public class ElsaScriptWorkflowMaterializer(IElsaScriptCompiler compiler) : IWorkflowMaterializer
{
///
/// The name of the materializer.
///
public const string MaterializerName = "ElsaScript";
///
public string Name => MaterializerName;
///
public async ValueTask MaterializeAsync(WorkflowDefinition definition, CancellationToken cancellationToken)
{
var source = definition.OriginalSource ?? string.Empty;
var workflow = await compiler.CompileAsync(source, cancellationToken);
// Preserve the workflow definition ID and version
workflow.Identity = new(
definition.DefinitionId,
definition.Version,
definition.Id,
definition.TenantId
);
return workflow;
}
}