diff --git a/Directory.Build.props b/Directory.Build.props
index 69c61b6beb..fa2a7fea8d 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,7 +1,7 @@
Elsa Workflows Community
- 2024
+ 2025
https://github.com/elsa-workflows/elsa-core
https://github.com/elsa-workflows/elsa-core
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 66a6882246..7510cde914 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -1,169 +1,225 @@
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Elsa.sln b/Elsa.sln
index 6be65074b5..d67f34f16a 100644
--- a/Elsa.sln
+++ b/Elsa.sln
@@ -24,20 +24,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{0354F050-399
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz", "src\modules\Elsa.Quartz\Elsa.Quartz.csproj", "{7D5A49B4-9A9B-496E-803B-DEB85B2C3132}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Http", "src\modules\Elsa.Http\Elsa.Http.csproj", "{82E26BF9-5F3A-4365-899A-AB1FFD54AA45}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scheduling", "src\modules\Elsa.Scheduling\Elsa.Scheduling.csproj", "{ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.JavaScript", "src\modules\Elsa.JavaScript\Elsa.JavaScript.csproj", "{D31581AB-A6C1-4B73-AB63-45667F6C82AE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Hangfire", "src\modules\Elsa.Hangfire\Elsa.Hangfire.csproj", "{0601A2A6-2C62-418B-9104-8CDE497E5283}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.WorkflowContexts", "src\modules\Elsa.WorkflowContexts\Elsa.WorkflowContexts.csproj", "{302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.MassTransit", "src\modules\Elsa.MassTransit\Elsa.MassTransit.csproj", "{BB983D0B-A939-4008-B9E3-C7C172BCF83A}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{90031D64-CA0F-46D0-9AF4-8DC023A5FFCD}"
ProjectSection(SolutionItems) = preProject
test\Directory.Build.props = test\Directory.Build.props
@@ -45,12 +31,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{90031D64-C
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Labels", "src\modules\Elsa.Labels\Elsa.Labels.csproj", "{80FF5821-E831-450D-AA0C-C76D07D878F4}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Liquid", "src\modules\Elsa.Liquid\Elsa.Liquid.csproj", "{8E5BD3D9-3529-48BC-B741-CFB7A69DB233}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Runtime.ProtoActor", "src\modules\Elsa.Workflows.Runtime.ProtoActor\Elsa.Workflows.Runtime.ProtoActor.csproj", "{B2049499-D384-46DF-8837-F1180107DD54}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Dsl", "src\modules\Elsa.Dsl\Elsa.Dsl.csproj", "{78DAB791-8595-4612-8E9E-2248AF5B1862}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Api", "src\modules\Elsa.Workflows.Api\Elsa.Workflows.Api.csproj", "{C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Core", "src\modules\Elsa.Workflows.Core\Elsa.Workflows.Core.csproj", "{169E2C9B-6687-427F-A278-30BF849BFEDC}"
@@ -69,10 +49,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Identity", "src\module
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Common", "src\modules\Elsa.Common\Elsa.Common.csproj", "{D229105F-6879-4452-9189-75DE060C0F4C}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore", "src\modules\Elsa.EntityFrameworkCore\Elsa.EntityFrameworkCore.csproj", "{7CC95512-7F44-45C3-A669-95B7048D4730}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Email", "src\modules\Elsa.Email\Elsa.Email.csproj", "{1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{986E5482-0482-448C-B9E4-EC67A9474B85}"
ProjectSection(SolutionItems) = preProject
docker\.dockerignore = docker\.dockerignore
@@ -86,10 +62,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{986E54
docker\otel-collector-config.yaml = docker\otel-collector-config.yaml
EndProjectSection
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Elasticsearch", "src\modules\Elsa.Elasticsearch\Elsa.Elasticsearch.csproj", "{3246883E-2FA7-4B4A-BDC5-99039A2869BC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Webhooks", "src\modules\Elsa.Webhooks\Elsa.Webhooks.csproj", "{2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unit", "unit", "{18453B51-25EB-4317-A4B3-B10518252E92}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integration", "integration", "{1B8D5897-902E-4632-8698-E89CAF3DDF54}"
@@ -107,78 +79,18 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Api.Client", "src\clie
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Environments", "src\modules\Elsa.Environments\Elsa.Environments.csproj", "{B5CDF747-8066-40D5-9BAE-CBE397BC9B51}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "persistence", "persistence", "{9B4F139F-7D26-435C-A561-89E65A67A8E5}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripting", "scripting", "{6EF07978-A6D2-40EB-891D-7D70C5F37E76}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "servicebus", "servicebus", "{DD089B8B-DA73-492A-9010-F772D1C178DA}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "expressions", "expressions", "{6EF07978-A6D2-40EB-891D-7D70C5F37E76}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "security", "security", "{5948B0A5-7873-4DBB-BA03-EB283D6EA91B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{B08B4E00-C2AB-48F3-8389-449F42AEF179}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "timers", "timers", "{AB797AF0-C12C-46DE-A157-7E25625C6200}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runtimes", "runtimes", "{58C59255-281C-4595-8732-808158F1DC6E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Dapper", "src\modules\Elsa.Dapper\Elsa.Dapper.csproj", "{4D8F3BB2-709D-481A-8FD3-0DA9762B366D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Dapper.Migrations", "src\modules\Elsa.Dapper.Migrations\Elsa.Dapper.Migrations.csproj", "{A86DF0F0-24E9-470E-984B-9E7332544972}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.WorkflowProviders.BlobStorage", "src\modules\Elsa.WorkflowProviders.BlobStorage\Elsa.WorkflowProviders.BlobStorage.csproj", "{A702DD84-B55C-4807-9C28-D8F5AC3CCA78}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.MongoDb", "src\modules\Elsa.MongoDb\Elsa.MongoDb.csproj", "{3A377A6A-F735-4010-9E00-72E8BEB8F1F2}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Mediator", "src\common\Elsa.Mediator\Elsa.Mediator.csproj", "{28818676-F6AF-4203-8B65-BD33A50CB9A2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Core.UnitTests", "test\unit\Elsa.Workflows.Core.UnitTests\Elsa.Workflows.Core.UnitTests.csproj", "{DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DropIns.Core", "src\common\Elsa.DropIns.Core\Elsa.DropIns.Core.csproj", "{1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DropIns", "src\common\Elsa.DropIns\Elsa.DropIns.csproj", "{4E7F15D1-729E-4DA7-992A-C3A2C6054B37}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.SasTokens", "src\modules\Elsa.SasTokens\Elsa.SasTokens.csproj", "{3095C95A-F1F9-487A-A983-1B100A33E4C7}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "alterations", "alterations", "{CF3DA5F1-F98D-49C9-A980-27E570B38B8D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Alterations.Core", "src\modules\Elsa.Alterations.Core\Elsa.Alterations.Core.csproj", "{8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Alterations", "src\modules\Elsa.Alterations\Elsa.Alterations.csproj", "{CC7DE119-736D-4FC5-85DC-70A6770749F6}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.Sqlite", "src\modules\Elsa.EntityFrameworkCore.Sqlite\Elsa.EntityFrameworkCore.Sqlite.csproj", "{EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.SqlServer", "src\modules\Elsa.EntityFrameworkCore.SqlServer\Elsa.EntityFrameworkCore.SqlServer.csproj", "{1C84408D-A0A7-4513-AD9A-1BA137ABE62C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.MySql", "src\modules\Elsa.EntityFrameworkCore.MySql\Elsa.EntityFrameworkCore.MySql.csproj", "{E4300D97-1D53-4029-9435-483FB7EC9621}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.PostgreSql", "src\modules\Elsa.EntityFrameworkCore.PostgreSql\Elsa.EntityFrameworkCore.PostgreSql.csproj", "{84AB9951-3DBF-43A4-8F5D-AEED1102CE88}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Alterations.MassTransit", "src\modules\Elsa.Alterations.MassTransit\Elsa.Alterations.MassTransit.csproj", "{1F621382-08FB-45EA-B94C-96A7FECB9489}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.Common", "src\modules\Elsa.EntityFrameworkCore.Common\Elsa.EntityFrameworkCore.Common.csproj", "{FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.Sqlite", "src\modules\Elsa.Quartz.EntityFrameworkCore.Sqlite\Elsa.Quartz.EntityFrameworkCore.Sqlite.csproj", "{A71557F2-D5FB-4772-9391-F7D18A3B6C44}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.SqlServer", "src\modules\Elsa.Quartz.EntityFrameworkCore.SqlServer\Elsa.Quartz.EntityFrameworkCore.SqlServer.csproj", "{05F3B23E-CF28-467B-AD3C-595EA4ED6B96}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.MySql", "src\modules\Elsa.Quartz.EntityFrameworkCore.MySql\Elsa.Quartz.EntityFrameworkCore.MySql.csproj", "{74ACD9D0-8B4C-42FA-A582-E93BF0075023}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.PostgreSql", "src\modules\Elsa.Quartz.EntityFrameworkCore.PostgreSql\Elsa.Quartz.EntityFrameworkCore.PostgreSql.csproj", "{CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.Oracle", "src\modules\Elsa.EntityFrameworkCore.Oracle\Elsa.EntityFrameworkCore.Oracle.csproj", "{49D8D2CF-AF68-40FA-951F-018247C97443}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.FileStorage", "src\modules\Elsa.FileStorage\Elsa.FileStorage.csproj", "{732BF088-6AD7-4C4D-9A48-8074253596D4}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "storage", "storage", "{B818988E-639C-4E6E-85C1-B231BCAD9DAB}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Tenants", "src\modules\Elsa.Tenants\Elsa.Tenants.csproj", "{29638A67-E79F-44FE-AC05-DA499EBA929E}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.CSharp", "src\modules\Elsa.CSharp\Elsa.CSharp.csproj", "{24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Python", "src\modules\Elsa.Python\Elsa.Python.csproj", "{790E94F2-5393-47DF-AC52-D9247F5B243A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.MassTransit.RabbitMq", "src\modules\Elsa.MassTransit.RabbitMq\Elsa.MassTransit.RabbitMq.csproj", "{169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pipelines", "pipelines", "{B789B743-0FBE-4BBC-9F45-84C20C8D4814}"
ProjectSection(SolutionItems) = preProject
.github\workflows\bounty.yml = .github\workflows\bounty.yml
@@ -192,12 +104,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pipelines", "pipelines", "{
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "build\_build.csproj", "{99F2B1DA-2F69-4D70-A2A3-AC985AD91EC4}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.MassTransit.AzureServiceBus", "src\modules\Elsa.MassTransit.AzureServiceBus\Elsa.MassTransit.AzureServiceBus.csproj", "{AFEB799E-82C3-4D02-9D5C-766BB8DEF004}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{C80C8231-D35C-4ACC-9ED6-9F3DB221535E}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Alterations.IntegrationTests", "test\integration\Elsa.Alterations.IntegrationTests\Elsa.Alterations.IntegrationTests.csproj", "{F50336DA-42D1-4DD1-A107-67AFEB8A33EE}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hosting", "hosting", "{A516931E-EDBB-4FC3-BB94-1BB824D5BC61}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Hosting.Management", "src\modules\Elsa.Hosting.Management\Elsa.Hosting.Management.csproj", "{BBCE36D1-6767-4ED1-B3E8-84D2567A962A}"
@@ -206,14 +114,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.KeyValues", "src\modul
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Runtime.UnitTests", "test\unit\Elsa.Workflows.Runtime.UnitTests\Elsa.Workflows.Runtime.UnitTests.csproj", "{B0946844-DE0E-4C59-9391-C0EB649DBF4E}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Caching", "src\modules\Elsa.Caching\Elsa.Caching.csproj", "{A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "caching", "caching", "{EB3A7401-0DE3-476F-9E6F-057F1F4590FB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Caching.Distributed.MassTransit", "src\modules\Elsa.Caching.Distributed.MassTransit\Elsa.Caching.Distributed.MassTransit.csproj", "{BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Caching.Distributed", "src\modules\Elsa.Caching.Distributed\Elsa.Caching.Distributed.csproj", "{7EB0CFB8-B668-4F3F-898D-80411095BC2F}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.ComponentTests", "test\component\Elsa.Workflows.ComponentTests\Elsa.Workflows.ComponentTests.csproj", "{34BC9836-681D-43A5-BC39-E4FEE17FC528}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "performance", "performance", "{CBB515F3-A0EF-43B5-A907-FD4E652DD66E}"
@@ -223,14 +123,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "performance", "performance"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.PerformanceTests", "test\performance\Elsa.Workflows.PerformanceTests\Elsa.Workflows.PerformanceTests.csproj", "{90CD37A9-C866-4D90-A3B1-8C87F53B845E}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "retention", "retention", "{3F20899B-C5E1-485F-808B-ADB1877EB3FD}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Retention", "src\modules\Elsa.Retention\Elsa.Retention.csproj", "{3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.MongoDb.UnitTests", "test\unit\Elsa.MongoDb.UnitTests\Elsa.MongoDb.UnitTests.csproj", "{56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Runtime.Distributed", "src\modules\Elsa.Workflows.Runtime.Distributed\Elsa.Workflows.Runtime.Distributed.csproj", "{0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Testing.Shared", "src\common\Elsa.Testing.Shared\Elsa.Testing.Shared.csproj", "{5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Testing.Shared.Integration", "src\common\Elsa.Testing.Shared.Integration\Elsa.Testing.Shared.Integration.csproj", "{94A61AD7-2A2B-40DB-81F3-C59D596958A8}"
@@ -260,10 +152,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Web", "src\apps
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.OpenTelemetry", "src\modules\Elsa.OpenTelemetry\Elsa.OpenTelemetry.csproj", "{2CDF3E1C-267D-4198-B1C7-7E1F548FC120}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.ProtoActor.Core", "src\modules\Elsa.ProtoActor.Core\Elsa.ProtoActor.Core.csproj", "{01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Caching.Distributed.ProtoActor", "src\modules\Elsa.Caching.Distributed.ProtoActor\Elsa.Caching.Distributed.ProtoActor.csproj", "{47FBCB04-0C2D-453C-BE2F-7052CAC22524}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "k8s", "k8s", "{B32DB9B2-AD6C-48A5-8682-4373CB045185}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa-server", "elsa-server", "{454652D5-E1BB-4D4B-9B21-9CEFC900C4FB}"
@@ -293,16 +181,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "trace-lens", "trace-lens",
scripts\k8s\trace-lens\service.yaml = scripts\k8s\trace-lens\service.yaml
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integrations", "integrations", "{EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Core", "src\modules\Elsa.Secrets.Core\Elsa.Secrets.Core.csproj", "{34FAB60D-7259-47B9-B50E-B533C7C3CFEC}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "secrets", "secrets", "{8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Management", "src\modules\Elsa.Secrets.Management\Elsa.Secrets.Management.csproj", "{19329441-2A59-4BAC-A1BE-BBAB70C93CA0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Api", "src\modules\Elsa.Secrets.Api\Elsa.Secrets.Api.csproj", "{37D16EAF-ACD8-4105-8BD3-B2745819CFF8}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{3666CF13-1353-4620-9472-506670214A6A}"
ProjectSection(SolutionItems) = preProject
scripts\migrations\efcore-3.0.sh = scripts\migrations\efcore-3.0.sh
@@ -330,45 +208,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa-studio", "elsa-studio"
scripts\k8s\elsa-studio\service.yaml = scripts\k8s\elsa-studio\service.yaml
EndProjectSection
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore\Elsa.Secrets.Persistence.EntityFrameworkCore.csproj", "{9A6D67DE-51B1-456D-B25D-19E0356C8F60}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite\Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite.csproj", "{44A03CF6-4EB6-434C-90D1-FF8142FE394E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Models", "src\modules\Elsa.Secrets.Models\Elsa.Secrets.Models.csproj", "{29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Scripting", "src\modules\Elsa.Secrets.Scripting\Elsa.Secrets.Scripting.csproj", "{6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.JavaScript.Libraries", "src\modules\Elsa.JavaScript.Libraries\Elsa.JavaScript.Libraries.csproj", "{5F80663C-B072-49DE-9A67-FD804BAD787E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql\Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql.csproj", "{630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer\Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer.csproj", "{59E7614A-3630-4C39-9C7F-9E12BC95D37E}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multitenancy", "multitenancy", "{2F3E1026-5054-4E1F-899B-F1A7F70F9912}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Tenants.AspNetCore", "src\modules\Elsa.Tenants.AspNetCore\Elsa.Tenants.AspNetCore.csproj", "{D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Kafka", "src\modules\Elsa.Kafka\Elsa.Kafka.csproj", "{BF934627-F531-44FB-BEC2-ECA801FF31E7}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oracle-setup", "oracle-setup", "{66E2E2CF-967F-4564-89E8-F46FA973C99B}"
ProjectSection(SolutionItems) = preProject
docker\oracle-setup\setup.sql = docker\oracle-setup\setup.sql
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "connections", "connections", "{9DF81143-2F39-4CFB-9DA3-902279010622}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Models", "src\modules\Elsa.Connections.Models\Elsa.Connections.Models.csproj", "{75E08B0E-A41A-425C-9DCA-155505CE41CD}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Api", "src\modules\Elsa.Connections.Api\Elsa.Connections.Api.csproj", "{BD120D97-4862-469E-B2CF-4109F7F21C20}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Core", "src\modules\Elsa.Connections.Core\Elsa.Connections.Core.csproj", "{8A3443F3-D40E-44B9-9805-B4CB7A3F022C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Persistence", "src\modules\Elsa.Connections.Persistence\Elsa.Connections.Persistence.csproj", "{FA2B2B44-7E3E-444B-A157-7526B376E9CA}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Persistence.EntityFrameworkCore", "src\modules\Elsa.Connections.Persistence.EntityFrameworkCore\Elsa.Connections.Persistence.EntityFrameworkCore.csproj", "{DF0CA7E2-F5DF-40ED-91B6-748767084FC7}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite", "src\modules\Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite\Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite.csproj", "{DB20B168-CD90-41F2-BE08-3D8C6F142459}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "adr", "adr", "{0A04B1FD-06C0-4271-A910-A08C263DBC44}"
ProjectSection(SolutionItems) = preProject
doc\adr\0001-record-architecture-decisions.md = doc\adr\0001-record-architecture-decisions.md
@@ -392,56 +240,36 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Resilience.Core", "src
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Resilience", "src\modules\Elsa.Resilience\Elsa.Resilience.csproj", "{E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "caching", "caching", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Caching", "src\modules\Elsa.Caching\Elsa.Caching.csproj", "{6F14B066-DF7B-2409-59D8-CCCA90A4974C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "http", "http", "{C55015F0-E9DF-4BF9-8131-D7539E938220}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Http", "src\modules\Elsa.Http\Elsa.Http.csproj", "{E0B22AB7-7CB5-6D17-562C-4A989DC61F8A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Expressions.CSharp", "src\modules\Elsa.Expressions.CSharp\Elsa.Expressions.CSharp.csproj", "{16C3FBDE-A832-E3CD-5FBF-F51744D1F79B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Expressions.Dsl", "src\modules\Elsa.Expressions.Dsl\Elsa.Expressions.Dsl.csproj", "{765392DE-8560-B464-62DD-6890720FF5D5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Expressions.JavaScript", "src\modules\Elsa.Expressions.JavaScript\Elsa.Expressions.JavaScript.csproj", "{099D5DCE-CCF7-16FE-6EDC-A64B694F50BE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Expressions.JavaScript.Libraries", "src\modules\Elsa.Expressions.JavaScript.Libraries\Elsa.Expressions.JavaScript.Libraries.csproj", "{08B69CC4-B5F0-44E8-FA7A-6BF6F00CA40A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Expressions.Liquid", "src\modules\Elsa.Expressions.Liquid\Elsa.Expressions.Liquid.csproj", "{6AF53651-99F0-1DE0-D37B-4FF6B0348DBB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Expressions.Python", "src\modules\Elsa.Expressions.Python\Elsa.Expressions.Python.csproj", "{9D8FB664-88B4-10BE-58A2-D9A1644AD2E4}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {7D5A49B4-9A9B-496E-803B-DEB85B2C3132}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7D5A49B4-9A9B-496E-803B-DEB85B2C3132}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7D5A49B4-9A9B-496E-803B-DEB85B2C3132}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7D5A49B4-9A9B-496E-803B-DEB85B2C3132}.Release|Any CPU.Build.0 = Release|Any CPU
- {82E26BF9-5F3A-4365-899A-AB1FFD54AA45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {82E26BF9-5F3A-4365-899A-AB1FFD54AA45}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {82E26BF9-5F3A-4365-899A-AB1FFD54AA45}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {82E26BF9-5F3A-4365-899A-AB1FFD54AA45}.Release|Any CPU.Build.0 = Release|Any CPU
- {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}.Release|Any CPU.Build.0 = Release|Any CPU
- {D31581AB-A6C1-4B73-AB63-45667F6C82AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D31581AB-A6C1-4B73-AB63-45667F6C82AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D31581AB-A6C1-4B73-AB63-45667F6C82AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D31581AB-A6C1-4B73-AB63-45667F6C82AE}.Release|Any CPU.Build.0 = Release|Any CPU
- {0601A2A6-2C62-418B-9104-8CDE497E5283}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0601A2A6-2C62-418B-9104-8CDE497E5283}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0601A2A6-2C62-418B-9104-8CDE497E5283}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0601A2A6-2C62-418B-9104-8CDE497E5283}.Release|Any CPU.Build.0 = Release|Any CPU
- {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}.Release|Any CPU.Build.0 = Release|Any CPU
- {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Release|Any CPU.Build.0 = Release|Any CPU
{80FF5821-E831-450D-AA0C-C76D07D878F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{80FF5821-E831-450D-AA0C-C76D07D878F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{80FF5821-E831-450D-AA0C-C76D07D878F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{80FF5821-E831-450D-AA0C-C76D07D878F4}.Release|Any CPU.Build.0 = Release|Any CPU
- {8E5BD3D9-3529-48BC-B741-CFB7A69DB233}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8E5BD3D9-3529-48BC-B741-CFB7A69DB233}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8E5BD3D9-3529-48BC-B741-CFB7A69DB233}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8E5BD3D9-3529-48BC-B741-CFB7A69DB233}.Release|Any CPU.Build.0 = Release|Any CPU
- {B2049499-D384-46DF-8837-F1180107DD54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B2049499-D384-46DF-8837-F1180107DD54}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B2049499-D384-46DF-8837-F1180107DD54}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B2049499-D384-46DF-8837-F1180107DD54}.Release|Any CPU.Build.0 = Release|Any CPU
- {78DAB791-8595-4612-8E9E-2248AF5B1862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {78DAB791-8595-4612-8E9E-2248AF5B1862}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {78DAB791-8595-4612-8E9E-2248AF5B1862}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {78DAB791-8595-4612-8E9E-2248AF5B1862}.Release|Any CPU.Build.0 = Release|Any CPU
{C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -478,22 +306,6 @@ Global
{D229105F-6879-4452-9189-75DE060C0F4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D229105F-6879-4452-9189-75DE060C0F4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D229105F-6879-4452-9189-75DE060C0F4C}.Release|Any CPU.Build.0 = Release|Any CPU
- {7CC95512-7F44-45C3-A669-95B7048D4730}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7CC95512-7F44-45C3-A669-95B7048D4730}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7CC95512-7F44-45C3-A669-95B7048D4730}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7CC95512-7F44-45C3-A669-95B7048D4730}.Release|Any CPU.Build.0 = Release|Any CPU
- {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Release|Any CPU.Build.0 = Release|Any CPU
- {3246883E-2FA7-4B4A-BDC5-99039A2869BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3246883E-2FA7-4B4A-BDC5-99039A2869BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3246883E-2FA7-4B4A-BDC5-99039A2869BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3246883E-2FA7-4B4A-BDC5-99039A2869BC}.Release|Any CPU.Build.0 = Release|Any CPU
- {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}.Release|Any CPU.Build.0 = Release|Any CPU
{E9652738-2B3D-4357-B84B-54F0EA161382}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9652738-2B3D-4357-B84B-54F0EA161382}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9652738-2B3D-4357-B84B-54F0EA161382}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -506,22 +318,6 @@ Global
{B5CDF747-8066-40D5-9BAE-CBE397BC9B51}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B5CDF747-8066-40D5-9BAE-CBE397BC9B51}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B5CDF747-8066-40D5-9BAE-CBE397BC9B51}.Release|Any CPU.Build.0 = Release|Any CPU
- {4D8F3BB2-709D-481A-8FD3-0DA9762B366D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4D8F3BB2-709D-481A-8FD3-0DA9762B366D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4D8F3BB2-709D-481A-8FD3-0DA9762B366D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4D8F3BB2-709D-481A-8FD3-0DA9762B366D}.Release|Any CPU.Build.0 = Release|Any CPU
- {A86DF0F0-24E9-470E-984B-9E7332544972}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A86DF0F0-24E9-470E-984B-9E7332544972}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A86DF0F0-24E9-470E-984B-9E7332544972}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A86DF0F0-24E9-470E-984B-9E7332544972}.Release|Any CPU.Build.0 = Release|Any CPU
- {A702DD84-B55C-4807-9C28-D8F5AC3CCA78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A702DD84-B55C-4807-9C28-D8F5AC3CCA78}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A702DD84-B55C-4807-9C28-D8F5AC3CCA78}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A702DD84-B55C-4807-9C28-D8F5AC3CCA78}.Release|Any CPU.Build.0 = Release|Any CPU
- {3A377A6A-F735-4010-9E00-72E8BEB8F1F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3A377A6A-F735-4010-9E00-72E8BEB8F1F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3A377A6A-F735-4010-9E00-72E8BEB8F1F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3A377A6A-F735-4010-9E00-72E8BEB8F1F2}.Release|Any CPU.Build.0 = Release|Any CPU
{28818676-F6AF-4203-8B65-BD33A50CB9A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28818676-F6AF-4203-8B65-BD33A50CB9A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{28818676-F6AF-4203-8B65-BD33A50CB9A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -530,100 +326,12 @@ Global
{DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}.Release|Any CPU.Build.0 = Release|Any CPU
- {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}.Release|Any CPU.Build.0 = Release|Any CPU
- {4E7F15D1-729E-4DA7-992A-C3A2C6054B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4E7F15D1-729E-4DA7-992A-C3A2C6054B37}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4E7F15D1-729E-4DA7-992A-C3A2C6054B37}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4E7F15D1-729E-4DA7-992A-C3A2C6054B37}.Release|Any CPU.Build.0 = Release|Any CPU
- {3095C95A-F1F9-487A-A983-1B100A33E4C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3095C95A-F1F9-487A-A983-1B100A33E4C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3095C95A-F1F9-487A-A983-1B100A33E4C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3095C95A-F1F9-487A-A983-1B100A33E4C7}.Release|Any CPU.Build.0 = Release|Any CPU
- {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}.Release|Any CPU.Build.0 = Release|Any CPU
- {CC7DE119-736D-4FC5-85DC-70A6770749F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CC7DE119-736D-4FC5-85DC-70A6770749F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CC7DE119-736D-4FC5-85DC-70A6770749F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CC7DE119-736D-4FC5-85DC-70A6770749F6}.Release|Any CPU.Build.0 = Release|Any CPU
- {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}.Release|Any CPU.Build.0 = Release|Any CPU
- {1C84408D-A0A7-4513-AD9A-1BA137ABE62C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1C84408D-A0A7-4513-AD9A-1BA137ABE62C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1C84408D-A0A7-4513-AD9A-1BA137ABE62C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1C84408D-A0A7-4513-AD9A-1BA137ABE62C}.Release|Any CPU.Build.0 = Release|Any CPU
- {E4300D97-1D53-4029-9435-483FB7EC9621}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E4300D97-1D53-4029-9435-483FB7EC9621}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E4300D97-1D53-4029-9435-483FB7EC9621}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E4300D97-1D53-4029-9435-483FB7EC9621}.Release|Any CPU.Build.0 = Release|Any CPU
- {84AB9951-3DBF-43A4-8F5D-AEED1102CE88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {84AB9951-3DBF-43A4-8F5D-AEED1102CE88}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {84AB9951-3DBF-43A4-8F5D-AEED1102CE88}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {84AB9951-3DBF-43A4-8F5D-AEED1102CE88}.Release|Any CPU.Build.0 = Release|Any CPU
- {1F621382-08FB-45EA-B94C-96A7FECB9489}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1F621382-08FB-45EA-B94C-96A7FECB9489}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1F621382-08FB-45EA-B94C-96A7FECB9489}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1F621382-08FB-45EA-B94C-96A7FECB9489}.Release|Any CPU.Build.0 = Release|Any CPU
- {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}.Release|Any CPU.Build.0 = Release|Any CPU
- {A71557F2-D5FB-4772-9391-F7D18A3B6C44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A71557F2-D5FB-4772-9391-F7D18A3B6C44}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A71557F2-D5FB-4772-9391-F7D18A3B6C44}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A71557F2-D5FB-4772-9391-F7D18A3B6C44}.Release|Any CPU.Build.0 = Release|Any CPU
- {05F3B23E-CF28-467B-AD3C-595EA4ED6B96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {05F3B23E-CF28-467B-AD3C-595EA4ED6B96}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {05F3B23E-CF28-467B-AD3C-595EA4ED6B96}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {05F3B23E-CF28-467B-AD3C-595EA4ED6B96}.Release|Any CPU.Build.0 = Release|Any CPU
- {74ACD9D0-8B4C-42FA-A582-E93BF0075023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {74ACD9D0-8B4C-42FA-A582-E93BF0075023}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {74ACD9D0-8B4C-42FA-A582-E93BF0075023}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {74ACD9D0-8B4C-42FA-A582-E93BF0075023}.Release|Any CPU.Build.0 = Release|Any CPU
- {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Release|Any CPU.Build.0 = Release|Any CPU
- {49D8D2CF-AF68-40FA-951F-018247C97443}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {49D8D2CF-AF68-40FA-951F-018247C97443}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {49D8D2CF-AF68-40FA-951F-018247C97443}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {49D8D2CF-AF68-40FA-951F-018247C97443}.Release|Any CPU.Build.0 = Release|Any CPU
- {732BF088-6AD7-4C4D-9A48-8074253596D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {732BF088-6AD7-4C4D-9A48-8074253596D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {732BF088-6AD7-4C4D-9A48-8074253596D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {732BF088-6AD7-4C4D-9A48-8074253596D4}.Release|Any CPU.Build.0 = Release|Any CPU
{29638A67-E79F-44FE-AC05-DA499EBA929E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{29638A67-E79F-44FE-AC05-DA499EBA929E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{29638A67-E79F-44FE-AC05-DA499EBA929E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{29638A67-E79F-44FE-AC05-DA499EBA929E}.Release|Any CPU.Build.0 = Release|Any CPU
- {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}.Release|Any CPU.Build.0 = Release|Any CPU
- {790E94F2-5393-47DF-AC52-D9247F5B243A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {790E94F2-5393-47DF-AC52-D9247F5B243A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {790E94F2-5393-47DF-AC52-D9247F5B243A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {790E94F2-5393-47DF-AC52-D9247F5B243A}.Release|Any CPU.Build.0 = Release|Any CPU
- {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}.Release|Any CPU.Build.0 = Release|Any CPU
{99F2B1DA-2F69-4D70-A2A3-AC985AD91EC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99F2B1DA-2F69-4D70-A2A3-AC985AD91EC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AFEB799E-82C3-4D02-9D5C-766BB8DEF004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AFEB799E-82C3-4D02-9D5C-766BB8DEF004}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AFEB799E-82C3-4D02-9D5C-766BB8DEF004}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AFEB799E-82C3-4D02-9D5C-766BB8DEF004}.Release|Any CPU.Build.0 = Release|Any CPU
- {F50336DA-42D1-4DD1-A107-67AFEB8A33EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F50336DA-42D1-4DD1-A107-67AFEB8A33EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F50336DA-42D1-4DD1-A107-67AFEB8A33EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F50336DA-42D1-4DD1-A107-67AFEB8A33EE}.Release|Any CPU.Build.0 = Release|Any CPU
{BBCE36D1-6767-4ED1-B3E8-84D2567A962A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BBCE36D1-6767-4ED1-B3E8-84D2567A962A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BBCE36D1-6767-4ED1-B3E8-84D2567A962A}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -636,18 +344,6 @@ Global
{B0946844-DE0E-4C59-9391-C0EB649DBF4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B0946844-DE0E-4C59-9391-C0EB649DBF4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B0946844-DE0E-4C59-9391-C0EB649DBF4E}.Release|Any CPU.Build.0 = Release|Any CPU
- {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}.Release|Any CPU.Build.0 = Release|Any CPU
- {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}.Release|Any CPU.Build.0 = Release|Any CPU
- {7EB0CFB8-B668-4F3F-898D-80411095BC2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7EB0CFB8-B668-4F3F-898D-80411095BC2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7EB0CFB8-B668-4F3F-898D-80411095BC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7EB0CFB8-B668-4F3F-898D-80411095BC2F}.Release|Any CPU.Build.0 = Release|Any CPU
{34BC9836-681D-43A5-BC39-E4FEE17FC528}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34BC9836-681D-43A5-BC39-E4FEE17FC528}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34BC9836-681D-43A5-BC39-E4FEE17FC528}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -656,18 +352,6 @@ Global
{90CD37A9-C866-4D90-A3B1-8C87F53B845E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90CD37A9-C866-4D90-A3B1-8C87F53B845E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90CD37A9-C866-4D90-A3B1-8C87F53B845E}.Release|Any CPU.Build.0 = Release|Any CPU
- {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}.Release|Any CPU.Build.0 = Release|Any CPU
- {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}.Release|Any CPU.Build.0 = Release|Any CPU
- {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}.Release|Any CPU.Build.0 = Release|Any CPU
{5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -716,86 +400,10 @@ Global
{2CDF3E1C-267D-4198-B1C7-7E1F548FC120}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2CDF3E1C-267D-4198-B1C7-7E1F548FC120}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2CDF3E1C-267D-4198-B1C7-7E1F548FC120}.Release|Any CPU.Build.0 = Release|Any CPU
- {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}.Release|Any CPU.Build.0 = Release|Any CPU
- {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Release|Any CPU.Build.0 = Release|Any CPU
- {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Release|Any CPU.Build.0 = Release|Any CPU
- {19329441-2A59-4BAC-A1BE-BBAB70C93CA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {19329441-2A59-4BAC-A1BE-BBAB70C93CA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {19329441-2A59-4BAC-A1BE-BBAB70C93CA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {19329441-2A59-4BAC-A1BE-BBAB70C93CA0}.Release|Any CPU.Build.0 = Release|Any CPU
- {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Release|Any CPU.Build.0 = Release|Any CPU
- {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Release|Any CPU.Build.0 = Release|Any CPU
- {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Release|Any CPU.Build.0 = Release|Any CPU
- {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Release|Any CPU.Build.0 = Release|Any CPU
- {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}.Release|Any CPU.Build.0 = Release|Any CPU
- {5F80663C-B072-49DE-9A67-FD804BAD787E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5F80663C-B072-49DE-9A67-FD804BAD787E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5F80663C-B072-49DE-9A67-FD804BAD787E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5F80663C-B072-49DE-9A67-FD804BAD787E}.Release|Any CPU.Build.0 = Release|Any CPU
- {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}.Release|Any CPU.Build.0 = Release|Any CPU
- {59E7614A-3630-4C39-9C7F-9E12BC95D37E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {59E7614A-3630-4C39-9C7F-9E12BC95D37E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {59E7614A-3630-4C39-9C7F-9E12BC95D37E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {59E7614A-3630-4C39-9C7F-9E12BC95D37E}.Release|Any CPU.Build.0 = Release|Any CPU
{D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Release|Any CPU.Build.0 = Release|Any CPU
- {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Release|Any CPU.Build.0 = Release|Any CPU
- {75E08B0E-A41A-425C-9DCA-155505CE41CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {75E08B0E-A41A-425C-9DCA-155505CE41CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {75E08B0E-A41A-425C-9DCA-155505CE41CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {75E08B0E-A41A-425C-9DCA-155505CE41CD}.Release|Any CPU.Build.0 = Release|Any CPU
- {BD120D97-4862-469E-B2CF-4109F7F21C20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BD120D97-4862-469E-B2CF-4109F7F21C20}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BD120D97-4862-469E-B2CF-4109F7F21C20}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BD120D97-4862-469E-B2CF-4109F7F21C20}.Release|Any CPU.Build.0 = Release|Any CPU
- {8A3443F3-D40E-44B9-9805-B4CB7A3F022C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8A3443F3-D40E-44B9-9805-B4CB7A3F022C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8A3443F3-D40E-44B9-9805-B4CB7A3F022C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8A3443F3-D40E-44B9-9805-B4CB7A3F022C}.Release|Any CPU.Build.0 = Release|Any CPU
- {FA2B2B44-7E3E-444B-A157-7526B376E9CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FA2B2B44-7E3E-444B-A157-7526B376E9CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FA2B2B44-7E3E-444B-A157-7526B376E9CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FA2B2B44-7E3E-444B-A157-7526B376E9CA}.Release|Any CPU.Build.0 = Release|Any CPU
- {DF0CA7E2-F5DF-40ED-91B6-748767084FC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DF0CA7E2-F5DF-40ED-91B6-748767084FC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DF0CA7E2-F5DF-40ED-91B6-748767084FC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DF0CA7E2-F5DF-40ED-91B6-748767084FC7}.Release|Any CPU.Build.0 = Release|Any CPU
- {DB20B168-CD90-41F2-BE08-3D8C6F142459}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DB20B168-CD90-41F2-BE08-3D8C6F142459}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DB20B168-CD90-41F2-BE08-3D8C6F142459}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DB20B168-CD90-41F2-BE08-3D8C6F142459}.Release|Any CPU.Build.0 = Release|Any CPU
{70593549-8B26-4D63-9857-6BA8BB3E31DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{70593549-8B26-4D63-9857-6BA8BB3E31DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{70593549-8B26-4D63-9857-6BA8BB3E31DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -804,6 +412,38 @@ Global
{E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6F14B066-DF7B-2409-59D8-CCCA90A4974C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6F14B066-DF7B-2409-59D8-CCCA90A4974C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6F14B066-DF7B-2409-59D8-CCCA90A4974C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6F14B066-DF7B-2409-59D8-CCCA90A4974C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E0B22AB7-7CB5-6D17-562C-4A989DC61F8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E0B22AB7-7CB5-6D17-562C-4A989DC61F8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E0B22AB7-7CB5-6D17-562C-4A989DC61F8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E0B22AB7-7CB5-6D17-562C-4A989DC61F8A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {16C3FBDE-A832-E3CD-5FBF-F51744D1F79B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {16C3FBDE-A832-E3CD-5FBF-F51744D1F79B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {16C3FBDE-A832-E3CD-5FBF-F51744D1F79B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {16C3FBDE-A832-E3CD-5FBF-F51744D1F79B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {765392DE-8560-B464-62DD-6890720FF5D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {765392DE-8560-B464-62DD-6890720FF5D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {765392DE-8560-B464-62DD-6890720FF5D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {765392DE-8560-B464-62DD-6890720FF5D5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {099D5DCE-CCF7-16FE-6EDC-A64B694F50BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {099D5DCE-CCF7-16FE-6EDC-A64B694F50BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {099D5DCE-CCF7-16FE-6EDC-A64B694F50BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {099D5DCE-CCF7-16FE-6EDC-A64B694F50BE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {08B69CC4-B5F0-44E8-FA7A-6BF6F00CA40A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {08B69CC4-B5F0-44E8-FA7A-6BF6F00CA40A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {08B69CC4-B5F0-44E8-FA7A-6BF6F00CA40A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {08B69CC4-B5F0-44E8-FA7A-6BF6F00CA40A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6AF53651-99F0-1DE0-D37B-4FF6B0348DBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6AF53651-99F0-1DE0-D37B-4FF6B0348DBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6AF53651-99F0-1DE0-D37B-4FF6B0348DBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6AF53651-99F0-1DE0-D37B-4FF6B0348DBB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9D8FB664-88B4-10BE-58A2-D9A1644AD2E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9D8FB664-88B4-10BE-58A2-D9A1644AD2E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9D8FB664-88B4-10BE-58A2-D9A1644AD2E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9D8FB664-88B4-10BE-58A2-D9A1644AD2E4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -811,17 +451,7 @@ Global
GlobalSection(NestedProjects) = preSolution
{C6658DE0-2B2F-47F0-BB61-2CA66D435C09} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F}
{5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F}
- {7D5A49B4-9A9B-496E-803B-DEB85B2C3132} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
- {82E26BF9-5F3A-4365-899A-AB1FFD54AA45} = {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59}
- {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
- {D31581AB-A6C1-4B73-AB63-45667F6C82AE} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
- {0601A2A6-2C62-418B-9104-8CDE497E5283} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
- {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67} = {B08B4E00-C2AB-48F3-8389-449F42AEF179}
- {BB983D0B-A939-4008-B9E3-C7C172BCF83A} = {DD089B8B-DA73-492A-9010-F772D1C178DA}
{80FF5821-E831-450D-AA0C-C76D07D878F4} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {8E5BD3D9-3529-48BC-B741-CFB7A69DB233} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
- {B2049499-D384-46DF-8837-F1180107DD54} = {58C59255-281C-4595-8732-808158F1DC6E}
- {78DAB791-8595-4612-8E9E-2248AF5B1862} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
{C9539BD8-D2AE-4A8D-8281-71A05B3FBF31} = {B08B4E00-C2AB-48F3-8389-449F42AEF179}
{169E2C9B-6687-427F-A278-30BF849BFEDC} = {B08B4E00-C2AB-48F3-8389-449F42AEF179}
{2DD5D66B-85E9-4AF9-911C-C9F963234159} = {B08B4E00-C2AB-48F3-8389-449F42AEF179}
@@ -831,10 +461,6 @@ Global
{39CD855E-83B1-4A96-93F7-01608211EBE3} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09}
{30B49E42-AE61-4F7C-981F-923F07BB3986} = {5948B0A5-7873-4DBB-BA03-EB283D6EA91B}
{D229105F-6879-4452-9189-75DE060C0F4C} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {7CC95512-7F44-45C3-A669-95B7048D4730} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF} = {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59}
- {3246883E-2FA7-4B4A-BDC5-99039A2869BC} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF} = {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59}
{18453B51-25EB-4317-A4B3-B10518252E92} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD}
{1B8D5897-902E-4632-8698-E89CAF3DDF54} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD}
{08B41FFA-CEE3-46A7-B5C0-3EB65D37A16C} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD}
@@ -842,59 +468,19 @@ Global
{89608AA5-5ADE-4832-AC7B-871C4AE64210} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F}
{1FCB2200-28B8-4703-8E89-73241AAED047} = {89608AA5-5ADE-4832-AC7B-871C4AE64210}
{B5CDF747-8066-40D5-9BAE-CBE397BC9B51} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {9B4F139F-7D26-435C-A561-89E65A67A8E5} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{6EF07978-A6D2-40EB-891D-7D70C5F37E76} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {DD089B8B-DA73-492A-9010-F772D1C178DA} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{5948B0A5-7873-4DBB-BA03-EB283D6EA91B} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{B08B4E00-C2AB-48F3-8389-449F42AEF179} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {AB797AF0-C12C-46DE-A157-7E25625C6200} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {58C59255-281C-4595-8732-808158F1DC6E} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {4D8F3BB2-709D-481A-8FD3-0DA9762B366D} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {A86DF0F0-24E9-470E-984B-9E7332544972} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {A702DD84-B55C-4807-9C28-D8F5AC3CCA78} = {B08B4E00-C2AB-48F3-8389-449F42AEF179}
- {3A377A6A-F735-4010-9E00-72E8BEB8F1F2} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
{28818676-F6AF-4203-8B65-BD33A50CB9A2} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09}
{DC9CCAD0-7363-4691-B964-FF5B3AEA3F95} = {18453B51-25EB-4317-A4B3-B10518252E92}
- {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09}
- {4E7F15D1-729E-4DA7-992A-C3A2C6054B37} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09}
- {3095C95A-F1F9-487A-A983-1B100A33E4C7} = {5948B0A5-7873-4DBB-BA03-EB283D6EA91B}
- {CF3DA5F1-F98D-49C9-A980-27E570B38B8D} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4} = {CF3DA5F1-F98D-49C9-A980-27E570B38B8D}
- {CC7DE119-736D-4FC5-85DC-70A6770749F6} = {CF3DA5F1-F98D-49C9-A980-27E570B38B8D}
- {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {1C84408D-A0A7-4513-AD9A-1BA137ABE62C} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {E4300D97-1D53-4029-9435-483FB7EC9621} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {84AB9951-3DBF-43A4-8F5D-AEED1102CE88} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {1F621382-08FB-45EA-B94C-96A7FECB9489} = {CF3DA5F1-F98D-49C9-A980-27E570B38B8D}
- {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {A71557F2-D5FB-4772-9391-F7D18A3B6C44} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
- {05F3B23E-CF28-467B-AD3C-595EA4ED6B96} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
- {74ACD9D0-8B4C-42FA-A582-E93BF0075023} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
- {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
- {49D8D2CF-AF68-40FA-951F-018247C97443} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
- {732BF088-6AD7-4C4D-9A48-8074253596D4} = {B818988E-639C-4E6E-85C1-B231BCAD9DAB}
- {B818988E-639C-4E6E-85C1-B231BCAD9DAB} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{29638A67-E79F-44FE-AC05-DA499EBA929E} = {2F3E1026-5054-4E1F-899B-F1A7F70F9912}
- {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
- {790E94F2-5393-47DF-AC52-D9247F5B243A} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
- {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6} = {DD089B8B-DA73-492A-9010-F772D1C178DA}
- {AFEB799E-82C3-4D02-9D5C-766BB8DEF004} = {DD089B8B-DA73-492A-9010-F772D1C178DA}
- {F50336DA-42D1-4DD1-A107-67AFEB8A33EE} = {1B8D5897-902E-4632-8698-E89CAF3DDF54}
{A516931E-EDBB-4FC3-BB94-1BB824D5BC61} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{BBCE36D1-6767-4ED1-B3E8-84D2567A962A} = {A516931E-EDBB-4FC3-BB94-1BB824D5BC61}
{73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{B0946844-DE0E-4C59-9391-C0EB649DBF4E} = {18453B51-25EB-4317-A4B3-B10518252E92}
- {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16} = {EB3A7401-0DE3-476F-9E6F-057F1F4590FB}
- {EB3A7401-0DE3-476F-9E6F-057F1F4590FB} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F} = {EB3A7401-0DE3-476F-9E6F-057F1F4590FB}
- {7EB0CFB8-B668-4F3F-898D-80411095BC2F} = {EB3A7401-0DE3-476F-9E6F-057F1F4590FB}
{34BC9836-681D-43A5-BC39-E4FEE17FC528} = {08B41FFA-CEE3-46A7-B5C0-3EB65D37A16C}
{CBB515F3-A0EF-43B5-A907-FD4E652DD66E} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD}
{90CD37A9-C866-4D90-A3B1-8C87F53B845E} = {CBB515F3-A0EF-43B5-A907-FD4E652DD66E}
- {3F20899B-C5E1-485F-808B-ADB1877EB3FD} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE} = {3F20899B-C5E1-485F-808B-ADB1877EB3FD}
- {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1} = {18453B51-25EB-4317-A4B3-B10518252E92}
- {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD} = {58C59255-281C-4595-8732-808158F1DC6E}
{5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09}
{94A61AD7-2A2B-40DB-81F3-C59D596958A8} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09}
{4B598AF7-BD7D-4544-A274-2CDDD98F4167} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09}
@@ -908,44 +494,32 @@ Global
{060FD0BA-BD78-48E1-A8A7-4906A5AD5E39} = {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1}
{169A82A5-2DB3-40EA-801E-14C08D743DF7} = {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1}
{2CDF3E1C-267D-4198-B1C7-7E1F548FC120} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {47FBCB04-0C2D-453C-BE2F-7052CAC22524} = {EB3A7401-0DE3-476F-9E6F-057F1F4590FB}
{B32DB9B2-AD6C-48A5-8682-4373CB045185} = {C80C8231-D35C-4ACC-9ED6-9F3DB221535E}
{454652D5-E1BB-4D4B-9B21-9CEFC900C4FB} = {B32DB9B2-AD6C-48A5-8682-4373CB045185}
{31089E79-694B-4F45-97AF-86D34A7B231E} = {B32DB9B2-AD6C-48A5-8682-4373CB045185}
{6DDB9ECF-D454-4894-A262-A6BB3026E61E} = {B32DB9B2-AD6C-48A5-8682-4373CB045185}
{16B570BC-E293-4A19-B20E-5C97BAF8476B} = {B32DB9B2-AD6C-48A5-8682-4373CB045185}
- {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {34FAB60D-7259-47B9-B50E-B533C7C3CFEC} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
- {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {19329441-2A59-4BAC-A1BE-BBAB70C93CA0} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
- {37D16EAF-ACD8-4105-8BD3-B2745819CFF8} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
{3666CF13-1353-4620-9472-506670214A6A} = {C80C8231-D35C-4ACC-9ED6-9F3DB221535E}
{AA5ACF15-8647-4AC9-B9F5-73FCB92BE7E3} = {C80C8231-D35C-4ACC-9ED6-9F3DB221535E}
{DFFE6199-B5A7-4BA8-A5E1-77D0426C6468} = {B32DB9B2-AD6C-48A5-8682-4373CB045185}
- {9A6D67DE-51B1-456D-B25D-19E0356C8F60} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
- {44A03CF6-4EB6-434C-90D1-FF8142FE394E} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
- {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
- {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
- {5F80663C-B072-49DE-9A67-FD804BAD787E} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
- {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
- {59E7614A-3630-4C39-9C7F-9E12BC95D37E} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}
{2F3E1026-5054-4E1F-899B-F1A7F70F9912} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C} = {2F3E1026-5054-4E1F-899B-F1A7F70F9912}
- {BF934627-F531-44FB-BEC2-ECA801FF31E7} = {DD089B8B-DA73-492A-9010-F772D1C178DA}
{66E2E2CF-967F-4564-89E8-F46FA973C99B} = {986E5482-0482-448C-B9E4-EC67A9474B85}
- {9DF81143-2F39-4CFB-9DA3-902279010622} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
- {75E08B0E-A41A-425C-9DCA-155505CE41CD} = {9DF81143-2F39-4CFB-9DA3-902279010622}
- {BD120D97-4862-469E-B2CF-4109F7F21C20} = {9DF81143-2F39-4CFB-9DA3-902279010622}
- {8A3443F3-D40E-44B9-9805-B4CB7A3F022C} = {9DF81143-2F39-4CFB-9DA3-902279010622}
- {FA2B2B44-7E3E-444B-A157-7526B376E9CA} = {9DF81143-2F39-4CFB-9DA3-902279010622}
- {DF0CA7E2-F5DF-40ED-91B6-748767084FC7} = {9DF81143-2F39-4CFB-9DA3-902279010622}
- {DB20B168-CD90-41F2-BE08-3D8C6F142459} = {9DF81143-2F39-4CFB-9DA3-902279010622}
{0A04B1FD-06C0-4271-A910-A08C263DBC44} = {0354F050-3992-4DD4-B0EE-5FBA04AC72B6}
{9B80A705-2E31-4012-964A-83963DCDB384} = {0354F050-3992-4DD4-B0EE-5FBA04AC72B6}
{CD7DC0D1-FFDC-417A-89BE-7F32408F583E} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{70593549-8B26-4D63-9857-6BA8BB3E31DB} = {CD7DC0D1-FFDC-417A-89BE-7F32408F583E}
{E7137FB0-1988-4562-AD8D-D0D9D2EE85F6} = {CD7DC0D1-FFDC-417A-89BE-7F32408F583E}
+ {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
+ {6F14B066-DF7B-2409-59D8-CCCA90A4974C} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
+ {C55015F0-E9DF-4BF9-8131-D7539E938220} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
+ {E0B22AB7-7CB5-6D17-562C-4A989DC61F8A} = {C55015F0-E9DF-4BF9-8131-D7539E938220}
+ {16C3FBDE-A832-E3CD-5FBF-F51744D1F79B} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
+ {765392DE-8560-B464-62DD-6890720FF5D5} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
+ {099D5DCE-CCF7-16FE-6EDC-A64B694F50BE} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
+ {08B69CC4-B5F0-44E8-FA7A-6BF6F00CA40A} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
+ {6AF53651-99F0-1DE0-D37B-4FF6B0348DBB} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
+ {9D8FB664-88B4-10BE-58A2-D9A1644AD2E4} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D4B5CEAA-7D70-4FCB-A68E-B03FBE5E0E5E}
diff --git a/build/_build.csproj b/build/_build.csproj
index 465dc8f654..0e27141ab1 100644
--- a/build/_build.csproj
+++ b/build/_build.csproj
@@ -3,7 +3,7 @@
Exe
net9.0
-
+
CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006
..
..
@@ -24,7 +24,7 @@
-
+
diff --git a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj
index ce9d79c767..2f3bf9e382 100644
--- a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj
+++ b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj
@@ -1,77 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/src/apps/Elsa.Server.Web/Extensions/MultitenantConnectionStringServiceProviderExtensions.cs b/src/apps/Elsa.Server.Web/Extensions/MultitenantConnectionStringServiceProviderExtensions.cs
index 0cc7a9c415..9c5fabbc8b 100644
--- a/src/apps/Elsa.Server.Web/Extensions/MultitenantConnectionStringServiceProviderExtensions.cs
+++ b/src/apps/Elsa.Server.Web/Extensions/MultitenantConnectionStringServiceProviderExtensions.cs
@@ -1,5 +1,5 @@
using Elsa.Common.Multitenancy;
-using Elsa.EntityFrameworkCore.Extensions;
+using Elsa.Persistence.EFCore.Extensions;
namespace Elsa.Server.Web.Extensions;
diff --git a/src/apps/Elsa.Server.Web/Program.cs b/src/apps/Elsa.Server.Web/Program.cs
index 28fb61c494..8c64a538bc 100644
--- a/src/apps/Elsa.Server.Web/Program.cs
+++ b/src/apps/Elsa.Server.Web/Program.cs
@@ -5,28 +5,26 @@
using Elsa.Common.Codecs;
using Elsa.Common.DistributedHosting.DistributedLocks;
using Elsa.Common.RecurringTasks;
-using Elsa.Dapper.Extensions;
-using Elsa.Dapper.Services;
using Elsa.DropIns.Extensions;
-using Elsa.EntityFrameworkCore.Extensions;
-using Elsa.EntityFrameworkCore.Modules.Alterations;
-using Elsa.EntityFrameworkCore.Modules.Identity;
-using Elsa.EntityFrameworkCore.Modules.Management;
-using Elsa.EntityFrameworkCore.Modules.Runtime;
-using Elsa.EntityFrameworkCore.Modules.Tenants;
using Elsa.Expressions.Helpers;
using Elsa.Extensions;
using Elsa.Features.Services;
using Elsa.Identity.Multitenancy;
-using Elsa.Kafka;
-using Elsa.MassTransit.Extensions;
-using Elsa.MongoDb.Extensions;
-using Elsa.MongoDb.Modules.Alterations;
-using Elsa.MongoDb.Modules.Identity;
-using Elsa.MongoDb.Modules.Management;
-using Elsa.MongoDb.Modules.Runtime;
-using Elsa.MongoDb.Modules.Tenants;
using Elsa.OpenTelemetry.Middleware;
+using Elsa.Persistence.Dapper.Extensions;
+using Elsa.Persistence.Dapper.Services;
+using Elsa.Persistence.EFCore.Extensions;
+using Elsa.Persistence.EFCore.Modules.Alterations;
+using Elsa.Persistence.EFCore.Modules.Identity;
+using Elsa.Persistence.EFCore.Modules.Management;
+using Elsa.Persistence.EFCore.Modules.Runtime;
+using Elsa.Persistence.EFCore.Modules.Tenants;
+using Elsa.Persistence.MongoDb.Extensions;
+using Elsa.Persistence.MongoDb.Modules.Alterations;
+using Elsa.Persistence.MongoDb.Modules.Identity;
+using Elsa.Persistence.MongoDb.Modules.Management;
+using Elsa.Persistence.MongoDb.Modules.Runtime;
+using Elsa.Persistence.MongoDb.Modules.Tenants;
using Elsa.Retention.Extensions;
using Elsa.Retention.Models;
using Elsa.Secrets.Extensions;
@@ -35,6 +33,13 @@
using Elsa.Server.Web;
using Elsa.Server.Web.Extensions;
using Elsa.Server.Web.Filters;
+using Elsa.ServiceBus.Kafka;
+using Elsa.ServiceBus.MassTransit.Extensions;
+using Elsa.Sql.Extensions;
+using Elsa.Sql.MySql;
+using Elsa.Sql.Sqlite;
+using Elsa.Sql.PostgreSql;
+using Elsa.Sql.SqlServer;
using Elsa.Tenants.AspNetCore;
using Elsa.Tenants.Extensions;
using Elsa.Workflows;
@@ -328,7 +333,7 @@
if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer)
{
//ef.UseSqlServer(sqlServerConnectionString, new ElsaDbContextOptions);
- var migrationsAssembly = typeof(Elsa.EntityFrameworkCore.SqlServer.IdentityDbContextFactory).Assembly;
+ var migrationsAssembly = typeof(Elsa.Persistence.EFCore.SqlServer.IdentityDbContextFactory).Assembly;
var connectionString = sqlServerConnectionString;
ef.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlServer(migrationsAssembly, connectionString, null, configure => configure.CommandTimeout(60000));
}
@@ -424,17 +429,17 @@
options.AppendScript("string Greet(string name) => $\"Hello {name}!\";");
options.AppendScript("string SayHelloWorld() => Greet(\"World\");");
})
- .UseJavaScript(options =>
- {
- options.AllowClrAccess = true;
- options.DisableWrappers = disableVariableWrappers;
- options.DisableVariableCopying = disableVariableCopying;
- options.ConfigureEngine(engine =>
- {
- engine.Execute("function greet(name) { return `Hello ${name}!`; }");
- engine.Execute("function sayHelloWorld() { return greet('World'); }");
- });
- })
+ //.UseJavaScript(options =>
+ //{
+ // options.AllowClrAccess = true;
+ // options.DisableWrappers = disableVariableWrappers;
+ // options.DisableVariableCopying = disableVariableCopying;
+ // options.ConfigureEngine(engine =>
+ // {
+ // engine.Execute("function greet(name) { return `Hello ${name}!`; }");
+ // engine.Execute("function sayHelloWorld() { return greet('World'); }");
+ // });
+ //})
.UsePython(python =>
{
python.PythonOptions += options =>
@@ -458,6 +463,16 @@
if (useCaching)
http.UseCache();
})
+ .UseSql(options =>
+ {
+ options.Clients = client =>
+ {
+ client.Register("MySql");
+ client.Register("PostgreSql");
+ client.Register("Sqlite");
+ client.Register("Sql Server");
+ };
+ })
.UseEmail(email => email.ConfigureOptions = options => configuration.GetSection("Smtp").Bind(options))
.UseAlterations(alterations =>
{
diff --git a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj
index 3ea5601f3a..0a49cfc263 100644
--- a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj
+++ b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj
@@ -7,48 +7,49 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/apps/Elsa.ServerAndStudio.Web/Program.cs b/src/apps/Elsa.ServerAndStudio.Web/Program.cs
index 01b787cad1..be6a4cc96a 100644
--- a/src/apps/Elsa.ServerAndStudio.Web/Program.cs
+++ b/src/apps/Elsa.ServerAndStudio.Web/Program.cs
@@ -1,19 +1,18 @@
using Elsa.Agents;
-using Elsa.EntityFrameworkCore.Extensions;
-using Elsa.EntityFrameworkCore.Modules.Management;
-using Elsa.EntityFrameworkCore.Modules.Runtime;
-using Elsa.MassTransit.Options;
+using Elsa.Expressions.JavaScript.Libraries.Extensions;
using Elsa.Extensions;
-using Elsa.JavaScript.Libraries.Extensions;
-using Elsa.ServerAndStudio.Web.Extensions;
-using Elsa.MassTransit.Extensions;
+using Elsa.Persistence.EFCore.Extensions;
+using Elsa.Persistence.EFCore.Modules.Management;
+using Elsa.Persistence.EFCore.Modules.Runtime;
using Elsa.ServerAndStudio.Web.Enums;
+using Elsa.ServerAndStudio.Web.Extensions;
+using Elsa.ServiceBus.MassTransit.Extensions;
+using Elsa.ServiceBus.MassTransit.Options;
using Medallion.Threading.FileSystem;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.Sqlite;
-using WebhooksCore.Options;
-using Elsa.Connections.Middleware;
using Proto.Persistence.Sqlite;
+using WebhooksCore.Options;
const bool useMassTransit = true;
const bool useProtoActor = true;
diff --git a/src/common/Elsa.DropIns.Core/Elsa.DropIns.Core.csproj b/src/common/Elsa.DropIns.Core/Elsa.DropIns.Core.csproj
deleted file mode 100644
index d684d14cc6..0000000000
--- a/src/common/Elsa.DropIns.Core/Elsa.DropIns.Core.csproj
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
- Reference this package when developing drop-ins for Elsa Workflows.
-
- elsa drop-ins common
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/common/Elsa.DropIns.Core/IDropIn.cs b/src/common/Elsa.DropIns.Core/IDropIn.cs
deleted file mode 100644
index ef2ca2d47b..0000000000
--- a/src/common/Elsa.DropIns.Core/IDropIn.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Elsa.Features.Services;
-
-namespace Elsa.DropIns.Core;
-
-///
-/// Implement this in your drop-in module to configure elsa and register services.
-///
-public interface IDropIn
-{
- ///
- /// Called when the drop-in is installed.
- ///
- /// The Elsa module.
- void Install(IModule module);
-
- ///
- /// Called when the drop-in is being configured.
- ///
- ValueTask ConfigureAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken);
-
- ///
- /// Unconfigure the drop-in when it's deleted.
- ///
- void Unconfigure(IServiceProvider serviceProvider);
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Catalogs/AssembliesDropInCatalog.cs b/src/common/Elsa.DropIns/Catalogs/AssembliesDropInCatalog.cs
deleted file mode 100644
index 6372ddd339..0000000000
--- a/src/common/Elsa.DropIns/Catalogs/AssembliesDropInCatalog.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Reflection;
-using Elsa.DropIns.Contracts;
-using Elsa.DropIns.Models;
-
-namespace Elsa.DropIns.Catalogs;
-
-public class AssembliesDropInCatalog : IDropInCatalog
-{
- private readonly IEnumerable _assemblies;
-
- public AssembliesDropInCatalog(IEnumerable assemblies)
- {
- _assemblies = assemblies;
- }
-
- public IEnumerable List()
- {
- var allDropIns = new List();
-
- foreach (var assembly in _assemblies)
- {
- var assemblyCatalog = new AssemblyDropInCatalog(assembly);
- var dropIns = assemblyCatalog.List();
- allDropIns.AddRange(dropIns);
- }
-
- return allDropIns;
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Catalogs/AssemblyDropInCatalog.cs b/src/common/Elsa.DropIns/Catalogs/AssemblyDropInCatalog.cs
deleted file mode 100644
index 791757a3b8..0000000000
--- a/src/common/Elsa.DropIns/Catalogs/AssemblyDropInCatalog.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Reflection;
-using Elsa.DropIns.Contracts;
-using Elsa.DropIns.Core;
-using Elsa.DropIns.Helpers;
-using Elsa.DropIns.Models;
-
-namespace Elsa.DropIns.Catalogs;
-
-public class AssemblyDropInCatalog : IDropInCatalog
-{
- private readonly Assembly _assembly;
-
- public AssemblyDropInCatalog(Assembly assembly)
- {
- _assembly = assembly;
- }
-
- public IEnumerable List()
- {
- var dropIns = TypeFinder.FindImplementationsOf(_assembly)
- .Select(type => new DropInDescriptor(type))
- .ToList();
-
- return dropIns;
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Catalogs/DirectoryDropInCatalog.cs b/src/common/Elsa.DropIns/Catalogs/DirectoryDropInCatalog.cs
deleted file mode 100644
index 8a05e24608..0000000000
--- a/src/common/Elsa.DropIns/Catalogs/DirectoryDropInCatalog.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System.Reflection;
-using Elsa.DropIns.Contracts;
-using Elsa.DropIns.Helpers;
-using Elsa.DropIns.Models;
-
-namespace Elsa.DropIns.Catalogs;
-
-///
-/// A catalog that lists drop-ins from a directory.
-///
-public class DirectoryDropInCatalog : IDropInCatalog
-{
- private readonly string _directoryPath;
-
- ///
- /// Initializes a new instance of the class.
- ///
- /// The directory path to list drop-ins from.
- public DirectoryDropInCatalog(string directoryPath)
- {
- _directoryPath = directoryPath;
- }
-
- ///
- public IEnumerable List()
- {
- if (!Directory.Exists(_directoryPath))
- return Enumerable.Empty();
-
- var assemblies = ListAssemblies();
- var packages = ListPackages();
- var assembliesCatalog = new AssembliesDropInCatalog(assemblies);
- var packagesCatalog = new NuGetPackagesCatalog(packages);
-
- return assembliesCatalog.List().Concat(packagesCatalog.List());
- }
-
- private IEnumerable ListAssemblies()
- {
- var assemblyPaths = Directory.GetFiles(_directoryPath, "*.dll", SearchOption.AllDirectories);
-
- foreach (var assemblyPath in assemblyPaths)
- {
- var assembly = LoadDropInAssembly(assemblyPath);
-
- if (assembly == null)
- continue;
-
- yield return assembly;
- }
- }
-
- private string[] ListPackages()
- {
- return Directory.GetFiles(_directoryPath, "*.nupkg", SearchOption.AllDirectories);
- }
-
- private static Assembly? LoadDropInAssembly(string path)
- {
- return !File.Exists(path) ? null : AssemblyLoader.LoadPath(path);
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Catalogs/NuGetPackageCatalog.cs b/src/common/Elsa.DropIns/Catalogs/NuGetPackageCatalog.cs
deleted file mode 100644
index 9f8dbcbb16..0000000000
--- a/src/common/Elsa.DropIns/Catalogs/NuGetPackageCatalog.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Elsa.DropIns.Contexts;
-using Elsa.DropIns.Contracts;
-using Elsa.DropIns.Models;
-
-namespace Elsa.DropIns.Catalogs;
-
-public class NuGetPackageCatalog : IDropInCatalog
-{
- private readonly string _packagePath;
-
- public NuGetPackageCatalog(string packagePath)
- {
- _packagePath = packagePath;
- }
-
- public IEnumerable List()
- {
- var assemblyLoadContext = new NuGetPackageAssemblyLoadContext(_packagePath);
- var assemblies = assemblyLoadContext.Assemblies;
- var assembliesCatalog = new AssembliesDropInCatalog(assemblies);
-
- return assembliesCatalog.List();
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Catalogs/NuGetPackagesCatalog.cs b/src/common/Elsa.DropIns/Catalogs/NuGetPackagesCatalog.cs
deleted file mode 100644
index a879325ee9..0000000000
--- a/src/common/Elsa.DropIns/Catalogs/NuGetPackagesCatalog.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Elsa.DropIns.Contracts;
-using Elsa.DropIns.Models;
-
-namespace Elsa.DropIns.Catalogs;
-
-public class NuGetPackagesCatalog : IDropInCatalog
-{
- private readonly IEnumerable _packagePaths;
-
- public NuGetPackagesCatalog(IEnumerable packagePaths)
- {
- _packagePaths = packagePaths;
- }
-
- public IEnumerable List()
- {
- return _packagePaths.Select(packagePath => new NuGetPackageCatalog(packagePath)).SelectMany(catalog => catalog.List());
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Contexts/DirectoryAssemblyLoadContext.cs b/src/common/Elsa.DropIns/Contexts/DirectoryAssemblyLoadContext.cs
deleted file mode 100644
index 4a33f99db7..0000000000
--- a/src/common/Elsa.DropIns/Contexts/DirectoryAssemblyLoadContext.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Reflection;
-using System.Runtime.Loader;
-
-namespace Elsa.DropIns.Contexts;
-
-internal sealed class DirectoryAssemblyLoadContext : AssemblyLoadContext
-{
- private readonly AssemblyDependencyResolver _resolver;
-
- public DirectoryAssemblyLoadContext(string dropInPath)
- {
- _resolver = new AssemblyDependencyResolver(dropInPath);
- }
-
- protected override Assembly? Load(AssemblyName assemblyName)
- {
- var assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName);
- return assemblyPath != null ? LoadFromAssemblyPath(assemblyPath) : null;
- }
-
- protected override IntPtr LoadUnmanagedDll(string unmanagedDllName)
- {
- var libraryPath = _resolver.ResolveUnmanagedDllToPath(unmanagedDllName);
- return libraryPath != null ? LoadUnmanagedDllFromPath(libraryPath) : IntPtr.Zero;
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Contexts/NuGetPackageAssemblyLoadContext.cs b/src/common/Elsa.DropIns/Contexts/NuGetPackageAssemblyLoadContext.cs
deleted file mode 100644
index 8c2d1264e1..0000000000
--- a/src/common/Elsa.DropIns/Contexts/NuGetPackageAssemblyLoadContext.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System.Reflection;
-using System.Runtime.Loader;
-using NuGet.Packaging;
-
-namespace Elsa.DropIns.Contexts;
-
-internal sealed class NuGetPackageAssemblyLoadContext : AssemblyLoadContext
-{
- private readonly Dictionary _loadedAssemblies = new Dictionary();
-
- public NuGetPackageAssemblyLoadContext(string nugetPackagePath)
- {
- var packageReader = new PackageArchiveReader(nugetPackagePath);
-
- foreach (var dllFile in packageReader.GetFiles().Where(fileName => fileName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)))
- {
- using var dllStream = packageReader.GetStream(dllFile);
- using var memoryStream = new MemoryStream();
- dllStream.CopyTo(memoryStream);
- memoryStream.Seek(0, SeekOrigin.Begin);
- var assembly = LoadFromStream(memoryStream);
-
- _loadedAssemblies[assembly.FullName!] = assembly;
- }
- //Closes the package reader, closing the .nupkg file
- packageReader.Dispose();
- }
-
- protected override Assembly? Load(AssemblyName assemblyName)
- {
- return _loadedAssemblies.GetValueOrDefault(assemblyName.FullName);
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Contracts/IDropInCatalog.cs b/src/common/Elsa.DropIns/Contracts/IDropInCatalog.cs
deleted file mode 100644
index 12f88f533a..0000000000
--- a/src/common/Elsa.DropIns/Contracts/IDropInCatalog.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using Elsa.DropIns.Models;
-
-namespace Elsa.DropIns.Contracts;
-
-public interface IDropInCatalog
-{
- IEnumerable List();
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Contracts/IDropInInstaller.cs b/src/common/Elsa.DropIns/Contracts/IDropInInstaller.cs
deleted file mode 100644
index a1d7df12d9..0000000000
--- a/src/common/Elsa.DropIns/Contracts/IDropInInstaller.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using Elsa.Features.Services;
-
-namespace Elsa.DropIns.Contracts;
-
-public interface IDropInInstaller
-{
- void Install(IModule module);
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Elsa.DropIns.csproj b/src/common/Elsa.DropIns/Elsa.DropIns.csproj
deleted file mode 100644
index ea1b7958c7..0000000000
--- a/src/common/Elsa.DropIns/Elsa.DropIns.csproj
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
- Provides drop-in features for Elsa workflows.
-
- elsa drop-ins common
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Extensions/ModuleExtensions.cs b/src/common/Elsa.DropIns/Extensions/ModuleExtensions.cs
deleted file mode 100644
index 9ef671b843..0000000000
--- a/src/common/Elsa.DropIns/Extensions/ModuleExtensions.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Elsa.DropIns.Contracts;
-using Elsa.DropIns.Options;
-using Elsa.Features.Services;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.DropIns.Extensions;
-
-public static class ModuleExtensions
-{
- public static IModule InstallDropIns(this IModule elsa, Action? configureOptions = default)
- {
- // Install drop-ins.
- var serviceProvider = new ServiceCollection().AddDropInInstaller(configureOptions).BuildServiceProvider();
- serviceProvider.GetRequiredService().Install(elsa);
-
- // Register drop-in monitor.
- elsa.Services.AddDropInMonitor(configureOptions);
-
- return elsa;
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Extensions/ServiceCollectionExtensions.cs b/src/common/Elsa.DropIns/Extensions/ServiceCollectionExtensions.cs
deleted file mode 100644
index 5ec1e8917c..0000000000
--- a/src/common/Elsa.DropIns/Extensions/ServiceCollectionExtensions.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using Elsa.DropIns.Contracts;
-using Elsa.DropIns.HostedServices;
-using Elsa.DropIns.Options;
-using Elsa.DropIns.Services;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.DropIns.Extensions;
-
-internal static class ServiceCollectionExtensions
-{
- public static IServiceCollection AddDropInMonitor(this IServiceCollection services, Action? configureOptions = default)
- {
- services.AddDropInCore(configureOptions);
- services.AddHostedService();
-
- return services;
- }
-
- public static IServiceCollection AddDropInInstaller(this IServiceCollection services, Action? configureOptions = default)
- {
- services.AddDropInCore(configureOptions);
- services.AddSingleton();
-
- return services;
- }
-
- public static IServiceCollection AddDropInCore(this IServiceCollection services, Action? configureOptions = default)
- {
- services.Configure(configureOptions ?? (_ => { }));
-
- return services;
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Helpers/AssemblyLoader.cs b/src/common/Elsa.DropIns/Helpers/AssemblyLoader.cs
deleted file mode 100644
index 64b7799707..0000000000
--- a/src/common/Elsa.DropIns/Helpers/AssemblyLoader.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System.Reflection;
-using System.Runtime.Loader;
-using Elsa.DropIns.Contexts;
-
-namespace Elsa.DropIns.Helpers;
-
-public static class AssemblyLoader
-{
- public static Assembly LoadPath(string path)
- {
- var loadContext = new DirectoryAssemblyLoadContext(path);
- var assemblyName = AssemblyLoadContext.GetAssemblyName(path);
-
- // Copy drop in to memory stream to avoid file locking
- using var fileStream = File.OpenRead(path);
- using var memoryStream = new MemoryStream();
- fileStream.CopyTo(memoryStream);
- memoryStream.Seek(0, SeekOrigin.Begin);
- fileStream.Close();
- var assembly = loadContext.LoadFromStream(memoryStream);
-
- return assembly;
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Helpers/TypeFinder.cs b/src/common/Elsa.DropIns/Helpers/TypeFinder.cs
deleted file mode 100644
index b8b5655ac5..0000000000
--- a/src/common/Elsa.DropIns/Helpers/TypeFinder.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System.Reflection;
-
-namespace Elsa.DropIns.Helpers;
-
-public static class TypeFinder
-{
- public static IEnumerable FindImplementationsOf(IEnumerable assemblies)
- {
- // Find all types that implement IDropInStartup:
- return assemblies.SelectMany(FindImplementationsOf);
- }
-
- public static IEnumerable FindImplementationsOf(Assembly assembly)
- {
- // Find all types that implement T:
- return assembly.GetExportedTypes().Where(t => typeof(T).IsAssignableFrom(t) && t is { IsAbstract: false, IsInterface: false });
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/HostedServices/DropInDirectoryMonitorHostedService.cs b/src/common/Elsa.DropIns/HostedServices/DropInDirectoryMonitorHostedService.cs
deleted file mode 100644
index dda2fec587..0000000000
--- a/src/common/Elsa.DropIns/HostedServices/DropInDirectoryMonitorHostedService.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-using Elsa.DropIns.Catalogs;
-using Elsa.DropIns.Core;
-using Elsa.DropIns.Options;
-using Microsoft.Extensions.Hosting;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Options;
-using ThrottleDebounce;
-
-namespace Elsa.DropIns.HostedServices;
-
-///
-/// Monitors the drop-in directory for changes and loads any new drop-ins.
-///
-public class DropInDirectoryMonitorHostedService : BackgroundService
-{
- private readonly IOptions _options;
- private readonly ILogger _logger;
- private readonly IServiceProvider _serviceProvider;
- private readonly RateLimitedFunc _debouncedLoader;
- private readonly RateLimitedFunc _debouncedUnloader;
- private readonly FileSystemWatcher _watcher;
-
- private readonly Dictionary> _installedDropIns;
-
-
- ///
- public DropInDirectoryMonitorHostedService(
- IOptions options,
- IServiceProvider serviceProvider,
- ILogger logger
- )
- {
- _options = options;
- _logger = logger;
- _serviceProvider = serviceProvider;
- _debouncedLoader = Debouncer.Debounce(LoadDropInAssemblyAsync, TimeSpan.FromSeconds(2));
- _debouncedUnloader = Debouncer.Debounce(UnloadDropInAssemblyAsync, TimeSpan.FromSeconds(2));
-
- _installedDropIns = [];
-
- var rootDirectoryPath = _options.Value.DropInRootDirectory;
-
- if (!Directory.Exists(rootDirectoryPath))
- Directory.CreateDirectory(rootDirectoryPath);
-
- _watcher = new FileSystemWatcher(rootDirectoryPath)
- {
- EnableRaisingEvents = true,
- IncludeSubdirectories = true,
- NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName
- };
- }
-
- ///
- protected override async Task ExecuteAsync(CancellationToken stoppingToken)
- {
- await LoadDropInAssemblyAsync(_options.Value.DropInRootDirectory);
-
- _watcher.Changed += OnChanged;
- _watcher.Deleted += OnDeleted;
- }
-
- private async void OnChanged(object sender, FileSystemEventArgs e)
- {
- var task = _debouncedLoader.Invoke(e.FullPath);
-
- if (task == null)
- return;
-
- await task;
- }
-
- private async void OnDeleted(object sender, FileSystemEventArgs e)
- {
- var task = _debouncedUnloader.Invoke(e.FullPath);
-
- if (task == null)
- return;
-
- await task;
- }
-
- private async Task LoadDropInAssemblyAsync(string fullPath)
- {
- var directory = Path.GetDirectoryName(fullPath)!;
- var directoryCatalog = new DirectoryDropInCatalog(directory);
- var dropInDescriptors = directoryCatalog.List();
-
- foreach (var dropInDescriptor in dropInDescriptors)
- {
- var dropIn = (IDropIn)Activator.CreateInstance(dropInDescriptor.Type)!;
- if (_installedDropIns.TryGetValue(fullPath, out var installedDropIns))
- {
- installedDropIns.Add(dropIn);
- }
- else
- {
- _installedDropIns[fullPath] = [dropIn];
- }
- await dropIn.ConfigureAsync(_serviceProvider, CancellationToken.None);
- }
- }
-
- private Task UnloadDropInAssemblyAsync(string fullPath)
- {
- if (_installedDropIns.TryGetValue(fullPath, out var installedDropIn))
- {
- installedDropIn.ForEach(dropIn =>
- {
- try
- {
- dropIn.Unconfigure(_serviceProvider);
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Error unconfiguring drop-in {DropIn}", dropIn.GetType().Name);
- }
- });
- _installedDropIns.Remove(fullPath);
- }
- return Task.CompletedTask;
- }
-
- ///
- public override async Task StopAsync(CancellationToken cancellationToken)
- {
- _watcher.EnableRaisingEvents = false;
- _watcher.Changed -= OnChanged;
- _watcher.Deleted -= OnDeleted;
-
- await base.StopAsync(cancellationToken);
- }
-
- ///
- public override void Dispose()
- {
- _watcher.Changed -= OnChanged;
- _watcher.Deleted -= OnDeleted;
- _watcher.Dispose();
-
- base.Dispose();
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Models/DropInDescriptor.cs b/src/common/Elsa.DropIns/Models/DropInDescriptor.cs
deleted file mode 100644
index 8b036263ce..0000000000
--- a/src/common/Elsa.DropIns/Models/DropInDescriptor.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.Diagnostics.CodeAnalysis;
-
-namespace Elsa.DropIns.Models;
-
-public class DropInDescriptor([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] Type type)
-{
- ///
- /// Gets or sets the type of the drop-in.
- /// The DynamicallyAccessedMembers attribute ensures that the IL2072 warning is suppressed.
- ///
- [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
- public Type Type { get; set; } = type;
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Options/DropInOptions.cs b/src/common/Elsa.DropIns/Options/DropInOptions.cs
deleted file mode 100644
index e2b3987a70..0000000000
--- a/src/common/Elsa.DropIns/Options/DropInOptions.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Elsa.DropIns.Options;
-
-public class DropInOptions
-{
- public string DropInRootDirectory { get; set; } = default!;
-}
\ No newline at end of file
diff --git a/src/common/Elsa.DropIns/Services/DropInInstaller.cs b/src/common/Elsa.DropIns/Services/DropInInstaller.cs
deleted file mode 100644
index 3706e7c417..0000000000
--- a/src/common/Elsa.DropIns/Services/DropInInstaller.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using Elsa.DropIns.Catalogs;
-using Elsa.DropIns.Contracts;
-using Elsa.DropIns.Core;
-using Elsa.DropIns.Options;
-using Elsa.Features.Services;
-using Microsoft.Extensions.Options;
-
-namespace Elsa.DropIns.Services;
-
-///
-public class DropInInstaller : IDropInInstaller
-{
- private readonly IOptions _options;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public DropInInstaller(IOptions options)
- {
- _options = options;
- }
-
- ///
- public void Install(IModule module)
- {
- var dropInRootDirectory = _options.Value.DropInRootDirectory;
- var directoryCatalog = new DirectoryDropInCatalog(dropInRootDirectory);
- var dropInDescriptors = directoryCatalog.List();
-
- foreach (var dropInDescriptor in dropInDescriptors)
- {
- var dropIn = (IDropIn)Activator.CreateInstance(dropInDescriptor.Type)!;
- dropIn.Install(module);
- }
- }
-}
\ No newline at end of file
diff --git a/src/common/Elsa.Testing.Shared.Component/Elsa.Testing.Shared.Component.csproj b/src/common/Elsa.Testing.Shared.Component/Elsa.Testing.Shared.Component.csproj
index 3e0b5a4759..3d81bda8f2 100644
--- a/src/common/Elsa.Testing.Shared.Component/Elsa.Testing.Shared.Component.csproj
+++ b/src/common/Elsa.Testing.Shared.Component/Elsa.Testing.Shared.Component.csproj
@@ -1,4 +1,4 @@
-
+
@@ -9,19 +9,19 @@
+
+
+
+
+
-
-
-
-
-
diff --git a/src/common/Elsa.Testing.Shared.Integration/Elsa.Testing.Shared.Integration.csproj b/src/common/Elsa.Testing.Shared.Integration/Elsa.Testing.Shared.Integration.csproj
index 06b02b1961..a7a7371946 100644
--- a/src/common/Elsa.Testing.Shared.Integration/Elsa.Testing.Shared.Integration.csproj
+++ b/src/common/Elsa.Testing.Shared.Integration/Elsa.Testing.Shared.Integration.csproj
@@ -4,22 +4,22 @@
Provides common utilities that are helpful when writing integration tests against Elsa Workflows functionality.
- elsa, integration testing
+ elsa integration testing
Elsa.Testing.Shared
-
+
+
+
+
+
+
-
-
-
-
-
diff --git a/src/common/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj b/src/common/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj
index ceabd44724..3e79f6559c 100644
--- a/src/common/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj
+++ b/src/common/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj
@@ -8,17 +8,17 @@
+
+
+
+
+
-
-
-
-
-
diff --git a/src/modules/Elsa.Alterations.Core/Abstractions/AlterationBase.cs b/src/modules/Elsa.Alterations.Core/Abstractions/AlterationBase.cs
deleted file mode 100644
index e7f0f24791..0000000000
--- a/src/modules/Elsa.Alterations.Core/Abstractions/AlterationBase.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-
-namespace Elsa.Alterations.Core.Abstractions;
-
-///
-/// A base class for alterations.
-///
-public abstract class AlterationBase : IAlteration
-{
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Abstractions/AlterationHandlerBase.cs b/src/modules/Elsa.Alterations.Core/Abstractions/AlterationHandlerBase.cs
deleted file mode 100644
index 0652234299..0000000000
--- a/src/modules/Elsa.Alterations.Core/Abstractions/AlterationHandlerBase.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using Elsa.Alterations.Core.Contexts;
-using Elsa.Alterations.Core.Contracts;
-
-namespace Elsa.Alterations.Core.Abstractions;
-
-///
-/// A base class for alterations.
-///
-public abstract class AlterationHandlerBase : IAlterationHandler
-{
- ///
- public abstract bool CanHandle(IAlteration alteration);
-
- ///
- public abstract ValueTask HandleAsync(AlterationContext context);
-}
-
-///
-public abstract class AlterationHandlerBase : AlterationHandlerBase where T : IAlteration
-{
- ///
- public override bool CanHandle(IAlteration alteration) => alteration is T;
-
- ///
- public override ValueTask HandleAsync(AlterationContext context) => HandleAsync(context, (T)context.Alteration);
-
- ///
- /// Applies the alteration to the specified context.
- ///
- /// A context object that contains information for the alteration and provides a way to alter the workflow instance and control the alteration process.
- /// A strongly typed alteration.
- protected abstract ValueTask HandleAsync(AlterationContext context, T alteration);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contexts/AlterationHandlerContext.cs b/src/modules/Elsa.Alterations.Core/Contexts/AlterationHandlerContext.cs
deleted file mode 100644
index f583f6cd33..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contexts/AlterationHandlerContext.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Models;
-using Elsa.Workflows;
-using Elsa.Workflows.Activities;
-using Microsoft.Extensions.Logging;
-
-namespace Elsa.Alterations.Core.Contexts;
-
-///
-/// Provides contextual information about an alteration.
-///
-public class AlterationContext
-{
- ///
- /// Initializes a new instance of the class.
- ///
- public AlterationContext(
- IAlteration alteration,
- WorkflowExecutionContext workflowExecutionContext,
- AlterationLog log,
- CancellationToken cancellationToken)
- {
- Alteration = alteration;
- WorkflowExecutionContext = workflowExecutionContext;
- AlterationLog = log;
- CancellationToken = cancellationToken;
- }
-
- ///
- /// The alteration being handled.
- ///
- public IAlteration Alteration { get; }
-
- ///
- /// A workflow execution context of the workflow instance being altered. This offers maximum flexibility for altering the workflow state.
- ///
- public WorkflowExecutionContext WorkflowExecutionContext { get; set; }
-
- ///
- /// The workflow of the workflow instance being altered.
- ///
- public Workflow Workflow => WorkflowExecutionContext.Workflow;
-
- ///
- /// The cancellation token.
- ///
- public CancellationToken CancellationToken { get; }
-
- ///
- /// The service provider.
- ///
- public IServiceProvider ServiceProvider => WorkflowExecutionContext.ServiceProvider;
-
- ///
- /// The alteration log.
- ///
- public AlterationLog AlterationLog { get; }
-
- ///
- /// A flag indicating whether the alteration has succeeded.
- ///
- public bool HasSucceeded { get; private set; }
-
- ///
- /// A flag indicating whether the alteration has failed.
- ///
- public bool HasFailed { get; private set; }
-
- ///
- /// An optional action to be executed when the alteration is committed. Set this to perform permanent side effects such as deleting records form the database.
- ///
- public Func? CommitAction { get; set; }
-
- ///
- /// Logs a message.
- ///
- /// The event name to log.
- /// The message to log.
- /// The log level.
- public void Log(string eventName, string message, LogLevel logLevel = LogLevel.Information)
- {
- AlterationLog.Add(message, logLevel, eventName);
- }
-
- ///
- /// Marks the alteration as succeeded.
- ///
- public void Succeed()
- {
- Succeed($"{Alteration.GetType().Name} succeeded");
- }
-
- ///
- /// Marks the alteration as succeeded.
- ///
- public void Succeed(Func commitAction)
- {
- Succeed();
- CommitAction = commitAction;
- }
-
- ///
- /// Marks the alteration as succeeded.
- ///
- public void Succeed(string message)
- {
- HasSucceeded = true;
- Log($"Alteration {Alteration.GetType().Name} succeeded", message, LogLevel.Information);
- }
-
- ///
- /// Marks the alteration as succeeded.
- ///
- public void Succeed(string message, Func commitAction)
- {
- Succeed(message);
- CommitAction = commitAction;
- }
-
- ///
- /// Marks the alteration as failed.
- ///
- /// An optional message.
- public void Fail(string? message = default)
- {
- HasFailed = true;
- Log($"Alteration {Alteration.GetType().Name} failed", message ?? $"{Alteration.GetType().Name} failed", LogLevel.Error);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlteration.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlteration.cs
deleted file mode 100644
index 33150b9093..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlteration.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Represents an alteration.
-///
-public interface IAlteration
-{
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationHandler.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationHandler.cs
deleted file mode 100644
index e8aee6e016..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationHandler.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Elsa.Alterations.Core.Contexts;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Represents a change to a given type T.
-///
-public interface IAlterationHandler
-{
- ///
- /// Returns true if the alteration is supported by this handler; otherwise, false.
- ///
- ///
- bool CanHandle(IAlteration alteration);
-
- ///
- /// Applies the alteration to the specified context.
- ///
- /// A context object that contains information for the alteration and provides a way to alter the workflow instance and control the alteration process.
- ValueTask HandleAsync(AlterationContext context);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobDispatcher.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobDispatcher.cs
deleted file mode 100644
index e3191dd96b..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobDispatcher.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Dispatches an alteration job for execution.
-///
-public interface IAlterationJobDispatcher
-{
- ///
- /// Dispatches an alteration job for execution.
- ///
- /// The ID of the job to dispatch.
- /// An optional cancellation token.
- ValueTask DispatchAsync(string jobId, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobRunner.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobRunner.cs
deleted file mode 100644
index 82139c7126..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobRunner.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Executes an alteration job.
-///
-public interface IAlterationJobRunner
-{
- ///
- /// Executes the specified alteration plan.
- ///
- /// The Id of the alteration job to execute.
- /// An optional cancellation token.
- /// The job with updated state.
- Task RunAsync(string jobId, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobStore.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobStore.cs
deleted file mode 100644
index 6d2dc59bcf..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobStore.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Filters;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// A store for alteration jobs.
-///
-public interface IAlterationJobStore
-{
- ///
- /// Saves the specified alteration job.
- ///
- Task SaveAsync(AlterationJob job, CancellationToken cancellationToken = default);
-
- ///
- /// Saves the specified alteration jobs.
- ///
- Task SaveManyAsync(IEnumerable jobs, CancellationToken cancellationToken = default);
-
- ///
- /// Finds the alteration job matching the specified filter.
- ///
- Task FindAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default);
-
- ///
- /// Finds all alteration jobs matching the specified filter.
- ///
- Task> FindManyAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default);
-
- ///
- /// Finds the IDs of all alteration jobs matching the specified filter.
- ///
- ///
- Task> FindManyIdsAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default);
-
- ///
- /// Returns the number of alteration jobs matching the specified filter.
- ///
- Task CountAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanManager.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanManager.cs
deleted file mode 100644
index 617cf2824c..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanManager.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Represents a manager for alteration plans.
-///
-public interface IAlterationPlanManager
-{
- ///
- /// Gets an alteration plan by ID.
- ///
- Task GetPlanAsync(string planId, CancellationToken cancellationToken = default);
-
- ///
- /// Gets a value indicating whether all jobs in the plan have been completed.
- ///
- Task GetIsAllJobsCompletedAsync(string planId, CancellationToken cancellationToken = default);
-
- ///
- /// Completes an alteration plan.
- ///
- Task CompletePlanAsync(AlterationPlan plan, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanScheduler.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanScheduler.cs
deleted file mode 100644
index 68ee9b2a10..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanScheduler.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using Elsa.Alterations.Core.Models;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Scheduler for alteration plans.
-///
-public interface IAlterationPlanScheduler
-{
- ///
- /// Submits an alteration plan for execution.
- ///
- Task SubmitAsync(AlterationPlanParams planParams, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanStore.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanStore.cs
deleted file mode 100644
index 9029948a03..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanStore.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Filters;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// A store for alteration plans.
-///
-public interface IAlterationPlanStore
-{
- ///
- /// Saves the specified alteration plan.
- ///
- Task SaveAsync(AlterationPlan plan, CancellationToken cancellationToken = default);
-
- ///
- /// Finds the alteration plan matching the specified filter.
- ///
- Task FindAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default);
-
- ///
- /// Returns the number of alteration plans matching the specified filter.
- ///
- Task CountAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationRunner.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationRunner.cs
deleted file mode 100644
index 8693938bb6..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationRunner.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Elsa.Alterations.Core.Results;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Runs a series of alterations on the specified workflow execution context.
-///
-public interface IAlterationRunner
-{
- ///
- /// Runs a series of alterations on the specified workflow instances.
- ///
- /// The IDs of the workflow instances to alter.
- /// The alterations to run.
- /// An optional cancellation token.
- Task> RunAsync(IEnumerable workflowInstanceIds, IEnumerable alterations, CancellationToken cancellationToken = default);
-
- ///
- /// Runs a series of alterations on the specified workflow instances.
- ///
- /// The ID of the workflow instance to alter.
- /// The alterations to run.
- /// An optional cancellation token.
- Task RunAsync(string workflowInstanceId, IEnumerable alterations, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationSerializer.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationSerializer.cs
deleted file mode 100644
index c273789a84..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationSerializer.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Serializes and deserializes objects.
-///
-public interface IAlterationSerializer
-{
- ///
- /// Serializes the specified object.
- ///
- string Serialize(IAlteration alteration);
-
- ///
- /// Serializes the specified set of objects.
- ///
- string SerializeMany(IEnumerable alterations);
-
- ///
- /// Deserializes the specified JSON string into an object.
- ///
- IAlteration Deserialize(string json);
-
- ///
- /// Deserializes the specified JSON string into a set of objects.
- ///
- IEnumerable DeserializeMany(string json);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlteredWorkflowDispatcher.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlteredWorkflowDispatcher.cs
deleted file mode 100644
index 38374cad58..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IAlteredWorkflowDispatcher.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Elsa.Alterations.Core.Results;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Schedules a workflow instance to be resumed when an alteration job has been completed.
-///
-public interface IAlteredWorkflowDispatcher
-{
- ///
- /// Schedules the altered workflow instances to be resumed.
- ///
- /// The results of running a series of alterations.
- /// An optional cancellation token.
- Task DispatchAsync(IEnumerable results, CancellationToken cancellationToken = default);
-
- ///
- /// Schedules the altered workflow instance to be resumed.
- ///
- /// The result of running a series of alterations.
- /// An optional cancellation token.
- Task DispatchAsync(RunAlterationsResult result, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IWorkflowInstanceFinder.cs b/src/modules/Elsa.Alterations.Core/Contracts/IWorkflowInstanceFinder.cs
deleted file mode 100644
index fd325937f0..0000000000
--- a/src/modules/Elsa.Alterations.Core/Contracts/IWorkflowInstanceFinder.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using Elsa.Alterations.Core.Models;
-
-namespace Elsa.Alterations.Core.Contracts;
-
-///
-/// Represents a service that can find workflow instances based on specified filters.
-///
-public interface IWorkflowInstanceFinder
-{
- ///
- /// Finds workflow instances based on the specified filter.
- ///
- Task> FindAsync(AlterationWorkflowInstanceFilter filter, CancellationToken cancellationToken = default);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Elsa.Alterations.Core.csproj b/src/modules/Elsa.Alterations.Core/Elsa.Alterations.Core.csproj
deleted file mode 100644
index 716e77f871..0000000000
--- a/src/modules/Elsa.Alterations.Core/Elsa.Alterations.Core.csproj
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- Provides core interfaces, models and services that support the alteration engine.
-
- elsa module alterations
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/modules/Elsa.Alterations.Core/Entities/AlterationJob.cs b/src/modules/Elsa.Alterations.Core/Entities/AlterationJob.cs
deleted file mode 100644
index 2cc6712878..0000000000
--- a/src/modules/Elsa.Alterations.Core/Entities/AlterationJob.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using Elsa.Alterations.Core.Enums;
-using Elsa.Alterations.Core.Models;
-using Elsa.Common.Entities;
-
-namespace Elsa.Alterations.Core.Entities;
-
-///
-/// Represents the execution of the plan for an individual workflow instance.
-///
-public class AlterationJob : Entity
-{
- ///
- /// The ID of the plan that this job belongs to.
- ///
- public string PlanId { get; set; } = default!;
-
- ///
- /// The ID of the workflow instance that this job applies to.
- ///
- public string WorkflowInstanceId { get; set; } = default!;
-
- ///
- /// The status of the job.
- ///
- public AlterationJobStatus Status { get; set; }
-
- ///
- /// The serialized log of the job.
- ///
- public ICollection? Log { get; set; } = new List();
-
- ///
- /// The date and time at which the job was created.
- ///
- public DateTimeOffset CreatedAt { get; set; }
-
- ///
- /// The date and time at which the job was started.
- ///
- public DateTimeOffset? StartedAt { get; set; }
-
- ///
- /// The date and time at which the job was completed.
- ///
- public DateTimeOffset? CompletedAt { get; set; }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Entities/AlterationPlan.cs b/src/modules/Elsa.Alterations.Core/Entities/AlterationPlan.cs
deleted file mode 100644
index 10c6a4729f..0000000000
--- a/src/modules/Elsa.Alterations.Core/Entities/AlterationPlan.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Enums;
-using Elsa.Alterations.Core.Models;
-using Elsa.Common.Entities;
-
-namespace Elsa.Alterations.Core.Entities;
-
-///
-/// A plan that contains a list of alterations to be applied to a set of workflow instances.
-///
-public class AlterationPlan : Entity
-{
- ///
- /// The alterations to be applied.
- ///
- public ICollection Alterations { get; set; } = new List();
-
- ///
- /// The IDs of the workflow instances that this plan applies to.
- ///
- public AlterationWorkflowInstanceFilter WorkflowInstanceFilter { get; set; } = new();
-
- ///
- /// The status of the plan.
- ///
- public AlterationPlanStatus Status { get; set; }
-
- ///
- /// The date and time at which the plan was created.
- ///
- public DateTimeOffset CreatedAt { get; set; }
-
- ///
- /// The date and time at which the plan was started.
- ///
- public DateTimeOffset? StartedAt { get; set; }
-
- ///
- /// The date and time at which the plan was completed.
- ///
- public DateTimeOffset? CompletedAt { get; set; }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Enums/AlterationJobStatus.cs b/src/modules/Elsa.Alterations.Core/Enums/AlterationJobStatus.cs
deleted file mode 100644
index d9d7ac7f9e..0000000000
--- a/src/modules/Elsa.Alterations.Core/Enums/AlterationJobStatus.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-namespace Elsa.Alterations.Core.Enums;
-
-///
-/// The status of an alteration plan for a workflow instance.
-///
-public enum AlterationJobStatus
-{
- ///
- /// The plan is pending execution.
- ///
- Pending,
-
- ///
- /// The plan is currently being executed.
- ///
- Running,
-
- ///
- /// The plan has been completed.
- ///
- Completed,
-
- ///
- /// The job has failed.
- ///
- Failed
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Enums/AlterationPlanStatus.cs b/src/modules/Elsa.Alterations.Core/Enums/AlterationPlanStatus.cs
deleted file mode 100644
index 2ba9eea21a..0000000000
--- a/src/modules/Elsa.Alterations.Core/Enums/AlterationPlanStatus.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-namespace Elsa.Alterations.Core.Enums;
-
-///
-/// The status of an alteration plan.
-///
-public enum AlterationPlanStatus
-{
- ///
- /// The plan is pending execution.
- ///
- Pending,
-
- ///
- /// The plan is currently generating jobs.
- ///
- Generating,
-
- ///
- /// The plan is currently dispatching jobs.
- ///
- Dispatching,
-
- ///
- /// The plan is currently being executed.
- ///
- Running,
-
- ///
- /// The plan has been completed.
- ///
- Completed,
-
- ///
- /// The plan has failed.
- ///
- Failed
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Extensions/ServiceCollectionExtensions.cs b/src/modules/Elsa.Alterations.Core/Extensions/ServiceCollectionExtensions.cs
deleted file mode 100644
index 13f473b626..0000000000
--- a/src/modules/Elsa.Alterations.Core/Extensions/ServiceCollectionExtensions.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Options;
-using Elsa.Alterations.Core.Serialization;
-using Elsa.Alterations.Core.Services;
-using Elsa.Extensions;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.Alterations.Core.Extensions;
-
-///
-/// Extension methods for .
-///
-public static class ServiceCollectionExtensions
-{
- ///
- /// Adds the core Elsa alterations services.
- ///
- public static IServiceCollection AddAlterationsCore(this IServiceCollection services)
- {
- services.Configure(_ => { }); // Ensure that the options are configured even if the application doesn't do so.
- services.AddScoped();
- services.AddScoped();
- services.AddSingleton();
- services.AddSerializationOptionsConfigurator();
- return services;
- }
-
- ///
- /// Adds an alteration handler.
- ///
- public static IServiceCollection AddAlteration(this IServiceCollection services) where T : IAlteration where THandler : class, IAlterationHandler
- {
- services.Configure(options => options.AlterationTypes.Add(typeof(T)));
- services.AddScoped();
- return services;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Filters/AlterationJobFilter.cs b/src/modules/Elsa.Alterations.Core/Filters/AlterationJobFilter.cs
deleted file mode 100644
index 37751d05a3..0000000000
--- a/src/modules/Elsa.Alterations.Core/Filters/AlterationJobFilter.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Enums;
-
-namespace Elsa.Alterations.Core.Filters;
-
-///
-/// A filter for querying alteration jobs.
-///
-public class AlterationJobFilter
-{
- ///
- /// The ID of the job.
- ///
- public string? Id { get; set; }
-
- ///
- /// The ID of the plan.
- ///
- public string? PlanId { get; set; }
-
- ///
- /// The status of the job.
- ///
- public AlterationJobStatus? Status { get; set; }
-
- ///
- /// The statuses of the job to match.
- ///
- public ICollection? Statuses { get; set; }
-
- ///
- /// Applies the filter to the specified query.
- ///
- public IQueryable Apply(IQueryable query)
- {
- if (!string.IsNullOrWhiteSpace(Id))
- query = query.Where(x => x.Id == Id);
-
- if (!string.IsNullOrWhiteSpace(PlanId))
- query = query.Where(x => x.PlanId == PlanId);
-
- if (Status != null)
- query = query.Where(x => x.Status == Status);
-
- if (Statuses != null)
- query = query.Where(x => Statuses.Contains(x.Status));
-
- return query;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Filters/AlterationPlanFilter.cs b/src/modules/Elsa.Alterations.Core/Filters/AlterationPlanFilter.cs
deleted file mode 100644
index cc2cbc038d..0000000000
--- a/src/modules/Elsa.Alterations.Core/Filters/AlterationPlanFilter.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-
-namespace Elsa.Alterations.Core.Filters;
-
-///
-/// A filter for querying alteration plans.
-///
-public class AlterationPlanFilter
-{
- ///
- /// The ID of the plan.
- ///
- public string? Id { get; set; }
-
- ///
- /// Applies the filter to the specified query.
- ///
- public IQueryable Apply(IQueryable query)
- {
- if (!string.IsNullOrWhiteSpace(Id))
- query = query.Where(x => x.Id == Id);
-
- return query;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Models/ActivityFilter.cs b/src/modules/Elsa.Alterations.Core/Models/ActivityFilter.cs
deleted file mode 100644
index f13ba2cd61..0000000000
--- a/src/modules/Elsa.Alterations.Core/Models/ActivityFilter.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using Elsa.Workflows;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Core.Models;
-
-///
-/// Represents a filter for activities.
-///
-[UsedImplicitly]
-public class ActivityFilter
-{
- ///
- /// The ID of the activity.
- ///
- public string? ActivityId { get; set; }
-
- ///
- /// The ID of the activity instance.
- ///
- public string? ActivityInstanceId { get; set; }
-
- ///
- /// The node ID of the activity.
- ///
- public string? NodeId { get; set; }
-
- ///
- /// The name of the activity.
- ///
- public string? Name { get; set; }
-
- ///
- /// The status of the activity.
- ///
- public ActivityStatus? Status { get; set; }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Models/AlterationLog.cs b/src/modules/Elsa.Alterations.Core/Models/AlterationLog.cs
deleted file mode 100644
index 1032bb52cf..0000000000
--- a/src/modules/Elsa.Alterations.Core/Models/AlterationLog.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using Elsa.Common;
-using Microsoft.Extensions.Logging;
-
-namespace Elsa.Alterations.Core.Models;
-
-
-///
-/// Represents a log of alterations.
-///
-public class AlterationLog
-{
- private readonly ISystemClock _systemClock;
- private readonly List _logEntries = new();
-
- ///
- /// Initializes a new instance of the class.
- ///
- public AlterationLog(ISystemClock systemClock)
- {
- _systemClock = systemClock;
- }
-
- ///
- /// Gets the log entries.
- ///
- public IReadOnlyCollection LogEntries => _logEntries.ToList().AsReadOnly();
-
- ///
- /// Adds a log entry.
- ///
- /// The message.
- /// The log level.
- /// The event that generated the log entry.
- public void Add(string message, LogLevel logLevel = LogLevel.Information, string? eventName = null)
- {
- var entry = new AlterationLogEntry(message, logLevel, _systemClock.UtcNow, eventName);
-
- _logEntries.Add(entry);
- }
-
- ///
- /// Adds a set of log entries.
- ///
- ///
- public void AddRange(IEnumerable entries) => _logEntries.AddRange(entries);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Models/AlterationLogEntry.cs b/src/modules/Elsa.Alterations.Core/Models/AlterationLogEntry.cs
deleted file mode 100644
index 77b772c65a..0000000000
--- a/src/modules/Elsa.Alterations.Core/Models/AlterationLogEntry.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Microsoft.Extensions.Logging;
-
-namespace Elsa.Alterations.Core.Models;
-
-///
-/// A log entry for an alteration.
-///
-/// The log message.
-/// The log level.
-/// The timestamp when the log entry was created.
-/// The event that generated the log entry.
-public record AlterationLogEntry(string Message, LogLevel LogLevel, DateTimeOffset Timestamp, string? EventName = null);
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Models/AlterationPlanParams.cs b/src/modules/Elsa.Alterations.Core/Models/AlterationPlanParams.cs
deleted file mode 100644
index 08c266c4c9..0000000000
--- a/src/modules/Elsa.Alterations.Core/Models/AlterationPlanParams.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-
-namespace Elsa.Alterations.Core.Models;
-
-///
-/// Represents a new alteration plan.
-///
-public class AlterationPlanParams
-{
- ///
- /// The unique identifier for the alteration plan. If not specified, a new ID will be generated.
- ///
- public string? Id { get; set; }
-
- ///
- /// The alterations to be applied.
- ///
- public ICollection Alterations { get; set; } = new List();
-
- ///
- /// The filter used to determine which workflow instances that this plan applies to.
- ///
- public AlterationWorkflowInstanceFilter Filter { get; set; } = new();
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Models/AlterationWorkflowInstanceFilter.cs b/src/modules/Elsa.Alterations.Core/Models/AlterationWorkflowInstanceFilter.cs
deleted file mode 100644
index 51f2cd680d..0000000000
--- a/src/modules/Elsa.Alterations.Core/Models/AlterationWorkflowInstanceFilter.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using Elsa.Workflows;
-using Elsa.Workflows.Management.Models;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Core.Models;
-
-///
-/// Represents a filter for workflow instances.
-///
-[UsedImplicitly]
-public class AlterationWorkflowInstanceFilter
-{
- ///
- /// If the filter is empty, all records are matched.
- ///
- public bool EmptyFilterSelectsAll { get; set; }
-
- ///
- /// The IDs of the workflow instances that this plan applies to.
- ///
- public IEnumerable? WorkflowInstanceIds { get; set; }
-
- ///
- /// The correlation IDs of the workflow instances that this plan applies to.
- ///
- public IEnumerable? CorrelationIds { get; set; }
-
- ///
- /// A collection of names associated with the workflow instances being filtered.
- ///
- public ICollection? Names { get; set; }
-
- ///
- /// A search term used to filter workflow instances based on matching criteria.
- ///
- public string? SearchTerm { get; set; }
-
- ///
- /// A collection of timestamp filters used for filtering data based on specified timestamp columns and operators.
- ///
- public IEnumerable? TimestampFilters { get; set; }
-
- ///
- /// The IDs of the workflow definitions that this plan applies to.
- ///
- public ICollection? DefinitionIds { get; set; }
-
- ///
- /// The IDs of the workflow definitions that this plan applies to.
- ///
- public IEnumerable? DefinitionVersionIds { get; set; }
-
- ///
- /// Whether the workflow instances to match have incidents.
- ///
- public bool? HasIncidents { get; set; }
-
- ///
- /// Whether the workflow instances to match are system workflows. Defaults to false.
- ///
- public bool? IsSystem { get; set; } = false;
-
- ///
- /// Represents the workflow statuses included in the filter.
- ///
- public ICollection? Statuses { get; set; }
-
- ///
- /// A collection of sub-statuses used to filter workflow instances by their specific sub-state.
- ///
- public ICollection? SubStatuses { get; set; }
-
- ///
- /// Represents a collection of filters for activities.
- ///
- public IEnumerable? ActivityFilters { get; set; }
-
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Models/NewAlterationJob.cs b/src/modules/Elsa.Alterations.Core/Models/NewAlterationJob.cs
deleted file mode 100644
index 8b994b6471..0000000000
--- a/src/modules/Elsa.Alterations.Core/Models/NewAlterationJob.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Elsa.Alterations.Core.Models;
-
-public class NewAlterationJob
-{
- public string PlanId { get; set; }
- public string WorkflowInstanceId { get; set; }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Notifications/AlterationJobCompleted.cs b/src/modules/Elsa.Alterations.Core/Notifications/AlterationJobCompleted.cs
deleted file mode 100644
index b15d44cbc5..0000000000
--- a/src/modules/Elsa.Alterations.Core/Notifications/AlterationJobCompleted.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-using Elsa.Mediator.Contracts;
-
-namespace Elsa.Alterations.Core.Notifications;
-
-///
-/// A notification that is published when an alteration job is completed.
-///
-public record AlterationJobCompleted(AlterationJob Job, bool WorkflowContainsScheduledWork) : INotification;
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanCompleted.cs b/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanCompleted.cs
deleted file mode 100644
index 70a13fb5b8..0000000000
--- a/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanCompleted.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-using Elsa.Mediator.Contracts;
-
-namespace Elsa.Alterations.Core.Notifications;
-
-///
-/// A notification that is published when an alteration plan is completed.
-///
-public record AlterationPlanCompleted(AlterationPlan Plan) : INotification;
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanSubmitted.cs b/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanSubmitted.cs
deleted file mode 100644
index e9681838f2..0000000000
--- a/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanSubmitted.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-using Elsa.Mediator.Contracts;
-
-namespace Elsa.Alterations.Core.Notifications;
-
-///
-/// A notification that is published when an alteration plan is submitted.
-///
-public record AlterationPlanSubmitted(AlterationPlan Plan) : INotification;
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Options/AlterationOptions.cs b/src/modules/Elsa.Alterations.Core/Options/AlterationOptions.cs
deleted file mode 100644
index 3d54cc2180..0000000000
--- a/src/modules/Elsa.Alterations.Core/Options/AlterationOptions.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Elsa.Alterations.Core.Options;
-
-///
-/// Options for the Alteration module.
-///
-public class AlterationOptions
-{
- ///
- /// The types of alterations that are supported.
- ///
- public ISet AlterationTypes { get; set; } = new HashSet();
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Results/RunAlterationsResult.cs b/src/modules/Elsa.Alterations.Core/Results/RunAlterationsResult.cs
deleted file mode 100644
index 42e5e979b2..0000000000
--- a/src/modules/Elsa.Alterations.Core/Results/RunAlterationsResult.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using Elsa.Alterations.Core.Models;
-using Microsoft.Extensions.Logging;
-
-namespace Elsa.Alterations.Core.Results;
-
-///
-/// The result of running a series of alterations.
-///
-public class RunAlterationsResult
-{
- ///
- /// Initializes a new instance of the class.
- ///
- public RunAlterationsResult(string workflowInstanceId, AlterationLog log)
- {
- WorkflowInstanceId = workflowInstanceId;
- Log = log;
- }
-
- ///
- /// The ID of the workflow instance that was altered.
- ///
- public string WorkflowInstanceId { get; }
-
- ///
- /// A log of the alterations that were run.
- ///
- public AlterationLog Log { get; set; }
-
- ///
- /// A flag indicating whether the workflow has scheduled work.
- ///
- public bool WorkflowHasScheduledWork { get; set; }
-
- ///
- /// A flag indicating whether the alterations have succeeded.
- ///
- public bool IsSuccessful => Log.LogEntries.Any(x => x.LogLevel <= LogLevel.Warning);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs b/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs
deleted file mode 100644
index 217331a5f8..0000000000
--- a/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System.Text.Json.Serialization;
-using System.Text.Json.Serialization.Metadata;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Options;
-using Elsa.Workflows;
-using JetBrains.Annotations;
-using Microsoft.Extensions.Options;
-
-namespace Elsa.Alterations.Core.Serialization;
-
-///
-/// Add additional objects.
-///
-[UsedImplicitly]
-public class AlterationSerializationOptionConfigurator(IOptions options) : SerializationOptionsConfiguratorBase
-{
- ///
- public override IEnumerable> GetModifiers()
- {
- var alterationTypes = options.Value.AlterationTypes;
-
- yield return typeInfo =>
- {
- if (typeInfo.Type != typeof(IAlteration))
- return;
-
- if (typeInfo.Kind != JsonTypeInfoKind.Object)
- return;
-
- var polymorphismOptions = new JsonPolymorphismOptions
- {
- TypeDiscriminatorPropertyName = "type"
- };
-
- foreach (var alterationType in alterationTypes.ToList())
- {
- polymorphismOptions.DerivedTypes.Add(new(alterationType, alterationType.Name));
- }
-
- typeInfo.PolymorphismOptions = polymorphismOptions;
- };
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializer.cs b/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializer.cs
deleted file mode 100644
index 001dc5aab8..0000000000
--- a/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializer.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System.Diagnostics.CodeAnalysis;
-using System.Text.Json;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Common.Serialization;
-
-namespace Elsa.Alterations.Core.Serialization;
-
-///
-/// A serializer for objects.
-///
-public class AlterationSerializer : ConfigurableSerializer, IAlterationSerializer
-{
- ///
- public AlterationSerializer(IServiceProvider serviceProvider) : base(serviceProvider)
- {
- }
-
- ///
- [RequiresUnreferencedCode("The type of the alteration must be known at compile time.")]
- public string Serialize(IAlteration alteration)
- {
- var options = GetOptions();
- return JsonSerializer.Serialize(alteration, options);
- }
-
- ///
- [RequiresUnreferencedCode("The type of the alteration must be known at compile time.")]
- public string SerializeMany(IEnumerable alterations)
- {
- var options = GetOptions();
- return JsonSerializer.Serialize(alterations.ToArray(), options);
- }
-
- ///
- [RequiresUnreferencedCode("The type of the alteration must be known at compile time.")]
- public IAlteration Deserialize(string json)
- {
- var options = GetOptions();
- return JsonSerializer.Deserialize(json, options)!;
- }
-
- ///
- [RequiresUnreferencedCode("The type of the alteration must be known at compile time.")]
- public IEnumerable DeserializeMany(string json)
- {
- var options = GetOptions();
- return JsonSerializer.Deserialize(json, options)!;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Services/AlteredWorkflowDispatcher.cs b/src/modules/Elsa.Alterations.Core/Services/AlteredWorkflowDispatcher.cs
deleted file mode 100644
index 1014dfdadc..0000000000
--- a/src/modules/Elsa.Alterations.Core/Services/AlteredWorkflowDispatcher.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Results;
-using Elsa.Workflows.Runtime;
-using Elsa.Workflows.Runtime.Contracts;
-using Elsa.Workflows.Runtime.Requests;
-
-namespace Elsa.Alterations.Core.Services;
-
-///
-public class AlteredWorkflowDispatcher : IAlteredWorkflowDispatcher
-{
- private readonly IWorkflowDispatcher _workflowDispatcher;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public AlteredWorkflowDispatcher(IWorkflowDispatcher workflowDispatcher)
- {
- _workflowDispatcher = workflowDispatcher;
- }
-
- ///
- public async Task DispatchAsync(IEnumerable results, CancellationToken cancellationToken = default)
- {
- foreach (var result in results.Where(x => x is { IsSuccessful: true, WorkflowHasScheduledWork: true }))
- await DispatchAsync(result, cancellationToken);
- }
-
- ///
- public async Task DispatchAsync(RunAlterationsResult result, CancellationToken cancellationToken = default)
- {
- await _workflowDispatcher.DispatchAsync(new DispatchWorkflowInstanceRequest(result.WorkflowInstanceId), cancellationToken: cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Services/WorkflowInstanceFinder.cs b/src/modules/Elsa.Alterations.Core/Services/WorkflowInstanceFinder.cs
deleted file mode 100644
index b48b86e644..0000000000
--- a/src/modules/Elsa.Alterations.Core/Services/WorkflowInstanceFinder.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Models;
-using Elsa.Workflows;
-using Elsa.Workflows.Management;
-using Elsa.Workflows.Management.Filters;
-using Elsa.Workflows.Runtime;
-using Elsa.Workflows.Runtime.Filters;
-
-namespace Elsa.Alterations.Core.Services;
-
-///
-public class WorkflowInstanceFinder(IWorkflowInstanceStore workflowInstanceStore, IActivityExecutionStore activityExecutionStore) : IWorkflowInstanceFinder
-{
- ///
- public async Task> FindAsync(AlterationWorkflowInstanceFilter filter, CancellationToken cancellationToken = default)
- {
- var workflowInstanceFilter = new WorkflowInstanceFilter
- {
- Ids = filter.WorkflowInstanceIds?.ToList(),
- DefinitionIds = filter.DefinitionIds,
- DefinitionVersionIds = filter.DefinitionVersionIds?.ToList(),
- CorrelationIds = filter.CorrelationIds?.ToList(),
- HasIncidents = filter.HasIncidents,
- IsSystem = filter.IsSystem,
- TimestampFilters = filter.TimestampFilters?.ToList(),
- WorkflowStatuses = filter.Statuses?.ToList(),
- WorkflowSubStatuses = filter.SubStatuses?.ToList(),
- Names = filter.Names?.ToList(),
- SearchTerm = filter.SearchTerm,
- };
- var activityExecutionFilters = filter.ActivityFilters?.Select(x => new ActivityExecutionRecordFilter
- {
- ActivityId = x.ActivityId,
- Id = x.ActivityInstanceId,
- ActivityNodeId = x.NodeId,
- Name = x.Name,
- Status = x.Status,
- }).ToList();
-
- var emptyFilterSelectsAll = filter.EmptyFilterSelectsAll;
- var workflowInstanceFilterIsEmpty = WorkflowFilterIsEmpty(workflowInstanceFilter);
-
- var workflowInstanceIds = workflowInstanceFilterIsEmpty && !emptyFilterSelectsAll
- ? Enumerable.Empty().ToHashSet()
- : (await workflowInstanceStore.FindManyIdsAsync(workflowInstanceFilter, cancellationToken)).ToHashSet();
-
- if (activityExecutionFilters == null)
- return workflowInstanceIds;
-
- foreach (ActivityExecutionRecordFilter activityExecutionFilter in activityExecutionFilters.Where(x => !x.IsEmpty))
- {
- var activityExecutionRecords = await activityExecutionStore.FindManySummariesAsync(activityExecutionFilter, cancellationToken);
- var matchingWorkflowInstanceIds = activityExecutionRecords.Select(x => x.WorkflowInstanceId).ToHashSet();
-
- if (workflowInstanceFilterIsEmpty)
- workflowInstanceIds = matchingWorkflowInstanceIds;
- else
- workflowInstanceIds.IntersectWith(matchingWorkflowInstanceIds);
- }
-
- // Alterations must apply only to running workflows.
- workflowInstanceIds = (await FilterRunningWorkflowInstancesAsync(workflowInstanceIds, cancellationToken)).ToHashSet();
-
- return workflowInstanceIds;
- }
-
- private async Task> FilterRunningWorkflowInstancesAsync(IEnumerable workflowInstanceIds, CancellationToken cancellationToken)
- {
- var filter = new WorkflowInstanceFilter
- {
- Ids = workflowInstanceIds.ToList(),
- WorkflowStatus = WorkflowStatus.Running
- };
-
- return await workflowInstanceStore.FindManyIdsAsync(filter, cancellationToken);
- }
-
- private bool WorkflowFilterIsEmpty(WorkflowInstanceFilter filter)
- {
- return filter.Id == null &&
- filter.Ids == null &&
- filter.DefinitionId == null &&
- filter.DefinitionVersionId == null &&
- filter.DefinitionIds == null &&
- filter.DefinitionVersionIds == null &&
- filter.Version == null &&
- filter.CorrelationId == null &&
- filter.CorrelationIds == null &&
- filter.HasIncidents == null &&
- filter.TimestampFilters == null
- && string.IsNullOrWhiteSpace(filter.SearchTerm);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationJobStore.cs b/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationJobStore.cs
deleted file mode 100644
index 1af9f76f0c..0000000000
--- a/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationJobStore.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Filters;
-using Elsa.Common.Services;
-
-namespace Elsa.Alterations.Core.Stores;
-
-///
-/// A memory-based store for alteration jobs.
-///
-public class MemoryAlterationJobStore : IAlterationJobStore
-{
- private readonly MemoryStore _store;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public MemoryAlterationJobStore(MemoryStore store)
- {
- _store = store;
- }
-
- ///
- public Task SaveAsync(AlterationJob job, CancellationToken cancellationToken = default)
- {
- _store.Save(job, x => x.Id);
- return Task.CompletedTask;
- }
-
- ///
- public Task SaveManyAsync(IEnumerable jobs, CancellationToken cancellationToken = default)
- {
- _store.SaveMany(jobs, x => x.Id);
- return Task.CompletedTask;
- }
-
- ///
- public Task FindAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default)
- {
- var entity = _store.Query(query => Filter(query, filter)).FirstOrDefault();
- return Task.FromResult(entity);
- }
-
- ///
- public Task> FindManyAsync(AlterationJobFilter filter, CancellationToken cancellationToken)
- {
- var entities = _store.Query(query => Filter(query, filter)).ToList().AsEnumerable();
- return Task.FromResult(entities);
- }
-
- ///
- public Task> FindManyIdsAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default)
- {
- var ids = _store.Query(query => Filter(query, filter)).Select(x => x.Id).ToList().AsEnumerable();
- return Task.FromResult(ids);
- }
-
- ///
- public Task CountAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default)
- {
- var count = _store.Query(query => Filter(query, filter)).LongCount();
- return Task.FromResult(count);
- }
-
-
- private static IQueryable Filter(IQueryable query, AlterationJobFilter filter) => filter.Apply(query);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationPlanStore.cs b/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationPlanStore.cs
deleted file mode 100644
index 9657c5864f..0000000000
--- a/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationPlanStore.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Filters;
-using Elsa.Common.Services;
-
-namespace Elsa.Alterations.Core.Stores;
-
-///
-/// A memory-based store for alteration plans.
-///
-public class MemoryAlterationPlanStore : IAlterationPlanStore
-{
- private readonly MemoryStore _store;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public MemoryAlterationPlanStore(MemoryStore store)
- {
- _store = store;
- }
-
- ///
- public Task SaveAsync(AlterationPlan plan, CancellationToken cancellationToken = default)
- {
- _store.Save(plan, x => x.Id);
- return Task.CompletedTask;
- }
-
- ///
- public Task FindAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default)
- {
- var entity = _store.Query(query => Filter(query, filter)).FirstOrDefault();
- return Task.FromResult(entity);
- }
-
- ///
- public Task CountAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default)
- {
- var count = _store.Query(query => Filter(query, filter)).LongCount();
- return Task.FromResult(count);
- }
-
- private static IQueryable Filter(IQueryable query, AlterationPlanFilter filter) => filter.Apply(query);
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.MassTransit/Consumers/RunAlterationJobConsumer.cs b/src/modules/Elsa.Alterations.MassTransit/Consumers/RunAlterationJobConsumer.cs
deleted file mode 100644
index 8bc2fe7cf8..0000000000
--- a/src/modules/Elsa.Alterations.MassTransit/Consumers/RunAlterationJobConsumer.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.MassTransit.Messages;
-using MassTransit;
-
-namespace Elsa.Alterations.MassTransit.Consumers;
-
-///
-/// Consumes messages.
-///
-public class RunAlterationJobConsumer : IConsumer
-{
- private readonly IAlterationJobRunner _alterationJobRunner;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public RunAlterationJobConsumer(IAlterationJobRunner alterationJobRunner)
- {
- _alterationJobRunner = alterationJobRunner;
- }
-
- ///
- public async Task Consume(ConsumeContext context)
- {
- await _alterationJobRunner.RunAsync(context.Message.JobId, context.CancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.MassTransit/Elsa.Alterations.MassTransit.csproj b/src/modules/Elsa.Alterations.MassTransit/Elsa.Alterations.MassTransit.csproj
deleted file mode 100644
index d1f049a520..0000000000
--- a/src/modules/Elsa.Alterations.MassTransit/Elsa.Alterations.MassTransit.csproj
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- Provides alteration background job runners using MassTransit.
-
- elsa module alterations masstransit
-
-
-
-
-
-
-
-
diff --git a/src/modules/Elsa.Alterations.MassTransit/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Alterations.MassTransit/Extensions/ModuleExtensions.cs
deleted file mode 100644
index f5fef366b2..0000000000
--- a/src/modules/Elsa.Alterations.MassTransit/Extensions/ModuleExtensions.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Elsa.Alterations.Features;
-using Elsa.Alterations.MassTransit.Features;
-using Elsa.Extensions;
-using Elsa.Features.Services;
-
-namespace Elsa.Alterations.MassTransit.Extensions;
-
-///
-/// Adds the .
-///
-public static class ModuleExtensions
-{
- ///
- /// Adds the .
- ///
- public static IModule UseMassTransitDispatcher(this AlterationsFeature alterations, Action? configure = default)
- {
- return alterations.Module.Use(configure);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.MassTransit/Features/AlterationsMassTransitFeature.cs b/src/modules/Elsa.Alterations.MassTransit/Features/AlterationsMassTransitFeature.cs
deleted file mode 100644
index 27cbaf6b6c..0000000000
--- a/src/modules/Elsa.Alterations.MassTransit/Features/AlterationsMassTransitFeature.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using Elsa.Alterations.Features;
-using Elsa.Alterations.MassTransit.Consumers;
-using Elsa.Alterations.MassTransit.Messages;
-using Elsa.Alterations.MassTransit.Services;
-using Elsa.Extensions;
-using Elsa.Features.Abstractions;
-using Elsa.Features.Attributes;
-using Elsa.Features.Services;
-using Elsa.MassTransit.Features;
-using MassTransit;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.Alterations.MassTransit.Features;
-
-///
-/// A feature for enabling the Alterations MassTransit feature.
-///
-[DependsOn(typeof(MassTransitFeature))]
-[DependsOn(typeof(AlterationsFeature))]
-public class MassTransitAlterationsFeature : FeatureBase
-{
- ///
- public MassTransitAlterationsFeature(IModule module) : base(module)
- {
- }
-
- ///
- public override void Configure()
- {
- Module.Configure(feature => feature.AlterationJobDispatcherFactory = sp => sp.GetRequiredService());
- var queueName = KebabCaseEndpointNameFormatter.Instance.Consumer();
- var queueAddress = new Uri($"queue:elsa-{queueName}");
- EndpointConvention.Map(queueAddress);
- Module.AddMassTransitConsumer(queueName);
- }
-
- ///
- public override void Apply()
- {
- Services.AddScoped();
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.MassTransit/Messages/RunAlterationJob.cs b/src/modules/Elsa.Alterations.MassTransit/Messages/RunAlterationJob.cs
deleted file mode 100644
index b96e5f932a..0000000000
--- a/src/modules/Elsa.Alterations.MassTransit/Messages/RunAlterationJob.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Elsa.Alterations.MassTransit.Messages;
-
-///
-/// Represents a request to run an alteration job.
-///
-/// The job ID.
-public record RunAlterationJob(string JobId);
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.MassTransit/Readme.md b/src/modules/Elsa.Alterations.MassTransit/Readme.md
deleted file mode 100644
index 9e45a99f3f..0000000000
--- a/src/modules/Elsa.Alterations.MassTransit/Readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# MassTransit Alterations Background Runner
-
-This module provides an implementation that processes alteration plans in the background using a MassTransit dispatcher and consumer.
-This implementation is more resilient than the in-memory queue implementation provided by **Elsa.Alterations.BackgroundRunner** because it uses a message broker to persist messages.
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations.MassTransit/Services/MassTransitAlterationJobDispatcher.cs b/src/modules/Elsa.Alterations.MassTransit/Services/MassTransitAlterationJobDispatcher.cs
deleted file mode 100644
index a2e2327585..0000000000
--- a/src/modules/Elsa.Alterations.MassTransit/Services/MassTransitAlterationJobDispatcher.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.MassTransit.Messages;
-using MassTransit;
-
-namespace Elsa.Alterations.MassTransit.Services;
-
-///
-/// Dispatches an alteration job for execution using MassTransit.
-///
-public class MassTransitAlterationJobDispatcher : IAlterationJobDispatcher
-{
- private readonly IBus _bus;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public MassTransitAlterationJobDispatcher(IBus bus)
- {
- _bus = bus;
- }
-
- ///
- public async ValueTask DispatchAsync(string jobId, CancellationToken cancellationToken = default)
- {
- var message = new RunAlterationJob(jobId);
- await _bus.Send(message, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Activities/AlterationPlanCompleted.cs b/src/modules/Elsa.Alterations/Activities/AlterationPlanCompleted.cs
deleted file mode 100644
index 5d6d01f469..0000000000
--- a/src/modules/Elsa.Alterations/Activities/AlterationPlanCompleted.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
-using Elsa.Alterations.Bookmarks;
-using Elsa.Extensions;
-using Elsa.Workflows;
-using Elsa.Workflows.Attributes;
-using Elsa.Workflows.Memory;
-using Elsa.Workflows.Models;
-
-namespace Elsa.Alterations.Activities;
-
-///
-/// Submits an alteration plan for execution.
-///
-[Browsable(false)]
-[Activity("Elsa", "Alterations", "Triggered when an Alteration Plan completed")]
-public class AlterationPlanCompleted : Trigger
-{
- ///
- public AlterationPlanCompleted(Variable planId, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
- {
- PlanId = new Input(planId);
- }
-
- ///
- public AlterationPlanCompleted([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
- {
- }
-
- ///
- /// The ID of the alteration plan.
- ///
- public Input PlanId { get; set; } = null!;
-
- ///
- protected override async ValueTask ExecuteAsync(ActivityExecutionContext context)
- {
- if (context.IsTriggerOfWorkflow())
- {
- await context.CompleteActivityAsync();
- return;
- }
-
- var planId = context.Get(PlanId)!;
- var bookmarkPayload = new AlterationPlanCompletedPayload(planId);
- context.CreateBookmark(bookmarkPayload, false);
- }
-
- ///
- protected override object GetTriggerPayload(TriggerIndexingContext context)
- {
- var planId = context.Get(PlanId)!;
- return new AlterationPlanCompletedPayload(planId);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Activities/CompleteAlterationPlan.cs b/src/modules/Elsa.Alterations/Activities/CompleteAlterationPlan.cs
deleted file mode 100644
index 0c1d504bf7..0000000000
--- a/src/modules/Elsa.Alterations/Activities/CompleteAlterationPlan.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Workflows;
-using Elsa.Workflows.Attributes;
-using Elsa.Workflows.Exceptions;
-using Elsa.Workflows.Memory;
-using Elsa.Workflows.Models;
-
-namespace Elsa.Alterations.Activities;
-
-///
-/// Marks an alteration plan as completed.
-///
-[Browsable(false)]
-[Activity("Elsa", "Alterations", "Dispatches jobs for the specified Alteration Plan", Kind = ActivityKind.Task)]
-public class CompleteAlterationPlan : CodeActivity
-{
- ///
- public CompleteAlterationPlan(Variable planId, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
- {
- PlanId = new Input(planId);
- }
-
- ///
- public CompleteAlterationPlan([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
- {
- }
-
- ///
- /// The ID of the alteration plan.
- ///
- public Input PlanId { get; set; } = null!;
-
- ///
- protected override async ValueTask ExecuteAsync(ActivityExecutionContext context)
- {
- var cancellationToken = context.CancellationToken;
- var planId = context.Get(PlanId)!;
- var manager = context.GetRequiredService();
- var plan = await manager.GetPlanAsync(planId, cancellationToken);
-
- if (plan == null)
- throw new FaultException(AlterationFaultCodes.PlanNotFound, AlterationFaultCategories.Alteration, DefaultFaultTypes.System, $"Alteration Plan with ID {planId} not found.");
-
- await manager.CompletePlanAsync(plan, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs b/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs
deleted file mode 100644
index 965a25c648..0000000000
--- a/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Enums;
-using Elsa.Alterations.Core.Filters;
-using Elsa.Workflows;
-using Elsa.Workflows.Attributes;
-using Elsa.Workflows.Exceptions;
-using Elsa.Workflows.Memory;
-using Elsa.Workflows.Models;
-
-namespace Elsa.Alterations.Activities;
-
-///
-/// Submits an alteration plan for execution.
-///
-[Browsable(false)]
-[Activity("Elsa", "Alterations", "Dispatches jobs for the specified Alteration Plan", Kind = ActivityKind.Task)]
-public class DispatchAlterationJobs : CodeActivity
-{
- ///
- public DispatchAlterationJobs(Variable planId, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
- {
- PlanId = new Input(planId);
- }
-
- ///
- public DispatchAlterationJobs([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
- {
- }
-
- ///
- /// The ID of the alteration plan.
- ///
- public Input PlanId { get; set; } = null!;
-
- ///
- protected override async ValueTask ExecuteAsync(ActivityExecutionContext context)
- {
- var cancellationToken = context.CancellationToken;
- var planId = context.Get(PlanId)!;
- var alterationPlanStore = context.GetRequiredService();
- var planFilter = new AlterationPlanFilter
- {
- Id = planId
- };
- var plan = await alterationPlanStore.FindAsync(planFilter, cancellationToken);
-
- if (plan == null)
- throw new FaultException(AlterationFaultCodes.PlanNotFound, AlterationFaultCategories.Alteration, DefaultFaultTypes.System, $"Alteration Plan with ID {planId} not found.");
-
- // Update status.
- plan.Status = AlterationPlanStatus.Dispatching;
- await alterationPlanStore.SaveAsync(plan, cancellationToken);
-
- // Find all jobs for the plan and dispatch them.
- var filter = new AlterationJobFilter
- {
- PlanId = plan.Id
- };
- var alterationJobStore = context.GetRequiredService();
- var alterationJobIds = await alterationJobStore.FindManyIdsAsync(filter, cancellationToken);
-
- // Dispatch each job.
- var alterationJobDispatcher = context.GetRequiredService();
- foreach (var jobId in alterationJobIds)
- await alterationJobDispatcher.DispatchAsync(jobId, cancellationToken);
-
- // Update status.
- plan.Status = AlterationPlanStatus.Running;
- await alterationPlanStore.SaveAsync(plan, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs b/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs
deleted file mode 100644
index 8bae6664bc..0000000000
--- a/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Enums;
-using Elsa.Alterations.Core.Filters;
-using Elsa.Alterations.Core.Models;
-using Elsa.Common;
-using Elsa.Extensions;
-using Elsa.Workflows;
-using Elsa.Workflows.Attributes;
-using Elsa.Workflows.Exceptions;
-using Elsa.Workflows.Memory;
-using Elsa.Workflows.Models;
-
-namespace Elsa.Alterations.Activities;
-
-///
-/// Submits an alteration plan for execution.
-///
-[Browsable(false)]
-[Activity("Elsa", "Alterations", "Generates jobs for the specified Alteration Plan", Kind = ActivityKind.Task)]
-public class GenerateAlterationJobs : CodeActivity
-{
- ///
- public GenerateAlterationJobs([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
- {
- }
-
- ///
- public GenerateAlterationJobs(Variable planId, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
- {
- PlanId = new Input(planId);
- }
-
- ///
- /// The ID of the submitted alteration plan.
- ///
- public Input PlanId { get; set; } = null!;
-
- ///
- protected override async ValueTask ExecuteAsync(ActivityExecutionContext context)
- {
- var plan = await GetPlanAsync(context);
- await UpdatePlanStatusAsync(context, plan);
- var workflowInstanceIds = (await FindMatchingWorkflowInstanceIdsAsync(context, plan.WorkflowInstanceFilter)).ToList();
-
- if (workflowInstanceIds.Any())
- await GenerateJobsAsync(context, plan, workflowInstanceIds);
-
- context.SetResult(workflowInstanceIds.Count);
- }
-
- private async Task GetPlanAsync(ActivityExecutionContext context)
- {
- var cancellationToken = context.CancellationToken;
- var planId = context.Get(PlanId)!;
- var alterationPlanStore = context.GetRequiredService();
- var planFilter = new AlterationPlanFilter
- {
- Id = planId
- };
- var plan = await alterationPlanStore.FindAsync(planFilter, cancellationToken);
-
- if (plan == null)
- throw new FaultException(AlterationFaultCodes.PlanNotFound, AlterationFaultCategories.Alteration, DefaultFaultTypes.System, $"Alteration Plan with ID {planId} not found.");
-
- return plan;
- }
-
- private async Task UpdatePlanStatusAsync(ActivityExecutionContext context, AlterationPlan plan)
- {
- var cancellationToken = context.CancellationToken;
- var alterationPlanStore = context.GetRequiredService();
- plan.Status = AlterationPlanStatus.Generating;
- await alterationPlanStore.SaveAsync(plan, cancellationToken);
- }
-
- private async Task> FindMatchingWorkflowInstanceIdsAsync(ActivityExecutionContext context, AlterationWorkflowInstanceFilter filter)
- {
- var cancellationToken = context.CancellationToken;
- var workflowInstanceFinder = context.GetRequiredService();
- return await workflowInstanceFinder.FindAsync(filter, cancellationToken);
- }
-
- private async Task GenerateJobsAsync(ActivityExecutionContext context, AlterationPlan plan, IEnumerable workflowInstanceIds)
- {
- var cancellationToken = context.CancellationToken;
- var identityGenerator = context.GetRequiredService();
- var systemClock = context.GetRequiredService();
- var jobs = workflowInstanceIds.Select(workflowInstanceId => new AlterationJob
- {
- Id = identityGenerator.GenerateId(),
- PlanId = plan.Id,
- Status = AlterationJobStatus.Pending,
- WorkflowInstanceId = workflowInstanceId,
- CreatedAt = systemClock.UtcNow
- })
- .ToList();
-
- var alterationJobStore = context.GetRequiredService();
- await alterationJobStore.SaveManyAsync(jobs, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Activities/SubmitAlterationPlan.cs b/src/modules/Elsa.Alterations/Activities/SubmitAlterationPlan.cs
deleted file mode 100644
index d1624a4c7a..0000000000
--- a/src/modules/Elsa.Alterations/Activities/SubmitAlterationPlan.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System.ComponentModel;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Enums;
-using Elsa.Alterations.Core.Models;
-using Elsa.Common;
-using Elsa.Extensions;
-using Elsa.Workflows;
-using Elsa.Workflows.Attributes;
-using Elsa.Workflows.Models;
-
-namespace Elsa.Alterations.Activities;
-
-///
-/// Submits an alteration plan for execution.
-///
-[Browsable(false)]
-[Output(
- DisplayName = "Plan ID",
- Description = "The ID of the submitted alteration plan."
-)]
-[Activity("Elsa", "Alterations", "Submits an Alteration Plan", Kind = ActivityKind.Task)]
-public class SubmitAlterationPlan : CodeActivity
-{
- ///
- /// The parameters for the alteration plan to be submitted.
- ///
- public Input Params { get; set; } = null!;
-
- ///
- protected override async ValueTask ExecuteAsync(ActivityExecutionContext context)
- {
- var systemClock = context.GetRequiredService();
- var identityGenerator = context.GetRequiredService();
- var now = systemClock.UtcNow;
- var planParams = context.Get(Params)!;
-
- var plan = new AlterationPlan
- {
- Id = string.IsNullOrWhiteSpace(planParams.Id) ? identityGenerator.GenerateId() : planParams.Id,
- Alterations = planParams.Alterations,
- WorkflowInstanceFilter = planParams.Filter,
- Status = AlterationPlanStatus.Pending,
- CreatedAt = now
- };
-
- var alterationPlanStore = context.GetRequiredService();
- var cancellationToken = context.CancellationToken;
- await alterationPlanStore.SaveAsync(plan, cancellationToken);
- Result.Set(context, plan.Id);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/CancelActivityHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/CancelActivityHandler.cs
deleted file mode 100644
index 95ffa2db7f..0000000000
--- a/src/modules/Elsa.Alterations/AlterationHandlers/CancelActivityHandler.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using Elsa.Alterations.AlterationTypes;
-using Elsa.Alterations.Core.Abstractions;
-using Elsa.Alterations.Core.Contexts;
-using Elsa.Extensions;
-using Elsa.Workflows;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.AlterationHandlers;
-
-///
-/// Cancels an activity.
-///
-[UsedImplicitly]
-public class CancelActivityHandler : AlterationHandlerBase
-{
- ///
- protected override ValueTask HandleAsync(AlterationContext context, CancelActivity alteration)
- {
- if (alteration.ActivityInstanceId == null && alteration.ActivityId == null)
- {
- context.Fail("Either ActivityInstanceId or ActivityId must be specified");
- return ValueTask.CompletedTask;
- }
-
- var activityExecutionContexts = GetActivityExecutionContexts(context, alteration).ToList();
-
- if (!activityExecutionContexts.Any())
- {
- context.Fail(
- alteration.ActivityInstanceId != null
- ? $"Activity execution context with ID {alteration.ActivityInstanceId} not found"
- : $"Activity execution contexts for activity with ID {alteration.ActivityId} not found");
-
- return ValueTask.CompletedTask;
- }
-
- context.Succeed(() => CancelAsync(activityExecutionContexts));
- return ValueTask.CompletedTask;
- }
-
- private async Task CancelAsync(IEnumerable activityExecutionContexts)
- {
- foreach (var activityExecutionContext in activityExecutionContexts)
- await CancelAsync(activityExecutionContext);
- }
-
- private async Task CancelAsync(ActivityExecutionContext activityExecutionContext)
- {
- await activityExecutionContext.CancelActivityAsync();
- }
-
- private static IEnumerable GetActivityExecutionContexts(AlterationContext context, CancelActivity alteration)
- {
- var workflowExecutionContext = context.WorkflowExecutionContext;
-
- return alteration.ActivityInstanceId != null
- ? workflowExecutionContext.ActivityExecutionContexts.Where(x => x.Id == alteration.ActivityInstanceId)
- : alteration.ActivityId != null
- ? workflowExecutionContext.ActivityExecutionContexts.Where(x => x.Activity.Id == alteration.ActivityId)
- : Enumerable.Empty();
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs
deleted file mode 100644
index 38bc32404b..0000000000
--- a/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Elsa.Alterations.AlterationTypes;
-using Elsa.Alterations.Core.Abstractions;
-using Elsa.Alterations.Core.Contexts;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.AlterationHandlers;
-
-///
-/// Upgrades the version of the workflow instance.
-///
-[UsedImplicitly]
-public class CancelHandler : AlterationHandlerBase
-{
- ///
- protected override ValueTask HandleAsync(AlterationContext context, Cancel alteration)
- {
- context.WorkflowExecutionContext.Cancel();
-
- context.Succeed();
- return ValueTask.CompletedTask;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/MigrateHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/MigrateHandler.cs
deleted file mode 100644
index 25418edeee..0000000000
--- a/src/modules/Elsa.Alterations/AlterationHandlers/MigrateHandler.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Elsa.Alterations.AlterationTypes;
-using Elsa.Alterations.Core.Abstractions;
-using Elsa.Alterations.Core.Contexts;
-using Elsa.Common.Models;
-using Elsa.Workflows.Management;
-using JetBrains.Annotations;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.Alterations.AlterationHandlers;
-
-///
-/// Upgrades the version of the workflow instance.
-///
-[UsedImplicitly]
-public class MigrateHandler : AlterationHandlerBase
-{
- ///
- protected override async ValueTask HandleAsync(AlterationContext context, Migrate alteration)
- {
- var workflowDefinitionService = context.ServiceProvider.GetRequiredService();
- var definitionId = context.Workflow.Identity.DefinitionId;
- var targetVersion = alteration.TargetVersion;
- var cancellationToken = context.CancellationToken;
- var targetWorkflowDefinition = await workflowDefinitionService.FindWorkflowDefinitionAsync(definitionId, VersionOptions.SpecificVersion(targetVersion), cancellationToken);
-
- if (targetWorkflowDefinition == null)
- {
- context.Fail($"Workflow definition with ID {definitionId} and version {targetVersion} not found");
- return;
- }
-
- var targetWorkflow = await workflowDefinitionService.MaterializeWorkflowAsync(targetWorkflowDefinition, cancellationToken);
- await context.WorkflowExecutionContext.SetWorkflowGraphAsync(targetWorkflow);
-
- context.Succeed();
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/ModifyVariableHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/ModifyVariableHandler.cs
deleted file mode 100644
index e42d516298..0000000000
--- a/src/modules/Elsa.Alterations/AlterationHandlers/ModifyVariableHandler.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System.Diagnostics.CodeAnalysis;
-using Elsa.Alterations.AlterationTypes;
-using Elsa.Alterations.Core.Abstractions;
-using Elsa.Alterations.Core.Contexts;
-using Elsa.Extensions;
-using Elsa.Workflows;
-using Elsa.Workflows.Activities;
-using Elsa.Workflows.Memory;
-using JetBrains.Annotations;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.Alterations.AlterationHandlers;
-
-///
-/// Modifies a workflow variable.
-///
-[UsedImplicitly]
-public class ModifyVariableHandler : AlterationHandlerBase
-{
- ///
- [RequiresUnreferencedCode("Calls System.Text.Json.JsonSerializer.Serialize(TValue, JsonSerializerOptions)")]
- protected override async ValueTask HandleAsync(AlterationContext context, ModifyVariable alteration)
- {
- var workflow = context.Workflow;
- var cancellationToken = context.CancellationToken;
- var variable = await FindVariable(context, alteration, workflow, cancellationToken);
-
- if (variable == null)
- {
- context.Fail($"Variable with ID {alteration.VariableId} not found");
- return;
- }
-
- var convertedValue = variable.ParseValue(alteration.Value);
- UpdateVariable(context, variable, convertedValue);
- context.Succeed();
- }
-
- private void UpdateVariable(AlterationContext context, Variable variable, object? value)
- {
- var activityExecutionContext = FindActivityExecutionContextContainingVariable(context, variable);
-
- if (activityExecutionContext == null)
- {
- context.Fail($"Activity execution context containing variable with ID {variable.Id} not found");
- return;
- }
-
- variable.Set(activityExecutionContext, value);
- }
-
- private ActivityExecutionContext? FindActivityExecutionContextContainingVariable(AlterationContext context, Variable variable)
- {
- var query =
- from activityExecutionContext in context.WorkflowExecutionContext.ActivityExecutionContexts
- from var in activityExecutionContext.Variables
- where var.Id == variable.Id
- select activityExecutionContext;
-
- return query.FirstOrDefault();
- }
-
- private async Task FindVariable(AlterationContext context, ModifyVariable alteration, Workflow workflow, CancellationToken cancellationToken)
- {
- var activityVisitor = context.ServiceProvider.GetRequiredService();
- var graph = await activityVisitor.VisitAsync(workflow, cancellationToken);
- var flattenedList = graph.Flatten().ToList();
-
- return flattenedList
- .Where(x => x.Activity is IVariableContainer)
- .SelectMany(x => ((IVariableContainer)x.Activity).Variables)
- .FirstOrDefault(x => x.Id == alteration.VariableId);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/ScheduleActivityHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/ScheduleActivityHandler.cs
deleted file mode 100644
index 89c7fd9c6e..0000000000
--- a/src/modules/Elsa.Alterations/AlterationHandlers/ScheduleActivityHandler.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using Elsa.Alterations.AlterationTypes;
-using Elsa.Alterations.Core.Abstractions;
-using Elsa.Alterations.Core.Contexts;
-using Elsa.Extensions;
-using Elsa.Workflows;
-using Elsa.Workflows.Signals;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.AlterationHandlers;
-
-///
-/// Schedules an activity for execution.
-///
-[UsedImplicitly]
-public class ScheduleActivityHandler : AlterationHandlerBase
-{
- ///
- protected override async ValueTask HandleAsync(AlterationContext context, ScheduleActivity alteration)
- {
- if (alteration.ActivityInstanceId == null && alteration.ActivityId == null)
- {
- context.Fail("Either ActivityInstanceId or ActivityId must be specified");
- return;
- }
-
- var workflowExecutionContext = context.WorkflowExecutionContext;
- var existingActivityExecutionContext = GetActivityExecutionContext(context, alteration);
-
- if (existingActivityExecutionContext != null)
- {
- // If the activity is in a faulted state, reset it to Running.
- if (existingActivityExecutionContext.Status == ActivityStatus.Faulted)
- existingActivityExecutionContext.TransitionTo(ActivityStatus.Running);
-
- // Schedule the activity execution context.
- var parentContext = existingActivityExecutionContext.ParentActivityExecutionContext;
- await parentContext!.SendSignalAsync(new ScheduleChildActivity(existingActivityExecutionContext));
- context.Succeed();
- return;
- }
-
- // Schedule a new activity instance.
- var activityId = alteration.ActivityId;
-
- if (activityId == null)
- {
- context.Fail("No existing activity execution context was found and no activity ID was specified");
- return;
- }
-
- var activityNode = workflowExecutionContext.FindNodeByActivityId(activityId);
-
- if (activityNode == null)
- {
- context.Fail($"Activity with ID {activityId} not found");
- return;
- }
-
- // Find the parent activity execution context within which to schedule the activity.
- var parentActivityContexts = workflowExecutionContext.ActivityExecutionContexts.Reverse().ToList();
-
- var parentExecutionContext =
- (from ancestorNode in activityNode.Ancestors()
- from parentActivityContext in parentActivityContexts
- where parentActivityContext.Activity.Id == ancestorNode.Activity.Id
- select parentActivityContext).FirstOrDefault();
-
- if (parentExecutionContext == null)
- {
- context.Fail($"Could not find parent activity execution context for activity with ID {activityId}");
- return;
- }
-
- await parentExecutionContext.SendSignalAsync(new ScheduleChildActivity(activityNode.Activity));
- context.Succeed();
- }
-
- private static ActivityExecutionContext? GetActivityExecutionContext(AlterationContext context, ScheduleActivity alteration)
- {
- if (alteration.ActivityInstanceId != null)
- return context.WorkflowExecutionContext.ActivityExecutionContexts.FirstOrDefault(x => x.Id == alteration.ActivityInstanceId);
-
- return null;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs b/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs
deleted file mode 100644
index c0a5f7fded..0000000000
--- a/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Elsa.Alterations.Core.Abstractions;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.AlterationTypes;
-
-///
-/// Cancels the workflow instances in an alteration plan.
-///
-[UsedImplicitly]
-public class Cancel : AlterationBase;
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationTypes/CancelActivity.cs b/src/modules/Elsa.Alterations/AlterationTypes/CancelActivity.cs
deleted file mode 100644
index 15083bae94..0000000000
--- a/src/modules/Elsa.Alterations/AlterationTypes/CancelActivity.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Elsa.Alterations.Core.Abstractions;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.AlterationTypes;
-
-///
-/// Cancels an activity.
-///
-[UsedImplicitly]
-public class CancelActivity : AlterationBase
-{
- ///
- /// The ID of the activity to be cancelled. If not specified, the activity instance ID will be used.
- ///
- public string? ActivityId { get; set; }
-
- ///
- /// The ID of the activity instance to be cancelled. If specified, overrides .
- ///
- public string? ActivityInstanceId { get; set; }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationTypes/Migrate.cs b/src/modules/Elsa.Alterations/AlterationTypes/Migrate.cs
deleted file mode 100644
index 2097bedc0f..0000000000
--- a/src/modules/Elsa.Alterations/AlterationTypes/Migrate.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Elsa.Alterations.Core.Abstractions;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.AlterationTypes;
-
-///
-/// Migrates a workflow instance to a newer version.
-///
-[UsedImplicitly]
-public class Migrate : AlterationBase
-{
- ///
- /// The target version to upgrade to.
- ///
- public int TargetVersion { get; set; }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationTypes/ModifyVariable.cs b/src/modules/Elsa.Alterations/AlterationTypes/ModifyVariable.cs
deleted file mode 100644
index 179a94e459..0000000000
--- a/src/modules/Elsa.Alterations/AlterationTypes/ModifyVariable.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Elsa.Alterations.Core.Abstractions;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.AlterationTypes;
-
-///
-/// Modifies a variable.
-///
-[UsedImplicitly]
-public class ModifyVariable : AlterationBase
-{
- ///
- /// The ID of the variable to modify.
- ///
- public string VariableId { get; set; } = default!;
-
- ///
- /// The new value of the variable.
- ///
- public object? Value { get; set; }
-
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/AlterationTypes/ScheduleActivity.cs b/src/modules/Elsa.Alterations/AlterationTypes/ScheduleActivity.cs
deleted file mode 100644
index de447852ea..0000000000
--- a/src/modules/Elsa.Alterations/AlterationTypes/ScheduleActivity.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Elsa.Alterations.Core.Abstractions;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.AlterationTypes;
-
-///
-/// Schedules an activity for execution.
-///
-[UsedImplicitly]
-public class ScheduleActivity : AlterationBase
-{
- ///
- /// The ID of the next activity to be scheduled. If not specified, the ActivityInstanceId will be used.
- ///
- public string? ActivityId { get; set; }
-
- ///
- /// The ID of the activity instance to be scheduled. If not specified, the ActivityId will be used.
- ///
- public string? ActivityInstanceId { get; set; }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Bookmarks/AlterationPlanCompletedPayload.cs b/src/modules/Elsa.Alterations/Bookmarks/AlterationPlanCompletedPayload.cs
deleted file mode 100644
index 2c1f6e99e3..0000000000
--- a/src/modules/Elsa.Alterations/Bookmarks/AlterationPlanCompletedPayload.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Elsa.Alterations.Activities;
-
-namespace Elsa.Alterations.Bookmarks;
-
-///
-/// Represents bookmark payload for the trigger.
-///
-/// The ID of the alteration plan.
-public record AlterationPlanCompletedPayload(string PlanId);
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Constants/AlterationFaultCategories.cs b/src/modules/Elsa.Alterations/Constants/AlterationFaultCategories.cs
deleted file mode 100644
index dc528751e6..0000000000
--- a/src/modules/Elsa.Alterations/Constants/AlterationFaultCategories.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Elsa.Alterations;
-
-public static class AlterationFaultCategories
-{
- public const string Alteration = "Alteration";
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Constants/AlterationFaultCodes.cs b/src/modules/Elsa.Alterations/Constants/AlterationFaultCodes.cs
deleted file mode 100644
index f3ea75e92f..0000000000
--- a/src/modules/Elsa.Alterations/Constants/AlterationFaultCodes.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Elsa.Alterations;
-
-public static class AlterationFaultCodes
-{
- public const string PlanNotFound = "PlanNotFound";
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Elsa.Alterations.csproj b/src/modules/Elsa.Alterations/Elsa.Alterations.csproj
deleted file mode 100644
index 10d13fd535..0000000000
--- a/src/modules/Elsa.Alterations/Elsa.Alterations.csproj
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- Provides alterations for workflow instances.
-
- elsa module alterations
-
-
-
-
-
-
-
-
diff --git a/src/modules/Elsa.Alterations/Elsa.Alterations.csproj.DotSettings b/src/modules/Elsa.Alterations/Elsa.Alterations.csproj.DotSettings
deleted file mode 100644
index fa77252972..0000000000
--- a/src/modules/Elsa.Alterations/Elsa.Alterations.csproj.DotSettings
+++ /dev/null
@@ -1,2 +0,0 @@
-
- True
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Endpoint.cs
deleted file mode 100644
index f401755221..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Endpoint.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using Elsa.Abstractions;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Models;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Endpoints.Alterations.DryRun;
-
-///
-/// Determines which workflow instances a "Submit" request would target without actually running an alteration.
-///
-[PublicAPI]
-public class DryRun(IWorkflowInstanceFinder workflowInstanceFinder) : ElsaEndpoint
-{
- ///
- public override void Configure()
- {
- Post("/alterations/dry-run");
- ConfigurePermissions("run:alterations");
- }
-
- ///
- public override async Task HandleAsync(AlterationWorkflowInstanceFilter filter, CancellationToken cancellationToken)
- {
- var workflowInstanceIds = await workflowInstanceFinder.FindAsync(filter, cancellationToken);
- var response = new Response(workflowInstanceIds.ToList());
- await SendOkAsync(response, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Response.cs
deleted file mode 100644
index fdae58b051..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Response.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Elsa.Alterations.Endpoints.Alterations.DryRun;
-
-///
-/// The response from the endpoint.
-///
-public record Response(ICollection WorkflowInstanceIds);
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Endpoint.cs
deleted file mode 100644
index 7c4be8ebe5..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Endpoint.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using Elsa.Abstractions;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Filters;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Endpoints.Alterations.Get;
-
-///
-/// Gets an alteration plan and its associated jobs.
-///
-[PublicAPI]
-public class Get : ElsaEndpointWithoutRequest
-{
- private readonly IAlterationPlanStore _alterationPlanStore;
- private readonly IAlterationJobStore _alterationJobStore;
-
- ///
- public Get(IAlterationPlanStore alterationPlanStore, IAlterationJobStore alterationJobStore)
- {
- _alterationPlanStore = alterationPlanStore;
- _alterationJobStore = alterationJobStore;
- }
-
- ///
- public override void Configure()
- {
- Get("/alterations/{id}");
- ConfigurePermissions("read:alterations");
- }
-
- ///
- public override async Task HandleAsync(CancellationToken cancellationToken)
- {
- var planId = Route("id");
-
- // Load the plan.
- var plan = await _alterationPlanStore.FindAsync(new AlterationPlanFilter { Id = planId }, cancellationToken);
-
- if (plan == null)
- {
- await SendNotFoundAsync(cancellationToken);
- return;
- }
-
- // Load the jobs.
- var jobs = (await _alterationJobStore.FindManyAsync(new AlterationJobFilter { PlanId = planId }, cancellationToken)).ToList();
-
- // Write response.
- var response = new Response(plan, jobs);
- await SendOkAsync(response, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Response.cs
deleted file mode 100644
index 673a776802..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Response.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Elsa.Alterations.Core.Entities;
-
-namespace Elsa.Alterations.Endpoints.Alterations.Get;
-
-///
-/// Represents a response to a request to get an alteration plan.
-///
-/// The alteration plan.
-/// The jobs created for the plan.
-public record Response(AlterationPlan Plan, ICollection Jobs);
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Endpoint.cs
deleted file mode 100644
index a1d090e5ef..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Endpoint.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using Elsa.Abstractions;
-using Elsa.Alterations.Core.Contracts;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Endpoints.Alterations.Run;
-
-///
-/// Executes an alteration plan by targeting workflow instances by ID.
-///
-[PublicAPI]
-public class Run : ElsaEndpoint
-{
- private readonly IAlterationRunner _alterationRunner;
- private readonly IAlteredWorkflowDispatcher _workflowDispatcher;
-
- ///
- public Run(IAlterationRunner alterationRunner, IAlteredWorkflowDispatcher workflowDispatcher)
- {
- _alterationRunner = alterationRunner;
- _workflowDispatcher = workflowDispatcher;
- }
-
- ///
- public override void Configure()
- {
- Post("/alterations/run");
- ConfigurePermissions("run:alterations");
- }
-
- ///
- public override async Task HandleAsync(Request request, CancellationToken cancellationToken)
- {
- // Run the alterations.
- var results = await _alterationRunner.RunAsync(request.WorkflowInstanceIds, request.Alterations, cancellationToken);
-
- // Schedule each successfully updated workflow containing scheduled work.
- await _workflowDispatcher.DispatchAsync(results, cancellationToken);
-
- // Write response.
- var response = new Response(results);
- await SendOkAsync(response, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Request.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Request.cs
deleted file mode 100644
index 9b661f91ac..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Request.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-// ReSharper disable CollectionNeverUpdated.Global
-
-namespace Elsa.Alterations.Endpoints.Alterations.Run;
-
-///
-/// A plan that contains a list of alterations to be applied to a set of workflow instances.
-///
-public class Request
-{
- ///
- /// The alterations to be applied.
- ///
- public ICollection Alterations { get; set; } = new List();
-
- ///
- /// The IDs of the workflow instances that this plan applies to.
- ///
- public ICollection WorkflowInstanceIds { get; set; } = new List();
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Response.cs
deleted file mode 100644
index d2b04d6e31..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Response.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using Elsa.Alterations.Core.Results;
-
-namespace Elsa.Alterations.Endpoints.Alterations.Run;
-
-///
-/// The response from the endpoint.
-///
-public record Response(ICollection Results);
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Endpoint.cs
deleted file mode 100644
index e7ba1233fa..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Endpoint.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using Elsa.Abstractions;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Models;
-using Elsa.Common;
-using Elsa.Workflows;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Endpoints.Alterations.Submit;
-
-///
-/// Submits an alteration plan to be executed targeting workflow instances by a filter.
-///
-[PublicAPI]
-public class Submit : ElsaEndpoint
-{
- private readonly IAlterationPlanScheduler _alterationPlanScheduler;
- private readonly IIdentityGenerator _identityGenerator;
- private readonly ISystemClock _systemClock;
-
- ///
- public Submit(IAlterationPlanScheduler alterationPlanScheduler, IIdentityGenerator identityGenerator, ISystemClock systemClock)
- {
- _alterationPlanScheduler = alterationPlanScheduler;
- _identityGenerator = identityGenerator;
- _systemClock = systemClock;
- }
-
- ///
- public override void Configure()
- {
- Post("/alterations/submit");
- ConfigurePermissions("run:alterations");
- }
-
- ///
- public override async Task HandleAsync(AlterationPlanParams planParams, CancellationToken cancellationToken)
- {
- // Submit the plan.
- var planId = await _alterationPlanScheduler.SubmitAsync(planParams, cancellationToken);
-
- // Write response.
- var response = new Response(planId);
- await SendOkAsync(response, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Response.cs
deleted file mode 100644
index f888d378f0..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Response.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Elsa.Alterations.Endpoints.Alterations.Submit;
-
-///
-/// The response from the endpoint.
-///
-public record Response(string PlanId);
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Endpoint.cs
deleted file mode 100644
index c690f65ab2..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Endpoint.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using Elsa.Abstractions;
-using Elsa.Alterations.AlterationTypes;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Results;
-using Elsa.Workflows.Management;
-using Elsa.Workflows.Management.Entities;
-using Elsa.Workflows.Management.Filters;
-using Elsa.Workflows.Runtime;
-using Elsa.Workflows.Runtime.Contracts;
-using Elsa.Workflows.Runtime.Requests;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Endpoints.Workflows.Retry;
-
-///
-/// Retries the specified workflow instances.
-///
-[PublicAPI]
-public class Retry : ElsaEndpoint
-{
- private readonly IAlterationRunner _alterationRunner;
- private readonly IWorkflowDispatcher _workflowDispatcher;
- private readonly IWorkflowInstanceStore _workflowInstanceStore;
-
- ///
- public Retry(IAlterationRunner alterationRunner, IWorkflowDispatcher workflowDispatcher, IWorkflowInstanceStore workflowInstanceStore)
- {
- _alterationRunner = alterationRunner;
- _workflowDispatcher = workflowDispatcher;
- _workflowInstanceStore = workflowInstanceStore;
- }
-
- ///
- public override void Configure()
- {
- Routes("/alterations/workflows/retry");
- Verbs(FastEndpoints.Http.GET, FastEndpoints.Http.POST);
- ConfigurePermissions("run:alterations");
- }
-
- ///
- public override async Task HandleAsync(Request request, CancellationToken cancellationToken)
- {
- var allResults = new List();
-
- // Load each workflow instance.
- var workflowInstances = (await _workflowInstanceStore.FindManyAsync(new WorkflowInstanceFilter { Ids = request.WorkflowInstanceIds }, cancellationToken)).ToList();
-
- foreach (var workflowInstance in workflowInstances)
- {
- // Setup an alteration plan.
- var activityIds = GetActivityIds(request, workflowInstance).ToList();
- var alterations = activityIds.Select(activityId => new ScheduleActivity { ActivityId = activityId }).Cast().ToList();
-
- // Run the plan.
- var results = await _alterationRunner.RunAsync(request.WorkflowInstanceIds, alterations, cancellationToken);
- allResults.AddRange(results);
-
- // Schedule updated workflow.
- await _workflowDispatcher.DispatchAsync(new DispatchWorkflowInstanceRequest(workflowInstance.Id), cancellationToken: cancellationToken);
- }
-
- // Write response.
- var response = new Response(allResults);
- await SendOkAsync(response, cancellationToken);
- }
-
- private IEnumerable GetActivityIds(Request request, WorkflowInstance workflowInstance)
- {
- // If activity IDs are explicitly specified, use them.
- if (request.ActivityIds?.Any() == true)
- return request.ActivityIds;
-
- // Otherwise, select IDs of all faulted activities.
- return workflowInstance.WorkflowState.Incidents.Select(x => x.ActivityId).Distinct().ToList();
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Request.cs b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Request.cs
deleted file mode 100644
index 7539fe3e75..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Request.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace Elsa.Alterations.Endpoints.Workflows.Retry;
-
-///
-/// A request to retry one or more faulted workflow instances.
-///
-public class Request
-{
- ///
- /// The IDs of the workflow instances that have incidents to be retried.
- ///
- public ICollection WorkflowInstanceIds { get; set; } = new List();
-
- ///
- /// An optional list of explicitly specified activity IDs to retry. If omitted, all faulted activities will be retried.
- ///
- public ICollection? ActivityIds { get; set; }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Response.cs
deleted file mode 100644
index 99a910c6b5..0000000000
--- a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Response.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using Elsa.Alterations.Core.Results;
-
-namespace Elsa.Alterations.Endpoints.Workflows.Retry;
-
-///
-/// The response from the endpoint.
-///
-public record Response(ICollection Results);
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Alterations/Extensions/ModuleExtensions.cs
deleted file mode 100644
index 9361504686..0000000000
--- a/src/modules/Elsa.Alterations/Extensions/ModuleExtensions.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Elsa.Alterations.Features;
-using Elsa.Extensions;
-using Elsa.Features.Services;
-
-namespace Elsa.Alterations.Extensions;
-
-///
-/// Adds the .
-///
-public static class ModuleExtensions
-{
- ///
- /// Adds the .
- ///
- public static IModule UseAlterations(this IModule module, Action? configure = default)
- {
- return module.Use(configure);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs b/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs
deleted file mode 100644
index b930d28783..0000000000
--- a/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using Elsa.Alterations.AlterationHandlers;
-using Elsa.Alterations.AlterationTypes;
-using Elsa.Alterations.Core.Extensions;
-using Elsa.Alterations.Features;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.Alterations.Extensions;
-
-///
-/// Extension methods for .
-///
-public static class ServiceCollectionExtensions
-{
- ///
- /// Adds various alteration handlers.
- ///
- public static IServiceCollection AddAlterations(this IServiceCollection services)
- {
- services.AddAlteration();
- services.AddAlteration();
- services.AddAlteration();
- services.AddAlteration();
- services.AddAlteration();
- services.AddNotificationHandlersFrom();
- return services;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Features/AlterationsFeature.cs b/src/modules/Elsa.Alterations/Features/AlterationsFeature.cs
deleted file mode 100644
index 426a34109c..0000000000
--- a/src/modules/Elsa.Alterations/Features/AlterationsFeature.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Extensions;
-using Elsa.Alterations.Core.Stores;
-using Elsa.Alterations.Extensions;
-using Elsa.Alterations.Services;
-using Elsa.Alterations.Workflows;
-using Elsa.Extensions;
-using Elsa.Features.Abstractions;
-using Elsa.Features.Services;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.Alterations.Features;
-
-///
-/// Adds the Elsa alterations services.
-///
-public class AlterationsFeature : FeatureBase
-{
- ///
- public AlterationsFeature(IModule module) : base(module)
- {
- }
-
- ///
- /// Gets or sets the factory for the alteration plan store.
- ///
- public Func AlterationPlanStoreFactory { get; set; } = sp => sp.GetRequiredService();
-
- ///
- /// Gets or sets the factory for the alteration job store.
- ///
- public Func AlterationJobStoreFactory { get; set; } = sp => sp.GetRequiredService();
-
- ///
- /// Gets or sets the factory for the alteration job dispatcher.
- ///
- public Func AlterationJobDispatcherFactory { get; set; } = sp => sp.GetRequiredService();
-
- ///
- /// Adds an alteration and its handler.
- ///
- /// The type of alteration.
- /// The type of alteration handler.
- public AlterationsFeature AddAlteration() where T : class, IAlteration where THandler : class, IAlterationHandler
- {
- Services.AddAlteration();
- return this;
- }
-
- ///
- public override void Configure()
- {
- Module.AddFastEndpointsAssembly();
- Module.AddWorkflow();
- }
-
- ///
- public override void Apply()
- {
- Services.AddScoped();
- Services.AddAlterations();
- Services.AddAlterationsCore();
- Services.AddScoped();
- Services.AddScoped();
- Services.AddScoped();
- Services.AddScoped();
-
- Services.AddMemoryStore();
- Services.AddMemoryStore();
-
- Services.AddScoped(AlterationPlanStoreFactory);
- Services.AddScoped(AlterationJobStoreFactory);
- Services.AddScoped(AlterationJobDispatcherFactory);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Handlers/AlterationJobCompletedHandler.cs b/src/modules/Elsa.Alterations/Handlers/AlterationJobCompletedHandler.cs
deleted file mode 100644
index e9b2758e5d..0000000000
--- a/src/modules/Elsa.Alterations/Handlers/AlterationJobCompletedHandler.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Notifications;
-using Elsa.Mediator.Contracts;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Handlers;
-
-///
-/// Handles notifications and updates the plan status if all jobs are completed.
-///
-[UsedImplicitly]
-public class AlterationJobCompletedHandler(IAlterationPlanManager manager) : INotificationHandler
-{
- ///
- public async Task HandleAsync(AlterationJobCompleted notification, CancellationToken cancellationToken)
- {
- var job = notification.Job;
- var planId = job.PlanId;
- var plan = (await manager.GetPlanAsync(planId, cancellationToken))!;
- var allJobsCompleted = await manager.GetIsAllJobsCompletedAsync(planId, cancellationToken);
-
- if(!allJobsCompleted)
- return;
-
- await manager.CompletePlanAsync(plan, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Handlers/AlterationPlanCompletedHandler.cs b/src/modules/Elsa.Alterations/Handlers/AlterationPlanCompletedHandler.cs
deleted file mode 100644
index f9b6050557..0000000000
--- a/src/modules/Elsa.Alterations/Handlers/AlterationPlanCompletedHandler.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using Elsa.Alterations.Bookmarks;
-using Elsa.Alterations.Core.Notifications;
-using Elsa.Mediator.Contracts;
-using Elsa.Workflows;
-using Elsa.Workflows.Helpers;
-using Elsa.Workflows.Runtime;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Handlers;
-
-///
-/// Handles notifications and triggers any workflows that are waiting for the plan to complete.
-///
-[UsedImplicitly]
-public class AlterationPlanCompletedHandler(IBookmarkQueue bookmarkQueue, IStimulusHasher stimulusHasher) : INotificationHandler
-{
- ///
- public async Task HandleAsync(AlterationPlanCompleted notification, CancellationToken cancellationToken)
- {
- // Trigger any workflow instances that are waiting for the plan to complete.
- var planId = notification.Plan.Id;
- var bookmarkPayload = new AlterationPlanCompletedPayload(planId);
- var activityTypeName = ActivityTypeNameHelper.GenerateTypeName();
- var item = new NewBookmarkQueueItem
- {
- ActivityTypeName = activityTypeName,
- StimulusHash = stimulusHasher.Hash(activityTypeName, bookmarkPayload)
- };
- await bookmarkQueue.EnqueueAsync(item, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Handlers/ResumeWorkflowInstance.cs b/src/modules/Elsa.Alterations/Handlers/ResumeWorkflowInstance.cs
deleted file mode 100644
index 91bb827a45..0000000000
--- a/src/modules/Elsa.Alterations/Handlers/ResumeWorkflowInstance.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using Elsa.Alterations.Core.Enums;
-using Elsa.Alterations.Core.Notifications;
-using Elsa.Mediator.Contracts;
-using Elsa.Workflows.Runtime;
-using Elsa.Workflows.Runtime.Contracts;
-using Elsa.Workflows.Runtime.Requests;
-using JetBrains.Annotations;
-
-namespace Elsa.Alterations.Handlers;
-
-///
-/// Resumes a workflow instance when an alteration job has been completed and the workflow contains scheduled work.
-///
-[UsedImplicitly]
-public class ResumeWorkflowInstance : INotificationHandler
-{
- private readonly IWorkflowDispatcher _workflowDispatcher;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public ResumeWorkflowInstance(IWorkflowDispatcher workflowDispatcher)
- {
- _workflowDispatcher = workflowDispatcher;
- }
-
- ///
- public async Task HandleAsync(AlterationJobCompleted notification, CancellationToken cancellationToken)
- {
- var job = notification.Job;
-
- // Check if job is completed.
- if(job.Status != AlterationJobStatus.Completed)
- return;
-
- // Check if the workflow contains scheduled work.
- if(!notification.WorkflowContainsScheduledWork)
- return;
-
- // Resume workflow instance.
- await _workflowDispatcher.DispatchAsync(new DispatchWorkflowInstanceRequest(job.WorkflowInstanceId), cancellationToken: cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Middleware/Workflows/RunAlterationsMiddleware.cs b/src/modules/Elsa.Alterations/Middleware/Workflows/RunAlterationsMiddleware.cs
deleted file mode 100644
index f412a8cb72..0000000000
--- a/src/modules/Elsa.Alterations/Middleware/Workflows/RunAlterationsMiddleware.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using Elsa.Alterations.Core.Contexts;
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Models;
-using Elsa.Extensions;
-using Elsa.Workflows;
-using Elsa.Workflows.Pipelines.WorkflowExecution;
-
-namespace Elsa.Alterations.Middleware.Workflows;
-
-///
-/// Middleware that runs alterations.
-///
-internal class RunAlterationsMiddleware(WorkflowMiddlewareDelegate next, IEnumerable handlers) : WorkflowExecutionMiddleware(next)
-{
- public static readonly object AlterationsPropertyKey = new();
- public static readonly object AlterationsLogPropertyKey = new();
-
- public override async ValueTask InvokeAsync(WorkflowExecutionContext context)
- {
- var alterations = (IEnumerable)(context.TransientProperties.GetValue(AlterationsPropertyKey) ?? throw new InvalidOperationException("No alterations found in the transient properties."));
- var log = (AlterationLog)(context.TransientProperties.GetValue(AlterationsLogPropertyKey) ?? throw new InvalidOperationException("No alteration log found in the transient properties."));
- await RunAsync(context, alterations, log, context.CancellationToken);
- }
-
- private async Task RunAsync(WorkflowExecutionContext workflowExecutionContext, IEnumerable alterations, AlterationLog log, CancellationToken cancellationToken = default)
- {
- var commitActions = new List>();
-
- foreach (var alteration in alterations)
- {
- // Find handlers.
- var supportedHandlers = handlers.Where(x => x.CanHandle(alteration)).ToList();
-
- foreach (var handler in supportedHandlers)
- {
- // Execute handler.
- var alterationContext = new AlterationContext(alteration, workflowExecutionContext, log, cancellationToken);
- await handler.HandleAsync(alterationContext);
-
- // If the handler has failed, exit.
- if (alterationContext.HasFailed)
- return;
-
- // Collect the commit handler, if any.
- if (alterationContext.CommitAction != null)
- commitActions.Add(alterationContext.CommitAction);
- }
- }
-
- // Execute commit handlers.
- foreach (var commitAction in commitActions)
- await commitAction();
-
- // Add alteration logs to the workflow execution log.
- foreach (var alterationLogEntry in log.LogEntries)
- workflowExecutionContext.AddExecutionLogEntry(alterationLogEntry.EventName ?? alterationLogEntry.Message, alterationLogEntry.Message);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Services/AlterationPlanManager.cs b/src/modules/Elsa.Alterations/Services/AlterationPlanManager.cs
deleted file mode 100644
index 23e054216f..0000000000
--- a/src/modules/Elsa.Alterations/Services/AlterationPlanManager.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Enums;
-using Elsa.Alterations.Core.Filters;
-using Elsa.Alterations.Core.Notifications;
-using Elsa.Common;
-using Elsa.Mediator.Contracts;
-
-namespace Elsa.Alterations.Services;
-
-///
-public class AlterationPlanManager(IAlterationPlanStore planStore, IAlterationJobStore jobStore, ISystemClock systemClock, INotificationSender notificationSender) : IAlterationPlanManager
-{
- ///
- public async Task GetPlanAsync(string planId, CancellationToken cancellationToken = default)
- {
- var planFilter = new AlterationPlanFilter { Id = planId };
- return await planStore.FindAsync(planFilter, cancellationToken);
- }
-
- ///
- public async Task GetIsAllJobsCompletedAsync(string planId, CancellationToken cancellationToken = default)
- {
- // Check if all jobs are completed.
- var jobFilter = new AlterationJobFilter
- {
- PlanId = planId,
- Statuses = [AlterationJobStatus.Pending, AlterationJobStatus.Running]
- };
-
- return await jobStore.CountAsync(jobFilter, cancellationToken) == 0;
- }
-
- ///
- public async Task CompletePlanAsync(AlterationPlan plan, CancellationToken cancellationToken = default)
- {
- plan.Status = AlterationPlanStatus.Completed;
- plan.CompletedAt = systemClock.UtcNow;
-
- await planStore.SaveAsync(plan, cancellationToken);
- await notificationSender.SendAsync(new AlterationPlanCompleted(plan), cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Services/BackgroundAlterationJobDispatcher.cs b/src/modules/Elsa.Alterations/Services/BackgroundAlterationJobDispatcher.cs
deleted file mode 100644
index 65e3b9ace7..0000000000
--- a/src/modules/Elsa.Alterations/Services/BackgroundAlterationJobDispatcher.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Mediator.Contracts;
-
-namespace Elsa.Alterations.Services;
-
-///
-/// Dispatches an alteration job for execution using an in-memory channel.
-///
-public class BackgroundAlterationJobDispatcher : IAlterationJobDispatcher
-{
- private readonly IJobQueue _jobQueue;
- private readonly IAlterationJobRunner _alterationJobRunner;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public BackgroundAlterationJobDispatcher(IJobQueue jobQueue, IAlterationJobRunner alterationJobRunner)
- {
- _jobQueue = jobQueue;
- _alterationJobRunner = alterationJobRunner;
- }
-
- ///
- public ValueTask DispatchAsync(string jobId, CancellationToken cancellationToken = default)
- {
- _jobQueue.Enqueue(ct => ExecuteJobAsync(jobId, ct));
- return default;
- }
-
- private async Task ExecuteJobAsync(string alterationJobId, CancellationToken cancellationToken)
- {
- await _alterationJobRunner.RunAsync(alterationJobId, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Services/DefaultAlterationJobRunner.cs b/src/modules/Elsa.Alterations/Services/DefaultAlterationJobRunner.cs
deleted file mode 100644
index 020d970a35..0000000000
--- a/src/modules/Elsa.Alterations/Services/DefaultAlterationJobRunner.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Entities;
-using Elsa.Alterations.Core.Enums;
-using Elsa.Alterations.Core.Filters;
-using Elsa.Alterations.Core.Notifications;
-using Elsa.Common;
-using Elsa.Mediator.Contracts;
-
-namespace Elsa.Alterations.Services;
-
-///
-public class DefaultAlterationJobRunner : IAlterationJobRunner
-{
- private readonly IAlterationPlanStore _alterationPlanStore;
- private readonly IAlterationJobStore _alterationJobStore;
- private readonly IAlterationRunner _alterationRunner;
- private readonly INotificationSender _notificationSender;
- private readonly ISystemClock _systemClock;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public DefaultAlterationJobRunner(
- IAlterationPlanStore alterationPlanStore,
- IAlterationJobStore alterationJobStore,
- IAlterationRunner alterationRunner,
- INotificationSender notificationSender,
- ISystemClock systemClock)
- {
- _alterationPlanStore = alterationPlanStore;
- _alterationJobStore = alterationJobStore;
- _alterationRunner = alterationRunner;
- _notificationSender = notificationSender;
- _systemClock = systemClock;
- }
-
- ///
- public async Task RunAsync(string jobId, CancellationToken cancellationToken = default)
- {
- var job = (await _alterationJobStore.FindAsync(new AlterationJobFilter { Id = jobId }, cancellationToken))!;
- var plan = (await _alterationPlanStore.FindAsync(new AlterationPlanFilter { Id = job.PlanId }, cancellationToken))!;
- var workflowInstanceId = job.WorkflowInstanceId;
-
- job.Status = AlterationJobStatus.Running;
- job.StartedAt = _systemClock.UtcNow;
- await _alterationJobStore.SaveAsync(job, cancellationToken);
-
- var result = await _alterationRunner.RunAsync(workflowInstanceId, plan.Alterations, cancellationToken);
-
- job.Status = result.IsSuccessful ? AlterationJobStatus.Completed : AlterationJobStatus.Failed;
- job.Log = result.Log.LogEntries.ToList();
- job.CompletedAt = _systemClock.UtcNow;
- await _alterationJobStore.SaveAsync(job, cancellationToken);
- await _notificationSender.SendAsync(new AlterationJobCompleted(job, result.WorkflowHasScheduledWork), cancellationToken);
-
- return job;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Services/DefaultAlterationPlanScheduler.cs b/src/modules/Elsa.Alterations/Services/DefaultAlterationPlanScheduler.cs
deleted file mode 100644
index 4ab30f434c..0000000000
--- a/src/modules/Elsa.Alterations/Services/DefaultAlterationPlanScheduler.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Models;
-using Elsa.Alterations.Workflows;
-using Elsa.Common;
-using Elsa.Common.Models;
-using Elsa.Workflows;
-using Elsa.Workflows.Management;
-using Elsa.Workflows.Runtime;
-using Elsa.Workflows.Runtime.Contracts;
-using Elsa.Workflows.Runtime.Requests;
-
-namespace Elsa.Alterations.Services;
-
-///
-/// Stores the new plan and schedules it for immediate execution.
-///
-public class DefaultAlterationPlanScheduler : IAlterationPlanScheduler
-{
- private readonly IWorkflowDefinitionService _workflowDefinitionService;
- private readonly IWorkflowDispatcher _workflowDispatcher;
- private readonly IIdentityGenerator _identityGenerator;
- private readonly IJsonSerializer _jsonSerializer;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public DefaultAlterationPlanScheduler(IWorkflowDefinitionService workflowDefinitionService, IWorkflowDispatcher workflowDispatcher, IIdentityGenerator identityGenerator, IJsonSerializer jsonSerializer)
- {
- _workflowDefinitionService = workflowDefinitionService;
- _workflowDispatcher = workflowDispatcher;
- _identityGenerator = identityGenerator;
- _jsonSerializer = jsonSerializer;
- }
-
- ///
- public async Task SubmitAsync(AlterationPlanParams planParams, CancellationToken cancellationToken = default)
- {
- if(string.IsNullOrWhiteSpace(planParams.Id))
- planParams.Id = _identityGenerator.GenerateId();
-
- var definitionId = ExecuteAlterationPlanWorkflow.WorkflowDefinitionId;
- var workflowGraph = await _workflowDefinitionService.FindWorkflowGraphAsync(definitionId, VersionOptions.Published, cancellationToken);
-
- if (workflowGraph == null)
- throw new($"Workflow definition with ID '{definitionId}' not found");
-
- var serializedPlan = _jsonSerializer.Serialize(planParams);
- var request = new DispatchWorkflowDefinitionRequest(workflowGraph.Workflow.Identity.Id)
- {
- Input = new Dictionary
- {
- ["Plan"] = serializedPlan
- }
- };
- await _workflowDispatcher.DispatchAsync(request, cancellationToken);
-
- return planParams.Id;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Services/DefaultAlterationRunner.cs b/src/modules/Elsa.Alterations/Services/DefaultAlterationRunner.cs
deleted file mode 100644
index 71317a1883..0000000000
--- a/src/modules/Elsa.Alterations/Services/DefaultAlterationRunner.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using Elsa.Alterations.Core.Contracts;
-using Elsa.Alterations.Core.Models;
-using Elsa.Alterations.Core.Results;
-using Elsa.Alterations.Middleware.Workflows;
-using Elsa.Common;
-using Elsa.Workflows;
-using Elsa.Workflows.Management;
-using Elsa.Workflows.Pipelines.WorkflowExecution;
-using Elsa.Workflows.Runtime;
-using Microsoft.Extensions.Logging;
-
-namespace Elsa.Alterations.Services;
-
-///
-public class DefaultAlterationRunner(
- IWorkflowRuntime workflowRuntime,
- IWorkflowExecutionPipeline workflowExecutionPipeline,
- IWorkflowDefinitionService workflowDefinitionService,
- IWorkflowStateExtractor workflowStateExtractor,
- ISystemClock systemClock,
- IServiceProvider serviceProvider)
- : IAlterationRunner
-{
- ///
- public async Task> RunAsync(IEnumerable workflowInstanceIds, IEnumerable alterations, CancellationToken cancellationToken = default)
- {
- var results = new List();
- var alterationList = alterations as ICollection ?? alterations.ToList();
-
- foreach (var workflowInstanceId in workflowInstanceIds)
- {
- var result = await RunAsync(workflowInstanceId, alterationList, cancellationToken);
- results.Add(result);
- }
-
- return results;
- }
-
- ///
- public async Task RunAsync(string workflowInstanceId, IEnumerable alterations, CancellationToken cancellationToken = default)
- {
- var log = new AlterationLog(systemClock);
- var result = new RunAlterationsResult(workflowInstanceId, log);
- var workflowClient = await workflowRuntime.CreateClientAsync(workflowInstanceId, cancellationToken: cancellationToken);
-
- // Load workflow instance.
- var workflowState = await workflowClient.ExportStateAsync(cancellationToken);
-
- if (workflowState == null)
- {
- log.Add($"Workflow instance with ID '{workflowInstanceId}' not found.", LogLevel.Error);
- return result;
- }
-
- // Load workflow definition.
- var workflowGraph = await workflowDefinitionService.FindWorkflowGraphAsync(workflowState.DefinitionVersionId, cancellationToken);
-
- if (workflowGraph == null)
- {
- log.Add($"Workflow definition with ID '{workflowState.DefinitionVersionId}' not found.", LogLevel.Error);
- return result;
- }
-
- // Create workflow execution context.
- var workflowExecutionContext = await WorkflowExecutionContext.CreateAsync(serviceProvider, workflowGraph, workflowState, cancellationToken: cancellationToken);
- workflowExecutionContext.TransientProperties.Add(RunAlterationsMiddleware.AlterationsPropertyKey, alterations);
- workflowExecutionContext.TransientProperties.Add(RunAlterationsMiddleware.AlterationsLogPropertyKey, log);
-
- // Build a new workflow execution pipeline.
- var pipelineBuilder = new WorkflowExecutionPipelineBuilder(serviceProvider);
- workflowExecutionPipeline.ConfigurePipelineBuilder(pipelineBuilder);
-
- // Replace the terminal DefaultActivitySchedulerMiddleware with the RunAlterationsMiddleware terminal.
- pipelineBuilder.ReplaceTerminal();
-
- // Build modified pipeline.
- var pipeline = pipelineBuilder.Build();
-
- // Execute the pipeline.
- await pipeline(workflowExecutionContext);
-
- // Extract workflow state.
- workflowState = workflowStateExtractor.Extract(workflowExecutionContext);
-
- // Apply updated workflow state.
- await workflowClient.ImportStateAsync(workflowState, cancellationToken);
-
- // Check if the workflow has scheduled work.
- result.WorkflowHasScheduledWork = workflowExecutionContext.Scheduler.HasAny;
-
- return result;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Alterations/Workflows/ExecuteAlterationPlanWorkflow.cs b/src/modules/Elsa.Alterations/Workflows/ExecuteAlterationPlanWorkflow.cs
deleted file mode 100644
index 0994c79ea7..0000000000
--- a/src/modules/Elsa.Alterations/Workflows/ExecuteAlterationPlanWorkflow.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using Elsa.Alterations.Activities;
-using Elsa.Alterations.Core.Models;
-using Elsa.Extensions;
-using Elsa.Workflows;
-using Elsa.Workflows.Activities;
-
-namespace Elsa.Alterations.Workflows;
-
-///
-/// Executes an alteration plan.
-///
-public class ExecuteAlterationPlanWorkflow : WorkflowBase
-{
- internal const string WorkflowDefinitionId = "Elsa.Alterations.ExecuteAlterationPlan";
-
- ///
- protected override void Build(IWorkflowBuilder builder)
- {
- builder.WithDefinitionId(WorkflowDefinitionId);
- builder.AsSystemWorkflow();
- var plan = builder.WithInput("Plan", "The parameters for the new plan");
- var planId = builder.WithVariable();
- var jobCount = builder.WithVariable();
-
- builder.Root = new Sequence
- {
- Activities =
- {
- new SubmitAlterationPlan
- {
- Params = new(context => context.GetInput(plan)!),
- Result = new(planId)
- },
- new Correlate(planId),
- new GenerateAlterationJobs(planId)
- {
- Result = new(jobCount)
- },
- new If(context => jobCount.Get(context) > 0)
- {
- Then = new DispatchAlterationJobs(planId),
- Else = new CompleteAlterationPlan(planId)
- },
- new AlterationPlanCompleted(planId),
- }
- };
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.CSharp/Elsa.CSharp.csproj b/src/modules/Elsa.CSharp/Elsa.CSharp.csproj
deleted file mode 100644
index 30083f4704..0000000000
--- a/src/modules/Elsa.CSharp/Elsa.CSharp.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- Provides a CSharp expression provider.
-
- elsa module expressions scripting csharp
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Consumers/TriggerChangeTokenSignalConsumer.cs b/src/modules/Elsa.Caching.Distributed.MassTransit/Consumers/TriggerChangeTokenSignalConsumer.cs
deleted file mode 100644
index 969533573f..0000000000
--- a/src/modules/Elsa.Caching.Distributed.MassTransit/Consumers/TriggerChangeTokenSignalConsumer.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Elsa.Caching.Distributed.MassTransit.Messages;
-using JetBrains.Annotations;
-using MassTransit;
-
-namespace Elsa.Caching.Distributed.MassTransit.Consumers;
-
-///
-/// Consumes messages and triggers the change token signal.
-///
-[UsedImplicitly]
-public class TriggerChangeTokenSignalConsumer(IChangeTokenSignalInvoker changeTokenSignalInvoker) : IConsumer
-{
- ///
- public async Task Consume(ConsumeContext context)
- {
- var message = context.Message;
- var cancellationToken = context.CancellationToken;
- await changeTokenSignalInvoker.TriggerTokenAsync(message.Key, cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Elsa.Caching.Distributed.MassTransit.csproj b/src/modules/Elsa.Caching.Distributed.MassTransit/Elsa.Caching.Distributed.MassTransit.csproj
deleted file mode 100644
index 16d6c0db77..0000000000
--- a/src/modules/Elsa.Caching.Distributed.MassTransit/Elsa.Caching.Distributed.MassTransit.csproj
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- Provides distributed caching services leveraging MassTransit for transport of signals.
-
- elsa module distributed caching masstransit
-
-
-
-
-
-
-
-
-
diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Caching.Distributed.MassTransit/Extensions/ModuleExtensions.cs
deleted file mode 100644
index 861da8c1e2..0000000000
--- a/src/modules/Elsa.Caching.Distributed.MassTransit/Extensions/ModuleExtensions.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using Elsa.Caching.Distributed.Features;
-using Elsa.Caching.Distributed.MassTransit.Features;
-using Elsa.Caching.Features;
-
-// ReSharper disable once CheckNamespace
-namespace Elsa.Extensions;
-
-///
-/// Provides methods to install and configure the distributed caching feature with MassTransit.
-///
-public static class ModuleExtensions
-{
- ///
- /// Configures the distributed caching feature to use MassTransit.
- ///
- public static MassTransitDistributedCacheFeature UseMassTransit(this DistributedCacheFeature distributedCacheFeature, Action? configure = default)
- {
- return distributedCacheFeature.Module.Configure(configure);
- }
-
- ///
- /// Configures the memory caching feature with the distributed caching feature that uses MassTransit.
- ///
- public static MemoryCacheFeature UseMassTransit(this MemoryCacheFeature memoryCacheFeature, Action? configure = default)
- {
- memoryCacheFeature.Module.Configure(configure);
- return memoryCacheFeature;
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Features/MassTransitDistributedCacheFeature.cs b/src/modules/Elsa.Caching.Distributed.MassTransit/Features/MassTransitDistributedCacheFeature.cs
deleted file mode 100644
index f325911b65..0000000000
--- a/src/modules/Elsa.Caching.Distributed.MassTransit/Features/MassTransitDistributedCacheFeature.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using Elsa.Caching.Distributed.Features;
-using Elsa.Caching.Distributed.MassTransit.Consumers;
-using Elsa.Caching.Distributed.MassTransit.Services;
-using Elsa.Extensions;
-using Elsa.Features.Abstractions;
-using Elsa.Features.Attributes;
-using Elsa.Features.Services;
-using Elsa.MassTransit.Features;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Elsa.Caching.Distributed.MassTransit.Features;
-
-///
-/// Configures distributed cache management with MassTransit.
-///
-[DependsOn(typeof(DistributedCacheFeature))]
-[DependsOn(typeof(MassTransitFeature))]
-public class MassTransitDistributedCacheFeature(IModule module) : FeatureBase(module)
-{
- ///
- public override void Configure()
- {
- Module.AddMassTransitConsumer("elsa-trigger-change-token-signal", true, true);
- Module.Use(feature => feature.WithChangeTokenSignalPublisher(sp => sp.GetRequiredService()));
- }
-
- ///
- public override void Apply()
- {
- Services.AddSingleton();
- }
-}
\ No newline at end of file
diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/FodyWeavers.xml b/src/modules/Elsa.Caching.Distributed.MassTransit/FodyWeavers.xml
deleted file mode 100644
index 00e1d9a1c1..0000000000
--- a/src/modules/Elsa.Caching.Distributed.MassTransit/FodyWeavers.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-