Skip to content

Commit f791377

Browse files
committed
Hot Reload agent improvements
Refactor agent code so that it can be shared with dotnet-watch implementation via a shared project. Add new API applyHotReloadDeltas to apply updates.
1 parent be19faf commit f791377

14 files changed

+528
-253
lines changed

src/Components/Web.JS/dist/Release/blazor.server.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Components/Web.JS/dist/Release/blazor.web.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Components/Web.JS/dist/Release/blazor.webassembly.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Components/Web.JS/src/Boot.WebAssembly.Common.ts

+5
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,15 @@ async function startCore(components: RootComponentManager<WebAssemblyComponentDe
9797
}
9898
});
9999

100+
// obsolete:
100101
Blazor._internal.applyHotReload = (id: string, metadataDelta: string, ilDelta: string, pdbDelta: string | undefined, updatedTypes?: number[]) => {
101102
dispatcher.invokeDotNetStaticMethod('Microsoft.AspNetCore.Components.WebAssembly', 'ApplyHotReloadDelta', id, metadataDelta, ilDelta, pdbDelta, updatedTypes ?? null);
102103
};
103104

105+
Blazor._internal.applyHotReloadDeltas = (deltas: { moduleId: string, metadataDelta: string, ilDelta: string, pdbDelta: string, updatedTypes: number[] }[], loggingLevel: number) => {
106+
return dispatcher.invokeDotNetStaticMethod('Microsoft.AspNetCore.Components.WebAssembly', 'ApplyHotReloadDeltas', deltas, loggingLevel);
107+
};
108+
104109
Blazor._internal.getApplyUpdateCapabilities = () => dispatcher.invokeDotNetStaticMethod('Microsoft.AspNetCore.Components.WebAssembly', 'GetApplyUpdateCapabilities');
105110

106111
// Configure JS interop

src/Components/Web.JS/src/GlobalExports.ts

+4
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,11 @@ export interface IBlazor {
8989
}
9090

9191
// APIs invoked by hot reload
92+
93+
// obsolete:
9294
applyHotReload?: (id: string, metadataDelta: string, ilDelta: string, pdbDelta: string | undefined, updatedTypes?: number[]) => void;
95+
96+
applyHotReloadDeltas?: (deltas: { moduleId: string, metadataDelta: string, ilDelta: string, pdbDelta: string, updatedTypes: number[] }[], loggingLevel: number) => {message: string, severity: number}[];
9397
getApplyUpdateCapabilities?: () => string;
9498
hotReloadApplied?: () => void;
9599
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
namespace Microsoft.Extensions.HotReload;
5+
6+
internal enum AgentMessageSeverity : byte
7+
{
8+
Verbose = 0,
9+
Warning = 1,
10+
Error = 2,
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using System.Linq;
5+
6+
namespace Microsoft.Extensions.HotReload;
7+
8+
internal sealed class AgentReporter
9+
{
10+
private readonly List<(string message, AgentMessageSeverity severity)> _log = [];
11+
12+
public void Report(string message, AgentMessageSeverity severity)
13+
{
14+
_log.Add((message, severity));
15+
}
16+
17+
public IReadOnlyCollection<(string message, AgentMessageSeverity severity)> GetAndClearLogEntries(ResponseLoggingLevel level)
18+
{
19+
lock (_log)
20+
{
21+
var filteredLog = (level != ResponseLoggingLevel.Verbose)
22+
? _log.Where(static entry => entry.severity != AgentMessageSeverity.Verbose)
23+
: _log;
24+
25+
var log = filteredLog.ToArray();
26+
_log.Clear();
27+
return log;
28+
}
29+
}
30+
}

0 commit comments

Comments
 (0)