Skip to content

Commit 2be64ff

Browse files
authored
[StaticWebAssets] Add file details to SWA
* Ensures that only DefineStaticWebAssets hits disk * Avoids doing extra work on tasks that need to use the length or the last write time. * Simplifies other tasks like DefineStaticWebAssetEndpoints and ApplyCompressionNegotiation
1 parent 3925037 commit 2be64ff

File tree

95 files changed

+16043
-5552
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+16043
-5552
lines changed

src/BlazorWasmSdk/Targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Copyright (c) .NET Foundation. All rights reserved.
3030
<StaticWebAssetsAdditionalPublishProperties>$(StaticWebAssetsAdditionalPublishProperties);_PublishingBlazorWasmProject=true</StaticWebAssetsAdditionalPublishProperties>
3131
<StaticWebAssetsAdditionalEmbeddedPublishProperties>$(StaticWebAssetsAdditionalEmbeddedPublishProperties);_PublishingBlazorWasmProject=true</StaticWebAssetsAdditionalEmbeddedPublishProperties>
3232
<StaticWebAssetStandaloneHosting Condition="'$(StaticWebAssetStandaloneHosting)' == '' and '$(StaticWebAssetProjectMode)' == 'Root'">true</StaticWebAssetStandaloneHosting>
33+
<StaticWebAssetMakeReferencedAssetOriginalItemSpecAbsolute Condition="'$(StaticWebAssetMakeReferencedAssetOriginalItemSpecAbsolute)' == ''">true</StaticWebAssetMakeReferencedAssetOriginalItemSpecAbsolute>
3334
<StaticWebAssetsGetEmbeddedPublishAssetsTargets>ComputeFilesToPublish;GetCurrentProjectEmbeddedPublishStaticWebAssetItems</StaticWebAssetsGetEmbeddedPublishAssetsTargets>
3435
</PropertyGroup>
3536

src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.Compression.targets

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,12 +223,10 @@ Copyright (c) .NET Foundation. All rights reserved.
223223
CandidateAssets="@(_CompressedStaticWebAssets)"
224224
>
225225
<Output TaskParameter="Assets" ItemName="_CompressionBuildStaticWebAsset" />
226-
<Output TaskParameter="AssetDetails" ItemName="_ResolveBuildCompressedStaticWebAssetsDetails" />
227226
</DefineStaticWebAssets>
228227

229228
<DefineStaticWebAssetEndpoints
230229
CandidateAssets="@(_CompressionBuildStaticWebAsset);@(_PrecompressedStaticWebAssets)"
231-
AssetFileDetails="@(_ResolveBuildCompressedStaticWebAssetsDetails)"
232230
ContentTypeMappings="@(StaticWebAssetContentTypeMapping)"
233231
>
234232
<Output TaskParameter="Endpoints" ItemName="_CompressionBuildStaticWebAssetEndpoint" />
@@ -242,7 +240,6 @@ Copyright (c) .NET Foundation. All rights reserved.
242240

243241
<ApplyCompressionNegotiation
244242
CandidateEndpoints="@(StaticWebAssetEndpoint)"
245-
AssetFileDetails="@(_ResolveBuildCompressedStaticWebAssetsDetails)"
246243
CandidateAssets="@(_CompressionCurrentProjectBuildAssets)"
247244
>
248245
<Output TaskParameter="UpdatedEndpoints" ItemName="_UpdatedCompressionBuildEndpoints" />

src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.References.targets

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ Copyright (c) .NET Foundation. All rights reserved.
181181
Patterns="@(_CachedBuildStaticWebAssetDiscoveryPatterns)"
182182
ProjectMode="$(StaticWebAssetProjectMode)"
183183
AssetKind="Build"
184+
MakeReferencedAssetOriginalItemSpecAbsolute="$(StaticWebAssetMakeReferencedAssetOriginalItemSpecAbsolute)"
184185
Source="$(PackageId)"
185186
>
186187
<Output TaskParameter="StaticWebAssets" ItemName="_CachedBuildReferencedStaticWebAsset" />
@@ -227,6 +228,7 @@ Copyright (c) .NET Foundation. All rights reserved.
227228
ProjectMode="$(StaticWebAssetProjectMode)"
228229
AssetKind="Publish"
229230
Source="$(PackageId)"
231+
MakeReferencedAssetOriginalItemSpecAbsolute="$(StaticWebAssetMakeReferencedAssetOriginalItemSpecAbsolute)"
230232
>
231233
<Output TaskParameter="StaticWebAssets" ItemName="_CachedPublishReferencedStaticWebAsset" />
232234
</ComputeReferenceStaticWebAssetItems>

src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -683,12 +683,10 @@ Copyright (c) .NET Foundation. All rights reserved.
683683
AssetMergeSource="$(StaticWebAssetMergeTarget)">
684684
<Output TaskParameter="Assets" ItemName="StaticWebAsset" />
685685
<Output TaskParameter="Assets" ItemName="_CurrentProjectStaticWebAsset" />
686-
<Output TaskParameter="AssetDetails" ItemName="_ResolveProjectStaticWebAssetsDetails" />
687686
</DefineStaticWebAssets>
688687

