diff --git a/src/activities/Elsa.Activities.Http.OpenApi/Elsa.Activities.Http.OpenApi.csproj b/src/activities/Elsa.Activities.Http.OpenApi/Elsa.Activities.Http.OpenApi.csproj index 3f5a9045e4..c9683ddf2e 100644 --- a/src/activities/Elsa.Activities.Http.OpenApi/Elsa.Activities.Http.OpenApi.csproj +++ b/src/activities/Elsa.Activities.Http.OpenApi/Elsa.Activities.Http.OpenApi.csproj @@ -19,17 +19,22 @@ - + - - + + + + + + - - compile - + + + compile + diff --git a/src/activities/Elsa.Activities.Http.OpenApi/HttpEndpointDocumentFilter.cs b/src/activities/Elsa.Activities.Http.OpenApi/HttpEndpointDocumentFilter.cs index c3f52b292a..3ae7eaee0b 100644 --- a/src/activities/Elsa.Activities.Http.OpenApi/HttpEndpointDocumentFilter.cs +++ b/src/activities/Elsa.Activities.Http.OpenApi/HttpEndpointDocumentFilter.cs @@ -1,4 +1,4 @@ -using System.Runtime.CompilerServices; +using System.Runtime.CompilerServices; using Elsa.Activities.Http.Bookmarks; using Elsa.Activities.Http.Options; using Elsa.Models; @@ -7,7 +7,11 @@ using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; +#if NET10_0_OR_GREATER +using Microsoft.OpenApi; +#else using Microsoft.OpenApi.Models; +#endif using Open.Linq.AsyncExtensions; using Swashbuckle.AspNetCore.SwaggerGen; @@ -31,12 +35,16 @@ public HttpEndpointDocumentFilter(IServiceScopeFactory scopeFactory, ISchemaGene public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { +#if NET10_0_OR_GREATER + swaggerDoc.Tags ??= new HashSet(); +#else swaggerDoc.Tags ??= new List(); +#endif var tag = new OpenApiTag { Name = "Workflow Endpoints", - Description = "A collection of HTTP endpoints exposed by workflows", + Description = "A collection of HTTP endpoints exposed by workflows" }; var schemaRepository = context.SchemaRepository; @@ -55,17 +63,21 @@ public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) Description = first.Description, Operations = grouping.ToDictionary(GetOperationType, httpEndpoint => { - var operation = new OpenApiOperation - { - Tags = { tag }, - }; + var operation = new OpenApiOperation(); + +#if NET10_0_OR_GREATER + operation.Tags ??= new HashSet(); + operation.Tags.Add(new OpenApiTagReference(tag.Name, swaggerDoc)); +#else + operation.Tags.Add(tag); +#endif - if (httpEndpoint.TargetType != null || httpEndpoint.JsonSchema != null) + if (httpEndpoint.TargetType != null || !string.IsNullOrWhiteSpace(httpEndpoint.JsonSchema)) { operation.RequestBody = new OpenApiRequestBody { Required = true, - Content = + Content = new Dictionary { ["Unspecified"] = new OpenApiMediaType { @@ -126,6 +138,21 @@ private async Task GetHttpEndpointDescriptor( return new HttpEndpointDescriptor(activityId, path, method, displayName, description, targetType, schema); } +#if NET10_0_OR_GREATER + private HttpMethod GetOperationType(HttpEndpointDescriptor httpEndpoint) => + httpEndpoint.Method switch + { + { } s when s.Equals(HttpMethods.Get, StringComparison.OrdinalIgnoreCase) => HttpMethod.Get, + { } s when s.Equals(HttpMethods.Post, StringComparison.OrdinalIgnoreCase) => HttpMethod.Post, + { } s when s.Equals(HttpMethods.Patch, StringComparison.OrdinalIgnoreCase) => HttpMethod.Patch, + { } s when s.Equals(HttpMethods.Delete, StringComparison.OrdinalIgnoreCase) => HttpMethod.Delete, + { } s when s.Equals(HttpMethods.Put, StringComparison.OrdinalIgnoreCase) => HttpMethod.Put, + { } s when s.Equals(HttpMethods.Options, StringComparison.OrdinalIgnoreCase) => HttpMethod.Options, + { } s when s.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase) => HttpMethod.Head, + { } s when s.Equals(HttpMethods.Trace, StringComparison.OrdinalIgnoreCase) => HttpMethod.Trace, + _ => HttpMethod.Get + }; +#else private OperationType GetOperationType(HttpEndpointDescriptor httpEndpoint) => httpEndpoint.Method switch { @@ -133,12 +160,13 @@ private OperationType GetOperationType(HttpEndpointDescriptor httpEndpoint) => { } s when s.Equals(HttpMethods.Post, StringComparison.OrdinalIgnoreCase) => OperationType.Post, { } s when s.Equals(HttpMethods.Patch, StringComparison.OrdinalIgnoreCase) => OperationType.Patch, { } s when s.Equals(HttpMethods.Delete, StringComparison.OrdinalIgnoreCase) => OperationType.Delete, - { } s when s.Equals(HttpMethods.Put, StringComparison.OrdinalIgnoreCase) => OperationType.Patch, + { } s when s.Equals(HttpMethods.Put, StringComparison.OrdinalIgnoreCase) => OperationType.Put, { } s when s.Equals(HttpMethods.Options, StringComparison.OrdinalIgnoreCase) => OperationType.Options, { } s when s.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase) => OperationType.Head, { } s when s.Equals(HttpMethods.Trace, StringComparison.OrdinalIgnoreCase) => OperationType.Trace, _ => OperationType.Get }; +#endif } internal record HttpEndpointDescriptor(string Id, string Path, string Method, string? DisplayName, string? Description, Type? TargetType, string? JsonSchema); \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Telnyx/Elsa.Activities.Telnyx.csproj b/src/activities/Elsa.Activities.Telnyx/Elsa.Activities.Telnyx.csproj index 7c4889708d..aaa7103efa 100644 --- a/src/activities/Elsa.Activities.Telnyx/Elsa.Activities.Telnyx.csproj +++ b/src/activities/Elsa.Activities.Telnyx/Elsa.Activities.Telnyx.csproj @@ -28,7 +28,7 @@ - + diff --git a/src/activities/Elsa.Activities.Temporal.Quartz/Elsa.Activities.Temporal.Quartz.csproj b/src/activities/Elsa.Activities.Temporal.Quartz/Elsa.Activities.Temporal.Quartz.csproj index 056bc089f0..cdfdef9679 100644 --- a/src/activities/Elsa.Activities.Temporal.Quartz/Elsa.Activities.Temporal.Quartz.csproj +++ b/src/activities/Elsa.Activities.Temporal.Quartz/Elsa.Activities.Temporal.Quartz.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/activities/webhooks/Elsa.Activities.Webhooks/Elsa.Activities.Webhooks.csproj b/src/activities/webhooks/Elsa.Activities.Webhooks/Elsa.Activities.Webhooks.csproj index 6dff6f1b0d..61e0d7c048 100644 --- a/src/activities/webhooks/Elsa.Activities.Webhooks/Elsa.Activities.Webhooks.csproj +++ b/src/activities/webhooks/Elsa.Activities.Webhooks/Elsa.Activities.Webhooks.csproj @@ -1,4 +1,4 @@ - + @@ -13,8 +13,8 @@ - - + + diff --git a/src/clients/Elsa.Client/Elsa.Client.csproj b/src/clients/Elsa.Client/Elsa.Client.csproj index 484a3a78d7..27bfd95571 100644 --- a/src/clients/Elsa.Client/Elsa.Client.csproj +++ b/src/clients/Elsa.Client/Elsa.Client.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/core/Elsa.Abstractions/Elsa.Abstractions.csproj b/src/core/Elsa.Abstractions/Elsa.Abstractions.csproj index 1e8f42256d..3f71d52065 100644 --- a/src/core/Elsa.Abstractions/Elsa.Abstractions.csproj +++ b/src/core/Elsa.Abstractions/Elsa.Abstractions.csproj @@ -1,4 +1,4 @@ - + @@ -18,17 +18,18 @@ - - + + - + - - + + + diff --git a/src/core/Elsa.Core/Elsa.Core.csproj b/src/core/Elsa.Core/Elsa.Core.csproj index 248ee99ab0..201d82dddb 100644 --- a/src/core/Elsa.Core/Elsa.Core.csproj +++ b/src/core/Elsa.Core/Elsa.Core.csproj @@ -23,12 +23,11 @@ - - + @@ -36,8 +35,8 @@ - - + + diff --git a/src/core/Elsa/Elsa.csproj b/src/core/Elsa/Elsa.csproj index 118c9b2a25..940c81fc29 100644 --- a/src/core/Elsa/Elsa.csproj +++ b/src/core/Elsa/Elsa.csproj @@ -20,7 +20,7 @@ - + diff --git a/src/designer/elsa-workflows-studio/src/globals/tailwind.css b/src/designer/elsa-workflows-studio/src/globals/tailwind.css index c5f973f1f6..926afc9b7d 100644 --- a/src/designer/elsa-workflows-studio/src/globals/tailwind.css +++ b/src/designer/elsa-workflows-studio/src/globals/tailwind.css @@ -2510,6 +2510,10 @@ select { left: 0.5rem; } +.elsa-top-10 { + top: 2.5rem; +} + .elsa-bottom-10 { bottom: 2.5rem; } @@ -2653,14 +2657,18 @@ select { margin-top: 4rem; } -.elsa--mt-2 { - margin-top: -0.5rem; -} - .elsa-mb-2 { margin-bottom: 0.5rem; } +.-elsa-mr-1 { + margin-right: -0.25rem; +} + +.elsa--mt-2 { + margin-top: -0.5rem; +} + .-elsa-ml-0\.5 { margin-left: -0.125rem; } @@ -2677,10 +2685,6 @@ select { margin-left: 0px; } -.-elsa-mr-1 { - margin-right: -0.25rem; -} - .elsa-ml-3\.5 { margin-left: 0.875rem; } @@ -12429,10 +12433,6 @@ svg.jtk-connector.jtk-hover path { width: 100%; } - .sm\:elsa-max-w-4xl { - max-width: 56rem; - } - .sm\:elsa-max-w-md { max-width: 28rem; } diff --git a/src/indexing/Elsa.Indexing.Elasticsearch/Elsa.Indexing.Elasticsearch.csproj b/src/indexing/Elsa.Indexing.Elasticsearch/Elsa.Indexing.Elasticsearch.csproj index 20f557ec8c..45e0bc9b0c 100644 --- a/src/indexing/Elsa.Indexing.Elasticsearch/Elsa.Indexing.Elasticsearch.csproj +++ b/src/indexing/Elsa.Indexing.Elasticsearch/Elsa.Indexing.Elasticsearch.csproj @@ -1,4 +1,4 @@ - + @@ -18,7 +18,7 @@ - + diff --git a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/OAuth2/Callback.cs b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/OAuth2/Callback.cs index 55c87467de..b9bc9e6bb7 100644 --- a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/OAuth2/Callback.cs +++ b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/OAuth2/Callback.cs @@ -1,11 +1,12 @@ -using System.Threading; -using System.Threading.Tasks; using Elsa.Secrets.Extensions; using Elsa.Secrets.Http.Services; using Elsa.Secrets.Manager; using Elsa.Secrets.Persistence; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; +using System.Threading; +using System.Threading.Tasks; namespace Elsa.Secrets.Api.Endpoints.OAuth2 { @@ -13,6 +14,7 @@ namespace Elsa.Secrets.Api.Endpoints.OAuth2 [ApiVersion("1")] [Route("v{apiVersion:apiVersion}/oauth2/callback")] [Produces("application/json")] + [Tags("Secrets")] public class SetAuthCodeCallback : Controller { private readonly ISecretsManager _secretsManager; diff --git a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/OAuth2/GetUrl.cs b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/OAuth2/GetUrl.cs index 182abf0f7e..f217d8adc5 100644 --- a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/OAuth2/GetUrl.cs +++ b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/OAuth2/GetUrl.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Net.Mime; using System.Threading; @@ -16,6 +16,7 @@ namespace Elsa.Secrets.Api.Endpoints.OAuth2; [ApiVersion("1")] [Route("v{apiVersion:apiVersion}/oauth2/url/{secretId}")] [Produces(MediaTypeNames.Application.Json)] +[Tags("Secrets")] public class GetUrl : Controller { private readonly ISecretsManager _secretsManager; diff --git a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/Delete.cs b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/Delete.cs index 3dcaf5098a..f117f6320b 100644 --- a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/Delete.cs +++ b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/Delete.cs @@ -11,6 +11,7 @@ namespace Elsa.Secrets.Api.Endpoints.Secrets [ApiVersion("1")] [Route("v{apiVersion:apiVersion}/secrets/{id}")] [Produces("application/json")] + [Tags("Secrets")] public class Delete : Controller { private readonly ISecretsStore _secretsStore; diff --git a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/List.cs b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/List.cs index 1f8c3efb0e..2cc626ab88 100644 --- a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/List.cs +++ b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/List.cs @@ -15,6 +15,7 @@ namespace Elsa.Secrets.Api.Endpoints.Secrets [ApiVersion("1")] [Route("v{apiVersion:apiVersion}/secrets")] [Produces(MediaTypeNames.Application.Json)] + [Tags("Secrets")] public class List : Controller { private readonly ISecretsManager _secretsManager; diff --git a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/Save.cs b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/Save.cs index 6fac9ee1d8..ae10ec80d0 100644 --- a/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/Save.cs +++ b/src/modules/secrets/Elsa.Secrets.Api/Endpoints/Secrets/Save.cs @@ -1,10 +1,11 @@ -using System.Linq; -using System.Threading; -using System.Threading.Tasks; using Elsa.Secrets.Api.Models; using Elsa.Secrets.Manager; using Elsa.Secrets.Models; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; namespace Elsa.Secrets.Api.Endpoints.Secrets { @@ -12,6 +13,7 @@ namespace Elsa.Secrets.Api.Endpoints.Secrets [ApiVersion("1")] [Route("v{apiVersion:apiVersion}/secrets")] [Produces("application/json")] + [Tags("Secrets")] public class Save : Controller { private readonly ISecretsManager _secretsManager; diff --git a/src/modules/secrets/Elsa.Secrets.Http/Elsa.Secrets.Http.csproj b/src/modules/secrets/Elsa.Secrets.Http/Elsa.Secrets.Http.csproj index 71b119d24f..cf841191cd 100644 --- a/src/modules/secrets/Elsa.Secrets.Http/Elsa.Secrets.Http.csproj +++ b/src/modules/secrets/Elsa.Secrets.Http/Elsa.Secrets.Http.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/modules/secrets/Elsa.Secrets.Sql/Elsa.Secrets.Sql.csproj b/src/modules/secrets/Elsa.Secrets.Sql/Elsa.Secrets.Sql.csproj index b69f2f6b12..39f89991c6 100644 --- a/src/modules/secrets/Elsa.Secrets.Sql/Elsa.Secrets.Sql.csproj +++ b/src/modules/secrets/Elsa.Secrets.Sql/Elsa.Secrets.Sql.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/modules/secrets/Elsa.Secrets/Elsa.Secrets.csproj b/src/modules/secrets/Elsa.Secrets/Elsa.Secrets.csproj index 3fb596b2bf..0d01da35e9 100644 --- a/src/modules/secrets/Elsa.Secrets/Elsa.Secrets.csproj +++ b/src/modules/secrets/Elsa.Secrets/Elsa.Secrets.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/modules/workflowsettings/Elsa.WorkflowSettings/Elsa.WorkflowSettings.csproj b/src/modules/workflowsettings/Elsa.WorkflowSettings/Elsa.WorkflowSettings.csproj index d78d675bbc..c66b3f5c15 100644 --- a/src/modules/workflowsettings/Elsa.WorkflowSettings/Elsa.WorkflowSettings.csproj +++ b/src/modules/workflowsettings/Elsa.WorkflowSettings/Elsa.WorkflowSettings.csproj @@ -1,4 +1,4 @@ - + @@ -13,7 +13,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.ContextualWorkflowHttp/Elsa.Samples.ContextualWorkflowHttp.csproj b/src/samples/aspnet/Elsa.Samples.ContextualWorkflowHttp/Elsa.Samples.ContextualWorkflowHttp.csproj index 5c11335811..2bd3f2cf8c 100644 --- a/src/samples/aspnet/Elsa.Samples.ContextualWorkflowHttp/Elsa.Samples.ContextualWorkflowHttp.csproj +++ b/src/samples/aspnet/Elsa.Samples.ContextualWorkflowHttp/Elsa.Samples.ContextualWorkflowHttp.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -7,7 +7,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.CorrelationHttp/Elsa.Samples.CorrelationHttp.csproj b/src/samples/aspnet/Elsa.Samples.CorrelationHttp/Elsa.Samples.CorrelationHttp.csproj index f5c558a15f..bffdb66115 100644 --- a/src/samples/aspnet/Elsa.Samples.CorrelationHttp/Elsa.Samples.CorrelationHttp.csproj +++ b/src/samples/aspnet/Elsa.Samples.CorrelationHttp/Elsa.Samples.CorrelationHttp.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.CustomActivities/Elsa.Samples.CustomActivities.csproj b/src/samples/aspnet/Elsa.Samples.CustomActivities/Elsa.Samples.CustomActivities.csproj index bc4d987956..442c882eb4 100644 --- a/src/samples/aspnet/Elsa.Samples.CustomActivities/Elsa.Samples.CustomActivities.csproj +++ b/src/samples/aspnet/Elsa.Samples.CustomActivities/Elsa.Samples.CustomActivities.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -7,7 +7,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.DocumentApproval/Elsa.Samples.DocumentApproval.csproj b/src/samples/aspnet/Elsa.Samples.DocumentApproval/Elsa.Samples.DocumentApproval.csproj index 0cb9939d92..5b8608112c 100644 --- a/src/samples/aspnet/Elsa.Samples.DocumentApproval/Elsa.Samples.DocumentApproval.csproj +++ b/src/samples/aspnet/Elsa.Samples.DocumentApproval/Elsa.Samples.DocumentApproval.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.ExtendHttpEndpoint/Elsa.Samples.ExtendHttpEndpoint.csproj b/src/samples/aspnet/Elsa.Samples.ExtendHttpEndpoint/Elsa.Samples.ExtendHttpEndpoint.csproj index 13a5e0b2d5..ddb891b09a 100644 --- a/src/samples/aspnet/Elsa.Samples.ExtendHttpEndpoint/Elsa.Samples.ExtendHttpEndpoint.csproj +++ b/src/samples/aspnet/Elsa.Samples.ExtendHttpEndpoint/Elsa.Samples.ExtendHttpEndpoint.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.FaultyWorkflows/Elsa.Samples.FaultyWorkflows.csproj b/src/samples/aspnet/Elsa.Samples.FaultyWorkflows/Elsa.Samples.FaultyWorkflows.csproj index c3605d6c1f..294738aadb 100644 --- a/src/samples/aspnet/Elsa.Samples.FaultyWorkflows/Elsa.Samples.FaultyWorkflows.csproj +++ b/src/samples/aspnet/Elsa.Samples.FaultyWorkflows/Elsa.Samples.FaultyWorkflows.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.ForkJoinTimerAndSignalHttp/Elsa.Samples.ForkJoinTimerAndSignalHttp.csproj b/src/samples/aspnet/Elsa.Samples.ForkJoinTimerAndSignalHttp/Elsa.Samples.ForkJoinTimerAndSignalHttp.csproj index a10e881571..8f45b7f715 100644 --- a/src/samples/aspnet/Elsa.Samples.ForkJoinTimerAndSignalHttp/Elsa.Samples.ForkJoinTimerAndSignalHttp.csproj +++ b/src/samples/aspnet/Elsa.Samples.ForkJoinTimerAndSignalHttp/Elsa.Samples.ForkJoinTimerAndSignalHttp.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.HelloWorldHttp/Elsa.Samples.HelloWorldHttp.csproj b/src/samples/aspnet/Elsa.Samples.HelloWorldHttp/Elsa.Samples.HelloWorldHttp.csproj index f5c558a15f..bffdb66115 100644 --- a/src/samples/aspnet/Elsa.Samples.HelloWorldHttp/Elsa.Samples.HelloWorldHttp.csproj +++ b/src/samples/aspnet/Elsa.Samples.HelloWorldHttp/Elsa.Samples.HelloWorldHttp.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.HttpEndpointSecurity/Elsa.Samples.HttpEndpointSecurity.csproj b/src/samples/aspnet/Elsa.Samples.HttpEndpointSecurity/Elsa.Samples.HttpEndpointSecurity.csproj index f67ba14406..cce1a9b5da 100644 --- a/src/samples/aspnet/Elsa.Samples.HttpEndpointSecurity/Elsa.Samples.HttpEndpointSecurity.csproj +++ b/src/samples/aspnet/Elsa.Samples.HttpEndpointSecurity/Elsa.Samples.HttpEndpointSecurity.csproj @@ -1,12 +1,12 @@ - + net9.0 - - + + diff --git a/src/samples/aspnet/Elsa.Samples.InfiniteLoopDetection/Elsa.Samples.InfiniteLoopDetection.csproj b/src/samples/aspnet/Elsa.Samples.InfiniteLoopDetection/Elsa.Samples.InfiniteLoopDetection.csproj index b432b10c7a..e696c6016b 100644 --- a/src/samples/aspnet/Elsa.Samples.InfiniteLoopDetection/Elsa.Samples.InfiniteLoopDetection.csproj +++ b/src/samples/aspnet/Elsa.Samples.InfiniteLoopDetection/Elsa.Samples.InfiniteLoopDetection.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.Interrupts/Elsa.Samples.Interrupts.csproj b/src/samples/aspnet/Elsa.Samples.Interrupts/Elsa.Samples.Interrupts.csproj index de0d79397a..7e1af1f3fc 100644 --- a/src/samples/aspnet/Elsa.Samples.Interrupts/Elsa.Samples.Interrupts.csproj +++ b/src/samples/aspnet/Elsa.Samples.Interrupts/Elsa.Samples.Interrupts.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -7,7 +7,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.InvokeWorkflowFromController/Elsa.Samples.InvokeWorkflowFromController.csproj b/src/samples/aspnet/Elsa.Samples.InvokeWorkflowFromController/Elsa.Samples.InvokeWorkflowFromController.csproj index f5c558a15f..bffdb66115 100644 --- a/src/samples/aspnet/Elsa.Samples.InvokeWorkflowFromController/Elsa.Samples.InvokeWorkflowFromController.csproj +++ b/src/samples/aspnet/Elsa.Samples.InvokeWorkflowFromController/Elsa.Samples.InvokeWorkflowFromController.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.MassTransitRabbitMq/Elsa.Samples.MassTransitRabbitMq.csproj b/src/samples/aspnet/Elsa.Samples.MassTransitRabbitMq/Elsa.Samples.MassTransitRabbitMq.csproj index 736426e23c..e149e6b7db 100644 --- a/src/samples/aspnet/Elsa.Samples.MassTransitRabbitMq/Elsa.Samples.MassTransitRabbitMq.csproj +++ b/src/samples/aspnet/Elsa.Samples.MassTransitRabbitMq/Elsa.Samples.MassTransitRabbitMq.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -14,7 +14,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.NestedForks/Elsa.Samples.NestedForks.csproj b/src/samples/aspnet/Elsa.Samples.NestedForks/Elsa.Samples.NestedForks.csproj index c921b713c7..9e4dbaf014 100644 --- a/src/samples/aspnet/Elsa.Samples.NestedForks/Elsa.Samples.NestedForks.csproj +++ b/src/samples/aspnet/Elsa.Samples.NestedForks/Elsa.Samples.NestedForks.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.ReadModelHttp/Elsa.Samples.ReadModelHttp.csproj b/src/samples/aspnet/Elsa.Samples.ReadModelHttp/Elsa.Samples.ReadModelHttp.csproj index f5c558a15f..bffdb66115 100644 --- a/src/samples/aspnet/Elsa.Samples.ReadModelHttp/Elsa.Samples.ReadModelHttp.csproj +++ b/src/samples/aspnet/Elsa.Samples.ReadModelHttp/Elsa.Samples.ReadModelHttp.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.SendHttp/Elsa.Samples.SendHttp.csproj b/src/samples/aspnet/Elsa.Samples.SendHttp/Elsa.Samples.SendHttp.csproj index 1a2d2d42ff..c693e32146 100644 --- a/src/samples/aspnet/Elsa.Samples.SendHttp/Elsa.Samples.SendHttp.csproj +++ b/src/samples/aspnet/Elsa.Samples.SendHttp/Elsa.Samples.SendHttp.csproj @@ -1,11 +1,11 @@ - + net9.0 - + diff --git a/src/samples/aspnet/Elsa.Samples.SignalApi/Elsa.Samples.SignalApi.csproj b/src/samples/aspnet/Elsa.Samples.SignalApi/Elsa.Samples.SignalApi.csproj index 0a85506f98..6e70e18306 100644 --- a/src/samples/aspnet/Elsa.Samples.SignalApi/Elsa.Samples.SignalApi.csproj +++ b/src/samples/aspnet/Elsa.Samples.SignalApi/Elsa.Samples.SignalApi.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/aspnet/Elsa.Samples.UniqueCorrelatedWorkflows/Elsa.Samples.UniqueCorrelatedWorkflows.csproj b/src/samples/aspnet/Elsa.Samples.UniqueCorrelatedWorkflows/Elsa.Samples.UniqueCorrelatedWorkflows.csproj index c921b713c7..9e4dbaf014 100644 --- a/src/samples/aspnet/Elsa.Samples.UniqueCorrelatedWorkflows/Elsa.Samples.UniqueCorrelatedWorkflows.csproj +++ b/src/samples/aspnet/Elsa.Samples.UniqueCorrelatedWorkflows/Elsa.Samples.UniqueCorrelatedWorkflows.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,7 +6,7 @@ - + diff --git a/src/samples/console/Elsa.Samples.BuildAndDispatchConsole/Elsa.Samples.BuildAndDispatchConsole.csproj b/src/samples/console/Elsa.Samples.BuildAndDispatchConsole/Elsa.Samples.BuildAndDispatchConsole.csproj index 8b37921af5..4d162e252a 100644 --- a/src/samples/console/Elsa.Samples.BuildAndDispatchConsole/Elsa.Samples.BuildAndDispatchConsole.csproj +++ b/src/samples/console/Elsa.Samples.BuildAndDispatchConsole/Elsa.Samples.BuildAndDispatchConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.CompensationConsole/Elsa.Samples.CompensationConsole.csproj b/src/samples/console/Elsa.Samples.CompensationConsole/Elsa.Samples.CompensationConsole.csproj index f9c3e572c9..ccca9d9068 100644 --- a/src/samples/console/Elsa.Samples.CompensationConsole/Elsa.Samples.CompensationConsole.csproj +++ b/src/samples/console/Elsa.Samples.CompensationConsole/Elsa.Samples.CompensationConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -9,7 +9,7 @@ - + diff --git a/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Elsa.Samples.CustomActivityOutcomes.csproj b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Elsa.Samples.CustomActivityOutcomes.csproj index 6d41c661b1..031a98ebac 100644 --- a/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Elsa.Samples.CustomActivityOutcomes.csproj +++ b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Elsa.Samples.CustomActivityOutcomes.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,7 +7,7 @@ - + diff --git a/src/samples/console/Elsa.Samples.CustomOutcomeActivityConsole/Elsa.Samples.CustomOutcomeActivityConsole.csproj b/src/samples/console/Elsa.Samples.CustomOutcomeActivityConsole/Elsa.Samples.CustomOutcomeActivityConsole.csproj index 10f6a28a9b..f357639fb8 100644 --- a/src/samples/console/Elsa.Samples.CustomOutcomeActivityConsole/Elsa.Samples.CustomOutcomeActivityConsole.csproj +++ b/src/samples/console/Elsa.Samples.CustomOutcomeActivityConsole/Elsa.Samples.CustomOutcomeActivityConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.DeclarativeCompositeActivitiesConsole/Elsa.Samples.DeclarativeCompositeActivitiesConsole.csproj b/src/samples/console/Elsa.Samples.DeclarativeCompositeActivitiesConsole/Elsa.Samples.DeclarativeCompositeActivitiesConsole.csproj index 8b37921af5..4d162e252a 100644 --- a/src/samples/console/Elsa.Samples.DeclarativeCompositeActivitiesConsole/Elsa.Samples.DeclarativeCompositeActivitiesConsole.csproj +++ b/src/samples/console/Elsa.Samples.DeclarativeCompositeActivitiesConsole/Elsa.Samples.DeclarativeCompositeActivitiesConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.Elasticsearch/Elsa.Samples.Elasticsearch.csproj b/src/samples/console/Elsa.Samples.Elasticsearch/Elsa.Samples.Elasticsearch.csproj index a76245cc48..f4f9429758 100644 --- a/src/samples/console/Elsa.Samples.Elasticsearch/Elsa.Samples.Elasticsearch.csproj +++ b/src/samples/console/Elsa.Samples.Elasticsearch/Elsa.Samples.Elasticsearch.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.EntityChanged/Elsa.Samples.EntityChanged.csproj b/src/samples/console/Elsa.Samples.EntityChanged/Elsa.Samples.EntityChanged.csproj index d583d45f63..3021e10e98 100644 --- a/src/samples/console/Elsa.Samples.EntityChanged/Elsa.Samples.EntityChanged.csproj +++ b/src/samples/console/Elsa.Samples.EntityChanged/Elsa.Samples.EntityChanged.csproj @@ -1,4 +1,4 @@ - + Exe @@ -8,8 +8,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.FileBasedWorkflow/Elsa.Samples.FileBasedWorkflow.csproj b/src/samples/console/Elsa.Samples.FileBasedWorkflow/Elsa.Samples.FileBasedWorkflow.csproj index e6b2d020f7..19721904a8 100644 --- a/src/samples/console/Elsa.Samples.FileBasedWorkflow/Elsa.Samples.FileBasedWorkflow.csproj +++ b/src/samples/console/Elsa.Samples.FileBasedWorkflow/Elsa.Samples.FileBasedWorkflow.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.ForEachLoopConsole/Elsa.Samples.ForEachLoopConsole.csproj b/src/samples/console/Elsa.Samples.ForEachLoopConsole/Elsa.Samples.ForEachLoopConsole.csproj index 8b37921af5..4d162e252a 100644 --- a/src/samples/console/Elsa.Samples.ForEachLoopConsole/Elsa.Samples.ForEachLoopConsole.csproj +++ b/src/samples/console/Elsa.Samples.ForEachLoopConsole/Elsa.Samples.ForEachLoopConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.ForLoopConsole/Elsa.Samples.ForLoopConsole.csproj b/src/samples/console/Elsa.Samples.ForLoopConsole/Elsa.Samples.ForLoopConsole.csproj index 8b37921af5..4d162e252a 100644 --- a/src/samples/console/Elsa.Samples.ForLoopConsole/Elsa.Samples.ForLoopConsole.csproj +++ b/src/samples/console/Elsa.Samples.ForLoopConsole/Elsa.Samples.ForLoopConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj b/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj index 97ef66312f..27dbf3c2bc 100644 --- a/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj +++ b/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,7 +7,7 @@ - + diff --git a/src/samples/console/Elsa.Samples.HappinessConsole/Elsa.Samples.HappinessConsole.csproj b/src/samples/console/Elsa.Samples.HappinessConsole/Elsa.Samples.HappinessConsole.csproj index 07b9f0435f..540bbf56bb 100644 --- a/src/samples/console/Elsa.Samples.HappinessConsole/Elsa.Samples.HappinessConsole.csproj +++ b/src/samples/console/Elsa.Samples.HappinessConsole/Elsa.Samples.HappinessConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -8,8 +8,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.HelloWorldConsole/Elsa.Samples.HelloWorldConsole.csproj b/src/samples/console/Elsa.Samples.HelloWorldConsole/Elsa.Samples.HelloWorldConsole.csproj index 10f6a28a9b..f357639fb8 100644 --- a/src/samples/console/Elsa.Samples.HelloWorldConsole/Elsa.Samples.HelloWorldConsole.csproj +++ b/src/samples/console/Elsa.Samples.HelloWorldConsole/Elsa.Samples.HelloWorldConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.IfThenElse/Elsa.Samples.IfThenElse.csproj b/src/samples/console/Elsa.Samples.IfThenElse/Elsa.Samples.IfThenElse.csproj index 8b37921af5..4d162e252a 100644 --- a/src/samples/console/Elsa.Samples.IfThenElse/Elsa.Samples.IfThenElse.csproj +++ b/src/samples/console/Elsa.Samples.IfThenElse/Elsa.Samples.IfThenElse.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj index 19d95a5fa1..8986e5245a 100644 --- a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj +++ b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,9 +7,9 @@ - - - + + + diff --git a/src/samples/console/Elsa.Samples.ReadLineEchoConsole/Elsa.Samples.ReadLineEchoConsole.csproj b/src/samples/console/Elsa.Samples.ReadLineEchoConsole/Elsa.Samples.ReadLineEchoConsole.csproj index 8b37921af5..4d162e252a 100644 --- a/src/samples/console/Elsa.Samples.ReadLineEchoConsole/Elsa.Samples.ReadLineEchoConsole.csproj +++ b/src/samples/console/Elsa.Samples.ReadLineEchoConsole/Elsa.Samples.ReadLineEchoConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.ReadLineToFile/Elsa.Samples.ReadLineToFile.csproj b/src/samples/console/Elsa.Samples.ReadLineToFile/Elsa.Samples.ReadLineToFile.csproj index 4e3168a662..7960025bcc 100644 --- a/src/samples/console/Elsa.Samples.ReadLineToFile/Elsa.Samples.ReadLineToFile.csproj +++ b/src/samples/console/Elsa.Samples.ReadLineToFile/Elsa.Samples.ReadLineToFile.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,7 +7,7 @@ - + diff --git a/src/samples/console/Elsa.Samples.RpaWebConsole/Elsa.Samples.RpaWebConsole.csproj b/src/samples/console/Elsa.Samples.RpaWebConsole/Elsa.Samples.RpaWebConsole.csproj index ac1c95ce8b..dcf1be779b 100644 --- a/src/samples/console/Elsa.Samples.RpaWebConsole/Elsa.Samples.RpaWebConsole.csproj +++ b/src/samples/console/Elsa.Samples.RpaWebConsole/Elsa.Samples.RpaWebConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.Serialization/Elsa.Samples.Serialization.csproj b/src/samples/console/Elsa.Samples.Serialization/Elsa.Samples.Serialization.csproj index c77cd81e5d..c0b9a0e9e3 100644 --- a/src/samples/console/Elsa.Samples.Serialization/Elsa.Samples.Serialization.csproj +++ b/src/samples/console/Elsa.Samples.Serialization/Elsa.Samples.Serialization.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.SignalingConsole/Elsa.Samples.SignalingConsole.csproj b/src/samples/console/Elsa.Samples.SignalingConsole/Elsa.Samples.SignalingConsole.csproj index 8b37921af5..4d162e252a 100644 --- a/src/samples/console/Elsa.Samples.SignalingConsole/Elsa.Samples.SignalingConsole.csproj +++ b/src/samples/console/Elsa.Samples.SignalingConsole/Elsa.Samples.SignalingConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.SwitchConsole/Elsa.Samples.SwitchConsole.csproj b/src/samples/console/Elsa.Samples.SwitchConsole/Elsa.Samples.SwitchConsole.csproj index 07b9f0435f..540bbf56bb 100644 --- a/src/samples/console/Elsa.Samples.SwitchConsole/Elsa.Samples.SwitchConsole.csproj +++ b/src/samples/console/Elsa.Samples.SwitchConsole/Elsa.Samples.SwitchConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -8,8 +8,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.UserTaskConsole/Elsa.Samples.UserTaskConsole.csproj b/src/samples/console/Elsa.Samples.UserTaskConsole/Elsa.Samples.UserTaskConsole.csproj index 5cafa0c4f4..efb972a851 100644 --- a/src/samples/console/Elsa.Samples.UserTaskConsole/Elsa.Samples.UserTaskConsole.csproj +++ b/src/samples/console/Elsa.Samples.UserTaskConsole/Elsa.Samples.UserTaskConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -8,8 +8,8 @@ - - + + diff --git a/src/samples/console/Elsa.Samples.WhileLoopConsole/Elsa.Samples.WhileLoopConsole.csproj b/src/samples/console/Elsa.Samples.WhileLoopConsole/Elsa.Samples.WhileLoopConsole.csproj index 8b37921af5..4d162e252a 100644 --- a/src/samples/console/Elsa.Samples.WhileLoopConsole/Elsa.Samples.WhileLoopConsole.csproj +++ b/src/samples/console/Elsa.Samples.WhileLoopConsole/Elsa.Samples.WhileLoopConsole.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/dashboard/aspnetcore/ElsaDashboard.Samples.AspNetCore.Monolith/ElsaDashboard.Samples.AspNetCore.Monolith.csproj b/src/samples/dashboard/aspnetcore/ElsaDashboard.Samples.AspNetCore.Monolith/ElsaDashboard.Samples.AspNetCore.Monolith.csproj index 8e67e2e5bf..8990a7c7e0 100644 --- a/src/samples/dashboard/aspnetcore/ElsaDashboard.Samples.AspNetCore.Monolith/ElsaDashboard.Samples.AspNetCore.Monolith.csproj +++ b/src/samples/dashboard/aspnetcore/ElsaDashboard.Samples.AspNetCore.Monolith/ElsaDashboard.Samples.AspNetCore.Monolith.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -7,7 +7,7 @@ - + diff --git a/src/samples/dashboard/aspnetcore/ElsaDashboard.Samples.AspNetCore.SubPath/ElsaDashboard.Samples.AspNetCore.SubPath.csproj b/src/samples/dashboard/aspnetcore/ElsaDashboard.Samples.AspNetCore.SubPath/ElsaDashboard.Samples.AspNetCore.SubPath.csproj index f412059bde..e40806c557 100644 --- a/src/samples/dashboard/aspnetcore/ElsaDashboard.Samples.AspNetCore.SubPath/ElsaDashboard.Samples.AspNetCore.SubPath.csproj +++ b/src/samples/dashboard/aspnetcore/ElsaDashboard.Samples.AspNetCore.SubPath/ElsaDashboard.Samples.AspNetCore.SubPath.csproj @@ -1,11 +1,11 @@ - + net9.0 - + diff --git a/src/samples/persistence/Elsa.Samples.Persistence.EntityFramework/Elsa.Samples.Persistence.EntityFramework.csproj b/src/samples/persistence/Elsa.Samples.Persistence.EntityFramework/Elsa.Samples.Persistence.EntityFramework.csproj index fadd586e8f..d74f369f66 100644 --- a/src/samples/persistence/Elsa.Samples.Persistence.EntityFramework/Elsa.Samples.Persistence.EntityFramework.csproj +++ b/src/samples/persistence/Elsa.Samples.Persistence.EntityFramework/Elsa.Samples.Persistence.EntityFramework.csproj @@ -1,4 +1,4 @@ - + Exe @@ -16,11 +16,11 @@ - + - + diff --git a/src/samples/persistence/Elsa.Samples.Persistence.YesSql/Elsa.Samples.Persistence.YesSql.csproj b/src/samples/persistence/Elsa.Samples.Persistence.YesSql/Elsa.Samples.Persistence.YesSql.csproj index d864aa90e0..7a634f3f43 100644 --- a/src/samples/persistence/Elsa.Samples.Persistence.YesSql/Elsa.Samples.Persistence.YesSql.csproj +++ b/src/samples/persistence/Elsa.Samples.Persistence.YesSql/Elsa.Samples.Persistence.YesSql.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,7 +7,7 @@ - + diff --git a/src/samples/worker/Elsa.Samples.AzureServiceBusWorker/Elsa.Samples.AzureServiceBusWorker.csproj b/src/samples/worker/Elsa.Samples.AzureServiceBusWorker/Elsa.Samples.AzureServiceBusWorker.csproj index 2fedc4859d..bef069f4e4 100644 --- a/src/samples/worker/Elsa.Samples.AzureServiceBusWorker/Elsa.Samples.AzureServiceBusWorker.csproj +++ b/src/samples/worker/Elsa.Samples.AzureServiceBusWorker/Elsa.Samples.AzureServiceBusWorker.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,8 +6,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.BreakLoop/Elsa.Samples.BreakLoop.csproj b/src/samples/worker/Elsa.Samples.BreakLoop/Elsa.Samples.BreakLoop.csproj index 4be389dfbe..d106f7544c 100644 --- a/src/samples/worker/Elsa.Samples.BreakLoop/Elsa.Samples.BreakLoop.csproj +++ b/src/samples/worker/Elsa.Samples.BreakLoop/Elsa.Samples.BreakLoop.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,8 +6,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.CustomAttributesChildWorker/Elsa.Samples.CustomAttributesChildWorker.csproj b/src/samples/worker/Elsa.Samples.CustomAttributesChildWorker/Elsa.Samples.CustomAttributesChildWorker.csproj index 881f6155d1..a3a94ca39c 100644 --- a/src/samples/worker/Elsa.Samples.CustomAttributesChildWorker/Elsa.Samples.CustomAttributesChildWorker.csproj +++ b/src/samples/worker/Elsa.Samples.CustomAttributesChildWorker/Elsa.Samples.CustomAttributesChildWorker.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.DistributedLock/Elsa.Samples.DistributedLock.csproj b/src/samples/worker/Elsa.Samples.DistributedLock/Elsa.Samples.DistributedLock.csproj index 0fce7d3070..58c7984b33 100644 --- a/src/samples/worker/Elsa.Samples.DistributedLock/Elsa.Samples.DistributedLock.csproj +++ b/src/samples/worker/Elsa.Samples.DistributedLock/Elsa.Samples.DistributedLock.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,9 +7,9 @@ - + - + diff --git a/src/samples/worker/Elsa.Samples.Faulting/Elsa.Samples.Faulting.csproj b/src/samples/worker/Elsa.Samples.Faulting/Elsa.Samples.Faulting.csproj index de19e76c76..f5a365dc67 100644 --- a/src/samples/worker/Elsa.Samples.Faulting/Elsa.Samples.Faulting.csproj +++ b/src/samples/worker/Elsa.Samples.Faulting/Elsa.Samples.Faulting.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -7,8 +7,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.MqttWorker/Elsa.Samples.MqttWorker.csproj b/src/samples/worker/Elsa.Samples.MqttWorker/Elsa.Samples.MqttWorker.csproj index ccec1bb684..a3a3105738 100644 --- a/src/samples/worker/Elsa.Samples.MqttWorker/Elsa.Samples.MqttWorker.csproj +++ b/src/samples/worker/Elsa.Samples.MqttWorker/Elsa.Samples.MqttWorker.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/samples/worker/Elsa.Samples.MultiTenantChildWorker/Elsa.Samples.MultiTenantChildWorker.csproj b/src/samples/worker/Elsa.Samples.MultiTenantChildWorker/Elsa.Samples.MultiTenantChildWorker.csproj index 629655db66..23dfa506f4 100644 --- a/src/samples/worker/Elsa.Samples.MultiTenantChildWorker/Elsa.Samples.MultiTenantChildWorker.csproj +++ b/src/samples/worker/Elsa.Samples.MultiTenantChildWorker/Elsa.Samples.MultiTenantChildWorker.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,8 +6,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.RabbitMqWorker/Elsa.Samples.RabbitMqWorker.csproj b/src/samples/worker/Elsa.Samples.RabbitMqWorker/Elsa.Samples.RabbitMqWorker.csproj index 8fb9abc6d5..1300677ba2 100644 --- a/src/samples/worker/Elsa.Samples.RabbitMqWorker/Elsa.Samples.RabbitMqWorker.csproj +++ b/src/samples/worker/Elsa.Samples.RabbitMqWorker/Elsa.Samples.RabbitMqWorker.csproj @@ -1,4 +1,4 @@ - + Exe @@ -8,8 +8,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.RebusErrorWorker/Elsa.Samples.RebusErrorWorker.csproj b/src/samples/worker/Elsa.Samples.RebusErrorWorker/Elsa.Samples.RebusErrorWorker.csproj index 5610869801..0063a9b1ae 100644 --- a/src/samples/worker/Elsa.Samples.RebusErrorWorker/Elsa.Samples.RebusErrorWorker.csproj +++ b/src/samples/worker/Elsa.Samples.RebusErrorWorker/Elsa.Samples.RebusErrorWorker.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,9 +6,9 @@ - + - + diff --git a/src/samples/worker/Elsa.Samples.RebusWorker/Elsa.Samples.RebusWorker.csproj b/src/samples/worker/Elsa.Samples.RebusWorker/Elsa.Samples.RebusWorker.csproj index 8cb0988c9a..41b9e81872 100644 --- a/src/samples/worker/Elsa.Samples.RebusWorker/Elsa.Samples.RebusWorker.csproj +++ b/src/samples/worker/Elsa.Samples.RebusWorker/Elsa.Samples.RebusWorker.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,9 +6,9 @@ - + - + diff --git a/src/samples/worker/Elsa.Samples.RunChildWorkflowWorker/Elsa.Samples.RunChildWorkflowWorker.csproj b/src/samples/worker/Elsa.Samples.RunChildWorkflowWorker/Elsa.Samples.RunChildWorkflowWorker.csproj index 68f7b60c8b..2226b138ae 100644 --- a/src/samples/worker/Elsa.Samples.RunChildWorkflowWorker/Elsa.Samples.RunChildWorkflowWorker.csproj +++ b/src/samples/worker/Elsa.Samples.RunChildWorkflowWorker/Elsa.Samples.RunChildWorkflowWorker.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -6,8 +6,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.Timers.Hangfire/Elsa.Samples.Timers.Hangfire.csproj b/src/samples/worker/Elsa.Samples.Timers.Hangfire/Elsa.Samples.Timers.Hangfire.csproj index 00a242acf5..65c6db4be8 100644 --- a/src/samples/worker/Elsa.Samples.Timers.Hangfire/Elsa.Samples.Timers.Hangfire.csproj +++ b/src/samples/worker/Elsa.Samples.Timers.Hangfire/Elsa.Samples.Timers.Hangfire.csproj @@ -1,4 +1,4 @@ - + Exe @@ -9,8 +9,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.Timers.Quartz/Elsa.Samples.Timers.Quartz.csproj b/src/samples/worker/Elsa.Samples.Timers.Quartz/Elsa.Samples.Timers.Quartz.csproj index d13ff05457..a8704ed07d 100644 --- a/src/samples/worker/Elsa.Samples.Timers.Quartz/Elsa.Samples.Timers.Quartz.csproj +++ b/src/samples/worker/Elsa.Samples.Timers.Quartz/Elsa.Samples.Timers.Quartz.csproj @@ -1,4 +1,4 @@ - + Exe @@ -8,8 +8,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.WatchDirectoryWorker/Elsa.Samples.WatchDirectoryWorker.csproj b/src/samples/worker/Elsa.Samples.WatchDirectoryWorker/Elsa.Samples.WatchDirectoryWorker.csproj index ae66dfdabc..f72d31ea17 100644 --- a/src/samples/worker/Elsa.Samples.WatchDirectoryWorker/Elsa.Samples.WatchDirectoryWorker.csproj +++ b/src/samples/worker/Elsa.Samples.WatchDirectoryWorker/Elsa.Samples.WatchDirectoryWorker.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/src/samples/worker/Elsa.Samples.WhileLoopWorker/Elsa.Samples.WhileLoopWorker.csproj b/src/samples/worker/Elsa.Samples.WhileLoopWorker/Elsa.Samples.WhileLoopWorker.csproj index 5b92bbaed2..4d83357a9f 100644 --- a/src/samples/worker/Elsa.Samples.WhileLoopWorker/Elsa.Samples.WhileLoopWorker.csproj +++ b/src/samples/worker/Elsa.Samples.WhileLoopWorker/Elsa.Samples.WhileLoopWorker.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -7,8 +7,8 @@ - - + + diff --git a/src/scripting/Elsa.Scripting.JavaScript/Converters/Jint/ByteArrayConverter.cs b/src/scripting/Elsa.Scripting.JavaScript/Converters/Jint/ByteArrayConverter.cs index 9830c5de56..56066e2ae7 100644 --- a/src/scripting/Elsa.Scripting.JavaScript/Converters/Jint/ByteArrayConverter.cs +++ b/src/scripting/Elsa.Scripting.JavaScript/Converters/Jint/ByteArrayConverter.cs @@ -11,14 +11,15 @@ internal class ByteArrayConverter : IObjectConverter { public bool TryConvert(Engine engine, object value, out JsValue result) { - result = JsValue.Null; - - if (value is not byte[] buffer) - return false; + if (value is byte[] bytes) + { + var buffer = engine.Intrinsics.ArrayBuffer.Construct(bytes); + result = buffer; + return true; + } - result = new ObjectWrapper(engine, buffer); - - return true; + result = JsValue.Null; + return false; } } } \ No newline at end of file diff --git a/src/scripting/Elsa.Scripting.JavaScript/Elsa.Scripting.JavaScript.csproj b/src/scripting/Elsa.Scripting.JavaScript/Elsa.Scripting.JavaScript.csproj index 6b7a1ee77e..1aa5def66d 100644 --- a/src/scripting/Elsa.Scripting.JavaScript/Elsa.Scripting.JavaScript.csproj +++ b/src/scripting/Elsa.Scripting.JavaScript/Elsa.Scripting.JavaScript.csproj @@ -14,11 +14,15 @@ - + + + + + diff --git a/src/server/Elsa.Server.Api/Elsa.Server.Api.csproj b/src/server/Elsa.Server.Api/Elsa.Server.Api.csproj index 806518a41f..817ba30ba3 100644 --- a/src/server/Elsa.Server.Api/Elsa.Server.Api.csproj +++ b/src/server/Elsa.Server.Api/Elsa.Server.Api.csproj @@ -1,4 +1,4 @@ - + @@ -15,10 +15,18 @@ + + + + + + + + @@ -35,13 +43,9 @@ - + - - - - - + diff --git a/src/server/Elsa.Server.Api/Extensions/DocumentFilters/RemoveEmptyControllerTagsFilter .cs b/src/server/Elsa.Server.Api/Extensions/DocumentFilters/RemoveEmptyControllerTagsFilter .cs new file mode 100644 index 0000000000..36f715277c --- /dev/null +++ b/src/server/Elsa.Server.Api/Extensions/DocumentFilters/RemoveEmptyControllerTagsFilter .cs @@ -0,0 +1,73 @@ +#if NET10_0_OR_GREATER +using Microsoft.OpenApi; +#else +using Microsoft.OpenApi.Models; +#endif +using Swashbuckle.AspNetCore.SwaggerGen; +using System.Linq; + +namespace Elsa.Server.Api.Extensions.DocumentFilters +{ + /// + /// Removes any top-level tag definitions from the OpenAPI document that aren't actually assigned to any endpoint operations. + /// This helps to keep the generated documentation clean and focused on relevant tags. + /// + /// /// + /// + /// Root Cause: Swashbuckle's annotation engine bypasses its custom tag selection rules + /// when using [SwaggerOperation(Tags = ...)]. This leaves behind "ghost" controller-named tags + /// at the root level of the generated OpenAPI document that contain zero active endpoints. + /// See Swashbuckle Issue #2618 (https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/2618). + /// + /// + /// .NET 10 Conflict: In .NET 10, the native Microsoft.AspNetCore.OpenApi pipeline + /// implicitly pushes default metadata tags down the ApiExplorer framework prior to Swashbuckle + /// evaluation. This renders internal interception strategies like TagActionsBy ineffective. + /// + /// + /// Resolution: This filter executes exactly once per document build. It scans all actively mapped + /// operations, compiles a list of utilized tags, and purges any unmapped root-level tag headers to preserve + /// clean layout grouping in the Swagger UI. + /// + /// + public class RemoveEmptyControllerTagsFilter : IDocumentFilter + { + public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) + { + // 1. Find all tags that are actually assigned to at least one endpoint operation +#if NET10_0_OR_GREATER + // In .NET 10, operation.Tags is ISet + var activeTags = swaggerDoc.Paths.Values + .SelectMany(path => path.Operations?.Values ?? Enumerable.Empty()) + .SelectMany(op => op.Tags?.Select(t => t.Reference?.Id) ?? Enumerable.Empty()) + .Where(id => !string.IsNullOrEmpty(id)) + .ToHashSet(); +#else + // In .NET 8/9, operation.Tags is IList + var activeTags = swaggerDoc.Paths.Values + .SelectMany(path => path.Operations?.Values ?? Enumerable.Empty()) + .SelectMany(op => op.Tags?.Select(t => t.Name) ?? Enumerable.Empty()) + .Where(name => !string.IsNullOrEmpty(name)) + .ToHashSet(); +#endif + + // 2. Remove any top-level tag definitions that aren't actively used by an operation + if (swaggerDoc.Tags != null) + { +#if NET10_0_OR_GREATER + // In .NET 10, swaggerDoc.Tags is ISet + var tagsToRemove = swaggerDoc.Tags.Where(tag => !activeTags.Contains(tag.Name)).ToList(); + foreach (var tag in tagsToRemove) + { + swaggerDoc.Tags.Remove(tag); + } +#else + // In .NET 8/9, swaggerDoc.Tags is IList + swaggerDoc.Tags = swaggerDoc.Tags + .Where(tag => activeTags.Contains(tag.Name)) + .ToList(); +#endif + } + } + } +} \ No newline at end of file diff --git a/src/server/Elsa.Server.Api/Extensions/ServiceCollectionExtensions.cs b/src/server/Elsa.Server.Api/Extensions/ServiceCollectionExtensions.cs index 7e50323a94..28b7ff1215 100644 --- a/src/server/Elsa.Server.Api/Extensions/ServiceCollectionExtensions.cs +++ b/src/server/Elsa.Server.Api/Extensions/ServiceCollectionExtensions.cs @@ -3,6 +3,7 @@ using Elsa.Models; using Elsa.Server.Api; using Elsa.Server.Api.Extensions; +using Elsa.Server.Api.Extensions.DocumentFilters; using Elsa.Server.Api.Extensions.SchemaFilters; using Elsa.Server.Api.Mapping; using Elsa.Server.Api.Services; @@ -103,6 +104,7 @@ public static IServiceCollection AddElsaSwagger(this IServiceCollection services //Allow enums to be displayed c.SchemaFilter(); + c.DocumentFilter(); configure?.Invoke(c); }); } diff --git a/test/component/Elsa.ComponentTests/Elsa.ComponentTests.csproj b/test/component/Elsa.ComponentTests/Elsa.ComponentTests.csproj index cc4758b819..730f74b526 100644 --- a/test/component/Elsa.ComponentTests/Elsa.ComponentTests.csproj +++ b/test/component/Elsa.ComponentTests/Elsa.ComponentTests.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -8,7 +8,7 @@ - + diff --git a/test/integration/Elsa.Core.IntegrationTests/Elsa.Core.IntegrationTests.csproj b/test/integration/Elsa.Core.IntegrationTests/Elsa.Core.IntegrationTests.csproj index 724d2f85cc..49a0d40152 100644 --- a/test/integration/Elsa.Core.IntegrationTests/Elsa.Core.IntegrationTests.csproj +++ b/test/integration/Elsa.Core.IntegrationTests/Elsa.Core.IntegrationTests.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -13,7 +13,7 @@ - + @@ -27,7 +27,7 @@ - + diff --git a/test/shared/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj b/test/shared/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj index 33fd433642..43beae8a28 100644 --- a/test/shared/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj +++ b/test/shared/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj @@ -12,13 +12,13 @@ - + - - + + diff --git a/test/unit/Elsa.UnitTests/Elsa.UnitTests.csproj b/test/unit/Elsa.UnitTests/Elsa.UnitTests.csproj index 7b48ce712b..0590ae4be7 100644 --- a/test/unit/Elsa.UnitTests/Elsa.UnitTests.csproj +++ b/test/unit/Elsa.UnitTests/Elsa.UnitTests.csproj @@ -22,7 +22,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/test/unit/Elsa.UnitTests/Scripting/JavaScript/Services/JintJavaScriptEvaluatorTests.cs b/test/unit/Elsa.UnitTests/Scripting/JavaScript/Services/JintJavaScriptEvaluatorTests.cs index a635c5444d..f47ac930dc 100644 --- a/test/unit/Elsa.UnitTests/Scripting/JavaScript/Services/JintJavaScriptEvaluatorTests.cs +++ b/test/unit/Elsa.UnitTests/Scripting/JavaScript/Services/JintJavaScriptEvaluatorTests.cs @@ -1,10 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using AutoFixture.Xunit2; +using Elsa.Scripting.JavaScript.Converters.Jint; using Elsa.Scripting.JavaScript.Messages; using Elsa.Services.Models; using Elsa.Testing.Shared; using Elsa.Testing.Shared.AutoFixture.Attributes; +using Jint; +using Jint.Native; using MediatR; using Moq; using Xunit; @@ -129,5 +135,99 @@ public async Task EvaluateAsyncShouldBeAbleToEvaluateAndReturnANodaTimeObject( Assert.Equal(NodaTime.Duration.FromHours(36), result); } + + [Theory(DisplayName = "ByteArrayConverter: The EvaluateAsync method should expose a byte array as an ArrayBuffer and preserve its values"), AutoMoqData] + public async Task EvaluateAsync_ShouldExposeByteArrayAsArrayBufferWithCorrectValues( + [Frozen] IMediator mediator, + [JintEvaluatorWithConverter] JintJavaScriptEvaluator sut, + [StubActivityExecutionContext] ActivityExecutionContext context1) + { + var bytes = new byte[] { 1, 2, 3, 4 }; + object returnedValue = null; + + Mock.Get(mediator) + .Setup(x => x.Publish(It.Is(e => e.ActivityExecutionContext == context1), It.IsAny())) + .Callback((EvaluatingJavaScriptExpression expression, CancellationToken t) => { expression.Engine.SetValue("MyVariable", returnedValue); }); + + returnedValue = bytes; + + // Check length + var lengthResult = await sut.EvaluateAsync("MyVariable.byteLength", typeof(object), context1); + Assert.Equal((double)bytes.Length, lengthResult); + + // Check values + var jsArray = await sut.EvaluateAsync("Array.from(new Uint8Array(MyVariable))", typeof(object), context1); + var resultArray = ((IEnumerable)jsArray).Select(Convert.ToByte).ToArray(); + Assert.Equal(bytes, resultArray); + } + + [Fact(DisplayName = "ByteArrayConverter: Should return false and JsValue.Null for null input")] + public void TryConvert_ShouldReturnFalse_ForNull() + { + var converter = new ByteArrayConverter(); + var engine = new Engine(); + var result = JsValue.Undefined; + + var success = converter.TryConvert(engine, null, out result); + + Assert.False(success); + Assert.Equal(JsValue.Null, result); + } + + [Fact(DisplayName = "ByteArrayConverter: Should return false for non-byte array input")] + public void TryConvert_ShouldReturnFalse_ForNonByteArray() + { + var converter = new ByteArrayConverter(); + var engine = new Engine(); + var result = JsValue.Undefined; + + var success = converter.TryConvert(engine, new int[] { 1, 2, 3 }, out result); + + Assert.False(success); + Assert.Equal(JsValue.Null, result); + } + + [Theory(DisplayName = "ByteArrayConverter: Should roundtrip a byte array from .NET to JS and back"), AutoMoqData] + public async Task EvaluateAsync_ShouldRoundtripByteArray( + [Frozen] IMediator mediator, + [JintEvaluatorWithConverter] JintJavaScriptEvaluator sut, + [StubActivityExecutionContext] ActivityExecutionContext context1) + { + var bytes = new byte[] { 10, 20, 30, 40 }; + object returnedValue = null; + + Mock.Get(mediator) + .Setup(x => x.Publish(It.Is(e => e.ActivityExecutionContext == context1), It.IsAny())) + .Callback((EvaluatingJavaScriptExpression expression, CancellationToken t) => { expression.Engine.SetValue("MyVariable", returnedValue); }); + + returnedValue = bytes; + var jsArray = await sut.EvaluateAsync("Array.from(new Uint8Array(MyVariable))", typeof(object), context1); + + var resultArray = ((IEnumerable)jsArray).Select(x => Convert.ToByte(x)).ToArray(); + Assert.Equal(bytes, resultArray); + } + + [Theory(DisplayName = "ByteArrayConverter: Should reflect mutation of ArrayBuffer in JS when read back in .NET"), AutoMoqData] + public async Task EvaluateAsync_ShouldReflectJsMutation( + [Frozen] IMediator mediator, + [JintEvaluatorWithConverter] JintJavaScriptEvaluator sut, + [StubActivityExecutionContext] ActivityExecutionContext context1) + { + var bytes = new byte[] { 1, 2, 3, 4 }; + object returnedValue = null; + + Mock.Get(mediator) + .Setup(x => x.Publish(It.Is(e => e.ActivityExecutionContext == context1), It.IsAny())) + .Callback((EvaluatingJavaScriptExpression expression, CancellationToken t) => { expression.Engine.SetValue("MyVariable", returnedValue); }); + + returnedValue = bytes; + + await sut.EvaluateAsync("new Uint8Array(MyVariable)[0] = 99", typeof(object), context1); + var jsArray = await sut.EvaluateAsync("Array.from(new Uint8Array(MyVariable))", typeof(object), context1); + + var resultArray = ((IEnumerable)jsArray).Select(x => Convert.ToByte(x)).ToArray(); + var expected = new byte[] { 99, 2, 3, 4 }; + Assert.Equal(expected, resultArray); + } } } \ No newline at end of file