Skip to content

Commit 69dd0ea

Browse files
authored
Merge pull request #897 from unoplatform/dev/hr-update
Misc HR updates
2 parents 62adfdc + b510aa5 commit 69dd0ea

File tree

4 files changed

+28
-19
lines changed

4 files changed

+28
-19
lines changed

src/Uno.Wasm.Bootstrap/Uno.Wasm.Bootstrap.csproj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,13 @@
6262
<Pack>true</Pack>
6363
<PackagePath>tools</PackagePath>
6464
<Visible>false</Visible>
65-
<Visible>false</Visible>
6665
</None>
66+
67+
<Content Include="$(NuGetPackageRoot)/newtonsoft.json/13.0.2/lib/netstandard2.0/*.dll">
68+
<Pack>true</Pack>
69+
<PackagePath>tools</PackagePath>
70+
<Visible>false</Visible>
71+
</Content>
6772

6873
</ItemGroup>
6974

@@ -74,6 +79,7 @@
7479
-->
7580
<ItemGroup>
7681
<_UnoTaskDependencies Include="$(NuGetPackageRoot)/mono.cecil/0.11.4/lib/netstandard2.0/*.dll" />
82+
<_UnoTaskDependencies Include="$(NuGetPackageRoot)/newtonsoft.json/13.0.2/lib/netstandard2.0/*.dll" />
7783
</ItemGroup>
7884
<Copy
7985
SourceFiles="@(_UnoTaskDependencies)"

src/Uno.Wasm.Bootstrap/ts/Uno/WebAssembly/HotReloadSupport.ts

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@ namespace Uno.WebAssembly.Bootstrap {
3131

3232
const webAppBasePath = this._unoConfig.environmentVariables["UNO_BOOTSTRAP_WEBAPP_BASE_PATH"];
3333

34+
// This assumes that the runtime includes the header as an env var:
35+
// https://github.com/dotnet/runtime/blob/79a71fc750652191eba18e19b3f98492e882cb5f/src/mono/browser/runtime/loader/config.ts#L336
36+
const browserToolsVariable = (<any>this._context).config.environmentVariables['ASPNETCORE-BROWSER-TOOLS'];
37+
3438
// Take the place of the internal .NET for WebAssembly APIs for metadata updates coming
3539
// from the "BrowserLink" feature.
36-
const bootstrapContext = this._context;
37-
3840
(function (Blazor) {
3941
Blazor._internal = {
4042
initialize: function () {
@@ -45,21 +47,11 @@ namespace Uno.WebAssembly.Bootstrap {
4547

4648
applyExisting: async function (): Promise<void> {
4749

48-
var hotreloadConfigResponse = await fetch(`/_framework/unohotreload`);
49-
50-
var modifiableAssemblies = hotreloadConfigResponse.headers.get('DOTNET-MODIFIABLE-ASSEMBLIES');
51-
var aspnetCoreBrowserTools = hotreloadConfigResponse.headers.get('ASPNETCORE-BROWSER-TOOLS');
52-
53-
if (modifiableAssemblies) {
54-
bootstrapContext.MONO.mono_wasm_setenv('DOTNET_MODIFIABLE_ASSEMBLIES', modifiableAssemblies);
55-
}
56-
57-
// To uncomment once https://github.com/dotnet/aspnetcore/issues/37357#issuecomment-941237000 is released
58-
// if (aspnetCoreBrowserTools == "true")
50+
if (browserToolsVariable == "true")
5951
{
6052
try {
6153
var m = <any>await import(`/_framework/blazor-hotreload.js`);
62-
m.receiveHotReload();
54+
await m.receiveHotReloadAsync();
6355
}
6456
catch (e) {
6557
console.error(`Failed to apply initial metadata delta ${e}`);
@@ -72,15 +64,15 @@ namespace Uno.WebAssembly.Bootstrap {
7264
return HotReloadSupport._getApplyUpdateCapabilitiesMethod();
7365
},
7466

75-
applyHotReload: function (moduleId: any, metadataDelta: any, ilDelta: any, pdbDelta: any) {
67+
applyHotReload: function (moduleId: any, metadataDelta: any, ilDelta: any, pdbDelta: any, updatedTypes: any) {
7668
this.initialize();
77-
return HotReloadSupport._applyHotReloadDeltaMethod(moduleId, metadataDelta, ilDelta, pdbDelta || "");
69+
return HotReloadSupport._applyHotReloadDeltaMethod(moduleId, metadataDelta, ilDelta, pdbDelta || "", updatedTypes || []);
7870
}
7971
};
8072
})((<any>window).Blazor || ((<any>window).Blazor = {}));
8173

8274
// Apply pending updates caused by a browser refresh
83-
(<any>window).Blazor._internal.initialize(bootstrapContext.BINDING);
75+
(<any>window).Blazor._internal.initialize();
8476
await (<any>window).Blazor._internal.applyExisting();
8577
}
8678
}

src/Uno.Wasm.MetadataUpdater/WebAssemblyHotReload.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ internal static bool Initialize()
6262
/// For framework use only.
6363
/// </summary>
6464
[JSExport]
65-
public static void ApplyHotReloadDelta(string moduleIdString, string metadataDelta, string ilDeta, string pdbDelta)
65+
public static void ApplyHotReloadDelta(string moduleIdString, string metadataDelta, string ilDeta, string pdbDelta, int[] updatedTypes)
6666
{
6767
if (_linkerEnabled)
6868
{
@@ -84,6 +84,7 @@ public static void ApplyHotReloadDelta(string moduleIdString, string metadataDel
8484
_updateDeltas[0].MetadataDelta = Convert.FromBase64String(metadataDelta);
8585
_updateDeltas[0].ILDelta = Convert.FromBase64String(ilDeta);
8686
_updateDeltas[0].PdbBytes = Convert.FromBase64String(pdbDelta);
87+
_updateDeltas[0].UpdatedTypes = updatedTypes;
8788

8889
_hotReloadAgent!.ApplyDeltas(_updateDeltas);
8990
}

src/Uno.Wasm.Sample/Program.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@
2121
using System.Globalization;
2222
using System.Runtime.InteropServices.JavaScript;
2323
using System.Threading.Tasks;
24+
using System.Reflection.Metadata;
25+
using Uno.Wasm.Sample;
26+
using System.Linq;
27+
28+
[assembly: MetadataUpdateHandler(typeof(MyHandler))]
2429

2530
namespace Uno.Wasm.Sample
2631
{
@@ -81,6 +86,11 @@ static void Main(string[] args)
8186
}, null, 5000, 5000);
8287
}
8388
}
89+
public static class MyHandler
90+
{
91+
internal static void ClearCache(Type[]? types) => Console.WriteLine("MyHandler.ClearCache");
92+
internal static void UpdateApplication(Type[]? types) => Console.WriteLine($"MyHandler.UpdateApplication {types.Length} types: {string.Join(", ", types.Select(t => t.Name ))}");
93+
}
8494

8595
#if NET7_0_OR_GREATER
8696
public static partial class Imports

0 commit comments

Comments
 (0)