From 73806802304976dbc23624f5ab0b53c6f911ebc4 Mon Sep 17 00:00:00 2001 From: ebolo Date: Sun, 26 Jul 2026 15:55:11 +0700 Subject: [PATCH] feat: upgrade application to .NET 10 Preserve configuration defaults with the .NET 10 binder and update dependencies, Docker builds, CI, and test tooling. --- .gitea/workflows/ci.yaml | 15 +- .../CaddyManager.Contracts.csproj | 2 +- .../CaddyManager.Services.csproj | 12 +- .../Configurations/ConfigurationsService.cs | 14 +- CaddyManager.Tests/CaddyManager.Tests.csproj | 20 +- CaddyManager.Tests/README.md | 4 +- CaddyManager.Tests/coverlet.runsettings | 2 +- CaddyManager/CaddyManager.csproj | 10 +- .../Components/Layout/MainLayout.razor.cs | 4 +- .../Application/ApplicationInfo.cs | 2 +- CaddyManager/Dockerfile | 17 +- CaddyManager/packages.lock.json | 688 +++++++----------- scripts/dotnet-docker.sh | 2 +- 13 files changed, 298 insertions(+), 494 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 80a61df..0af049b 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -22,15 +22,15 @@ jobs: config-inline: | [registry."${{ vars.DOCKER_GITEA_DOMAIN }}"] http = true - insecure = true + insecure = true - uses: actions/checkout@v4 - - uses: actions/setup-dotnet@v3 + - uses: actions/setup-dotnet@v4 with: - dotnet-version: '9' # SDK Version to use. + dotnet-version: '10' # SDK Version to use. dotnet-quality: 'ga' cache: true cache-dependency-path: '**/packages.lock.json' - - name: Restore dependencies + - name: Restore dependencies run: dotnet restore --locked-mode - name: Application metadata id: metadata @@ -50,10 +50,3 @@ jobs: --configuration Release --os linux --arch x64 \ /t:PublishContainer -p ContainerRegistry=${{ vars.DOCKER_GITEA_DOMAIN }} \ -p ContainerRepository=ebolo/caddy-manager -p:ContainerImageTags='"${{ steps.metadata.outputs.APP_VERSION }};latest"' - - name: Deploy to Komodo - uses: fjogeleit/http-request-action@v1 - if: success() - with: - url: '${{ vars.WINDMILL_DOMAIN }}/komodo/pull-stack/${{ secrets.KOMODO_STACK_ID }}' - method: 'PUT' - customHeaders: '{"Auth-Key": "${{ secrets.WINDMILL_KEY }}"}' \ No newline at end of file diff --git a/CaddyManager.Contracts/CaddyManager.Contracts.csproj b/CaddyManager.Contracts/CaddyManager.Contracts.csproj index 125f4c9..b760144 100644 --- a/CaddyManager.Contracts/CaddyManager.Contracts.csproj +++ b/CaddyManager.Contracts/CaddyManager.Contracts.csproj @@ -1,7 +1,7 @@  - net9.0 + net10.0 enable enable diff --git a/CaddyManager.Services/CaddyManager.Services.csproj b/CaddyManager.Services/CaddyManager.Services.csproj index 0f29cfe..fb0d0d8 100644 --- a/CaddyManager.Services/CaddyManager.Services.csproj +++ b/CaddyManager.Services/CaddyManager.Services.csproj @@ -5,19 +5,19 @@ - net9.0 + net10.0 enable enable - - - + + + - - + + diff --git a/CaddyManager.Services/Configurations/ConfigurationsService.cs b/CaddyManager.Services/Configurations/ConfigurationsService.cs index f3ffb9c..2150e5c 100644 --- a/CaddyManager.Services/Configurations/ConfigurationsService.cs +++ b/CaddyManager.Services/Configurations/ConfigurationsService.cs @@ -19,6 +19,18 @@ public class ConfigurationsService(IConfiguration configuration) : IConfiguratio else if (section.EndsWith("Configuration")) section = section[..^"Configuration".Length]; - return configuration.GetSection(section).Get() ?? Activator.CreateInstance(); + var result = configuration.GetSection(section).Get(); + var defaults = Activator.CreateInstance(); + + if (result is null) return defaults; + + // The .NET 10 binder writes nulls over property initialisers, so put the defaults back + foreach (var property in typeof(T).GetProperties()) + { + if (property is { CanRead: true, CanWrite: true } && property.GetValue(result) is null) + property.SetValue(result, property.GetValue(defaults)); + } + + return result; } } \ No newline at end of file diff --git a/CaddyManager.Tests/CaddyManager.Tests.csproj b/CaddyManager.Tests/CaddyManager.Tests.csproj index d912c31..d084293 100644 --- a/CaddyManager.Tests/CaddyManager.Tests.csproj +++ b/CaddyManager.Tests/CaddyManager.Tests.csproj @@ -1,7 +1,7 @@ - net9.0 + net10.0 enable enable false @@ -9,7 +9,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -21,17 +21,17 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - + + + + @@ -41,7 +41,7 @@ - + diff --git a/CaddyManager.Tests/README.md b/CaddyManager.Tests/README.md index ad8ed71..98118fd 100644 --- a/CaddyManager.Tests/README.md +++ b/CaddyManager.Tests/README.md @@ -66,7 +66,7 @@ Coverage reports exclude: ## Test Frameworks and Libraries - **xUnit**: Primary testing framework -- **FluentAssertions**: For readable assertions +- **AwesomeAssertions**: For readable assertions - **Moq**: For mocking dependencies - **Coverlet**: For code coverage analysis @@ -122,7 +122,7 @@ Common test data is provided through the `TestHelper` class: 2. **Single Responsibility**: Each test should verify one specific behavior 3. **Independence**: Tests should not depend on each other and should be able to run in any order 4. **Cleanup**: Use `IDisposable` or cleanup methods to remove temporary resources -5. **Readable Assertions**: Use FluentAssertions for more readable test assertions +5. **Readable Assertions**: Use AwesomeAssertions for more readable test assertions 6. **Mock Verification**: Verify that mocked methods are called as expected when relevant ## Continuous Integration diff --git a/CaddyManager.Tests/coverlet.runsettings b/CaddyManager.Tests/coverlet.runsettings index 4010149..de67840 100644 --- a/CaddyManager.Tests/coverlet.runsettings +++ b/CaddyManager.Tests/coverlet.runsettings @@ -15,7 +15,7 @@ [*]Microsoft.* [*]System.* [*]Moq.* - [*]FluentAssertions.* + [*]AwesomeAssertions.* [*]xunit.* Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute false diff --git a/CaddyManager/CaddyManager.csproj b/CaddyManager/CaddyManager.csproj index 531a809..c360bb4 100644 --- a/CaddyManager/CaddyManager.csproj +++ b/CaddyManager/CaddyManager.csproj @@ -1,11 +1,11 @@ - net9.0 + net10.0 enable enable Linux - 13 + 14 caddy-manager true @@ -19,10 +19,10 @@ - + - - + + diff --git a/CaddyManager/Components/Layout/MainLayout.razor.cs b/CaddyManager/Components/Layout/MainLayout.razor.cs index 15f50c4..8b6110a 100644 --- a/CaddyManager/Components/Layout/MainLayout.razor.cs +++ b/CaddyManager/Components/Layout/MainLayout.razor.cs @@ -21,8 +21,8 @@ public partial class MainLayout if (firstRender) { // Get the system preference for dark mode - _isDarkMode = await _mudThemeProvider.GetSystemPreference(); - await _mudThemeProvider.WatchSystemPreference(OnSystemPreferenceChanged); + _isDarkMode = await _mudThemeProvider.GetSystemDarkModeAsync(); + await _mudThemeProvider.WatchSystemDarkModeAsync(OnSystemPreferenceChanged); _isInitialing = false; StateHasChanged(); } diff --git a/CaddyManager/Configurations/Application/ApplicationInfo.cs b/CaddyManager/Configurations/Application/ApplicationInfo.cs index 45c9069..5c051ee 100644 --- a/CaddyManager/Configurations/Application/ApplicationInfo.cs +++ b/CaddyManager/Configurations/Application/ApplicationInfo.cs @@ -8,7 +8,7 @@ public class ApplicationInfo /// /// The version of the application, to be defined and tagged /// - public static readonly string Version = "1.1.1"; + public static readonly string Version = "1.2.0"; /// /// The commit hash of the application diff --git a/CaddyManager/Dockerfile b/CaddyManager/Dockerfile index d15122c..54113c4 100644 --- a/CaddyManager/Dockerfile +++ b/CaddyManager/Dockerfile @@ -1,23 +1,20 @@ -FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base USER $APP_UID WORKDIR /app EXPOSE 8080 EXPOSE 8081 -FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src -COPY ["CaddyManager/CaddyManager.csproj", "CaddyManager/"] +COPY ["CaddyManager/CaddyManager.csproj", "CaddyManager/packages.lock.json", "CaddyManager/"] +COPY ["CaddyManager.Contracts/CaddyManager.Contracts.csproj", "CaddyManager.Contracts/"] +COPY ["CaddyManager.Services/CaddyManager.Services.csproj", "CaddyManager.Services/"] RUN dotnet restore "CaddyManager/CaddyManager.csproj" COPY . . -WORKDIR "/src/CaddyManager" -RUN dotnet build "CaddyManager.csproj" -c $BUILD_CONFIGURATION -o /app/build - -FROM build AS publish -ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "CaddyManager.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false +RUN dotnet publish "CaddyManager/CaddyManager.csproj" -c $BUILD_CONFIGURATION -o /app/publish --no-restore /p:UseAppHost=false FROM base AS final WORKDIR /app -COPY --from=publish /app/publish . +COPY --from=build /app/publish . ENTRYPOINT ["dotnet", "CaddyManager.dll"] diff --git a/CaddyManager/packages.lock.json b/CaddyManager/packages.lock.json index 2fef236..e397470 100644 --- a/CaddyManager/packages.lock.json +++ b/CaddyManager/packages.lock.json @@ -1,16 +1,12 @@ { "version": 1, "dependencies": { - "net9.0": { + "net10.0": { "BlazorMonaco": { "type": "Direct", - "requested": "[3.3.0, )", - "resolved": "3.3.0", - "contentHash": "ywtUCZMfmaNBadhQbZEGPerdptHUcyVbPB2Ug1HTNzarJlMCJFSBRvQZefS383h/vDhFgHUrR7/pE6scIc6lJg==", - "dependencies": { - "Microsoft.AspNetCore.Components": "9.0.0", - "Microsoft.AspNetCore.Components.Web": "9.0.0" - } + "requested": "[3.5.0, )", + "resolved": "3.5.0", + "contentHash": "MfEzmLlhGEUCi4O65jnDipDUf0UZz3sO9tWupp09hMSvHWcYIP7NRG6r3PIfBUz78nfEkU+aW7Jyg71gd8QcPQ==" }, "Docker.DotNet": { "type": "Direct", @@ -18,694 +14,504 @@ "resolved": "3.125.15", "contentHash": "XN8FKxVv8Mjmwu104/Hl9lM61pLY675s70gzwSj8KR5pwblo8HfWLcCuinh9kYsqujBkMH4HVRCEcRuU6al4BQ==", "dependencies": { - "Newtonsoft.Json": "13.0.1", - "System.Buffers": "4.5.1", - "System.Threading.Tasks.Extensions": "4.5.4" + "Newtonsoft.Json": "13.0.1" } }, "Humanizer": { "type": "Direct", - "requested": "[3.0.0-beta.96, )", - "resolved": "3.0.0-beta.96", - "contentHash": "T1X21b+0l3jYDH1DztroJIeXdCwlNGmNYDidru9TzcLahwceQ48UGMjOQeWSa1v8zncPvhJzLzVAYWmOZcOySA==", + "requested": "[3.0.10, )", + "resolved": "3.0.10", + "contentHash": "13+6RiWdpVCzSn2SSEd1hAIr/UHScNdLCUhRgjvI60UcD5u3vXu3u1/Z+74OcHWum1itjiBTjYXgJKQna1jTgw==", "dependencies": { - "Humanizer.Core.af": "3.0.0-beta.96", - "Humanizer.Core.ar": "3.0.0-beta.96", - "Humanizer.Core.az": "3.0.0-beta.96", - "Humanizer.Core.bg": "3.0.0-beta.96", - "Humanizer.Core.bn-BD": "3.0.0-beta.96", - "Humanizer.Core.cs": "3.0.0-beta.96", - "Humanizer.Core.da": "3.0.0-beta.96", - "Humanizer.Core.de": "3.0.0-beta.96", - "Humanizer.Core.el": "3.0.0-beta.96", - "Humanizer.Core.es": "3.0.0-beta.96", - "Humanizer.Core.fa": "3.0.0-beta.96", - "Humanizer.Core.fi-FI": "3.0.0-beta.96", - "Humanizer.Core.fr": "3.0.0-beta.96", - "Humanizer.Core.fr-BE": "3.0.0-beta.96", - "Humanizer.Core.he": "3.0.0-beta.96", - "Humanizer.Core.hr": "3.0.0-beta.96", - "Humanizer.Core.hu": "3.0.0-beta.96", - "Humanizer.Core.hy": "3.0.0-beta.96", - "Humanizer.Core.id": "3.0.0-beta.96", - "Humanizer.Core.is": "3.0.0-beta.96", - "Humanizer.Core.it": "3.0.0-beta.96", - "Humanizer.Core.ja": "3.0.0-beta.96", - "Humanizer.Core.ko-KR": "3.0.0-beta.96", - "Humanizer.Core.ku": "3.0.0-beta.96", - "Humanizer.Core.lb": "3.0.0-beta.96", - "Humanizer.Core.lt": "3.0.0-beta.96", - "Humanizer.Core.lv": "3.0.0-beta.96", - "Humanizer.Core.ms-MY": "3.0.0-beta.96", - "Humanizer.Core.mt": "3.0.0-beta.96", - "Humanizer.Core.nb": "3.0.0-beta.96", - "Humanizer.Core.nb-NO": "3.0.0-beta.96", - "Humanizer.Core.nl": "3.0.0-beta.96", - "Humanizer.Core.pl": "3.0.0-beta.96", - "Humanizer.Core.pt": "3.0.0-beta.96", - "Humanizer.Core.ro": "3.0.0-beta.96", - "Humanizer.Core.ru": "3.0.0-beta.96", - "Humanizer.Core.sk": "3.0.0-beta.96", - "Humanizer.Core.sl": "3.0.0-beta.96", - "Humanizer.Core.sr": "3.0.0-beta.96", - "Humanizer.Core.sr-Latn": "3.0.0-beta.96", - "Humanizer.Core.sv": "3.0.0-beta.96", - "Humanizer.Core.th-TH": "3.0.0-beta.96", - "Humanizer.Core.tr": "3.0.0-beta.96", - "Humanizer.Core.uk": "3.0.0-beta.96", - "Humanizer.Core.uz-Cyrl-UZ": "3.0.0-beta.96", - "Humanizer.Core.uz-Latn-UZ": "3.0.0-beta.96", - "Humanizer.Core.vi": "3.0.0-beta.96", - "Humanizer.Core.zh-CN": "3.0.0-beta.96", - "Humanizer.Core.zh-Hans": "3.0.0-beta.96", - "Humanizer.Core.zh-Hant": "3.0.0-beta.96" + "Humanizer.Core.af": "3.0.10", + "Humanizer.Core.ar": "3.0.10", + "Humanizer.Core.az": "3.0.10", + "Humanizer.Core.bg": "3.0.10", + "Humanizer.Core.bn": "3.0.10", + "Humanizer.Core.ca": "3.0.10", + "Humanizer.Core.cs": "3.0.10", + "Humanizer.Core.da": "3.0.10", + "Humanizer.Core.de": "3.0.10", + "Humanizer.Core.el": "3.0.10", + "Humanizer.Core.es": "3.0.10", + "Humanizer.Core.fa": "3.0.10", + "Humanizer.Core.fi": "3.0.10", + "Humanizer.Core.fil": "3.0.10", + "Humanizer.Core.fr": "3.0.10", + "Humanizer.Core.he": "3.0.10", + "Humanizer.Core.hr": "3.0.10", + "Humanizer.Core.hu": "3.0.10", + "Humanizer.Core.hy": "3.0.10", + "Humanizer.Core.id": "3.0.10", + "Humanizer.Core.is": "3.0.10", + "Humanizer.Core.it": "3.0.10", + "Humanizer.Core.ja": "3.0.10", + "Humanizer.Core.ko": "3.0.10", + "Humanizer.Core.ku": "3.0.10", + "Humanizer.Core.lb": "3.0.10", + "Humanizer.Core.lt": "3.0.10", + "Humanizer.Core.lv": "3.0.10", + "Humanizer.Core.ms": "3.0.10", + "Humanizer.Core.mt": "3.0.10", + "Humanizer.Core.nb": "3.0.10", + "Humanizer.Core.nl": "3.0.10", + "Humanizer.Core.pl": "3.0.10", + "Humanizer.Core.pt": "3.0.10", + "Humanizer.Core.pt-BR": "3.0.10", + "Humanizer.Core.ro": "3.0.10", + "Humanizer.Core.ru": "3.0.10", + "Humanizer.Core.sk": "3.0.10", + "Humanizer.Core.sl": "3.0.10", + "Humanizer.Core.sr": "3.0.10", + "Humanizer.Core.sr-Latn": "3.0.10", + "Humanizer.Core.sv": "3.0.10", + "Humanizer.Core.th": "3.0.10", + "Humanizer.Core.tr": "3.0.10", + "Humanizer.Core.uk": "3.0.10", + "Humanizer.Core.uz-Cyrl-UZ": "3.0.10", + "Humanizer.Core.uz-Latn-UZ": "3.0.10", + "Humanizer.Core.vi": "3.0.10", + "Humanizer.Core.zh-CN": "3.0.10", + "Humanizer.Core.zh-Hans": "3.0.10", + "Humanizer.Core.zh-Hant": "3.0.10" } }, + "Microsoft.AspNetCore.App.Internal.Assets": { + "type": "Direct", + "requested": "[10.0.10, )", + "resolved": "10.0.10", + "contentHash": "8k0KoYKvNrSqP8E3oDJMBVKavlTEE6BacdLGtEDcxv9Hz0XxWFkD6JdLJsxXUlGeAfZ6YfvWmxKenl73qeCTSA==" + }, "MudBlazor": { "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "itY10dugofdvLYnJ1VZSzUIiKVqNvnTz4eEMYlHUdrOfsk9xShj7k1EW5H6ssMmkbQzShlLBHlUt+VPFGoEJGw==", - "dependencies": { - "Microsoft.AspNetCore.Components": "9.0.1", - "Microsoft.AspNetCore.Components.Web": "9.0.1", - "Microsoft.Extensions.Localization": "9.0.1" - } + "requested": "[9.7.0, )", + "resolved": "9.7.0", + "contentHash": "uWOgNn9B556J/TL8KFoSqpA3YD2heqOpK5etcofwlj1RiEX1IDy0NmwYE9urlTUQ8zProEK5GqwTBnoObFPN3g==" }, "NetCore.AutoRegisterDi": { "type": "Direct", "requested": "[2.2.1, )", "resolved": "2.2.1", - "contentHash": "qRda/VP+Lxak/GCGfT3PqXE6VA+bCbf2wlExcUWwnkwY1d6cfWv4Fp5RRN6dChlFhI8tbmzlNutYwxlA8kBb1A==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "2.1.1" - } + "contentHash": "qRda/VP+Lxak/GCGfT3PqXE6VA+bCbf2wlExcUWwnkwY1d6cfWv4Fp5RRN6dChlFhI8tbmzlNutYwxlA8kBb1A==" }, "Humanizer.Core": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "anMn7QrFRWthyt08MSDFdUKoOwMqNqDpI9AJ3YIgJZJq1qmJd9sjHiKgJM/Ov0WyLEE8pARzyxOkIbXX1pBd0w==" + "resolved": "3.0.10", + "contentHash": "yZIhtw8sYuvsONzQbZxWpR60tMWYHXoo0DL6nyOqSFiU5POjBTSEyWFpTQtJEZuy+oqiYTXKXY/Mjx7KnqIQFw==" }, "Humanizer.Core.af": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "8/9iF3PY2Dm5M87AyU02LoUZV634znBVQsuMQu+yjxtAgGYAksL0skikU1IblDEp2Hh7I2ejOa48Jb/MjIvSEw==", + "resolved": "3.0.10", + "contentHash": "jIpC73aOXfhqGEnpFKgO2AJ2Esb2t40c/cKqR+RgK1yg1bcBZBuhtjs+PrAIHf5Lp7Znd4teLjCGDS5ut8O1cw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.ar": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "TfwuryVUAE8GLA3ZuTh2VE8gz+15kyBpA+UjMsrgVm9b8biySFegHRNvcdb2H1w/mHYKD6eQbEq/dXGELu1C1A==", + "resolved": "3.0.10", + "contentHash": "LdDeLE9nmlqbl14RinjII0v8APKZKUqJEClILvdLAoUEdv8UhgsHhDX2BHJKZv2aNfCnb19z9otE8Ffaa11Sow==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.az": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "CuBTV+VWWkFUdXK0f11KASlx3zAsx701bG/sbhvWWEfEQsXwr8fqNl4S74iNE2TWFSP8e1nPPS4Lu23qpXfwkw==", + "resolved": "3.0.10", + "contentHash": "+tfsgP5PkTY5mpx7t0rpMVVNXJQMcRkFSsWtnPpntuC/z7I8GS68CBcsHItw5/qbTJxWRY/cLPe/Psxh/SjEkA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.bg": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "AFZc1q0s9zFmxlaBYkZLlXWIAy6uxznU424g5RuNllAjuRKIjSZ7VSF/9yRC4PasVZf1hYiqL5M9oQLXz10yqA==", + "resolved": "3.0.10", + "contentHash": "xBQMDuLOjmj1U0h39tv7B39vmVZXBbRUcy3xkHBKHAyuRoxskDJ3F1LUOOw1/E41+dGQziAe2I0EVukwvQ/h0g==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, - "Humanizer.Core.bn-BD": { + "Humanizer.Core.bn": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "nkgVbmYNo9G8brbR0EmVxsN1nF2eqn+GSCMNY3+Nr2VnEo6RlESd8ZYz6+Q93RpelVq2jmsmXWgnp+TLa43eQA==", + "resolved": "3.0.10", + "contentHash": "U5Li886U/hPdhMxyN9P3eF5dlB15sT/w4F3NOioXsaTQxnJKdxUKglRHiGbakX+aSrsFGok1MoQwVcH7Sac1Lg==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" + } + }, + "Humanizer.Core.ca": { + "type": "Transitive", + "resolved": "3.0.10", + "contentHash": "D29T+OWcYG4rlOXKwAGpNNrwLgE44oE1JYqlNuNs3lVYmTDEgItyT+SfjG2TXuTQXkpQLzsxfRjqtA/APygjgw==", + "dependencies": { + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.cs": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "ERRbgPC2/Jpj0sSoKFS28dpluDwNteHtmaH2NHq6d9xTbNSNMnINKBR+osDhpFJboJA5EsSEj4ZZwnNDMSnrUw==", + "resolved": "3.0.10", + "contentHash": "kaG0//ULYkyB8Rk4g5PgC2o8jrmG2joc8lgtyDzCiFCaobr0jgUn393JAIB0JUygbngEIfA0PMK3fLbMXcBNLQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.da": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "cf6/r5QJ74pQZVNGCr+P0jXJ7WtP8Wqvur053Rwc+Sfvuj+W3Y7A+Bkwnz1kreGhaH5ikz/7tirnKIkdA119cQ==", + "resolved": "3.0.10", + "contentHash": "/MCePoHsSaRo03I1NSRut5iUzhYRIKL+UncbtpN8AZ3Vl0TOu0Psi9/6QyjD4gLLx45puiXB2S0lUjCdYmlP7w==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.de": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "XdinGY9a+vyZ9HOgqTzH+vs0oFSe8bncw+QlbT9N5dyx9ssTnmo94DhSi9+lAK6TONrv9gFJJdLKLgi2xtvdhw==", + "resolved": "3.0.10", + "contentHash": "UoJk/DmAOFZivuMulLoB52Pn5iFvSqurF7qQQAyUAz1/IUZjxkoeoiI5mMILEjVeGoQJqrylt6O+f8johCo0Bg==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.el": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "wib7nnI+RS8WapMRUOXxV7tToWwfm6mjytsZ9xIRDlMk+kN1/YgBdKU+A/gPrKsYIBPzHbCtP8PgrdUm1YsnYA==", + "resolved": "3.0.10", + "contentHash": "5oIHs25LMm1IBrhcxOYYLTFHZQfBaqgKxm0jAkYmsxedpDZkv1k+BHs2D5Kg1672/ZhTs4jsLbqYNXkHm671vw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.es": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "OBQm6ONiwNgPT1FXYHAdEwgEh/F/C3zu99v/SQVxgUYOP0MxCIjt9heizUOAjkB7iuV7mwC8Ni0TNzDt/CXplQ==", + "resolved": "3.0.10", + "contentHash": "epxhWWQJ/I610mJGTfQPTocjp7/xCIH6tiREVIlHb/sA1kDAD1zHQcHI+HgWFzn/LzzbVg99y8HVFFHUvjnfXA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.fa": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "f1mSmnmTZhEx10qHiYzX7te6cXlF55TwJDrA1bXnIwe5/pEXBYVp9xvQD76zOEOER57HRNaCwum6ZHNkwwquHw==", + "resolved": "3.0.10", + "contentHash": "9BEFCpbWoUdq2JnLbkohqBfpjjdeMqFhkhCNk3qYmutZwSxuZHrCozppY14SSWI6b6qD1Veb3rVyHGz9Fex5AA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, - "Humanizer.Core.fi-FI": { + "Humanizer.Core.fi": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "M4rtABPYIbJZI41fNbIwY18ly3uwi04pelqG4Ox5PChmDo1KFYeTI+MjqCC3J16CDtV9IYq43JYmz2aS9KkzxQ==", + "resolved": "3.0.10", + "contentHash": "9Nbbxs1WZH2Li6Q28tZC06Y0mXwmIGnCEO/2nRzHvTqf07153frndezl5ads4uX8mNs+hMnUGUsr03IsFhI3jQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" + } + }, + "Humanizer.Core.fil": { + "type": "Transitive", + "resolved": "3.0.10", + "contentHash": "zpUvc+riMHZ2QGYETwnaDiT4Y4fHv2/Ctpi8Nm5SujNmOuxQyQMEAcalbUqWaLjzfTcysKqlU/NkiNP86kGlCA==", + "dependencies": { + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.fr": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "Zf6DKTXvKUQ4751UuWdpgLvF0sHoWSdU2nYLd0NRkjxkko+GA1VCo3z6jHJKRNFYrOPXYRfl6e1RqXEEnLmhAw==", + "resolved": "3.0.10", + "contentHash": "k+STDkiJVeO/nA5s0/GeBdwZI17D9KgqyYA4XGxfGxtFACwbFyVKQLWLzlIR2BsrT53EkyKLAzuFJ9FCT2CyfQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" - } - }, - "Humanizer.Core.fr-BE": { - "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "6JpbLjoEkYzLTvN9qedAkFW+MCyi8u3zx2DFNur64uLkO5gIKMUUbGLfFT9DJiji9iTukryGejmFGC4gqd5HnA==", - "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.he": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "2EkoQaHlsPYNOvfGwioQfa5PB5tYCuRI2sbVKDd71SujUUuFmvQo7Y1cqrXkB0aRw4IXRMV4kqVw7WC54vQjIw==", + "resolved": "3.0.10", + "contentHash": "4WIzAg5hocnbnzaTnueYW/BRhCrQoPg/0U6WiUC4BJKGJDuVYbqIa8iVcHqhr7vVKd5ngFbhSsXuCgkYqOMaXQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.hr": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "5eKjP6mxl5F7CmD4++u2aRfPkm7Ky1jdC322lOhORXIMY2QUG7nSk6wdP3n4gZX/35GI3ZbCs2SOA67rc8QGiw==", + "resolved": "3.0.10", + "contentHash": "USin9T/FsHjmxvaolEXgL6FOdw+1Juh7geqcjTvJRCdoo/U4Y/usoAiZRbFtDA//1od4yqSxEbmj+F16nKwbkQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.hu": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "Hfyn9yfC4SkQ2IDV2x74oQauosvbXJdg43bzA/W3uPP3gBBKeZHsGnYdZtlWoXcsH9bbBj6PEi2PQwrHI5Euzg==", + "resolved": "3.0.10", + "contentHash": "Umon7VBTVDs8QFDqNzGm6MBD+43UZJoN44htW/+iJUDF2gl8K8meRup27Dkl2zvewW3ynZic/xwP2hTDaPjIjw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.hy": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "noClOyB3R9YfDQ3R8rMFLXTBlb9qwz6oEnDwgOojv+gUQ6uN+39DNEB3NiTAnL9hryC4ArnCbixOjCXghjIr4Q==", + "resolved": "3.0.10", + "contentHash": "PzdcqQMwyDYO81PYbzBf+gFMj+wzOYF3kz3mlJCcBX5mSmNRpLIwB2s6PC9OiNN/Y/ya1orHV/z0OY9j7NFc5Q==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.id": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "6uxBc4LeJxm2UWGjkF4BbXYeaNmy6oM8OVaaDmcMtWWanJNpxQ0q7i0UssuLKeFEOhm2KnDVmTcHqkOS3p26wA==", + "resolved": "3.0.10", + "contentHash": "rMb9jvglGeeUxb6Z4EkXTg+et1Ri3DWZjlXs2WFle1Qpu39zWWF0l9rh9PQJb0fzeiZ8jOjiUhUI9lRnoAHHCQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.is": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "DH6j66s1l2OX0rXM22uaFDN6bwh6Ss6LBckaUWUb4t1aEzDIgW09mzZoMG+3zx/LhRibmsur86rf/jN3+2weCQ==", + "resolved": "3.0.10", + "contentHash": "xnNgWY9azqXyclRYmy3D6kgnbdCcPFBAEN4yNdhu2IN10p7Y2T9YUw5R9jLWo5+NGM2uzbbyTxPGf4+9YYUc1w==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.it": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "WzxjrUGtRWrB623K8M0wW7qmAdfLroind4yEvsPTRnDFa0prFHLFZxOWF9ypBu6yLXR3T2TdT4Z3r7jYsT+bLA==", + "resolved": "3.0.10", + "contentHash": "iCrKxOX6q/PZgEk3vYyU1fHC0jnq0hiq7nwWXiuV7uF5VypOxwVeao3vkE6MLoNKW7RQN/TbP06n1TOqyhTA7A==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.ja": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "6aHU1JB1gF0azIodYsPFJ5s/5fiDoDiCg5kTI7O+SoOyJrpjKJ8umaMN6r/VwhEUPW1yHxFsEkX/XHO+mXrvAA==", + "resolved": "3.0.10", + "contentHash": "UicfcXwMibwWN3jLesdk702IRQVndgBUqueFr3iXVEn2POue06pHInSIruxNaPTscaNdGKxXZiIiJrN7pCVO9Q==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, - "Humanizer.Core.ko-KR": { + "Humanizer.Core.ko": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "gcYmdBIZ+oBFRTnDZ3RMx4DIOoLcaTa5XPbmefl0GdDJeG7xsFxZQHeRh5sHXNIiMchSYjkPgCgfJTuiwHumIQ==", + "resolved": "3.0.10", + "contentHash": "Zr/GwEilhAcmeiDxVKqr79ZK/SEpHfhKzXD15JZ1NpsfYnIfNAN/9i0o535UaadaDDT6EIVpkoGIYAGuYQ0Z4g==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.ku": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "4tMhhNYFOEljlp+y5C/xMVpXga5rGUiYv1gEQJC82tRMhxm/q5elVMQEGtx/iJWZSNiCgj4VZ2Ur4Sqh186gJQ==", + "resolved": "3.0.10", + "contentHash": "j5Qm+CY+c8onfjO1O+TReCDg/epCYdfv5N5LNB+Ydcmn06gkR4HvbWJnk5UFLVHz8NMPmtCrv7CYwmPJ0+lJqw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.lb": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "QAObL6iaSztyoYnA8yZlrGraXKXGcxPufRpDbn7S3+boTXY3tkdK4ytZH61AB6wJvuN2ZVqphOMYgCnttO8DUg==", + "resolved": "3.0.10", + "contentHash": "5lpkw49T6MQ7Gwa0k2JV4cw6aH5FdT1Ku1nfGeey/iScajHDV9mvdxjkxRZpFAhJ5W/5yCtMlHH992LpXFJkeA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.lt": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "ePE7K9tngIOLwbKf6lQjtRhTTpiRUvy/DxnHAXI282RDA9DiUB7OE4Zr6NHJeIdrJA4JGat+HosJDPwDp7vV7A==", + "resolved": "3.0.10", + "contentHash": "1OO4XZ/74tt5nkxYHnpj+ti1w0HdeMGi+AHR59asxcJ3A/iTDZR4RNRIvoj1MdYRe0HdTUjtnGXfA7tXXOkiYg==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.lv": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "HL/3ilL1doE8MublQyMFB4ro/C6M7miAfHvtOXUtc7wsbHJPc9HnbIcBhnyxh3JmYgKbThWoZ6ssfmDeV73qbg==", + "resolved": "3.0.10", + "contentHash": "S4RN1q/saAQxlFlRRUnmi3Oz+mIXRqWtIRZJA3VrvMmBy12cXIdpeY0+d+HCA58WXpI2diOrWxHq9KPUDPunIw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, - "Humanizer.Core.ms-MY": { + "Humanizer.Core.ms": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "CuUek2ZvjaR3l4zSsb0lhUujTvtExLkSgP1RlQiaux0RB9Kbh88odwLTDaPhWYcA7D0h0nCkBxSZNwxhP4kWdg==", + "resolved": "3.0.10", + "contentHash": "m0+BJa9vG0GeuAWhmdmMxdUUa1cfGjyHZQeJoeivqxJrrtdUUFekXH0xbpvI3ErC8qu5Ufpmfnr6QAX0WQfkIw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.mt": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "ss4Uxs9mjzaBw5Fhy68ttAP3MeyxHD1Rbk+bLERBMWtwQibER1fcH4JYu/EuRJ7yDe4oObOjRqu3GzNrXGLbXg==", + "resolved": "3.0.10", + "contentHash": "8GfXTko/iweepZHcUcOANreClfvTeCDfSuiMxLtFbUZQOBegLZ6VnTVun2gVtv5OANdOk64qhqUKIVLq2rG0rw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.nb": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "o579CpW97Oj8Xp4IgTzlwieH+QOV/gRbEXUKapaQdiK/bOCOMm9N1z+wNhbDYmY/Uym6K34PG7xpbqio0Nj9QQ==", + "resolved": "3.0.10", + "contentHash": "UcdV9TWXG2MFVEkqHy8oD2ZbuFhFPLY7ScCJKWBu7OsgInyuHZe72hHP/i52T0FAgiVbrB+Urd3uoWiUT7hP9Q==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" - } - }, - "Humanizer.Core.nb-NO": { - "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "epxcGNzQMeyhGNEypcb3bFYePcoARkBHWHfKttOdNKI91uuSMt7lG9/Y7l8cGGVPfvOLu6brU6KZISQ+85TyaA==", - "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.nl": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "FmFCjnc53MH5tk6sRgOB/pSjFUmCiPBO2OcdV1szqYPJ0dGNkGw3pHUfE3P3gAHYuHL/GdYyhCi74/BiyK5C2g==", + "resolved": "3.0.10", + "contentHash": "b+Y1CFId1ucl33OvNITID0eEVesOKiw/dmrcDJ4Z/P9KEuMTeE8aKu5/iSjwtPVV+SagaMx9XzZe7kVYyRqhuQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.pl": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "JMUCLMrAEzRR9b+4BY4+b8D+ymQIUAp74b7+zWY/ZLOnwc8Yw01sFx51hbJCgohEVXAitOAyHjzvrhUoijG32Q==", + "resolved": "3.0.10", + "contentHash": "LJCt3+dGUQhopQ/1w/zzBNlUHtjkdrt57zS+llMQeFm+1u0e3R+lWJx4zP+hqZcpRA7armR38KghvRSz+bYBbg==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.pt": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "Xb9XhdAQKG9qkbR/SPO5oYPiUtDaueTwJPRnUoBBIbdDTzpQlSUVjJ/DFez+/X8d8GsANWjof3g/5YnOWZ16+g==", + "resolved": "3.0.10", + "contentHash": "+cggEy6W08xD8GU45/EaMfvNQMCd7K1G7hprSPty/9zIoM3OzaajdMA/Oxrb0mHIKpARxCNbQ29ltOtip3MTNA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" + } + }, + "Humanizer.Core.pt-BR": { + "type": "Transitive", + "resolved": "3.0.10", + "contentHash": "kbhwn4G+STHUT9cLDdrP60+ZFla4lTg6def+FTnhpMS4JHf8ll0TL1kz9Nj5DTJFdqnvs8/eYfmVhnEegyBjBw==", + "dependencies": { + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.ro": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "SSaZzeQmrbmDh2/CHSUF3jbU2V0ilcVHPa32/i7g0TXeywzP35CIcZ7vfKlJcfLSnempMg1bdm703hfeUdoLTw==", + "resolved": "3.0.10", + "contentHash": "JwdY+SywNIDrFcWKyiZsgsSJkIleoAXAtCLYiLn+CNCk+135VwhchZHm5B9nNvpLjGVaP5Y0ouZQ8xTx1oeZag==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.ru": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "+uTlQsIs4blTP6f0mnQ7lnn8wyOLmZFMWHqqTh3+Ul960FLlo0UnxYScV1sgNLHudv/04IiLsuj3bGxWJKW0FQ==", + "resolved": "3.0.10", + "contentHash": "1vXr7pkV0zSZF6ENJUadsAagubrBAvTPHPgdgttHlMhUQ1Zz9ZWTJaQdmf2RCen4YywMmfsQQZiGqJl52LVT8Q==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.sk": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "dcSN1GYFUNTQFlLljGZLarLe1e258wtNK+k0Mj2sghN+ffvlK1aRhUvanmqAaURfkK5ume1Q4e0A4/ATMNNFsw==", + "resolved": "3.0.10", + "contentHash": "LD93nJw1zwXuC+LSw3+02Jk02bdAoENHzb/qrMoGBf70XeV2rBeoxSyJBVLHQ00RZfwNSy6TCTXQyagESVmN+Q==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.sl": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "H05Tl8RQs8RoJ+UWYPga087x4Be57EpRk6iYwo4absTlFyPeISv8whUqayJBvDpNGS94QHennrnfembrCnhJXg==", + "resolved": "3.0.10", + "contentHash": "utURJ8K/tnbA5KXlKcT8T+35MEVdZrXUvu2tH+T6M9xxJ1MhLGuFWnc687pcsLdpaLnGB7ZVwrAITlueAE+KGA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.sr": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "FLH10qbsgL5NJJ/moB1iSnmO1wkVDloJYwq1CwIKp0PePb4bViO0z4nTXKCERWn3zl3WXeCJ5gOUyrvplr6bSQ==", + "resolved": "3.0.10", + "contentHash": "e2bVzUAjEpxjFdLVmXZL9EsdVojlV/8GMwZzwDS6OByfG+PP5JxemKylK6FoUK5X2IBPNg68LOvn72WgwaruIQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.sr-Latn": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "aTIigE/P5ahO5RO88igcz5V8Fo0MP8+Cu/NFVFXQJv+Yw39dQ1fOscLpVXenOg22sy2Tz2pi/JNfK42SDEiV6Q==", + "resolved": "3.0.10", + "contentHash": "VXPlm+eg5sraDhZ50WGiMZMvj4I2d+0VAy8cNaLLXNt+EgkUz646dRfg5HrQPPjtBbegj6o7gcg8Xl6z0ke+hA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.sv": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "k3URfcuKrOfL64Eg5mE2uV8YotKnhObFsJaIiyGhRPyl2QrrPU6VXKM2DmLa6Cfa1RN3zHYLv8PzBo1g6jVBYA==", + "resolved": "3.0.10", + "contentHash": "COq4bbUKk7F1jfE2sC/ZmomoQqX0Herwe1iXZyDl5zyw21mUY9wL96S1qbRmRp15UmGzFJdqBPdnd58P7kVMyg==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, - "Humanizer.Core.th-TH": { + "Humanizer.Core.th": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "9vaBFcdcXvE4uXr4VLbhPQ/Hv7lKf4Cb1HzThrnWklTk6uzZkmYYRs/yat+apk7of0VAlY8rthsMiNIwwSWW+A==", + "resolved": "3.0.10", + "contentHash": "8A4lZCLE6bEPYdQKeGfPBHDgAsY30TWWdjoWA1+vAfLA9Ip1l2Ons+Ngw4npkcoI3qdCidU6hWOsFnPfJ8ZufQ==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.tr": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "d5xUVe/1NrmAeBTL3KamGtZJ/3ja7O8OOWV/ICmNeOEHPMg5wZTWnQ3DOOrJAdrnf5D6kNcngKxYwKZYoRS19g==", + "resolved": "3.0.10", + "contentHash": "aRAxq1VyuIVoFdx8TZyVsRoDk0yqe9NATjhGgWHPsdR8TVHnuiyXeEbiXf846870VteyLJL9tVy3jaj2rC45tw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.uk": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "3i9xEIoqoWUtNKaihYqr9EfQw7ilWiDIaDwrXDrADldO1HHFAcc+F2vNEB1sZ81/F/1FBCthyODTFDBD1Ma4Kg==", + "resolved": "3.0.10", + "contentHash": "NPnGZ1jdoMDYGrsHt5aLlj7Ambp7i5ER/5BbtjBSegn3+PliMbd4Eftr1Ind4qvCU6rTP2a9lUqBoRd+hSVA+g==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.uz-Cyrl-UZ": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "LZK6cDgU0fQ0zURLYwk4qlodc0ZGcXkxV6zfHJbHXBsow12cJ2p7NhL495ihWLnDrHfD20+J1y9rTvC9vIWnFA==", + "resolved": "3.0.10", + "contentHash": "8NSyuiTlCfse1ki9QeO35IpZLcxoMlSMGvEY892aw9CNGaDMROQjFzf1iKJkWTyB9atrHHPuWlasBAFk2QkT9w==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.uz-Latn-UZ": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "AmoGiYjAjoi7htH6Vimd266rGRfyU0Jsa9BjALP7EAsWILjAzba3aMmChK33A6apFzC9fv2XT0amZsgIqBvR/Q==", + "resolved": "3.0.10", + "contentHash": "FaSETkwfUiDU/RHlD54xbBKEZXnFIUnTNTnA5ZYXgDOiMmX6cY7vyRDmI1YpQtO+QR1irSettpLFpHeysslnpA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.vi": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "PZnFdIJF54ODyMazZDSe30NuRuVx4/c/3KBXzwFX3tR+yz+gJkYlYpTI8ozRLF2/mlcFr9iFAU4Pau6jJFevFw==", + "resolved": "3.0.10", + "contentHash": "Uz5gph//0eNP0Ta1tqdKDyghiUnZdW0aVW4MK/poD5hLEH1qLoDTWuTb8gxj3F8GvSFjgVmF9HZGQx5cO06N8Q==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.zh-CN": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "GX8JvHC9/ghN8ZU/MadCnRrLB6kJXQEuJz3i0hS03VVrTZlHMRQfXEC3NhSktSJ9FCyYq+WZaw7jhmSaQ/S2pA==", + "resolved": "3.0.10", + "contentHash": "7veG4JdZ4OeYNlgci/6I/Xf9G/iCljBcwsbLVyGaqdia+2UMAp1iGu+MCs3zKOmEvcb4ipHGFkwT5d/2WfEevA==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.zh-Hans": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "S0nzvET+5M188jPN2cUiMguIszKZQ6tVyvAem3xBjvF0LjodAlAmZNlMjw5zaPMACuWMkOgvpKjuA8dhFa2Gqg==", + "resolved": "3.0.10", + "contentHash": "z8E2R0QL43NB6m8ntQaL1cONMjudoIJXvMQUFXG4OaKp5iyYqWs6FMC2B7x2rLxOynpsxoq5AQ/8BO0pMdfZrw==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, "Humanizer.Core.zh-Hant": { "type": "Transitive", - "resolved": "3.0.0-beta.96", - "contentHash": "nzWjsEb7JLHtBOuWuKBI1b0rm31C4Q8DSJHZy6UPhjO1HVra7GcMVeNyxXsljaVtdjR5kjLaPuhrr0yDNEUtYA==", + "resolved": "3.0.10", + "contentHash": "KI5Nv82v9diPBxcBAwIAvZQHjSrDy7He0atnzdZghS+QchHwlkPKhTyEzVSbOZdD42RxCX1ArMiL864A2iw34Q==", "dependencies": { - "Humanizer.Core": "[3.0.0-beta.96]" + "Humanizer.Core": "[3.0.10]" } }, - "Microsoft.AspNetCore.Authorization": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "WgLlLBlMczb2+QLNG6sM95OUZ0EBztz60k/N75tjIgpyu0SdpIfYytAmX/7JJAjRTZF0c/CrWaQV+SH9FuGsrA==", - "dependencies": { - "Microsoft.AspNetCore.Metadata": "9.0.1", - "Microsoft.Extensions.Logging.Abstractions": "9.0.1", - "Microsoft.Extensions.Options": "9.0.1" - } - }, - "Microsoft.AspNetCore.Components": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "6pwfbQKNtvPkbF4tCGiAKGyt6BVpu58xAXz7u2YXcUKTNmNxrymbG1mEyMc0EPzVdnquDDqTyfXM3mC1EJycxQ==", - "dependencies": { - "Microsoft.AspNetCore.Authorization": "9.0.1", - "Microsoft.AspNetCore.Components.Analyzers": "9.0.1" - } - }, - "Microsoft.AspNetCore.Components.Analyzers": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "I8Rs4LXT5UQxM5Nin2+Oj8aSY2heszSZ3EyTLgt3mxmfiRPrVO7D8NNSsf1voI2Gb0qFJceof/J5c9E+nfNuHw==" - }, - "Microsoft.AspNetCore.Components.Forms": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "KyULVU32bLz74LWDwPEwNUEllTehzWJuM7YAsz80rMKEzvR0K8cRjRzO0fnN/nfydMeLRRlbI0xj8wnEAymLVw==", - "dependencies": { - "Microsoft.AspNetCore.Components": "9.0.1" - } - }, - "Microsoft.AspNetCore.Components.Web": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "LI0vjYEd9MaDZPDQxPCn4gGYDkEC5U9rp1nWZo7rPozJxgTG2zU3WERujxTi2LeAC2ZzdXlOVCrUyPQ55LZV2A==", - "dependencies": { - "Microsoft.AspNetCore.Components": "9.0.1", - "Microsoft.AspNetCore.Components.Forms": "9.0.1", - "Microsoft.Extensions.DependencyInjection": "9.0.1", - "Microsoft.Extensions.Primitives": "9.0.1", - "Microsoft.JSInterop": "9.0.1" - } - }, - "Microsoft.AspNetCore.Metadata": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "EZnHifamF7IFEIyjAKMtJM3I/94OIe72i3P09v5oL0twmsmfQwal6Ni3m8lbB5mge3jWFhMozeW+rUdRSqnXRQ==" - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "YIMO9T3JL8MeEXgVozKt2v79hquo/EFtnY0vgxmLnUvk1Rei/halI7kOWZL2RBeV9FMGzgM9LZA8CVaNwFMaNA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", - "Microsoft.Extensions.Primitives": "9.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "lqvd7W3FGKUO1+ZoUEMaZ5XDJeWvjpy2/M/ptCGz3tXLD4HWVaSzjufsAsjemasBEg+2SxXVtYVvGt5r2nKDlg==", - "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.0" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "RiScL99DcyngY9zJA2ROrri7Br8tn5N4hP4YNvGdTN/bvg1A3dwvDOxHnNZ3Im7x2SJ5i4LkX1uPiR/MfSFBLQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.0" - } - }, - "Microsoft.Extensions.Configuration.EnvironmentVariables": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "v5R638eNMxksfXb7MFnkPwLPp+Ym4W/SIGNuoe8qFVVyvygQD5DdLusybmYSJEr9zc1UzWzim/ATKeIOVvOFDg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.0" - } - }, - "Microsoft.Extensions.Configuration.FileExtensions": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "4EK93Jcd2lQG4GY6PAw8jGss0ZzFP0vPc1J85mES5fKNuDTqgFXHba9onBw2s18fs3I4vdo2AWyfD1mPAxWSQQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.0", - "Microsoft.Extensions.FileProviders.Physical": "9.0.0", - "Microsoft.Extensions.Primitives": "9.0.0" - } - }, - "Microsoft.Extensions.Configuration.Json": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "WiTK0LrnsqmedrbzwL7f4ZUo+/wByqy2eKab39I380i2rd8ImfCRMrtkqJVGDmfqlkP/YzhckVOwPc5MPrSNpg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "9.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "qZI42ASAe3hr2zMSA6UjM92pO1LeDq5DcwkgSowXXPY8I56M76pEKrnmsKKbxagAf39AJxkH2DY4sb72ixyOrg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "Tr74eP0oQ3AyC24ch17N8PuEkrPbD0JqIfENCYqmgKYNOmL8wQKzLJu3ObxTUDrjnn4rHoR1qKa37/eQyHmCDA==" - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "uK439QzYR0q2emLVtYzwyK3x+T5bTY4yWsd/k/ZUS9LR6Sflp8MIdhGXW8kQCd86dQD4tLqvcbLkku8qHY263Q==", - "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.0" - } - }, - "Microsoft.Extensions.FileProviders.Physical": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "3+ZUSpOSmie+o8NnLIRqCxSh65XL/ExU7JYnFOg58awDRlY3lVpZ9A369jkoZL1rpsq7LDhEfkn2ghhGaY1y5Q==", - "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "9.0.0", - "Microsoft.Extensions.Primitives": "9.0.0" - } - }, - "Microsoft.Extensions.FileSystemGlobbing": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "jGFKZiXs2HNseK3NK/rfwHNNovER71jSj4BD1a/649ml9+h6oEtYd0GSALZDNW8jZ2Rh+oAeadOa6sagYW1F2A==" - }, - "Microsoft.Extensions.Localization": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "UgvX4Yb2T3tEsKT30ktZr0H7kTRPapCgEH0bdTwxiEGSdA39/hAQMvvb+vgHpqmevDU5+puyI9ujRkmmbF946w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1", - "Microsoft.Extensions.Localization.Abstractions": "9.0.1", - "Microsoft.Extensions.Logging.Abstractions": "9.0.1", - "Microsoft.Extensions.Options": "9.0.1" - } - }, - "Microsoft.Extensions.Localization.Abstractions": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "CABog43lyaZQMjmlktuImCy6zmAzRBaXqN81uPaMQjlp//ISDVYItZPh6KWpWRF4MY/B67X5oDc3JTUpfdocZw==" - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "w2gUqXN/jNIuvqYwX3lbXagsizVNXYyt6LlF57+tMve4JYCEgCMMAjRce6uKcDASJgpMbErRT1PfHy2OhbkqEA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1" - } - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "nggoNKnWcsBIAaOWHA+53XZWrslC7aGeok+aR+epDPRy7HI7GwMnGZE8yEsL2Onw7kMOHVHwKcsDls1INkNUJQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1", - "Microsoft.Extensions.Primitives": "9.0.1" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "bHtTesA4lrSGD1ZUaMIx6frU3wyy0vYtTa/hM6gGQu5QNrydObv8T5COiGUWsisflAfmsaFOe9Xvw5NSO99z0g==" - }, - "Microsoft.JSInterop": { - "type": "Transitive", - "resolved": "9.0.1", - "contentHash": "/xBwIfb0YoC2Muv6EsHjxpqZw2aKv94+i0g0FWZvqvGv3DeAy+8wipAuECVvKYEs2EIclRD41bjajHLoD6mTtw==" - }, "Newtonsoft.Json": { "type": "Transitive", "resolved": "13.0.1", "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" }, - "System.Buffers": { - "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" - }, - "System.Threading.Tasks.Extensions": { - "type": "Transitive", - "resolved": "4.5.4", - "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" - }, "caddymanager.contracts": { "type": "Project" }, @@ -714,11 +520,7 @@ "dependencies": { "CaddyManager.Contracts": "[1.0.0, )", "Docker.DotNet": "[3.125.15, )", - "Humanizer": "[3.0.0-beta.96, )", - "Microsoft.Extensions.Configuration": "[9.0.0, )", - "Microsoft.Extensions.Configuration.Binder": "[9.0.0, )", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "[9.0.0, )", - "Microsoft.Extensions.Configuration.Json": "[9.0.0, )", + "Humanizer": "[3.0.10, )", "NetCore.AutoRegisterDi": "[2.2.1, )" } } diff --git a/scripts/dotnet-docker.sh b/scripts/dotnet-docker.sh index da7d1ec..47cf7dd 100755 --- a/scripts/dotnet-docker.sh +++ b/scripts/dotnet-docker.sh @@ -18,5 +18,5 @@ exec docker run --rm \ --volume "$repo_root":/src \ --workdir /src \ --volume caddymanager-nuget:/root/.nuget/packages \ - mcr.microsoft.com/dotnet/sdk:9.0 \ + mcr.microsoft.com/dotnet/sdk:10.0 \ dotnet "$@"