Browse Source

Update dotnet

pull/1301/head
Sebastian Stehle 3 months ago
parent
commit
8e463172ca
  1. 6
      .github/workflows/dev.yml
  2. 4
      Dockerfile
  3. 321
      backend/Squidex.sln
  4. 43
      backend/Squidex.slnx
  5. 37
      backend/extensions/Squidex.Extensions/APM/Zipkin/ZipkinPlugin.cs
  6. 37
      backend/extensions/Squidex.Extensions/Squidex.Extensions.csproj
  7. 5
      backend/global.json
  8. 2
      backend/i18n/translator/Squidex.Translator/Squidex.Translator.csproj
  9. 6
      backend/src/Migrations/Migrations.csproj
  10. 3
      backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Apps/EFAppRepository.cs
  11. 2
      backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Assets/EFAssetFolderRepository_SnapshotStore.cs
  12. 2
      backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Assets/EFAssetRepository_SnapshotStore.cs
  13. 2
      backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Contents/Extensions.cs
  14. 2
      backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Schemas/EFSchemaRepository.cs
  15. 2
      backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Teams/EFTeamRepository.cs
  16. 2
      backend/src/Squidex.Data.EntityFramework/Infrastructure/BulkInserter.cs
  17. 4
      backend/src/Squidex.Data.EntityFramework/Infrastructure/Extensions.cs
  18. 2
      backend/src/Squidex.Data.EntityFramework/Infrastructure/States/EFSnapshotStore.cs
  19. 5
      backend/src/Squidex.Data.EntityFramework/Providers/MySql/Content/JsonFunction.cs
  20. 2
      backend/src/Squidex.Data.EntityFramework/Providers/MySql/JsonFunction.cs
  21. 56
      backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj
  22. 2
      backend/src/Squidex.Data.MongoDb/Domain/Apps/Entities/Contents/Text/AtlasTextIndex.cs
  23. 11
      backend/src/Squidex.Data.MongoDb/Infrastructure/BsonDomainIdSerializer.cs
  24. 6
      backend/src/Squidex.Data.MongoDb/Infrastructure/MongoClientFactory.cs
  25. 2
      backend/src/Squidex.Data.MongoDb/ServiceExtensions.cs
  26. 29
      backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj
  27. 13
      backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj
  28. 3
      backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/JsonTypeVisitor.cs
  29. 12
      backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventFluidExtensions.cs
  30. 21
      backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj
  31. 4
      backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/JsonArrayFluidValue.cs
  32. 2
      backend/src/Squidex.Domain.Apps.Entities/Apps/DefaultAppLogStore.cs
  33. 32
      backend/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj
  34. 6
      backend/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj
  35. 10
      backend/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj
  36. 5
      backend/src/Squidex.Infrastructure/CollectionExtensions.cs
  37. 2
      backend/src/Squidex.Infrastructure/DisposableObjectBase.cs
  38. 3
      backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeExtensions.cs
  39. 2
      backend/src/Squidex.Infrastructure/Json/Objects/JsonValue.cs
  40. 2
      backend/src/Squidex.Infrastructure/Queries/OData/ConstantWithTypeVisitor.cs
  41. 38
      backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
  42. 5
      backend/src/Squidex.Shared/Squidex.Shared.csproj
  43. 15
      backend/src/Squidex.Web/Pipeline/ActionContextLogAppender.cs
  44. 12
      backend/src/Squidex.Web/Squidex.Web.csproj
  45. 12
      backend/src/Squidex/Areas/IdentityServer/Config/ApplicationExtensions.cs
  46. 8
      backend/src/Squidex/Areas/IdentityServer/Config/ApplicationManager.cs
  47. 4
      backend/src/Squidex/Areas/IdentityServer/Config/DynamicApplicationStore.cs
  48. 10
      backend/src/Squidex/Areas/IdentityServer/Config/IdentityServerServices.cs
  49. 2
      backend/src/Squidex/Areas/IdentityServer/Controllers/Connect/AuthorizationController.cs
  50. 11
      backend/src/Squidex/Config/Domain/EventSourcingServices.cs
  51. 3
      backend/src/Squidex/Config/Web/WebServices.cs
  52. 88
      backend/src/Squidex/Squidex.csproj
  53. 6
      backend/tests/Squidex.Data.Tests.CodeGenerator/Squidex.Data.Tests.CodeGenerator.csproj
  54. 2
      backend/tests/Squidex.Data.Tests/EntityFramework/Migrations/MySqlMigrationTests.cs
  55. 3
      backend/tests/Squidex.Data.Tests/EntityFramework/Migrations/PostgresMigrationTests.cs
  56. 4
      backend/tests/Squidex.Data.Tests/EntityFramework/Migrations/SqlServerMigrationTests.cs
  57. 2
      backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/MySqlFixture.cs
  58. 3
      backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/PostgresFixture.cs
  59. 3
      backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/SqlServerFixture.cs
  60. 2
      backend/tests/Squidex.Data.Tests/MongoDb/Domain/Contents/Text/AtlasParsingTests.cs
  61. 2
      backend/tests/Squidex.Data.Tests/MongoDb/TestHelpers/DocumentDbFixture.cs
  62. 2
      backend/tests/Squidex.Data.Tests/MongoDb/TestHelpers/MongoFixture.cs
  63. 34
      backend/tests/Squidex.Data.Tests/Squidex.Data.Tests.csproj
  64. 9
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/DefaultValuesTests.cs
  65. 22
      backend/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj
  66. 20
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentsBulkUpdateCommandMiddlewareTests.cs
  67. 7
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/TestContent.cs
  68. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/ElasticSearchTextIndexFixture.cs
  69. 38
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj
  70. 4
      backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/VerifySettings.cs
  71. 16
      backend/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj
  72. 5
      backend/tests/Squidex.Infrastructure.Tests/Json/Objects/JsonObjectTests.cs
  73. 2
      backend/tests/Squidex.Infrastructure.Tests/Migrations/MigratorTests.cs
  74. 26
      backend/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj
  75. 16
      backend/tests/Squidex.Web.Tests/Squidex.Web.Tests.csproj
  76. 2
      backend/tools/GenerateLanguages/GenerateLanguages.csproj
  77. 2
      frontend/generator/Generator/Generator.csproj
  78. 18
      tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj
  79. 8
      tools/TestSuite/TestSuite.LoadTests/TestSuite.LoadTests.csproj
  80. 18
      tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj
  81. 37
      tools/TestSuite/TestSuite.sln
  82. 5
      tools/TestSuite/TestSuite.slnx

6
.github/workflows/dev.yml

@ -40,7 +40,7 @@ jobs:
id: dotnet
uses: actions/setup-dotnet@v4.3.1
with:
dotnet-version: 8.0.x
dotnet-version: 10.0.x
# Note: Unless a concrete version is specified in the `global.json` file,
# the latest .NET version installed on the runner (including preinstalled
@ -67,7 +67,7 @@ jobs:
- name: Prepare - Setup dotnet
uses: actions/setup-dotnet@v4.3.1
with:
dotnet-version: 8.0.x
dotnet-version: 10.0.x
- name: Prepare - Setup Node
uses: actions/setup-node@v4.4.0
@ -175,7 +175,7 @@ jobs:
- name: Prepare - Setup dotnet
uses: actions/setup-dotnet@v4.3.1
with:
dotnet-version: 8.0.x
dotnet-version: 10.0.x
- name: Prepare - Setup Node
uses: actions/setup-node@v4.4.0

4
Dockerfile

@ -2,7 +2,7 @@
# Stage 1, Build Backend
#
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS backend
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:10.0 AS backend
# FFMPEG for tests
RUN apt-get update \
@ -79,7 +79,7 @@ RUN cp -a build /build/
#
# Stage 3, Build runtime
#
FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim
FROM mcr.microsoft.com/dotnet/aspnet:10.0-bookworm-slim
ARG SQUIDEX__RUNTIME__VERSION=7.0.0

321
backend/Squidex.sln