689688
<DefineStaticWebAssetEndpoints
690689
CandidateAssets="@(_CurrentProjectStaticWebAsset)"
691-
AssetFileDetails="@(_ResolveProjectStaticWebAssetsDetails)"
692690
ContentTypeMappings="@(StaticWebAssetContentTypeMapping)"
693691
>
694692
<Output TaskParameter="Endpoints" ItemName="StaticWebAssetEndpoint" />
@@ -737,7 +735,7 @@ Copyright (c) .NET Foundation. All rights reserved.
737735
<Import Project="Microsoft.NET.Sdk.StaticWebAssets.Compression.targets" Condition="'$(CompressionEnabled)' == 'true'" />
738736

739737
<Import Project="Microsoft.NET.Sdk.StaticWebAssets.ServiceWorker.targets" Condition="'$(ServiceWorkerAssetsManifest)' != ''" />
740-
738+
741739
<Import Project="Microsoft.NET.Sdk.StaticWebAssets.HtmlImportMap.targets" Condition="'$(WriteImportMapToHtml)' == 'true'" />
742740

743741
</Project>

src/StaticWebAssetsSdk/Tasks/ApplyCompressionNegotiation.cs

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#nullable disable
55

66
using System.Globalization;
7-
using Microsoft.AspNetCore.StaticWebAssets.Tasks.Utils;
87
using Microsoft.Build.Framework;
98

109
namespace Microsoft.AspNetCore.StaticWebAssets.Tasks;
@@ -17,27 +16,11 @@ public class ApplyCompressionNegotiation : Task
1716
[Required]
1817
public ITaskItem[] CandidateAssets { get; set; }
1918

20-
public ITaskItem[] AssetFileDetails { get; set; }
21-
2219
[Output]
2320
public ITaskItem[] UpdatedEndpoints { get; set; }
2421

25-
public Func<string, long> TestResolveFileLength;
26-
27-
private Dictionary<string, ITaskItem> _assetFileDetails;
28-
2922
public override bool Execute()
3023
{
31-
if (AssetFileDetails != null)
32-
{
33-
_assetFileDetails = new(AssetFileDetails.Length, OSPath.PathComparer);
34-
for (var i = 0; i < AssetFileDetails.Length; i++)
35-
{
36-
var item = AssetFileDetails[i];
37-
_assetFileDetails[item.ItemSpec] = item;
38-
}
39-
}
40-
4124
var assetsById = CandidateAssets.Select(StaticWebAsset.FromTaskItem).ToDictionary(a => a.Identity);
4225

4326
var endpointsByAsset = CandidateEndpoints.Select(StaticWebAssetEndpoint.FromTaskItem)
@@ -211,22 +194,8 @@ public override bool Execute()
211194
return true;
212195
}
213196

214-
private string ResolveQuality(StaticWebAsset compressedAsset)
215-
{
216-
long length;
217-
if (_assetFileDetails != null && _assetFileDetails.TryGetValue(compressedAsset.Identity, out var assetFileDetail))
218-
{
219-
length = long.Parse(assetFileDetail.GetMetadata("FileLength"), CultureInfo.InvariantCulture);
220-
}
221-
else
222-
{
223-
length = TestResolveFileLength != null
224-
? TestResolveFileLength(compressedAsset.Identity)
225-
: new FileInfo(compressedAsset.Identity).Length;
226-
}
227-
228-
return Math.Round(1.0 / (length + 1), 12).ToString("F12", CultureInfo.InvariantCulture);
229-
}
197+
private static string ResolveQuality(StaticWebAsset compressedAsset) =>
198+
Math.Round(1.0 / (compressedAsset.FileLength + 1), 12).ToString("F12", CultureInfo.InvariantCulture);
230199

231200
private static bool IsCompatible(StaticWebAssetEndpoint compressedEndpoint, StaticWebAssetEndpoint relatedEndpointCandidate)
232201
{

src/StaticWebAssetsSdk/Tasks/ComputeReferenceStaticWebAssetItems.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public class ComputeReferenceStaticWebAssetItems : Task
2626

2727
public bool UpdateSourceType { get; set; } = true;
2828

29+
public bool MakeReferencedAssetOriginalItemSpecAbsolute { get; set; }
30+
2931
[Output]
3032
public ITaskItem[] StaticWebAssets { get; set; }
3133

@@ -63,6 +65,14 @@ public override bool Execute()
6365
if (ShouldIncludeAssetAsReference(selected, out var reason))
6466
{
6567
selected.SourceType = UpdateSourceType ? StaticWebAsset.SourceTypes.Project : selected.SourceType;
68+
if (MakeReferencedAssetOriginalItemSpecAbsolute)
69+
{
70+
selected.OriginalItemSpec = Path.GetFullPath(selected.OriginalItemSpec);
71+
}
72+
else
73+
{
74+
selected.OriginalItemSpec = selected.OriginalItemSpec;
75+
}
6676
resultAssets.Add(selected);
6777
}
6878
Log.LogMessage(MessageImportance.Low, reason);

0 commit comments

Comments
 (0)