diff --git a/src/Aspire.Cli/NuGet/BundleNuGetPackageCache.cs b/src/Aspire.Cli/NuGet/BundleNuGetPackageCache.cs index 7b21897deed..6821eecfb93 100644 --- a/src/Aspire.Cli/NuGet/BundleNuGetPackageCache.cs +++ b/src/Aspire.Cli/NuGet/BundleNuGetPackageCache.cs @@ -21,12 +21,6 @@ internal sealed class BundleNuGetPackageCache : INuGetPackageCache private readonly ILogger _logger; private readonly IFeatures _features; - // List of deprecated packages that should be filtered by default - private static readonly HashSet s_deprecatedPackages = new(StringComparer.OrdinalIgnoreCase) - { - "Aspire.Hosting.Dapr" - }; - public BundleNuGetPackageCache( IBundleService bundleService, ILogger logger, @@ -226,7 +220,7 @@ private IEnumerable FilterPackages(IEnumerable packa // Apply deprecated package filter unless the user wants to show deprecated packages if (isOfficialPackage && !_features.IsFeatureEnabled(KnownFeatures.ShowDeprecatedPackages, defaultValue: false)) { - return !s_deprecatedPackages.Contains(p.Id); + return !DeprecatedPackages.IsDeprecated(p.Id); } return isOfficialPackage; diff --git a/src/Aspire.Cli/NuGet/NuGetPackageCache.cs b/src/Aspire.Cli/NuGet/NuGetPackageCache.cs index 3ca8347e88d..c6b8ff47ddf 100644 --- a/src/Aspire.Cli/NuGet/NuGetPackageCache.cs +++ b/src/Aspire.Cli/NuGet/NuGetPackageCache.cs @@ -3,6 +3,7 @@ using Aspire.Cli.DotNet; using Aspire.Cli.Resources; +using System.Collections.Frozen; using System.Globalization; using Aspire.Cli.Telemetry; using Microsoft.Extensions.Caching.Memory; @@ -19,15 +20,23 @@ internal interface INuGetPackageCache Task> GetPackagesAsync(DirectoryInfo workingDirectory, string packageId, Func? filter, bool prerelease, FileInfo? nugetConfigFile, bool useCache, CancellationToken cancellationToken); } +/// +/// Packages that have been superseded and should be hidden from integration listings by default. +/// +internal static class DeprecatedPackages +{ + private static readonly FrozenSet s_all = new[] + { + "Aspire.Hosting.Dapr", + "Aspire.Hosting.NodeJs" + }.ToFrozenSet(StringComparer.OrdinalIgnoreCase); + + public static bool IsDeprecated(string packageId) => s_all.Contains(packageId); +} + internal sealed class NuGetPackageCache(IDotNetCliRunner cliRunner, IMemoryCache memoryCache, AspireCliTelemetry telemetry, IFeatures features) : INuGetPackageCache { private const int SearchPageSize = 1000; - - // List of deprecated packages that should be filtered by default - private static readonly HashSet s_deprecatedPackages = new(StringComparer.OrdinalIgnoreCase) - { - "Aspire.Hosting.Dapr" - }; public async Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease, FileInfo? nugetConfigFile, CancellationToken cancellationToken) { @@ -133,7 +142,7 @@ public async Task> GetPackagesAsync(DirectoryInfo work // Apply deprecated package filter unless the user wants to show deprecated packages if (isOfficialPackage && !features.IsFeatureEnabled(KnownFeatures.ShowDeprecatedPackages, defaultValue: false)) { - return !s_deprecatedPackages.Contains(p.Id); + return !DeprecatedPackages.IsDeprecated(p.Id); } return isOfficialPackage; diff --git a/tests/Aspire.Cli.Tests/NuGet/NuGetPackageCacheTests.cs b/tests/Aspire.Cli.Tests/NuGet/NuGetPackageCacheTests.cs index 27ef3717480..13f6e902557 100644 --- a/tests/Aspire.Cli.Tests/NuGet/NuGetPackageCacheTests.cs +++ b/tests/Aspire.Cli.Tests/NuGet/NuGetPackageCacheTests.cs @@ -60,6 +60,7 @@ public async Task DeprecatedPackagesAreFilteredByDefault() return (0, [ new NuGetPackage { Id = "Aspire.Hosting.Redis", Version = "9.4.0", Source = "nuget.org" }, new NuGetPackage { Id = "Aspire.Hosting.Dapr", Version = "9.4.0", Source = "nuget.org" }, // Deprecated + new NuGetPackage { Id = "Aspire.Hosting.NodeJs", Version = "9.4.0", Source = "nuget.org" }, // Deprecated new NuGetPackage { Id = "Aspire.Hosting.PostgreSQL", Version = "9.4.0", Source = "nuget.org" } ]); }; @@ -78,6 +79,7 @@ public async Task DeprecatedPackagesAreFilteredByDefault() Assert.Contains("Aspire.Hosting.Redis", packageIds); Assert.Contains("Aspire.Hosting.PostgreSQL", packageIds); Assert.DoesNotContain("Aspire.Hosting.Dapr", packageIds); + Assert.DoesNotContain("Aspire.Hosting.NodeJs", packageIds); } [Fact] @@ -98,6 +100,7 @@ public async Task DeprecatedPackagesAreIncludedWhenShowDeprecatedPackagesEnabled return (0, [ new NuGetPackage { Id = "Aspire.Hosting.Redis", Version = "9.4.0", Source = "nuget.org" }, new NuGetPackage { Id = "Aspire.Hosting.Dapr", Version = "9.4.0", Source = "nuget.org" }, // Deprecated + new NuGetPackage { Id = "Aspire.Hosting.NodeJs", Version = "9.4.0", Source = "nuget.org" }, // Deprecated new NuGetPackage { Id = "Aspire.Hosting.PostgreSQL", Version = "9.4.0", Source = "nuget.org" } ]); }; @@ -116,6 +119,7 @@ public async Task DeprecatedPackagesAreIncludedWhenShowDeprecatedPackagesEnabled Assert.Contains("Aspire.Hosting.Redis", packageIds); Assert.Contains("Aspire.Hosting.PostgreSQL", packageIds); Assert.Contains("Aspire.Hosting.Dapr", packageIds); + Assert.Contains("Aspire.Hosting.NodeJs", packageIds); } [Fact]