@ -1,321 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex", "src\Squidex\Squidex.csproj", "{61F6BBCE-A080-4400-B194-70E2F5D2096E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "infrastructure", "infrastructure", "{8CF53B92-5EB1-461D-98F8-70DA9B603FBF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "domain", "domain", "{4C6B06C2-6D77-4E0E-AE32-D7050236433A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Infrastructure", "src\Squidex.Infrastructure\Squidex.Infrastructure.csproj", "{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Apps.Events", "src\Squidex.Domain.Apps.Events\Squidex.Domain.Apps.Events.csproj", "{25F66C64-058A-4D44-BC0C-F12A054F9A91}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Infrastructure.Tests", "tests\Squidex.Infrastructure.Tests\Squidex.Infrastructure.Tests.csproj", "{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Apps.Core.Tests", "tests\Squidex.Domain.Apps.Core.Tests\Squidex.Domain.Apps.Core.Tests.csproj", "{FD0AFD44-7A93-4F9E-B5ED-72582392E435}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{94207AA6-4923-4183-A558-E0F8196B8CA3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Shared", "src\Squidex.Shared\Squidex.Shared.csproj", "{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Users", "src\Squidex.Domain.Users\Squidex.Domain.Users.csproj", "{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Users.Tests", "tests\Squidex.Domain.Users.Tests\Squidex.Domain.Users.Tests.csproj", "{42184546-E3CB-4D4F-9495-43979B9C63B9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{360C300D-0F7E-439D-A437-714C959E3CAD}"
ProjectSection(SolutionItems) = preProject
Squidex.ruleset = Squidex.ruleset
stylecop.json = stylecop.json
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Apps.Core.Model", "src\Squidex.Domain.Apps.Core.Model\Squidex.Domain.Apps.Core.Model.csproj", "{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Apps.Core.Operations", "src\Squidex.Domain.Apps.Core.Operations\Squidex.Domain.Apps.Core.Operations.csproj", "{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Apps.Entities", "src\Squidex.Domain.Apps.Entities\Squidex.Domain.Apps.Entities.csproj", "{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Apps.Entities.Tests", "tests\Squidex.Domain.Apps.Entities.Tests\Squidex.Domain.Apps.Entities.Tests.csproj", "{AA003372-CD8D-4DBC-962C-F61E0C93CF05}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Web.Tests", "tests\Squidex.Web.Tests\Squidex.Web.Tests.csproj", "{7E8CC864-4C6E-496F-A672-9F9AD8874835}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "extensions", "extensions", "{FB8BC3A2-2010-4C3C-A87D-D4A98C05EE52}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Extensions", "extensions\Squidex.Extensions\Squidex.Extensions.csproj", "{F3C41B82-6A67-409A-B7FE-54543EE4F38B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{7EDE8CF1-B1E4-4005-B154-834B944E0D7A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Web", "src\Squidex.Web\Squidex.Web.csproj", "{5B2D251F-46E3-486A-AE16-E3FE06B559ED}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Migrations", "src\Migrations\Migrations.csproj", "{23615A39-F3FB-4575-A91C-535899DFB636}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data", "data", "{3378B841-53F8-48CC-87C1-1B30CF912BFD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Data.MongoDb", "src\Squidex.Data.MongoDb\Squidex.Data.MongoDb.csproj", "{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Data.Tests", "tests\Squidex.Data.Tests\Squidex.Data.Tests.csproj", "{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Data.EntityFramework", "src\Squidex.Data.EntityFramework\Squidex.Data.EntityFramework.csproj", "{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Squidex.Data.Tests.CodeGenerator", "tests\Squidex.Data.Tests.CodeGenerator\Squidex.Data.Tests.CodeGenerator.csproj", "{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{61F6BBCE-A080-4400-B194-70E2F5D2096E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{61F6BBCE-A080-4400-B194-70E2F5D2096E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{61F6BBCE-A080-4400-B194-70E2F5D2096E}.Debug|x64.ActiveCfg = Debug|Any CPU
{61F6BBCE-A080-4400-B194-70E2F5D2096E}.Debug|x86.ActiveCfg = Debug|Any CPU
{61F6BBCE-A080-4400-B194-70E2F5D2096E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{61F6BBCE-A080-4400-B194-70E2F5D2096E}.Release|Any CPU.Build.0 = Release|Any CPU
{61F6BBCE-A080-4400-B194-70E2F5D2096E}.Release|x64.ActiveCfg = Release|Any CPU
{61F6BBCE-A080-4400-B194-70E2F5D2096E}.Release|x86.ActiveCfg = Release|Any CPU
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}.Debug|x64.ActiveCfg = Debug|Any CPU
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}.Debug|x86.ActiveCfg = Debug|Any CPU
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}.Release|Any CPU.Build.0 = Release|Any CPU
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}.Release|x64.ActiveCfg = Release|Any CPU
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C}.Release|x86.ActiveCfg = Release|Any CPU
{25F66C64-058A-4D44-BC0C-F12A054F9A91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{25F66C64-058A-4D44-BC0C-F12A054F9A91}.Debug|Any CPU.Build.0 = Debug|Any CPU
{25F66C64-058A-4D44-BC0C-F12A054F9A91}.Debug|x64.ActiveCfg = Debug|Any CPU
{25F66C64-058A-4D44-BC0C-F12A054F9A91}.Debug|x86.ActiveCfg = Debug|Any CPU
{25F66C64-058A-4D44-BC0C-F12A054F9A91}.Release|Any CPU.ActiveCfg = Release|Any CPU
{25F66C64-058A-4D44-BC0C-F12A054F9A91}.Release|Any CPU.Build.0 = Release|Any CPU
{25F66C64-058A-4D44-BC0C-F12A054F9A91}.Release|x64.ActiveCfg = Release|Any CPU
{25F66C64-058A-4D44-BC0C-F12A054F9A91}.Release|x86.ActiveCfg = Release|Any CPU
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}.Debug|x64.ActiveCfg = Debug|Any CPU
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}.Debug|x86.ActiveCfg = Debug|Any CPU
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}.Release|Any CPU.Build.0 = Release|Any CPU
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}.Release|x64.ActiveCfg = Release|Any CPU
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B}.Release|x86.ActiveCfg = Release|Any CPU
{FD0AFD44-7A93-4F9E-B5ED-72582392E435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FD0AFD44-7A93-4F9E-B5ED-72582392E435}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FD0AFD44-7A93-4F9E-B5ED-72582392E435}.Debug|x64.ActiveCfg = Debug|Any CPU
{FD0AFD44-7A93-4F9E-B5ED-72582392E435}.Debug|x86.ActiveCfg = Debug|Any CPU
{FD0AFD44-7A93-4F9E-B5ED-72582392E435}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD0AFD44-7A93-4F9E-B5ED-72582392E435}.Release|Any CPU.Build.0 = Release|Any CPU
{FD0AFD44-7A93-4F9E-B5ED-72582392E435}.Release|x64.ActiveCfg = Release|Any CPU
{FD0AFD44-7A93-4F9E-B5ED-72582392E435}.Release|x86.ActiveCfg = Release|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|x64.ActiveCfg = Debug|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|x64.Build.0 = Debug|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|x86.ActiveCfg = Debug|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|x86.Build.0 = Debug|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|Any CPU.Build.0 = Release|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|x64.ActiveCfg = Release|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|x64.Build.0 = Release|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|x86.ActiveCfg = Release|Any CPU
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|x86.Build.0 = Release|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|x64.ActiveCfg = Debug|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|x64.Build.0 = Debug|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|x86.ActiveCfg = Debug|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|x86.Build.0 = Debug|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|Any CPU.Build.0 = Release|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|x64.ActiveCfg = Release|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|x64.Build.0 = Release|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|x86.ActiveCfg = Release|Any CPU
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|x86.Build.0 = Release|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|x64.ActiveCfg = Debug|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|x64.Build.0 = Debug|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|x86.ActiveCfg = Debug|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|x86.Build.0 = Debug|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|Any CPU.Build.0 = Release|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|x64.ActiveCfg = Release|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|x64.Build.0 = Release|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|x86.ActiveCfg = Release|Any CPU
{42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|x86.Build.0 = Release|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Debug|x64.ActiveCfg = Debug|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Debug|x64.Build.0 = Debug|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Debug|x86.ActiveCfg = Debug|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Debug|x86.Build.0 = Debug|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Release|Any CPU.Build.0 = Release|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Release|x64.ActiveCfg = Release|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Release|x64.Build.0 = Release|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Release|x86.ActiveCfg = Release|Any CPU
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F}.Release|x86.Build.0 = Release|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Debug|x64.ActiveCfg = Debug|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Debug|x64.Build.0 = Debug|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Debug|x86.ActiveCfg = Debug|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Debug|x86.Build.0 = Debug|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Release|Any CPU.Build.0 = Release|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Release|x64.ActiveCfg = Release|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Release|x64.Build.0 = Release|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Release|x86.ActiveCfg = Release|Any CPU
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31}.Release|x86.Build.0 = Release|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Debug|x64.ActiveCfg = Debug|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Debug|x64.Build.0 = Debug|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Debug|x86.ActiveCfg = Debug|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Debug|x86.Build.0 = Debug|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Release|Any CPU.Build.0 = Release|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Release|x64.ActiveCfg = Release|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Release|x64.Build.0 = Release|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Release|x86.ActiveCfg = Release|Any CPU
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5}.Release|x86.Build.0 = Release|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Debug|x64.ActiveCfg = Debug|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Debug|x64.Build.0 = Debug|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Debug|x86.ActiveCfg = Debug|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Debug|x86.Build.0 = Debug|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Release|Any CPU.Build.0 = Release|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Release|x64.ActiveCfg = Release|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Release|x64.Build.0 = Release|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Release|x86.ActiveCfg = Release|Any CPU
{AA003372-CD8D-4DBC-962C-F61E0C93CF05}.Release|x86.Build.0 = Release|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Debug|x64.ActiveCfg = Debug|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Debug|x64.Build.0 = Debug|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Debug|x86.ActiveCfg = Debug|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Debug|x86.Build.0 = Debug|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|Any CPU.Build.0 = Release|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|x64.ActiveCfg = Release|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|x64.Build.0 = Release|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|x86.ActiveCfg = Release|Any CPU
{7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|x86.Build.0 = Release|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Debug|x64.ActiveCfg = Debug|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Debug|x64.Build.0 = Debug|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Debug|x86.ActiveCfg = Debug|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Debug|x86.Build.0 = Debug|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Release|Any CPU.Build.0 = Release|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Release|x64.ActiveCfg = Release|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Release|x64.Build.0 = Release|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Release|x86.ActiveCfg = Release|Any CPU
{F3C41B82-6A67-409A-B7FE-54543EE4F38B}.Release|x86.Build.0 = Release|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Debug|x64.ActiveCfg = Debug|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Debug|x64.Build.0 = Debug|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Debug|x86.ActiveCfg = Debug|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Debug|x86.Build.0 = Debug|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Release|Any CPU.Build.0 = Release|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Release|x64.ActiveCfg = Release|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Release|x64.Build.0 = Release|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Release|x86.ActiveCfg = Release|Any CPU
{5B2D251F-46E3-486A-AE16-E3FE06B559ED}.Release|x86.Build.0 = Release|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Debug|Any CPU.Build.0 = Debug|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Debug|x64.ActiveCfg = Debug|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Debug|x64.Build.0 = Debug|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Debug|x86.ActiveCfg = Debug|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Debug|x86.Build.0 = Debug|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Release|Any CPU.ActiveCfg = Release|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Release|Any CPU.Build.0 = Release|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Release|x64.ActiveCfg = Release|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Release|x64.Build.0 = Release|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Release|x86.ActiveCfg = Release|Any CPU
{23615A39-F3FB-4575-A91C-535899DFB636}.Release|x86.Build.0 = Release|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Debug|x64.ActiveCfg = Debug|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Debug|x64.Build.0 = Debug|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Debug|x86.ActiveCfg = Debug|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Debug|x86.Build.0 = Debug|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Release|Any CPU.Build.0 = Release|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Release|x64.ActiveCfg = Release|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Release|x64.Build.0 = Release|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Release|x86.ActiveCfg = Release|Any CPU
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D}.Release|x86.Build.0 = Release|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Debug|x64.ActiveCfg = Debug|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Debug|x64.Build.0 = Debug|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Debug|x86.ActiveCfg = Debug|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Debug|x86.Build.0 = Debug|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Release|Any CPU.Build.0 = Release|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Release|x64.ActiveCfg = Release|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Release|x64.Build.0 = Release|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Release|x86.ActiveCfg = Release|Any CPU
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD}.Release|x86.Build.0 = Release|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Debug|x64.ActiveCfg = Debug|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Debug|x64.Build.0 = Debug|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Debug|x86.ActiveCfg = Debug|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Debug|x86.Build.0 = Debug|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Release|Any CPU.Build.0 = Release|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Release|x64.ActiveCfg = Release|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Release|x64.Build.0 = Release|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Release|x86.ActiveCfg = Release|Any CPU
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA}.Release|x86.Build.0 = Release|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Debug|x64.ActiveCfg = Debug|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Debug|x64.Build.0 = Debug|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Debug|x86.ActiveCfg = Debug|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Debug|x86.Build.0 = Debug|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Release|Any CPU.Build.0 = Release|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Release|x64.ActiveCfg = Release|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Release|x64.Build.0 = Release|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Release|x86.ActiveCfg = Release|Any CPU
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C} = {8CF53B92-5EB1-461D-98F8-70DA9B603FBF}
{25F66C64-058A-4D44-BC0C-F12A054F9A91} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A}
{7FD0A92B-7862-4BB1-932B-B52A9CACB56B} = {8CF53B92-5EB1-461D-98F8-70DA9B603FBF}
{FD0AFD44-7A93-4F9E-B5ED-72582392E435} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A}
{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F} = {7EDE8CF1-B1E4-4005-B154-834B944E0D7A}
{F7771E22-47BD-45C4-A133-FD7F1DE27CA0} = {7EDE8CF1-B1E4-4005-B154-834B944E0D7A}
{42184546-E3CB-4D4F-9495-43979B9C63B9} = {7EDE8CF1-B1E4-4005-B154-834B944E0D7A}
{F0A83301-50A5-40EA-A1A2-07C7858F5A3F} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A}
{6B3F75B6-5888-468E-BA4F-4FC725DAEF31} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A}
{79FEF326-CA5E-4698-B2BA-C16A4580B4D5} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A}
{AA003372-CD8D-4DBC-962C-F61E0C93CF05} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A}
{7E8CC864-4C6E-496F-A672-9F9AD8874835} = {7EDE8CF1-B1E4-4005-B154-834B944E0D7A}
{F3C41B82-6A67-409A-B7FE-54543EE4F38B} = {FB8BC3A2-2010-4C3C-A87D-D4A98C05EE52}
{5B2D251F-46E3-486A-AE16-E3FE06B559ED} = {7EDE8CF1-B1E4-4005-B154-834B944E0D7A}
{23615A39-F3FB-4575-A91C-535899DFB636} = {94207AA6-4923-4183-A558-E0F8196B8CA3}
{F754F05E-02FF-47B2-AB46-BB05C7E6B29D} = {3378B841-53F8-48CC-87C1-1B30CF912BFD}
{AA2F3C32-E3C8-4DF3-A365-F25C7EC19BCD} = {3378B841-53F8-48CC-87C1-1B30CF912BFD}
{0348CFDA-4DA1-4DB5-9C6F-0D234FE3E4DA} = {3378B841-53F8-48CC-87C1-1B30CF912BFD}
{2E4CC21D-3AB9-4B8C-A13E-348AA3E2F328} = {3378B841-53F8-48CC-87C1-1B30CF912BFD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {02F2E872-3141-44F5-BD6A-33CD84E9FE08}
EndGlobalSection
EndGlobal

43
backend/Squidex.slnx

@ -0,0 +1,43 @@
<Solution>
<Configurations>
<Platform Name="Any CPU" />
<Platform Name="x64" />
<Platform Name="x86" />
</Configurations>
<Folder Name="/data/">
<Project Path="src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj" />
<Project Path="src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj" />
<Project Path="tests/Squidex.Data.Tests.CodeGenerator/Squidex.Data.Tests.CodeGenerator.csproj" />
<Project Path="tests/Squidex.Data.Tests/Squidex.Data.Tests.csproj" />
</Folder>
<Folder Name="/domain/">
<Project Path="src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj" />
<Project Path="src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj" />
<Project Path="src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj" />
<Project Path="src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj" />
<Project Path="tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj" />
<Project Path="tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj" />
</Folder>
<Folder Name="/extensions/">
<Project Path="extensions/Squidex.Extensions/Squidex.Extensions.csproj" />
</Folder>
<Folder Name="/infrastructure/">
<Project Path="src/Squidex.Infrastructure/Squidex.Infrastructure.csproj" />
<Project Path="tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj" />
</Folder>
<Folder Name="/shared/">
<Project Path="src/Squidex.Domain.Users/Squidex.Domain.Users.csproj" />
<Project Path="src/Squidex.Shared/Squidex.Shared.csproj" />
<Project Path="src/Squidex.Web/Squidex.Web.csproj" />
<Project Path="tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj" />
<Project Path="tests/Squidex.Web.Tests/Squidex.Web.Tests.csproj" />
</Folder>
<Folder Name="/Solution Items/">
<File Path="Squidex.ruleset" />
<File Path="stylecop.json" />
</Folder>
<Folder Name="/tools/">
<Project Path="src/Migrations/Migrations.csproj" />
</Folder>
<Project Path="src/Squidex/Squidex.csproj" />
</Solution>

37
backend/extensions/Squidex.Extensions/APM/Zipkin/ZipkinPlugin.cs

@ -1,37 +0,0 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using OpenTelemetry.Trace;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Plugins;
namespace Squidex.Extensions.APM.Zipkin;
public sealed class ZipkinPlugin : IPlugin
{
private sealed class Configurator(IConfiguration config) : ITelemetryConfigurator
{
public void Configure(TracerProviderBuilder builder)
{
builder.AddZipkinExporter(options =>
{
config.GetSection("logging:zipkin").Bind(options);
});
}
}
public void ConfigureServices(IServiceCollection services, IConfiguration config)
{
if (config.GetValue<bool>("logging:zipkin:enabled"))
{
services.AddSingleton<ITelemetryConfigurator,
Configurator>();
}
}
}

37
backend/extensions/Squidex.Extensions/Squidex.Extensions.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
@ -11,34 +11,35 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Algolia.Search" Version="6.17.0" />
<PackageReference Include="Azure.Monitor.OpenTelemetry.Exporter" Version="1.3.0" />
<PackageReference Include="Azure.Search.Documents" Version="11.6.0" />
<PackageReference Include="Azure.Monitor.OpenTelemetry.Exporter" Version="1.6.0" />
<PackageReference Include="Azure.Search.Documents" Version="11.7.0" />
<PackageReference Include="CoreTweet" Version="1.0.0.483" />
<PackageReference Include="Elasticsearch.Net" Version="7.17.5" />
<PackageReference Include="Google.Cloud.Diagnostics.Common" Version="5.2.0" />
<PackageReference Include="Google.Cloud.Logging.V2" Version="4.4.0" />
<PackageReference Include="Google.Cloud.Monitoring.V3" Version="3.11.0" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Google.Cloud.Diagnostics.Common" Version="5.3.0" />
<PackageReference Include="Google.Cloud.Logging.V2" Version="4.5.0" />
<PackageReference Include="Google.Cloud.Monitoring.V3" Version="3.16.0" />
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Azure.CognitiveServices.Vision.ComputerVision" Version="7.0.1" />
<PackageReference Include="Microsoft.Azure.SignalR.Management" Version="1.28.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
<PackageReference Include="Microsoft.OData.Core" Version="8.2.1" />
<PackageReference Include="NodaTime" Version="3.2.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Microsoft.Azure.SignalR.Management" Version="1.33.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.5" />
<PackageReference Include="Microsoft.OData.Core" Version="8.4.3" />
<PackageReference Include="Microsoft.Rest.ClientRuntime" Version="2.3.24" />
<PackageReference Include="NodaTime" Version="3.3.1" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="OpenSearch.Net" Version="1.8.0" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Exporter.Zipkin" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.15.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.0" />
<PackageReference Include="OpenTelemetry.Exporter.Zipkin" Version="1.15.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.15.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.OpenTelemetry.Exporter.Stackdriver" Version="0.0.0-alpha.0.395" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="WindowsAzure.Storage" Version="9.3.3" />
</ItemGroup>
<ItemGroup Condition="'$(IncludeKafka)' == 'true'">

5
backend/global.json

@ -1,5 +0,0 @@
{
"sdk": {
"version": "8.0.416"
}
}

2
backend/i18n/translator/Squidex.Translator/Squidex.Translator.csproj

@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<NoWarn>NU1608</NoWarn>

6
backend/src/Migrations/Migrations.csproj

@ -1,16 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
</ItemGroup>

3
backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Apps/EFAppRepository.cs

@ -5,7 +5,6 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Query;
using Squidex.Domain.Apps.Core.Apps;
@ -101,7 +100,7 @@ public sealed class EFAppRepository<TContext>(IDbContextFactory<TContext> dbCont
return byName.Values.ToList();
}
protected override Expression<Func<SetPropertyCalls<EFAppEntity>, SetPropertyCalls<EFAppEntity>>> BuildUpdate(EFAppEntity entity)
protected override Action<UpdateSettersBuilder<EFAppEntity>> BuildUpdate(EFAppEntity entity)
{
return u => u
.SetProperty(x => x.Document, entity.Document)

2
backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Assets/EFAssetFolderRepository_SnapshotStore.cs

@ -113,7 +113,7 @@ public sealed partial class EFAssetFolderRepository<TContext> : ISnapshotStore<A
return dbContextFactory.CreateDbContextAsync(ct);
}
private static Expression<Func<SetPropertyCalls<EFAssetFolderEntity>, SetPropertyCalls<EFAssetFolderEntity>>> BuildUpdate(EFAssetFolderEntity entity)
private static Action<UpdateSettersBuilder<EFAssetFolderEntity>> BuildUpdate(EFAssetFolderEntity entity)
{
return b => b
.SetProperty(x => x.AppId, entity.AppId)

2
backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Assets/EFAssetRepository_SnapshotStore.cs

@ -108,7 +108,7 @@ public sealed partial class EFAssetRepository<TContext> : ISnapshotStore<Asset>,
}
}
private static Expression<Func<SetPropertyCalls<EFAssetEntity>, SetPropertyCalls<EFAssetEntity>>> BuildUpdate(EFAssetEntity entity)
private static Action<UpdateSettersBuilder<EFAssetEntity>> BuildUpdate(EFAssetEntity entity)
{
return b => b
.SetProperty(x => x.AppId, entity.AppId)

2
backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Contents/Extensions.cs

@ -54,7 +54,7 @@ internal static class Extensions
}
}
public static Expression<Func<SetPropertyCalls<T>, SetPropertyCalls<T>>> BuildUpdate<T>(T entity) where T : EFContentEntity
public static Action<UpdateSettersBuilder<T>> BuildUpdate<T>(T entity) where T : EFContentEntity
{
return b => b
.SetProperty(x => x.AppId, entity.AppId)

2
backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Schemas/EFSchemaRepository.cs

@ -106,7 +106,7 @@ public sealed class EFSchemaRepository<TContext>(IDbContextFactory<TContext> dbC
}
}
protected override Expression<Func<SetPropertyCalls<EFSchemaEntity>, SetPropertyCalls<EFSchemaEntity>>> BuildUpdate(EFSchemaEntity entity)
protected override Action<UpdateSettersBuilder<EFSchemaEntity>> BuildUpdate(EFSchemaEntity entity)
{
return u => u
.SetProperty(x => x.Document, entity.Document)

2
backend/src/Squidex.Data.EntityFramework/Domain/Apps/Entities/Teams/EFTeamRepository.cs

@ -70,7 +70,7 @@ public sealed class EFTeamRepository<TContext>(IDbContextFactory<TContext> dbCon
}
}
protected override Expression<Func<SetPropertyCalls<EFTeamEntity>, SetPropertyCalls<EFTeamEntity>>> BuildUpdate(EFTeamEntity entity)
protected override Action<UpdateSettersBuilder<EFTeamEntity>> BuildUpdate(EFTeamEntity entity)
{
return u => u
.SetProperty(x => x.Document, entity.Document)

2
backend/src/Squidex.Data.EntityFramework/Infrastructure/BulkInserter.cs

@ -24,6 +24,6 @@ public sealed class BulkInserter : IDbFlowsBulkInserter, IDbEventStoreBulkInsert
public Task BulkUpsertAsync<T>(DbContext dbContext, IEnumerable<T> entities,
CancellationToken ct = default) where T : class
{
return dbContext.ExecuteBulkInsertAsync(entities, o => { }, new OnConflictOptions<T> { Update = e => e }, ct);
return dbContext.ExecuteBulkInsertAsync(entities, o => { }, new OnConflictOptions<T> { Update = (lhs, rhs) => lhs }, ct);
}
}

