File: DiscoverDefaultScopedCssItems.cs
Web Access
Project: ..\..\..\src\StaticWebAssetsSdk\Tasks\Microsoft.NET.Sdk.StaticWebAssets.Tasks.csproj (Microsoft.NET.Sdk.StaticWebAssets.Tasks)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
using Microsoft.Build.Framework;
 
namespace Microsoft.AspNetCore.StaticWebAssets.Tasks;
 
public class DiscoverDefaultScopedCssItems : Task
{
    [Required]
    public ITaskItem[] Content { get; set; }
 
    [Required]
    // <c>.cshtml.css</c> is only supported for .NET 6 and newer apps. Since this task is used in older apps
    // too, this property determines if we should consider .cshtml.css files.
    public bool SupportsScopedCshtmlCss { get; set; }
 
    [Output]
    public ITaskItem[] DiscoveredScopedCssInputs { get; set; }
 
    public override bool Execute()
    {
        var discoveredInputs = new List<ITaskItem>();
 
        foreach (var candidate in Content)
        {
            var fullPath = candidate.GetMetadata("FullPath");
            if (string.Equals(candidate.GetMetadata("Scoped"), "false", StringComparison.OrdinalIgnoreCase))
            {
                continue;
            }
 
            if (fullPath.EndsWith(".razor.css", StringComparison.OrdinalIgnoreCase))
            {
                discoveredInputs.Add(candidate);
            }
            else if (SupportsScopedCshtmlCss && fullPath.EndsWith(".cshtml.css", StringComparison.OrdinalIgnoreCase))
            {
                discoveredInputs.Add(candidate);
            }
        }
 
        DiscoveredScopedCssInputs = [.. discoveredInputs];
 
        return !Log.HasLoggedErrors;
    }
}