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; } }