4
backend/src/Squidex.Data.EntityFramework/Infrastructure/Extensions.cs

@ -93,7 +93,7 @@ public static class Extensions
return Task.CompletedTask;
}
return dbContext.ExecuteBulkInsertAsync(source, o => { }, new OnConflictOptions<T> { Update = e => e }, ct);
return dbContext.ExecuteBulkInsertAsync(source, o => { }, new OnConflictOptions<T> { Update = (lhs, rhs) => lhs }, ct);
}
public static Task BulkInsertAsync<T>(this DbContext dbContext, List<T> source,
@ -173,7 +173,7 @@ public static class Extensions
}
public static async Task UpsertAsync<T>(this DbContext dbContext, T entity, long oldVersion,
Func<T, Expression<Func<SetPropertyCalls<T>, SetPropertyCalls<T>>>> update,
Func<T, Action<UpdateSettersBuilder<T>>> update,
CancellationToken ct) where T : class, IVersionedEntity<DomainId>
{
var dbSet = dbContext.Set<T>();

2
backend/src/Squidex.Data.EntityFramework/Infrastructure/States/EFSnapshotStore.cs

@ -114,7 +114,7 @@ public class EFSnapshotStore<TContext, T, TState>(IDbContextFactory<TContext> db
return dbContextFactory.CreateDbContextAsync(ct);
}
protected virtual Expression<Func<SetPropertyCalls<TState>, SetPropertyCalls<TState>>> BuildUpdate(TState entity)
protected virtual Action<UpdateSettersBuilder<TState>> BuildUpdate(TState entity)
{
return u => u
.SetProperty(x => x.Document, entity.Document)

5
backend/src/Squidex.Data.EntityFramework/Providers/MySql/Content/JsonFunction.cs

@ -1,5 +0,0 @@
namespace Squidex.Providers.MySql.Content;
public static class JsonFunction
{
}

2
backend/src/Squidex.Data.EntityFramework/Providers/MySql/JsonFunction.cs

@ -18,7 +18,7 @@ public static class JsonFunction
private const int TypeBoolean = 3;
private const int TypeNumber = 4;
private static readonly Dictionary<(int Type, CompareOperator Operator), string> Functions = new()
private static readonly Dictionary<(int Type, CompareOperator Operator), string> Functions = new ()
{
[(TypeAny, CompareOperator.Empty)] = "json_empty",
[(TypeAny, CompareOperator.Exists)] = "json_exists",

56
backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -19,41 +19,41 @@
<ProjectReference Include="..\Squidex.Infrastructure\Squidex.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.12" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.12">
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="10.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.16" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.16" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite" Version="8.0.16" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="8.0.16" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.11" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="8.0.11" />
<PackageReference Include="Npgsql.OpenTelemetry" Version="8.0.7" />
<PackageReference Include="PhenX.EntityFrameworkCore.BulkInsert.MySql" Version="0.2.3" />
<PackageReference Include="PhenX.EntityFrameworkCore.BulkInsert.PostgreSql" Version="0.2.3" />
<PackageReference Include="PhenX.EntityFrameworkCore.BulkInsert.SqlServer" Version="0.2.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Json.Microsoft" Version="8.0.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql.NetTopologySuite" Version="8.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.5" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="10.0.1" />
<PackageReference Include="Npgsql.OpenTelemetry" Version="10.0.2" />
<PackageReference Include="PhenX.EntityFrameworkCore.BulkInsert.MySql" Version="0.5.0" />
<PackageReference Include="PhenX.EntityFrameworkCore.BulkInsert.PostgreSql" Version="0.5.0" />
<PackageReference Include="PhenX.EntityFrameworkCore.BulkInsert.SqlServer" Version="0.5.0" />
<PackageReference Include="Microting.EntityFrameworkCore.MySql" Version="10.0.5" />
<PackageReference Include="Microting.EntityFrameworkCore.MySql.Json.Microsoft" Version="10.0.5" />
<PackageReference Include="Microting.EntityFrameworkCore.MySql.NetTopologySuite" Version="10.0.5" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.AI.EntityFramework" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.EntityFramework" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.TusAdapter" Version="7.37.0" />
<PackageReference Include="Squidex.Events.EntityFramework" Version="7.37.0" />
<PackageReference Include="Squidex.Flows.EntityFramework" Version="7.37.0" />
<PackageReference Include="Squidex.Hosting" Version="7.37.0" />
<PackageReference Include="Squidex.Messaging.EntityFramework" Version="7.37.0" />
<PackageReference Include="Squidex.OpenIdDict.EntityFramework" Version="5.8.4" />
<PackageReference Include="Squidex.AI.EntityFramework" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.EntityFramework" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.TusAdapter" Version="8.0.0" />
<PackageReference Include="Squidex.Events.EntityFramework" Version="8.0.0" />
<PackageReference Include="Squidex.Flows.EntityFramework" Version="8.0.0" />
<PackageReference Include="Squidex.Hosting" Version="8.0.0" />
<PackageReference Include="Squidex.Messaging.EntityFramework" Version="8.0.0" />
<PackageReference Include="Squidex.OpenIdDict.EntityFramework" Version="7.2.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="YDotNet.Server.EntityFramework" Version="0.4.3" />
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="YDotNet.Server.EntityFramework" Version="0.6.0" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="..\..\stylecop.json" Link="stylecop.json" />

2
backend/src/Squidex.Data.MongoDb/Domain/Apps/Entities/Contents/Text/AtlasTextIndex.cs

@ -25,7 +25,7 @@ public sealed class AtlasTextIndex(IMongoDatabase database, IHttpClientFactory a
private static readonly LuceneQueryVisitor QueryVisitor = new LuceneQueryVisitor(AtlasIndexDefinition.GetFieldPath);
private static readonly LuceneQueryAnalyzer QueryParser =
new LuceneQueryAnalyzer(LuceneVersion.LUCENE_48, "*",
new StandardAnalyzer(LuceneVersion.LUCENE_48, CharArraySet.EMPTY_SET));
new StandardAnalyzer(LuceneVersion.LUCENE_48, CharArraySet.Empty));
private readonly AtlasOptions atlasOptions = atlasOptions.Value;
private string index;

11
backend/src/Squidex.Data.MongoDb/Infrastructure/BsonDomainIdSerializer.cs

@ -68,16 +68,7 @@ public sealed class BsonDomainIdSerializer : SerializerBase<DomainId>, IBsonPoly
case BsonType.Binary:
if (Guid.TryParse(value.ToString(), out var guid))
{
#pragma warning disable CS0618 // Type or member is obsolete
if (context.Writer.Settings.GuidRepresentation == GuidRepresentation.CSharpLegacy)
{
context.Writer.WriteBinaryData(new BsonBinaryData(guid.ToByteArray(), BsonBinarySubType.UuidLegacy, GuidRepresentation.CSharpLegacy));
}
else
{
context.Writer.WriteBinaryData(new BsonBinaryData(guid, GuidRepresentation.Standard));
}
#pragma warning restore CS0618 // Type or member is obsolete
context.Writer.WriteBinaryData(new BsonBinaryData(guid, GuidRepresentation.Standard));
}
else
{

6
backend/src/Squidex.Data.MongoDb/Infrastructure/MongoClientFactory.cs

@ -6,7 +6,6 @@
// ==========================================================================
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using Squidex.Infrastructure.Json.Objects;
namespace Squidex.Infrastructure;
@ -24,11 +23,6 @@ public static class MongoClientFactory
var clientSettings = MongoClientSettings.FromConnectionString(connectionString);
// The current version of the linq provider has some issues with base classes.
#pragma warning disable CS0618 // Type or member is obsolete
clientSettings.LinqProvider = LinqProvider.V2;
#pragma warning restore CS0618 // Type or member is obsolete
// If we really need custom config.
configure?.Invoke(clientSettings);

2
backend/src/Squidex.Data.MongoDb/ServiceExtensions.cs

@ -300,7 +300,7 @@ public static class ServiceExtensions
{
if (!string.IsNullOrWhiteSpace(mongoCertificate))
{
var certFile = new X509Certificate2(mongoCertificate);
var certFile = X509CertificateLoader.LoadCertificateFromFile(mongoCertificate);
settings.SslSettings = new SslSettings
{

29
backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -16,25 +16,24 @@
<ProjectReference Include="..\Squidex.Infrastructure\Squidex.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="MongoDB.Driver" Version="2.30.0" />
<PackageReference Include="MongoDB.Driver.Core.Extensions.DiagnosticSources" Version="1.5.0" />
<PackageReference Include="MongoDB.Driver.GridFS" Version="2.30.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="MongoDB.Driver" Version="3.7.1" />
<PackageReference Include="MongoDB.Driver.Core.Extensions.DiagnosticSources" Version="3.0.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.AI.Mongo" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.Mongo" Version="7.37.0" />
<PackageReference Include="Squidex.Events.Mongo" Version="7.37.0" />
<PackageReference Include="Squidex.Flows.Mongo" Version="7.37.0" />
<PackageReference Include="Squidex.Hosting" Version="7.37.0" />
<PackageReference Include="Squidex.Messaging.Mongo" Version="7.37.0" />
<PackageReference Include="Squidex.OpenIddict.MongoDb" Version="5.8.5" />
<PackageReference Include="Squidex.AI.Mongo" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.Mongo" Version="8.0.0" />
<PackageReference Include="Squidex.Events.Mongo" Version="8.0.0" />
<PackageReference Include="Squidex.Flows.Mongo" Version="8.0.0" />
<PackageReference Include="Squidex.Hosting" Version="8.0.0" />
<PackageReference Include="Squidex.Messaging.Mongo" Version="8.0.0" />
<PackageReference Include="Squidex.OpenIddict.MongoDb" Version="7.2.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="YDotNet.Server.MongoDB" Version="0.4.3" />
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="YDotNet.Server.MongoDB" Version="0.6.0" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="..\..\stylecop.json" Link="stylecop.json" />

13
backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex.Domain.Apps.Core</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -12,17 +12,16 @@
<DebugSymbols>True</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.1" />
<PackageReference Include="NetTopologySuite" Version="2.5.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.5" />
<PackageReference Include="NetTopologySuite" Version="2.6.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.Flows" Version="7.37.0" />
<PackageReference Include="Squidex.Flows" Version="8.0.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="8.0.0" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup>
<ItemGroup>

3
backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/JsonTypeVisitor.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Globalization;
using NJsonSchema;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.Schemas;
@ -140,7 +141,7 @@ internal sealed class JsonTypeVisitor : IFieldVisitor<JsonSchemaProperty?, JsonT
{
var property = JsonTypeBuilder.DateTimeProperty();
property.Default = field.Properties.DefaultValue?.ToString();
property.Default = field.Properties.DefaultValue?.ToString("g", CultureInfo.InvariantCulture);
return property;
}

12
backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventFluidExtensions.cs

@ -35,7 +35,7 @@ public sealed class EventFluidExtensions(IUrlGenerator urlGenerator) : IFluidExt
return new StringValue(url);
}
return NilValue.Empty;
return EmptyValue.Instance;
}
var value = input.ToObjectValue();
@ -56,7 +56,7 @@ public sealed class EventFluidExtensions(IUrlGenerator urlGenerator) : IFluidExt
}
}
return NilValue.Empty;
return EmptyValue.Instance;
}
private ValueTask<FluidValue> AssetContentUrl(FluidValue input, FilterArguments arguments, TemplateContext context)
@ -70,7 +70,7 @@ public sealed class EventFluidExtensions(IUrlGenerator urlGenerator) : IFluidExt
return new StringValue(result);
}
return NilValue.Empty;
return EmptyValue.Instance;
}
var value = input.ToObjectValue();
@ -91,7 +91,7 @@ public sealed class EventFluidExtensions(IUrlGenerator urlGenerator) : IFluidExt
}
}
return NilValue.Empty;
return EmptyValue.Instance;
}
private ValueTask<FluidValue> AssetContentSlugUrl(FluidValue input, FilterArguments arguments, TemplateContext context)
@ -105,7 +105,7 @@ public sealed class EventFluidExtensions(IUrlGenerator urlGenerator) : IFluidExt
return new StringValue(result);
}
return NilValue.Empty;
return EmptyValue.Instance;
}
var value = input.ToObjectValue();
@ -123,6 +123,6 @@ public sealed class EventFluidExtensions(IUrlGenerator urlGenerator) : IFluidExt
}
}
return NilValue.Empty;
return EmptyValue.Instance;
}
}

