From e1b1f8f6fc354374eb9c5349607e1c7437e2cc69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 26 Mar 2025 18:50:24 +0100 Subject: [PATCH 01/18] Rewrite placeholder in HTML --- .../Tasks/WriteImportMapToHtml.cs | 91 ++++++++++++++++--- 1 file changed, 79 insertions(+), 12 deletions(-) diff --git a/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs b/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs index a7478f89018c..08b63b1191f1 100644 --- a/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs +++ b/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs @@ -46,6 +46,8 @@ public partial class WriteImportMapToHtml : Task private static readonly Regex _importMapRegex = new Regex(@"\s*"); + private static readonly Regex _preloadRegex = new Regex(@""); + public override bool Execute() { var endpoints = StaticWebAssetEndpoint.FromItemGroup(Endpoints).Where(e => e.AssetFile.EndsWith(".js") || e.AssetFile.EndsWith(".mjs")); @@ -75,6 +77,13 @@ public override bool Execute() return $""; }); + // Generate import map + outputContent = _preloadRegex.Replace(content, e => + { + Log.LogMessage("Writing preload links to '{0}'", item.ItemSpec); + return GeneratePreloadLinks(resources); + }); + // Fingerprint all assets used in html outputContent = _assetsRegex.Replace(outputContent, e => { @@ -105,6 +114,42 @@ public override bool Execute() return true; } + private static string GeneratePreloadLinks(List assets) + { + var links = new List<(string? Order, string Value)>(); + foreach (var asset in assets) + { + if (asset.PreloadRel == null) + { + continue; + } + + string link = $" string.Compare(a.Order, b.Order, StringComparison.InvariantCulture)); + return String.Join(Environment.NewLine, links); + } + private string GetFingerprintedAssetPath(Dictionary urlMappings, string assetPath) { if (urlMappings.TryGetValue(assetPath, out var asset) && (!IncludeOnlyHardFingerprintedModules || asset.IsHardFingerprinted)) @@ -125,33 +170,50 @@ internal List CreateResourcesFromEndpoints(IEnumerable a.ItemSpec == endpoint.AssetFile); if (asset != null) { - isHardFingerprinted = asset.GetMetadata("RelativePath").Contains("#[.{fingerprint}]!"); + resourceAsset.IsHardFingerprinted = asset.GetMetadata("RelativePath").Contains("#[.{fingerprint}]!"); } - resources.Add(new ResourceAsset(endpoint.Route, label, integrity, isHardFingerprinted)); + resources.Add(resourceAsset); } } @@ -207,12 +269,17 @@ private static Dictionary GroupResourcesByLabel(List imports, Dictionary> scopes, Dictionary integrity) From c1fe23965db1c62338a67df3f949533648d2ef4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Thu, 27 Mar 2025 11:12:06 +0100 Subject: [PATCH 02/18] Use only value --- src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs b/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs index 08b63b1191f1..df83b25f4460 100644 --- a/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs +++ b/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs @@ -147,7 +147,7 @@ private static string GeneratePreloadLinks(List assets) } links.Sort((a, b) => string.Compare(a.Order, b.Order, StringComparison.InvariantCulture)); - return String.Join(Environment.NewLine, links); + return String.Join(Environment.NewLine, links.Select(l => l.Value)); } private string GetFingerprintedAssetPath(Dictionary urlMappings, string assetPath) From 1c883919ab82a4a1e7876f40e2af45eef41bf59a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Thu, 27 Mar 2025 15:37:53 +0100 Subject: [PATCH 03/18] Fix link element generation --- src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs b/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs index df83b25f4460..a9c60d42b878 100644 --- a/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs +++ b/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs @@ -78,7 +78,7 @@ public override bool Execute() }); // Generate import map - outputContent = _preloadRegex.Replace(content, e => + outputContent = _preloadRegex.Replace(outputContent, e => { Log.LogMessage("Writing preload links to '{0}'", item.ItemSpec); return GeneratePreloadLinks(resources); From 3c17f314a38b6ad9cb6d4eefb144881ff0b7f404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Thu, 27 Mar 2025 15:38:21 +0100 Subject: [PATCH 04/18] Ordered DependsOn properties to allow to hook in --- ...NET.Sdk.StaticWebAssets.HtmlImportMap.targets | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlImportMap.targets b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlImportMap.targets index 579338938557..17d976d6ef43 100644 --- a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlImportMap.targets +++ b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlImportMap.targets @@ -35,12 +35,12 @@ Copyright (c) .NET Foundation. All rights reserved. ResolveHtmlImportMapBuildStaticWebAssets - GenerateHtmlImportMapBuildStaticWebAssets; - $(ResolveHtmlImportMapBuildStaticWebAssetsDependsOn) + $(ResolveHtmlImportMapBuildStaticWebAssetsDependsOn); + GenerateHtmlImportMapBuildStaticWebAssets - ResolveHtmlImportMapBuildConfiguration; - $(GenerateHtmlImportMapBuildStaticWebAssetsDependsOn) + $(GenerateHtmlImportMapBuildStaticWebAssetsDependsOn); + ResolveHtmlImportMapBuildConfiguration $(ResolveBuildRelatedStaticWebAssetsDependsOn); - ResolveHtmlImportMapBuildStaticWebAssets; + ResolveHtmlAssetPlaceholdersBuildStaticWebAssets; $(ResolveCompressedFilesDependsOn); - ResolveHtmlImportMapBuildStaticWebAssets + ResolveHtmlAssetPlaceholdersBuildStaticWebAssets $(ResolveBuildServiceWorkerStaticWebAssetsDependsOn); - ResolveHtmlImportMapBuildStaticWebAssets + ResolveHtmlAssetPlaceholdersBuildStaticWebAssets - - $(ResolveHtmlImportMapBuildStaticWebAssetsDependsOn); - GenerateHtmlImportMapBuildStaticWebAssets - - - $(GenerateHtmlImportMapBuildStaticWebAssetsDependsOn); - ResolveHtmlImportMapBuildConfiguration - + + $(ResolveHtmlAssetPlaceholdersBuildStaticWebAssetsDependsOn); + GenerateHtmlAssetPlaceholdersBuildStaticWebAssets + + + $(GenerateHtmlAssetPlaceholdersBuildStaticWebAssetsDependsOn); + ResolveHtmlAssetPlaceholdersBuildConfiguration + $(ResolvePublishRelatedStaticWebAssetsDependsOn); - ResolveHtmlImportMapPublishStaticWebAssets + ResolveHtmlAssetPlaceholdersPublishStaticWebAssets $(ResolvePublishCompressedStaticWebAssetsDependsOn); - ResolveHtmlImportMapPublishStaticWebAssets + ResolveHtmlAssetPlaceholdersPublishStaticWebAssets $(ResolvePublishServiceWorkerStaticWebAssetsDependsOn); - ResolveHtmlImportMapPublishStaticWebAssets + ResolveHtmlAssetPlaceholdersPublishStaticWebAssets - - $(ResolveHtmlImportMapPublishStaticWebAssetsDependsOn); - GenerateHtmlImportMapPublishStaticWebAssets - - - $(GenerateHtmlImportMapPublishStaticWebAssetsDependsOn); - ResolveHtmlImportMapPublishConfiguration - + + $(ResolveHtmlAssetPlaceholdersPublishStaticWebAssetsDependsOn); + GenerateHtmlAssetPlaceholdersPublishStaticWebAssets + + + $(GenerateHtmlAssetPlaceholdersPublishStaticWebAssetsDependsOn); + ResolveHtmlAssetPlaceholdersPublishConfiguration + - + <_BuildImportMapHtmlPath>$([MSBuild]::NormalizeDirectory($(_StaticWebAssetsIntermediateOutputPath), 'importmaphtml', 'build')) @@ -95,8 +95,8 @@ Copyright (c) .NET Foundation. All rights reserved. - - + - + - + <_HtmlCandidatesNoMetadata Include="@(_HtmlCandidates)" @@ -145,7 +145,7 @@ Copyright (c) .NET Foundation. All rights reserved. - + <_PublishImportMapHtmlPath>$([MSBuild]::NormalizeDirectory($(_StaticWebAssetsIntermediateOutputPath), 'importmaphtml', 'publish')) @@ -165,8 +165,8 @@ Copyright (c) .NET Foundation. All rights reserved. - - + - + - + <_HtmlPublishCandidatesNoMetadata Include="@(_HtmlPublishCandidates)" diff --git a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets index 2d9a75b49dea..63fe80d5ec10 100644 --- a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets +++ b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets @@ -741,6 +741,6 @@ Copyright (c) .NET Foundation. All rights reserved. - + diff --git a/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs b/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs similarity index 99% rename from src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs rename to src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs index 7f28c1266a55..98b36e1c14fb 100644 --- a/src/StaticWebAssetsSdk/Tasks/WriteImportMapToHtml.cs +++ b/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.StaticWebAssets.Tasks; -public partial class WriteImportMapToHtml : Task +public partial class OverrideHtmlAssetPlaceholders : Task { [Required] public ITaskItem[] Assets { get; set; } = []; diff --git a/test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssets/WriteImportMapToHtmlTest.cs b/test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssets/OverrideHtmlAssetPlaceholdersTest.cs similarity index 93% rename from test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssets/WriteImportMapToHtmlTest.cs rename to test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssets/OverrideHtmlAssetPlaceholdersTest.cs index 50b23c2f5ddc..bc06a4aa2778 100644 --- a/test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssets/WriteImportMapToHtmlTest.cs +++ b/test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssets/OverrideHtmlAssetPlaceholdersTest.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Tasks; -public class WriteImportMapToHtmlTest +public class OverrideHtmlAssetPlaceholdersTest { [Theory] [InlineData( @@ -88,7 +88,7 @@ public class WriteImportMapToHtmlTest )] public void ValidateAssetsRegex(string input, bool shouldMatch, string fileName = null) { - var match = WriteImportMapToHtml._assetsRegex.Match(input); + var match = OverrideHtmlAssetPlaceholders._assetsRegex.Match(input); Assert.Equal(shouldMatch, match.Success); if (fileName != null) @@ -142,7 +142,7 @@ public void ValidateAssetsRegex(string input, bool shouldMatch, string fileName )] public void ValidateImportMapRegex(string input, bool shouldMatch) { - Assert.Equal(shouldMatch, WriteImportMapToHtml._importMapRegex.Match(input).Success); + Assert.Equal(shouldMatch, OverrideHtmlAssetPlaceholders._importMapRegex.Match(input).Success); } [Theory] @@ -234,7 +234,7 @@ public void ValidateImportMapRegex(string input, bool shouldMatch) )] public void ValidatePreloadRegex(string input, bool shouldMatch, string group = null) { - var match = WriteImportMapToHtml._preloadRegex.Match(input); + var match = OverrideHtmlAssetPlaceholders._preloadRegex.Match(input); Assert.Equal(shouldMatch, match.Success); if (group != null) From e58f4a2eb310a7e1abfece25b13ff08066e7377d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 2 Apr 2025 10:52:05 +0200 Subject: [PATCH 12/18] Rename 2 --- ...StaticWebAssets.HtmlAssetPlaceholders.targets | 16 ++++++++-------- .../StaticWebAssetsFingerprintingTest.cs | 14 +++++++------- .../TestProjects/VanillaWasm/VanillaWasm.csproj | 6 +++--- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets index 906df597c420..4b30a97bc7f2 100644 --- a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets +++ b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets @@ -76,10 +76,10 @@ Copyright (c) .NET Foundation. All rights reserved. - <_BuildImportMapHtmlPath>$([MSBuild]::NormalizeDirectory($(_StaticWebAssetsIntermediateOutputPath), 'importmaphtml', 'build')) + <_BuildHtmlAssetPlaceholdersPath>$([MSBuild]::NormalizeDirectory($(_StaticWebAssetsIntermediateOutputPath), 'htmlassetplaceholders', 'build')) - + <_HtmlStaticWebAssets Include="@(StaticWebAsset)" Condition="'%(AssetKind)' != 'Publish' and '%(Extension)' == '.html'" /> @@ -101,7 +101,7 @@ Copyright (c) .NET Foundation. All rights reserved. Endpoints="@(_EsModuleCandidateEndpoints)" IncludeOnlyHardFingerprintedModules="false" HtmlFiles="@(_HtmlStaticWebAssets)" - OutputPath="$(_BuildImportMapHtmlPath)"> + OutputPath="$(_BuildHtmlAssetPlaceholdersPath)"> @@ -113,7 +113,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_HtmlCandidatesNoMetadata Include="@(_HtmlCandidates)" RemoveMetadata="SourceType;AssetKind;Integrity;Fingerprint" /> - <_HtmlCandidatesNoMetadata ContentRoot="$(_BuildImportMapHtmlPath)" /> + <_HtmlCandidatesNoMetadata ContentRoot="$(_BuildHtmlAssetPlaceholdersPath)" /> - <_PublishImportMapHtmlPath>$([MSBuild]::NormalizeDirectory($(_StaticWebAssetsIntermediateOutputPath), 'importmaphtml', 'publish')) + <_PublishHtmlAssetPlaceholdersPath>$([MSBuild]::NormalizeDirectory($(_StaticWebAssetsIntermediateOutputPath), 'htmlassetplaceholders', 'publish')) - + <_EsModuleCandidateForPublish Include="@(StaticWebAsset)" Condition="'%(AssetKind)' != 'Build'" /> @@ -171,7 +171,7 @@ Copyright (c) .NET Foundation. All rights reserved. Endpoints="@(_EsModuleCandidateForPublishEndpoints)" IncludeOnlyHardFingerprintedModules="true" HtmlFiles="@(_HtmlStaticWebAssets)" - OutputPath="$(_PublishImportMapHtmlPath)"> + OutputPath="$(_PublishHtmlAssetPlaceholdersPath)"> @@ -183,7 +183,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_HtmlPublishCandidatesNoMetadata Include="@(_HtmlPublishCandidates)" RemoveMetadata="SourceType;AssetKind;Integrity;Fingerprint" /> - <_HtmlPublishCandidatesNoMetadata ContentRoot="$(_PublishImportMapHtmlPath)" /> + <_HtmlPublishCandidatesNoMetadata ContentRoot="$(_PublishHtmlAssetPlaceholdersPath)" /> WriteImportMapToHtmlData => new TheoryData + public static TheoryData OverrideHtmlAssetPlaceholdersData => new TheoryData { { "VanillaWasm", "main.js", "main#[.{fingerprint}].js", true, true }, { "VanillaWasm", "main.js", null, false, false }, @@ -54,15 +54,15 @@ public void Build_FingerprintsContent_WhenEnabled() }; [Theory] - [MemberData(nameof(WriteImportMapToHtmlData))] - public void Build_WriteImportMapToHtml(string testAsset, string scriptPath, string scriptPathWithFingerprintPattern, bool fingerprintUserJavascriptAssets, bool expectFingerprintOnScript) + [MemberData(nameof(OverrideHtmlAssetPlaceholdersData))] + public void Build_OverrideHtmlAssetPlaceholders(string testAsset, string scriptPath, string scriptPathWithFingerprintPattern, bool fingerprintUserJavascriptAssets, bool expectFingerprintOnScript) { ProjectDirectory = CreateAspNetSdkTestAsset(testAsset, identifier: $"{testAsset}_{fingerprintUserJavascriptAssets}_{expectFingerprintOnScript}"); ReplaceStringInIndexHtml(ProjectDirectory, scriptPath, scriptPathWithFingerprintPattern); FingerprintUserJavascriptAssets(fingerprintUserJavascriptAssets); var build = CreateBuildCommand(ProjectDirectory); - ExecuteCommand(build, "-p:WriteImportMapToHtml=true", $"-p:FingerprintUserJavascriptAssets={fingerprintUserJavascriptAssets.ToString().ToLower()}").Should().Pass(); + ExecuteCommand(build, "-p:OverrideHtmlAssetPlaceholders=true", $"-p:FingerprintUserJavascriptAssets={fingerprintUserJavascriptAssets.ToString().ToLower()}").Should().Pass(); var intermediateOutputPath = build.GetIntermediateDirectory(DefaultTfm, "Debug").ToString(); var indexHtmlPath = Directory.EnumerateFiles(Path.Combine(intermediateOutputPath, "staticwebassets", "importmaphtml", "build"), "*.html").Single(); @@ -72,8 +72,8 @@ public void Build_WriteImportMapToHtml(string testAsset, string scriptPath, stri } [Theory] - [MemberData(nameof(WriteImportMapToHtmlData))] - public void Publish_WriteImportMapToHtml(string testAsset, string scriptPath, string scriptPathWithFingerprintPattern, bool fingerprintUserJavascriptAssets, bool expectFingerprintOnScript) + [MemberData(nameof(OverrideHtmlAssetPlaceholdersData))] + public void Publish_OverrideHtmlAssetPlaceholders(string testAsset, string scriptPath, string scriptPathWithFingerprintPattern, bool fingerprintUserJavascriptAssets, bool expectFingerprintOnScript) { ProjectDirectory = CreateAspNetSdkTestAsset(testAsset, identifier: $"{testAsset}_{fingerprintUserJavascriptAssets}_{expectFingerprintOnScript}"); ReplaceStringInIndexHtml(ProjectDirectory, scriptPath, scriptPathWithFingerprintPattern); @@ -82,7 +82,7 @@ public void Publish_WriteImportMapToHtml(string testAsset, string scriptPath, st var projectName = Path.GetFileNameWithoutExtension(Directory.EnumerateFiles(ProjectDirectory.TestRoot, "*.csproj").Single()); var publish = CreatePublishCommand(ProjectDirectory); - ExecuteCommand(publish, "-p:WriteImportMapToHtml=true", $"-p:FingerprintUserJavascriptAssets={fingerprintUserJavascriptAssets.ToString().ToLower()}").Should().Pass(); + ExecuteCommand(publish, "-p:OverrideHtmlAssetPlaceholders=true", $"-p:FingerprintUserJavascriptAssets={fingerprintUserJavascriptAssets.ToString().ToLower()}").Should().Pass(); var outputPath = publish.GetOutputDirectory(DefaultTfm, "Debug").ToString(); var indexHtmlOutputPath = Path.Combine(outputPath, "wwwroot", "index.html"); diff --git a/test/TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj b/test/TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj index f275acb37c94..7d1451ee76bb 100644 --- a/test/TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj +++ b/test/TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj @@ -2,10 +2,10 @@ $(CurrentTargetFramework) true - + _AddAppPreloadProperties; - $(GenerateHtmlImportMapBuildStaticWebAssetsDependsOn) - + $(GenerateHtmlAssetPlaceholdersBuildStaticWebAssetsDependsOn) + From 52bbe4edd5f1e6578b4515f50eabf0abb7ed75f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 2 Apr 2025 11:06:57 +0200 Subject: [PATCH 13/18] Consider order to be a number --- .../Tasks/OverrideHtmlAssetPlaceholders.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs b/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs index 98b36e1c14fb..02bf484222f4 100644 --- a/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs +++ b/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs @@ -208,7 +208,12 @@ internal List CreateResourcesFromEndpoints(IEnumerable Date: Wed, 2 Apr 2025 11:24:19 +0200 Subject: [PATCH 14/18] Fix --- src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs b/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs index 02bf484222f4..a272c2e8c3c5 100644 --- a/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs +++ b/src/StaticWebAssetsSdk/Tasks/OverrideHtmlAssetPlaceholders.cs @@ -111,7 +111,7 @@ public override bool Execute() private static string GeneratePreloadLinks(List assets, string? group) { - var links = new List<(string? Order, string Value)>(); + var links = new List<(int Order, string Value)>(); foreach (var asset in assets) { if (asset.PreloadRel == null) @@ -147,7 +147,7 @@ private static string GeneratePreloadLinks(List assets, string? g links.Add((asset.PreloadOrder, link.ToString())); } - links.Sort((a, b) => string.Compare(a.Order, b.Order, StringComparison.InvariantCulture)); + links.Sort((a, b) => a.Order.CompareTo(b.Order)); return String.Join(Environment.NewLine, links.Select(l => l.Value)); } From d391f9c0b9dc935da570aa7a797e40656782fcb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 2 Apr 2025 12:53:14 +0200 Subject: [PATCH 15/18] Rename 3 --- .../StaticWebAssetsFingerprintingTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssetsFingerprintingTest.cs b/test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssetsFingerprintingTest.cs index 67d09cad6ba3..15438446676a 100644 --- a/test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssetsFingerprintingTest.cs +++ b/test/Microsoft.NET.Sdk.Razor.Tests/StaticWebAssetsFingerprintingTest.cs @@ -65,7 +65,7 @@ public void Build_OverrideHtmlAssetPlaceholders(string testAsset, string scriptP ExecuteCommand(build, "-p:OverrideHtmlAssetPlaceholders=true", $"-p:FingerprintUserJavascriptAssets={fingerprintUserJavascriptAssets.ToString().ToLower()}").Should().Pass(); var intermediateOutputPath = build.GetIntermediateDirectory(DefaultTfm, "Debug").ToString(); - var indexHtmlPath = Directory.EnumerateFiles(Path.Combine(intermediateOutputPath, "staticwebassets", "importmaphtml", "build"), "*.html").Single(); + var indexHtmlPath = Directory.EnumerateFiles(Path.Combine(intermediateOutputPath, "staticwebassets", "htmlassetplaceholders", "build"), "*.html").Single(); var endpointsManifestPath = Path.Combine(intermediateOutputPath, $"staticwebassets.build.endpoints.json"); AssertImportMapInHtml(indexHtmlPath, endpointsManifestPath, scriptPath, expectFingerprintOnScript: expectFingerprintOnScript, expectPreloadElement: testAsset == "VanillaWasm"); From e456ef2ca23937f355bfde8f05c5dc2eb3e368e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 2 Apr 2025 14:02:03 +0200 Subject: [PATCH 16/18] Update test to include preload group --- .../TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj b/test/TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj index 7d1451ee76bb..eb60f30a679a 100644 --- a/test/TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj +++ b/test/TestAssets/TestProjects/VanillaWasm/VanillaWasm.csproj @@ -29,6 +29,11 @@ PreloadCrossorigin anonymous + <_AppendPreloadGroupWebAssemblyProperty Include="Append"> + Property + PreloadGroup + webassembly + @@ -47,7 +52,7 @@ From 6fe643c68fa417d131e4c59cc50dec7ef24ec0ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 2 Apr 2025 14:51:58 +0200 Subject: [PATCH 17/18] Workaround before runtime knows about the rename --- ...oft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets index 4b30a97bc7f2..dee61365fd50 100644 --- a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets +++ b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.HtmlAssetPlaceholders.targets @@ -14,6 +14,11 @@ Copyright (c) .NET Foundation. All rights reserved. + + + true + +