21
backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex.Domain.Apps.Core</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -18,22 +18,21 @@
<ProjectReference Include="..\Squidex.Shared\Squidex.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Fluid.Core" Version="2.12.0" />
<PackageReference Include="Fluid.Core" Version="2.31.0" />
<PackageReference Include="GeoJSON.Net" Version="1.4.1" />
<PackageReference Include="Jint" Version="4.4.2" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Jint" Version="4.6.3" />
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.1" />
<PackageReference Include="NJsonSchema" Version="11.0.2" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.5" />
<PackageReference Include="NJsonSchema" Version="11.5.2" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.AI" Version="7.37.0" />
<PackageReference Include="Squidex.Messaging.Subscriptions" Version="7.37.0" />
<PackageReference Include="Squidex.AI" Version="8.0.0" />
<PackageReference Include="Squidex.Messaging.Subscriptions" Version="8.0.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="8.0.0" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
<PackageReference Include="System.Linq.Async" Version="7.0.0" />
<PackageReference Include="ValueTaskSupplement" Version="1.1.0" />
</ItemGroup>
<ItemGroup>

4
backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/JsonArrayFluidValue.cs

@ -44,7 +44,7 @@ public sealed class JsonArrayFluidValue(JsonArray value, TemplateOptions options
return value.ToString()!;
}
protected override FluidValue GetValue(string name, TemplateContext context)
public override ValueTask<FluidValue> GetValueAsync(string name, TemplateContext context)
{
switch (name)
{
@ -71,7 +71,7 @@ public sealed class JsonArrayFluidValue(JsonArray value, TemplateOptions options
return NilValue.Instance;
}
protected override FluidValue GetIndex(FluidValue index, TemplateContext context)
public override ValueTask<FluidValue> GetIndexAsync(FluidValue index, TemplateContext context)
{
var i = (int)index.ToNumberValue();

2
backend/src/Squidex.Domain.Apps.Entities/Apps/DefaultAppLogStore.cs

@ -103,7 +103,7 @@ public sealed class DefaultAppLogStore(IRequestLogStore requestLogStore) : IAppL
await foreach (var request in requestLogStore.QueryAllAsync(appId.ToString(), fromTime, toTime, ct))
{
csv.WriteField(request.Timestamp.ToString());
csv.WriteField(request.Timestamp.ToString("g", CultureInfo.InvariantCulture));
csv.WriteField(GetString(request, FieldRequestPath));
csv.WriteField(GetString(request, FieldRequestMethod));
csv.WriteField(GetDouble(request, FieldRequestElapsedMs));

32
backend/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<NeutralLanguage>en</NeutralLanguage>
@ -28,27 +28,26 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="ConsoleTables" Version="2.7.0" />
<PackageReference Include="CsvHelper" Version="33.0.1" />
<PackageReference Include="FFMpegCore" Version="5.1.0" />
<PackageReference Include="GraphQL" Version="8.2.1" />
<PackageReference Include="GraphQL.DataLoader" Version="8.2.1" />
<PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00016" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="CsvHelper" Version="33.1.0" />
<PackageReference Include="FFMpegCore" Version="5.4.0" />
<PackageReference Include="GraphQL" Version="8.8.4" />
<PackageReference Include="GraphQL.DataLoader" Version="8.8.4" />
<PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00017" />
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.5" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="Notifo.SDK" Version="1.7.5" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.CLI.Core" Version="13.13.0" />
<PackageReference Include="YDotNet" Version="0.4.3" />
<PackageReference Include="YDotNet.Extensions" Version="0.4.3" />
<PackageReference Include="YDotNet.Server" Version="0.4.3" />
<PackageReference Include="YDotNet" Version="0.6.0" />
<PackageReference Include="YDotNet.Extensions" Version="0.6.0" />
<PackageReference Include="YDotNet.Server" Version="0.6.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="8.0.0" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="tusdotnet" Version="2.8.0" />
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="tusdotnet" Version="2.11.1" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="..\..\stylecop.json" Link="stylecop.json" />
@ -66,4 +65,7 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Using Remove="Parlot.Fluent.Parsers" />
</ItemGroup>
</Project>

6
backend/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
@ -14,11 +14,11 @@
<ProjectReference Include="..\Squidex.Infrastructure\Squidex.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
</ItemGroup>

10
backend/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
@ -18,18 +18,14 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="IdentityModel" Version="7.0.0" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="8.0.11" />
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
<PackageReference Include="OpenIddict.AspNetCore" Version="5.8.0" />
<PackageReference Include="OpenIddict.AspNetCore" Version="7.4.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="SharpPwned.NET" Version="2.0.1" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Linq.Queryable" Version="4.3.0" />
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="..\..\stylecop.json" Link="stylecop.json" />

5
backend/src/Squidex.Infrastructure/CollectionExtensions.cs

@ -195,11 +195,6 @@ public static class CollectionExtensions
}
}
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> enumerable)
{
return enumerable.OrderBy(x => Random.Shared.Next()).ToList();
}
public static IEnumerable<T> OrEmpty<T>(this IEnumerable<T>? source)
{
return source ?? [];

2
backend/src/Squidex.Infrastructure/DisposableObjectBase.cs

@ -9,7 +9,7 @@ namespace Squidex.Infrastructure;
public abstract class DisposableObjectBase : IDisposable
{
private readonly object disposeLock = new object();
private readonly Lock disposeLock = new Lock();
private bool isDisposed;
public bool IsDisposed => isDisposed;

3
backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeExtensions.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Globalization;
using NodaTime;
using NodaTime.Text;
using Squidex.Events;
@ -80,7 +81,7 @@ public static class EnvelopeExtensions
public static Envelope<T> SetTimestamp<T>(this Envelope<T> envelope, Instant value) where T : class, IEvent
{
envelope.Headers[CommonHeaders.Timestamp] = value.ToString();
envelope.Headers[CommonHeaders.Timestamp] = value.ToString("g", CultureInfo.InvariantCulture);
return envelope;
}

2
backend/src/Squidex.Infrastructure/Json/Objects/JsonValue.cs

@ -275,7 +275,7 @@ public readonly struct JsonValue : IEquatable<JsonValue>
public static JsonValue Create(Instant value)
{
return new JsonValue(value.ToString());
return new JsonValue(value.ToString("g", CultureInfo.InvariantCulture));
}
public static JsonValue Create(double value)

2
backend/src/Squidex.Infrastructure/Queries/OData/ConstantWithTypeVisitor.cs

@ -186,7 +186,7 @@ public sealed class ConstantWithTypeVisitor : QueryNodeVisitor<ClrValue>
return Instant.FromDateTimeUtc(DateTime.SpecifyKind(dateTime, DateTimeKind.Utc));
}
if (value is Date date)
if (value is DateOnly date)
{
return Instant.FromUtc(date.Year, date.Month, date.Day, 0, 0);
}

38
backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<NeutralLanguage>en</NeutralLanguage>
@ -11,33 +11,31 @@
<DebugSymbols>True</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MailKit" Version="4.8.0" />
<PackageReference Include="McMaster.NETCore.Plugins" Version="1.4.0" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="MailKit" Version="4.15.1" />
<PackageReference Include="McMaster.NETCore.Plugins" Version="2.0.0" />
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="8.0.11" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="10.0.5" />
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
<PackageReference Include="Microsoft.OData.Core" Version="8.2.1" />
<PackageReference Include="NodaTime" Version="3.2.0" />
<PackageReference Include="OpenTelemetry.Api" Version="1.9.0" />
<PackageReference Include="Microsoft.OData.Core" Version="8.4.3" />
<PackageReference Include="NodaTime" Version="3.3.1" />
<PackageReference Include="OpenTelemetry.Api" Version="1.15.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets" Version="7.37.0" />
<PackageReference Include="Squidex.Caching" Version="7.37.0" />
<PackageReference Include="Squidex.Events" Version="7.37.0" />
<PackageReference Include="Squidex.Hosting.Abstractions" Version="7.37.0" />
<PackageReference Include="Squidex.Log" Version="7.37.0" />
<PackageReference Include="Squidex.Messaging" Version="7.37.0" />
<PackageReference Include="Squidex.Text" Version="7.37.0" />
<PackageReference Include="Squidex.Assets" Version="8.0.0" />
<PackageReference Include="Squidex.Caching" Version="8.0.0" />
<PackageReference Include="Squidex.Events" Version="8.0.0" />
<PackageReference Include="Squidex.Hosting.Abstractions" Version="8.0.0" />
<PackageReference Include="Squidex.Log" Version="8.0.0" />
<PackageReference Include="Squidex.Messaging" Version="8.0.0" />
<PackageReference Include="Squidex.Text" Version="8.0.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="8.0.0" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
<PackageReference Include="System.Reactive" Version="6.0.1" />
<PackageReference Include="System.Linq.Async" Version="7.0.0" />
<PackageReference Include="System.Reactive" Version="6.1.0" />
<PackageReference Include="System.Reflection.TypeExtensions" Version="4.7.0" />
<PackageReference Include="System.Security.Claims" Version="4.3.0" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="..\..\stylecop.json" Link="stylecop.json" />

5
backend/src/Squidex.Shared/Squidex.Shared.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
@ -10,13 +10,12 @@
<DebugSymbols>True</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Security.Claims" Version="4.3.0" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="..\..\stylecop.json" Link="stylecop.json" />

15
backend/src/Squidex.Web/Pipeline/ActionContextLogAppender.cs

@ -7,12 +7,12 @@
using System.Diagnostics;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Squidex.Log;
namespace Squidex.Web.Pipeline;
public sealed class ActionContextLogAppender(IHttpContextAccessor httpContextAccessor, IActionContextAccessor actionContextAccessor) : ILogAppender
public sealed class ActionContextLogAppender(IHttpContextAccessor httpContextAccessor) : ILogAppender
{
public void Append(IObjectWriter writer, SemanticLogLevel logLevel, Exception? exception)
{
@ -23,8 +23,7 @@ public sealed class ActionContextLogAppender(IHttpContextAccessor httpContextAcc
return;
}
var actionContext = actionContextAccessor.ActionContext;
var actionDescriptor = httpContext.GetEndpoint()?.Metadata.GetMetadata<ActionDescriptor>();
try
{
if (string.IsNullOrEmpty(httpContext?.Request?.Method))
@ -34,7 +33,7 @@ public sealed class ActionContextLogAppender(IHttpContextAccessor httpContextAcc
var requestId = GetRequestId(httpContext);
var logContext = (requestId, context: httpContext, actionContext);
var logContext = (requestId, context: httpContext, actionDescriptor);
writer.WriteObject("web", logContext, (ctx, w) =>
{
@ -42,11 +41,9 @@ public sealed class ActionContextLogAppender(IHttpContextAccessor httpContextAcc
w.WriteProperty("requestPath", ctx.context.Request.Path);
w.WriteProperty("requestMethod", ctx.context.Request.Method);
var actionContext = ctx.actionContext;
if (actionContext != null)
if (ctx.actionDescriptor != null)
{
w.WriteObject("routeValues", actionContext.ActionDescriptor.RouteValues, (routeValues, r) =>
w.WriteObject("routeValues", ctx.actionDescriptor.RouteValues, (routeValues, r) =>
{
foreach (var (key, value) in routeValues)
{

12
backend/src/Squidex.Web/Squidex.Web.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
@ -13,14 +13,14 @@
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="GraphQL" Version="8.2.1" />
<PackageReference Include="GraphQL.SystemTextJson" Version="8.2.1" />
<PackageReference Include="GraphQL.Server.Transports.AspNetCore" Version="8.1.0" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="GraphQL" Version="8.8.4" />
<PackageReference Include="GraphQL.SystemTextJson" Version="8.8.4" />
<PackageReference Include="GraphQL.Server.Transports.AspNetCore" Version="8.3.3" />
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
</ItemGroup>

12
backend/src/Squidex/Areas/IdentityServer/Config/ApplicationExtensions.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Collections.Immutable;
using System.Security.Claims;
using System.Text.Json;
using OpenIddict.Abstractions;
@ -34,21 +35,26 @@ public static class ApplicationExtensions
return application;
}
private static JsonElement CreateParameter(IEnumerable<string> values)
private static JsonElement CreateParameter(IEnumerable<string?> values)
{
return (JsonElement)new OpenIddictParameter(values.ToArray());
return (JsonElement)new OpenIddictParameter(values.ToImmutableArray());
}
public static IEnumerable<Claim> Claims(this IReadOnlyDictionary<string, JsonElement> properties)
{
foreach (var (key, value) in properties)
{
var values = (string[]?)new OpenIddictParameter(value);
var values = (ImmutableArray<string?>?)new OpenIddictParameter(value);
if (values != null)
{
foreach (var claimValue in values)
{
if (claimValue == null)
{
continue;
}
if (key == SquidexClaimTypes.DisplayName)
{
yield return new Claim(OpenIdClaims.Name, claimValue);

8
backend/src/Squidex/Areas/IdentityServer/Config/ApplicationManager.cs

@ -12,11 +12,11 @@ using OpenIddict.Core;
namespace Squidex.Areas.IdentityServer.Config;
public sealed class ApplicationManager<T>(
IOptionsMonitor<OpenIddictCoreOptions> options,
IOpenIddictApplicationCache<T> cache,
IOpenIddictApplicationStoreResolver resolver,
ILogger<OpenIddictApplicationManager<T>> logger)
: OpenIddictApplicationManager<T>(cache, logger, options, resolver) where T : class
ILogger<OpenIddictApplicationManager<T>> logger,
IOptionsMonitor<OpenIddictCoreOptions> options,
IOpenIddictApplicationStore<T> store)
: OpenIddictApplicationManager<T>(cache, logger, options, store) where T : class
{
protected override ValueTask<bool> ValidateClientSecretAsync(string secret, string comparand,
CancellationToken cancellationToken = default)

4
backend/src/Squidex/Areas/IdentityServer/Config/DynamicApplicationStore.cs

@ -148,7 +148,7 @@ public class DynamicApplicationStore(IServiceProvider serviceProvider) : InMemor
Permissions =
{
Permissions.Endpoints.Authorization,
Permissions.Endpoints.Logout,
Permissions.Endpoints.EndSession,
Permissions.Endpoints.Token,
Permissions.GrantTypes.AuthorizationCode,
Permissions.GrantTypes.RefreshToken,
@ -175,7 +175,7 @@ public class DynamicApplicationStore(IServiceProvider serviceProvider) : InMemor
Permissions =
{
Permissions.Endpoints.Authorization,
Permissions.Endpoints.Logout,
Permissions.Endpoints.EndSession,
Permissions.Endpoints.Token,
Permissions.GrantTypes.Implicit,
Permissions.ResponseTypes.IdToken,

10
backend/src/Squidex/Areas/IdentityServer/Config/IdentityServerServices.cs

@ -114,10 +114,10 @@ public static class IdentityServerServices
builder.UseAspNetCore()
.DisableTransportSecurityRequirement()
.EnableAuthorizationEndpointPassthrough()
.EnableLogoutEndpointPassthrough()
.EnableEndSessionEndpointPassthrough()
.EnableStatusCodePagesIntegration()
.EnableTokenEndpointPassthrough()
.EnableUserinfoEndpointPassthrough();
.EnableUserInfoEndpointPassthrough();
builder.SetAccessTokenLifetime(TimeSpan.FromDays(30));
})
@ -164,16 +164,16 @@ public static class IdentityServerServices
options.IntrospectionEndpointUris.SetEndpoint(
BuildUrl("connect/introspect"));
options.LogoutEndpointUris.SetEndpoint(
options.EndSessionEndpointUris.SetEndpoint(
BuildUrl("connect/logout"));
options.TokenEndpointUris.SetEndpoint(
BuildUrl("connect/token"));
options.UserinfoEndpointUris.SetEndpoint(
options.UserInfoEndpointUris.SetEndpoint(
BuildUrl("connect/userinfo"));
options.CryptographyEndpointUris.SetEndpoint(
options.JsonWebKeySetEndpointUris.SetEndpoint(
BuildUrl(".well-known/jwks"));
options.ConfigurationEndpointUris.SetEndpoint(

2
backend/src/Squidex/Areas/IdentityServer/Controllers/Connect/AuthorizationController.cs

@ -115,7 +115,7 @@ public class AuthorizationController(
if (User.Identity?.IsAuthenticated != true)
{
if (request.HasPrompt(Prompts.None))
if (request.HasPromptValue(PromptValues.None))
{
var properties = new AuthenticationProperties(new Dictionary<string, string?>
{

11
backend/src/Squidex/Config/Domain/EventSourcingServices.cs

@ -5,8 +5,6 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using EventStore.Client;
using Squidex.Events.GetEventStore;
using Squidex.Hosting.Configuration;
using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.EventSourcing;
@ -37,15 +35,6 @@ public static class EventSourcingServices
services.AddSquidexEntityFrameworkEventStore(config);
},
["GetEventStore"] = () =>
{
var configuration = config.GetRequiredValue("eventStore:getEventStore:configuration");
services.AddSingletonAs(_ => EventStoreClientSettings.Create(configuration))
.AsSelf();
services.AddGetEventStore(config);
},
});
services.AddTransientAs<Rebuilder>()

3
backend/src/Squidex/Config/Web/WebServices.cs

@ -68,9 +68,6 @@ public static class WebServices
services.AddSingletonAs<HttpContextAccessor>()
.As<IHttpContextAccessor>();
services.AddSingletonAs<ActionContextAccessor>()
.As<IActionContextAccessor>();
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressInferBindingSourcesForParameters = true;

88
backend/src/Squidex/Squidex.csproj

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<NeutralLanguage>en</NeutralLanguage>
@ -29,66 +29,62 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AspNet.Security.OAuth.GitHub" Version="8.3.0" />
<PackageReference Include="Google.Cloud.Trace.V2" Version="3.6.0" />
<PackageReference Include="GraphQL" Version="8.2.1" />
<PackageReference Include="GraphQL.MicrosoftDI" Version="8.2.1" />
<PackageReference Include="GraphQL.SystemTextJson" Version="8.2.1" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="AspNet.Security.OAuth.GitHub" Version="10.0.0" />
<PackageReference Include="Google.Cloud.Trace.V2" Version="3.7.0" />
<PackageReference Include="GraphQL" Version="8.8.4" />
<PackageReference Include="GraphQL.MicrosoftDI" Version="8.8.4" />
<PackageReference Include="GraphQL.SystemTextJson" Version="8.8.4" />
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="8.0.11" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="8.0.11" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.11" />
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="8.0.11" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" />
<PackageReference Include="Microsoft.CodeAnalysis.RulesetToEditorconfigConverter" Version="3.3.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="10.0.5" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="10.0.5" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="10.0.5" />
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="10.0.5" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.5" />
<PackageReference Include="Microsoft.CodeAnalysis.RulesetToEditorconfigConverter" Version="4.14.0" />
<PackageReference Include="Microsoft.Data.Edm" Version="5.8.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.KeyPerFile" Version="8.0.18" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.2.1" />
<PackageReference Include="Microsoft.OData.Core" Version="8.2.1" />
<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.16.0" />
<PackageReference Include="Microsoft.OData.Core" Version="8.4.3" />
<PackageReference Include="NetTopologySuite.IO.GeoJSON4STJ" Version="4.0.0" />
<PackageReference Include="NJsonSchema" Version="11.0.2" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="NSwag.AspNetCore" Version="14.1.0" />
<PackageReference Include="NJsonSchema" Version="11.5.2" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="NSwag.AspNetCore" Version="14.6.3" />
<PackageReference Include="OpenCover" Version="4.7.1221" PrivateAssets="all" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.15.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="ReportGenerator" Version="5.4.1" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets.Azure" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.GoogleCloud" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.FTP" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.ImageSharp" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.S3" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.TusAdapter" Version="7.37.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="21.8.0" />
<PackageReference Include="Squidex.Events.GetEventStore" Version="7.37.0" />
<PackageReference Include="Squidex.Hosting" Version="7.37.0" />
<PackageReference Include="Squidex.Messaging.All" Version="7.37.0" />
<PackageReference Include="Squidex.Messaging.Subscriptions" Version="7.37.0" />
<PackageReference Include="ReportGenerator" Version="5.5.4" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets.Azure" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.GoogleCloud" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.FTP" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.ImageSharp" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.S3" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.TusAdapter" Version="8.0.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="22.2.0" />
<PackageReference Include="Squidex.Hosting" Version="8.0.0" />
<PackageReference Include="Squidex.Messaging.All" Version="8.0.0" />
<PackageReference Include="Squidex.Messaging.Subscriptions" Version="8.0.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="YDotNet" Version="0.4.3" />
<PackageReference Include="YDotNet.Native" Version="0.4.3" />
<PackageReference Include="YDotNet.Server" Version="0.4.3" />
<PackageReference Include="YDotNet.Server.Redis" Version="0.4.3" />
<PackageReference Include="YDotNet.Server.WebSockets" Version="0.4.3" />
<PackageReference Include="YDotNet" Version="0.6.0" />
<PackageReference Include="YDotNet.Native" Version="0.6.0" />
<PackageReference Include="YDotNet.Server" Version="0.6.0" />
<PackageReference Include="YDotNet.Server.Redis" Version="0.6.0" />
<PackageReference Include="YDotNet.Server.WebSockets" Version="0.6.0" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.11" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="10.0.5" />
</ItemGroup>
<ItemGroup Condition="'$(IncludeMagick)' == 'true'">
<PackageReference Include="Squidex.Assets.ImageMagick" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.ImageMagick" Version="8.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(IncludeKafka)' == 'true'">
<PackageReference Include="Squidex.Messaging.Kafka" Version="7.37.0" />
<PackageReference Include="Squidex.Messaging.Kafka" Version="8.0.0" />
</ItemGroup>
<PropertyGroup>
@ -170,4 +166,8 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Using Remove="Parlot.Fluent.Parsers" />
</ItemGroup>
</Project>

6
backend/tests/Squidex.Data.Tests.CodeGenerator/Squidex.Data.Tests.CodeGenerator.csproj

@ -16,12 +16,12 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Handlebars.Net" Version="2.1.6" PrivateAssets="all" GeneratePathProperty="true" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.11.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0">
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="5.3.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="5.3.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

2
backend/tests/Squidex.Data.Tests/EntityFramework/Migrations/MySqlMigrationTests.cs

@ -18,7 +18,7 @@ namespace Squidex.EntityFramework.Migrations;
[Trait("Category", "TestContainer")]
public class MySqlMigrationTests : IAsyncLifetime
{
private readonly MySqlContainer mysql = new MySqlBuilder().Build();
private readonly MySqlContainer mysql = new MySqlBuilder("mysql:8.0").Build();
public async Task InitializeAsync()
{

3
backend/tests/Squidex.Data.Tests/EntityFramework/Migrations/PostgresMigrationTests.cs

@ -19,8 +19,7 @@ namespace Squidex.EntityFramework.Migrations;
public class PostgresMigrationTests : IAsyncLifetime
{
private readonly PostgreSqlContainer postgreSql =
new PostgreSqlBuilder()
.WithImage("postgis/postgis")
new PostgreSqlBuilder("postgis/postgis")
.Build();
public async Task InitializeAsync()

4
backend/tests/Squidex.Data.Tests/EntityFramework/Migrations/SqlServerMigrationTests.cs

@ -18,7 +18,9 @@ namespace Squidex.EntityFramework.Migrations;
[Trait("Category", "TestContainer")]
public class SqlServerMigrationTests : IAsyncLifetime
{
private readonly MsSqlContainer sqlServer = new MsSqlBuilder().Build();
private readonly MsSqlContainer sqlServer =
new MsSqlBuilder("mcr.microsoft.com/mssql/server:2022-CU14-ubuntu-22.04")
.Build();
public async Task InitializeAsync()
{

2
backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/MySqlFixture.cs

@ -22,7 +22,7 @@ namespace Squidex.EntityFramework.TestHelpers;
public class MySqlFixture(string? reuseId = null) : IAsyncLifetime, ISqlContentFixture<TestDbContextMySql, MySqlContentDbContext>
{
private readonly MySqlContainer mysql =
new MySqlBuilder()
new MySqlBuilder("mysql:8.0")
.WithReuse(true)
.WithLabel("reuse-id", reuseId)
.WithCommand("--log-bin-trust-function-creators=1", "--local-infile=1")

3
backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/PostgresFixture.cs

@ -22,8 +22,7 @@ namespace Squidex.EntityFramework.TestHelpers;
public class PostgresFixture(string? reuseId) : IAsyncLifetime, ISqlContentFixture<TestDbContextPostgres, PostgresContentDbContext>
{
private readonly PostgreSqlContainer postgreSql =
new PostgreSqlBuilder()
.WithImage("postgis/postgis")
new PostgreSqlBuilder("postgis/postgis")
.WithReuse(true)
.WithLabel("reuse-id", reuseId)
.Build();

3
backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/SqlServerFixture.cs

@ -23,8 +23,7 @@ namespace Squidex.EntityFramework.TestHelpers;
public class SqlServerFixture(string? reuseId = null) : IAsyncLifetime, ISqlContentFixture<TestDbContextSqlServer, SqlServerContentDbContext>
{
private readonly MsSqlContainer sqlServer =
new MsSqlBuilder()
.WithImage("vibs2006/sql_server_fts")
new MsSqlBuilder("vibs2006/sql_server_fts")
.WithReuse(true)
.WithLabel("reuse-id", reuseId)
.Build();

2
backend/tests/Squidex.Data.Tests/MongoDb/Domain/Contents/Text/AtlasParsingTests.cs

@ -21,7 +21,7 @@ public class AtlasParsingTests
private static readonly LuceneQueryVisitor QueryVisitor = new LuceneQueryVisitor();
private static readonly LuceneQueryAnalyzer QueryParser =
new LuceneQueryAnalyzer(LuceneVersion.LUCENE_48, "*",
new StandardAnalyzer(LuceneVersion.LUCENE_48, CharArraySet.EMPTY_SET));
new StandardAnalyzer(LuceneVersion.LUCENE_48, CharArraySet.Empty));
private static readonly JsonSerializerOptions JsonSerializerOptions = new JsonSerializerOptions
{
WriteIndented = true,

2
backend/tests/Squidex.Data.Tests/MongoDb/TestHelpers/DocumentDbFixture.cs

@ -35,7 +35,7 @@ public class DocumentDbFixture
);
var certPath = TestConfig.Configuration.GetValue<string>("documentDb:keyFile")!;
var certFile = new X509Certificate2(certPath);
var certFile = X509CertificateLoader.LoadCertificateFromFile(certPath);
settings.RetryWrites = false;
settings.RetryReads = false;

2
backend/tests/Squidex.Data.Tests/MongoDb/TestHelpers/MongoFixture.cs

@ -21,7 +21,7 @@ public sealed class MongoFixtureCollection : ICollectionFixture<MongoFixture>
public class MongoFixture : IAsyncLifetime
{
private readonly MongoDbContainer mongoDb =
new MongoDbBuilder()
new MongoDbBuilder("mongo:6.0")
.WithReuse(false)
.WithLabel("reuse-id", "squidex-mongodb")
.Build();

34
backend/tests/Squidex.Data.Tests/Squidex.Data.Tests.csproj

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -19,30 +19,30 @@
<ProjectReference Include="..\Squidex.Infrastructure.Tests\Squidex.Infrastructure.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PackageReference Include="coverlet.collector" Version="8.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="FakeItEasy" Version="8.3.0" />
<PackageReference Include="FakeItEasy" Version="9.0.1" />
<PackageReference Include="FluentAssertions" Version="[7.0.0]" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="Testcontainers.MongoDb" Version="4.1.0" />
<PackageReference Include="Testcontainers.MsSql" Version="4.1.0" />
<PackageReference Include="Testcontainers.MySql" Version="4.1.0" />
<PackageReference Include="Testcontainers.PostgreSql" Version="4.1.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="Testcontainers.MongoDb" Version="4.11.0" />
<PackageReference Include="Testcontainers.MsSql" Version="4.11.0" />
<PackageReference Include="Testcontainers.MySql" Version="4.11.0" />
<PackageReference Include="Testcontainers.PostgreSql" Version="4.11.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

9
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/DefaultValuesTests.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Globalization;
using NodaTime;
using Squidex.Domain.Apps.Core.Apps;
using Squidex.Domain.Apps.Core.Contents;
@ -71,7 +72,7 @@ public class DefaultValuesTests
.AddInvariant(456))
.AddField("myDatetime",
new ContentFieldData()
.AddInvariant(now.ToString()))
.AddInvariant(now.ToString("g", CultureInfo.InvariantCulture)))
.AddField("myBoolean",
new ContentFieldData()
.AddInvariant(true))
@ -111,7 +112,7 @@ public class DefaultValuesTests
.AddInvariant(456))
.AddField("myDatetime",
new ContentFieldData()
.AddInvariant(now.ToString()))
.AddInvariant(now.ToString("g", CultureInfo.InvariantCulture)))
.AddField("myArray",
new ContentFieldData()
.AddInvariant(
@ -151,7 +152,7 @@ public class DefaultValuesTests
.AddInvariant(456))
.AddField("myDatetime",
new ContentFieldData()
.AddInvariant(now.ToString()))
.AddInvariant(now.ToString("g", CultureInfo.InvariantCulture)))
.AddField("myBoolean",
new ContentFieldData()
.AddInvariant(true))
@ -193,7 +194,7 @@ public class DefaultValuesTests
.AddInvariant(456))
.AddField("myDatetime",
new ContentFieldData()
.AddInvariant(now.ToString()))
.AddInvariant(now.ToString("g", CultureInfo.InvariantCulture)))
.AddField("myBoolean",
new ContentFieldData()
.AddInvariant(true))

22
backend/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex.Domain.Apps.Core</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -13,25 +13,25 @@
<ProjectReference Include="..\..\src\Squidex.Infrastructure\Squidex.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PackageReference Include="coverlet.collector" Version="8.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="FakeItEasy" Version="8.3.0" />
<PackageReference Include="FakeItEasy" Version="9.0.1" />
<PackageReference Include="FluentAssertions" Version="[7.0.0]" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="NetTopologySuite.IO.GeoJSON4STJ" Version="4.0.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

20
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentsBulkUpdateCommandMiddlewareTests.cs

@ -122,7 +122,7 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id == id && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<UpsertContent>.That.Matches(x => x.Data == data && x.ContentId == id), A<CancellationToken>._))
A<UpsertContent>.That.Matches(x => ReferenceEquals(x.Data, data) && x.ContentId == id), A<CancellationToken>._))
.MustHaveHappenedOnceExactly();
}
@ -157,11 +157,11 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id == content2.Id && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<UpsertContent>.That.Matches(x => x.Data == data && x.ContentId == content1.Id), A<CancellationToken>._))
A<UpsertContent>.That.Matches(x => ReferenceEquals(x.Data, data) && x.ContentId == content1.Id), A<CancellationToken>._))
.MustHaveHappenedOnceExactly();
A.CallTo(() => commandBus.PublishAsync(
A<UpsertContent>.That.Matches(x => x.Data == data && x.ContentId == content2.Id), A<CancellationToken>._))
A<UpsertContent>.That.Matches(x => ReferenceEquals(x.Data, data) && x.ContentId == content2.Id), A<CancellationToken>._))
.MustHaveHappenedOnceExactly();
}
@ -180,7 +180,7 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id != default && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<UpsertContent>.That.Matches(x => x.Data == data && x.ContentId != default), A<CancellationToken>._))
A<UpsertContent>.That.Matches(x => ReferenceEquals(x.Data, data) && x.ContentId != default), A<CancellationToken>._))
.MustHaveHappenedOnceExactly();
}
@ -199,7 +199,7 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id != default && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<UpsertContent>.That.Matches(x => x.Data == data && x.ContentId != default), A<CancellationToken>._))
A<UpsertContent>.That.Matches(x => ReferenceEquals(x.Data, data) && x.ContentId != default), A<CancellationToken>._))
.MustHaveHappenedOnceExactly();
}
@ -218,7 +218,7 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id != default && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<UpsertContent>.That.Matches(x => x.Data == data && x.ContentId == id), A<CancellationToken>._))
A<UpsertContent>.That.Matches(x => ReferenceEquals(x.Data, data) && x.ContentId == id), A<CancellationToken>._))
.MustHaveHappenedOnceExactly();
}
@ -237,7 +237,7 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id != default && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<UpsertContent>.That.Matches(x => x.Data == data && x.ContentId == id), A<CancellationToken>._))
A<UpsertContent>.That.Matches(x => ReferenceEquals(x.Data, data) && x.ContentId == id), A<CancellationToken>._))
.MustHaveHappenedOnceExactly();
}
@ -256,7 +256,7 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id == id && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<CreateContent>.That.Matches(x => x.ContentId == id && x.Data == data), A<CancellationToken>._))
A<CreateContent>.That.Matches(x => x.ContentId == id && ReferenceEquals(x.Data, data)), A<CancellationToken>._))
.MustHaveHappened();
}
@ -293,7 +293,7 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id == id && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<UpdateContent>.That.Matches(x => x.ContentId == id && x.Data == data), A<CancellationToken>._))
A<UpdateContent>.That.Matches(x => x.ContentId == id && ReferenceEquals(x.Data, data)), A<CancellationToken>._))
.MustHaveHappened();
}
@ -367,7 +367,7 @@ public class ContentsBulkUpdateCommandMiddlewareTests : GivenContext
Assert.Single(actual, x => x.JobIndex == 0 && x.Id == id && x.Exception == null);
A.CallTo(() => commandBus.PublishAsync(
A<PatchContent>.That.Matches(x => x.ContentId == id && x.Data == data), A<CancellationToken>._))
A<PatchContent>.That.Matches(x => x.ContentId == id && ReferenceEquals(x.Data, data)), A<CancellationToken>._))
.MustHaveHappened();
}

7
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/TestContent.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Globalization;
using NodaTime;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.Schemas;
@ -526,7 +527,7 @@ public static class TestContent
},
["myDatetime"] = new
{
iv = content.LastModified.ToString(),
iv = content.LastModified.ToString("g", CultureInfo.CurrentCulture),
},
["myReferences"] = new
{
@ -694,7 +695,7 @@ public static class TestContent
},
["myDatetime"] = new
{
iv = content.LastModified.ToString(),
iv = content.LastModified.ToString("g", CultureInfo.CurrentCulture),
},
["myGeolocation"] = new
{
@ -868,7 +869,7 @@ public static class TestContent
["myLocalizedString"] = "de-DE",
["myNumber"] = 1.0,
["myBoolean"] = true,
["myDatetime"] = content.LastModified.ToString(),
["myDatetime"] = content.LastModified.ToString("g", CultureInfo.CurrentCulture),
["myGeolocation"] = new
{
latitude = 10,

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/ElasticSearchTextIndexFixture.cs

@ -15,7 +15,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text;
public sealed class ElasticSearchTextIndexFixture : IAsyncLifetime
{
private readonly ElasticsearchContainer elastic =
new ElasticsearchBuilder()
new ElasticsearchBuilder("elasticsearch:8.6.1")
.WithReuse(true)
.WithLabel("resuse-id", "elastic-text")
.Build();

38
backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex.Domain.Apps.Entities</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -20,32 +20,32 @@
<ProjectReference Include="..\Squidex.Infrastructure.Tests\Squidex.Infrastructure.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PackageReference Include="coverlet.collector" Version="8.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="FakeItEasy" Version="8.3.0" />
<PackageReference Include="FakeItEasy" Version="9.0.1" />
<PackageReference Include="FluentAssertions" Version="[7.0.0]" />
<PackageReference Include="GraphQL" Version="8.2.1" />
<PackageReference Include="GraphQL.SystemTextJson" Version="8.2.1" />
<PackageReference Include="Lorem.Universal.Net" Version="4.0.80" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="GraphQL" Version="8.8.4" />
<PackageReference Include="GraphQL.SystemTextJson" Version="8.8.4" />
<PackageReference Include="Lorem.Universal.Net" Version="5.0.0" />
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="NodaTime.Serialization.JsonNet" Version="3.1.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Testcontainers.Elasticsearch" Version="4.1.0" />
<PackageReference Include="YDotNet.Native" Version="0.4.3" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="NodaTime.Serialization.JsonNet" Version="3.2.1" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="Testcontainers.Elasticsearch" Version="4.11.0" />
<PackageReference Include="YDotNet.Native" Version="0.6.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Reactive.Linq" Version="6.0.1" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="Verify.Xunit" Version="26.6.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="System.Reactive.Linq" Version="6.1.0" />
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="Verify.Xunit" Version="31.12.5" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

4
backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/VerifySettings.cs

@ -116,7 +116,7 @@ public static partial class VerifySettings
var originalKeyResolver = dictionaryContract.DictionaryKeyResolver!;
dictionaryContract.DictionaryKeyResolver = (name, original) =>
dictionaryContract.DictionaryKeyResolver = (writer, name, original) =>
{
if (original is string id && Guid.TryParse(id, out var guid1))
{
@ -132,7 +132,7 @@ public static partial class VerifySettings
return $"Guid_{index}";
}
return originalKeyResolver(name, original);
return originalKeyResolver(writer, name, original);
};
return contract;

16
backend/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex.Domain.Users</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -13,21 +13,21 @@
<ProjectReference Include="..\..\src\Squidex.Shared\Squidex.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PackageReference Include="coverlet.collector" Version="8.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="FakeItEasy" Version="8.3.0" />
<PackageReference Include="FakeItEasy" Version="9.0.1" />
<PackageReference Include="FluentAssertions" Version="[7.0.0]" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

5
backend/tests/Squidex.Infrastructure.Tests/Json/Objects/JsonObjectTests.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Globalization;
using System.Text.Json;
using NodaTime;
@ -252,8 +253,8 @@ public class JsonObjectTests
foreach (var json in jsons)
{
Assert.Equal(instant.ToString(), json.Value);
Assert.Equal(instant.ToString(), json.AsString);
Assert.Equal(instant.ToString("g", CultureInfo.InvariantCulture), json.Value);
Assert.Equal(instant.ToString("g", CultureInfo.InvariantCulture), json.AsString);
Assert.Equal(JsonValueType.String, json.Type);
Assert.Throws<InvalidOperationException>(() => json.AsBoolean);

2
backend/tests/Squidex.Infrastructure.Tests/Migrations/MigratorTests.cs

@ -20,7 +20,7 @@ public class MigratorTests
public sealed class InMemoryStatus : IMigrationStatus
{
private readonly object lockObject = new object();
private readonly Lock lockObject = new Lock();
private int version;
private bool isLocked;

26
backend/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex.Infrastructure</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -12,26 +12,26 @@
<ProjectReference Include="..\..\src\Squidex.Infrastructure\Squidex.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PackageReference Include="coverlet.collector" Version="8.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="FakeItEasy" Version="8.3.0" />
<PackageReference Include="FakeItEasy" Version="9.0.1" />
<PackageReference Include="FluentAssertions" Version="[7.0.0]" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="System.ValueTuple" Version="4.6.2" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

16
backend/tests/Squidex.Web.Tests/Squidex.Web.Tests.csproj

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Squidex.Web</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
@ -14,21 +14,21 @@
<ProjectReference Include="..\Squidex.Domain.Apps.Entities.Tests\Squidex.Domain.Apps.Entities.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PackageReference Include="coverlet.collector" Version="8.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="FakeItEasy" Version="8.3.0" />
<PackageReference Include="FakeItEasy" Version="9.0.1" />
<PackageReference Include="FluentAssertions" Version="[7.0.0]" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.179">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

2
backend/tools/GenerateLanguages/GenerateLanguages.csproj

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

2
frontend/generator/Generator/Generator.csproj

@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

18
tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj

@ -1,27 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.12.2" />
<PackageReference Include="FluentAssertions" Version="8.9.0" />
<PackageReference Include="GraphQL.Client" Version="6.1.0" />
<PackageReference Include="GraphQL.Client.Serializer.Newtonsoft" Version="6.1.0" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.202">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="NSwag.Core" Version="14.4.0" />
<PackageReference Include="Squidex.Assets" Version="7.37.0" />
<PackageReference Include="Squidex.Assets.ImageSharp" Version="7.37.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="NSwag.Core" Version="14.6.3" />
<PackageReference Include="Squidex.Assets" Version="8.0.0" />
<PackageReference Include="Squidex.Assets.ImageSharp" Version="8.0.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="Verify.Xunit" Version="30.4.0" />
<PackageReference Include="Verify.Xunit" Version="31.12.5" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.1">
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

8
tools/TestSuite/TestSuite.LoadTests/TestSuite.LoadTests.csproj

@ -1,20 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>11.0</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.202">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.1">
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

18
tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

@ -1,27 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>TestSuite</RootNamespace>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.202">
<PackageReference Include="Meziantou.Analyzer" Version="3.0.26">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets" Version="7.37.0" />
<PackageReference Include="Squidex.Assets" Version="8.0.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="22.2.0" />
<PackageReference Include="Squidex.ClientLibrary.ServiceExtensions" Version="22.2.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="Verify" Version="30.4.0" />
<PackageReference Include="Verify" Version="31.13.5" />
<PackageReference Include="xunit" Version="2.9.3" />
</ItemGroup>
<ItemGroup>

37
tools/TestSuite/TestSuite.sln

@ -1,37 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestSuite.Shared", "TestSuite.Shared\TestSuite.Shared.csproj", "{37484845-5542-4E52-AB00-C4576B84FE75}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestSuite.ApiTests", "TestSuite.ApiTests\TestSuite.ApiTests.csproj", "{E5F048CB-5307-4E4C-8DAB-2F1C0E5CACF3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestSuite.LoadTests", "TestSuite.LoadTests\TestSuite.LoadTests.csproj", "{F37572D9-4880-40F4-B3CB-83F58A40CA48}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{37484845-5542-4E52-AB00-C4576B84FE75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{37484845-5542-4E52-AB00-C4576B84FE75}.Debug|Any CPU.Build.0 = Debug|Any CPU
{37484845-5542-4E52-AB00-C4576B84FE75}.Release|Any CPU.ActiveCfg = Release|Any CPU
{37484845-5542-4E52-AB00-C4576B84FE75}.Release|Any CPU.Build.0 = Release|Any CPU
{E5F048CB-5307-4E4C-8DAB-2F1C0E5CACF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E5F048CB-5307-4E4C-8DAB-2F1C0E5CACF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E5F048CB-5307-4E4C-8DAB-2F1C0E5CACF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E5F048CB-5307-4E4C-8DAB-2F1C0E5CACF3}.Release|Any CPU.Build.0 = Release|Any CPU
{F37572D9-4880-40F4-B3CB-83F58A40CA48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F37572D9-4880-40F4-B3CB-83F58A40CA48}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F37572D9-4880-40F4-B3CB-83F58A40CA48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F37572D9-4880-40F4-B3CB-83F58A40CA48}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9F1CDBED-7D91-4B46-B4C5-0FE086E29285}
EndGlobalSection
EndGlobal

5
tools/TestSuite/TestSuite.slnx

@ -0,0 +1,5 @@
<Solution>
<Project Path="TestSuite.ApiTests/TestSuite.ApiTests.csproj" />
<Project Path="TestSuite.LoadTests/TestSuite.LoadTests.csproj" />
<Project Path="TestSuite.Shared/TestSuite.Shared.csproj" />
</Solution>
Loading…
Cancel
Save