From 0210ce4ddb1ba21cb01b16981cdde9f87bb0dce8 Mon Sep 17 00:00:00 2001 From: Larry Ewing Date: Sat, 9 Mar 2019 13:59:12 -0600 Subject: Add blazor E2E test assets --- .../App.cshtml | 1 + .../BenchmarkEvent.cs | 17 + ...crosoft.AspNetCore.Blazor.E2EPerformance.csproj | 11 + .../Pages/Index.cshtml | 11 + .../Pages/Json.cshtml | 98 + .../Pages/RenderList.cshtml | 75 + .../Pages/_ViewImports.cshtml | 1 + .../Program.cs | 19 + .../Shared/MainLayout.cshtml | 13 + .../Startup.cs | 20 + .../_ViewImports.cshtml | 6 + .../Microsoft.AspNetCore.Blazor.Build | Bin 0 -> 184048 bytes ....AspNetCore.Blazor.E2EPerformance.blazor.config | Bin 0 -> 518 bytes .../Microsoft.AspNetCore.Blazor.E2EPerformance.dll | Bin 0 -> 19968 bytes .../Microsoft.AspNetCore.Blazor.E2EPerformance.pdb | Bin 0 -> 13168 bytes .../netstandard2.0/Microsoft.AspNetCore.Blazor.dll | Bin 0 -> 30720 bytes .../netstandard2.0/Microsoft.AspNetCore.Blazor.pdb | Bin 0 -> 9480 bytes .../Microsoft.AspNetCore.Components.Browser.dll | Bin 0 -> 10752 bytes .../Microsoft.AspNetCore.Components.Browser.pdb | Bin 0 -> 2248 bytes .../Microsoft.AspNetCore.Components.Browser.xml | 68 + .../Microsoft.AspNetCore.Components.dll | Bin 0 -> 171520 bytes .../Microsoft.AspNetCore.Components.pdb | Bin 0 -> 71992 bytes .../Microsoft.AspNetCore.Components.xml | 4530 +++++++ ...Extensions.DependencyInjection.Abstractions.dll | Bin 0 -> 37968 bytes .../Microsoft.Extensions.DependencyInjection.dll | Bin 0 -> 63568 bytes .../Debug/netstandard2.0/Microsoft.JSInterop.dll | Bin 0 -> 50768 bytes .../netstandard2.0/Mono.WebAssembly.Interop.dll | Bin 0 -> 15952 bytes .../System.ComponentModel.Annotations.dll | Bin 0 -> 79432 bytes .../Microsoft.AspNetCore.Blazor.E2EPerformance.dll | Bin 0 -> 19456 bytes .../Microsoft.AspNetCore.Blazor.E2EPerformance.pdb | Bin 0 -> 5820 bytes .../_bin/Microsoft.AspNetCore.Blazor.dll | Bin 0 -> 30208 bytes .../_bin/Microsoft.AspNetCore.Blazor.pdb | Bin 0 -> 8960 bytes .../Microsoft.AspNetCore.Components.Browser.dll | Bin 0 -> 10752 bytes .../Microsoft.AspNetCore.Components.Browser.pdb | Bin 0 -> 1836 bytes .../_bin/Microsoft.AspNetCore.Components.dll | Bin 0 -> 169984 bytes .../_bin/Microsoft.AspNetCore.Components.pdb | Bin 0 -> 70964 bytes ...Extensions.DependencyInjection.Abstractions.dll | Bin 0 -> 28160 bytes .../Microsoft.Extensions.DependencyInjection.dll | Bin 0 -> 53760 bytes .../dist/_framework/_bin/Microsoft.JSInterop.dll | Bin 0 -> 40960 bytes .../_framework/_bin/Mono.WebAssembly.Interop.dll | Bin 0 -> 6144 bytes .../_bin/System.ComponentModel.Annotations.dll | Bin 0 -> 70144 bytes .../dist/_framework/_bin/System.Core.dll | Bin 0 -> 333824 bytes .../dist/_framework/_bin/System.Net.Http.dll | Bin 0 -> 68096 bytes .../netstandard2.0/dist/_framework/_bin/System.dll | Bin 0 -> 266752 bytes .../dist/_framework/_bin/mscorlib.dll | Bin 0 -> 1984512 bytes .../dist/_framework/blazor.boot.json | 1 + .../dist/_framework/components.server.js | 13562 +++++++++++++++++++ .../dist/_framework/components.webassembly.js | 2332 ++++ .../netstandard2.0/dist/_framework/wasm/mono.js | 4 + .../netstandard2.0/dist/_framework/wasm/mono.wasm | Bin 0 -> 1953399 bytes .../wwwroot/benchmarks/appStartup.js | 15 + .../wwwroot/benchmarks/index.js | 6 + .../wwwroot/benchmarks/jsonHandling.js | 57 + .../wwwroot/benchmarks/jsonHandlingData.js | 2 + .../wwwroot/benchmarks/lib/bootstrap.min.css | 7 + .../wwwroot/benchmarks/lib/minibench/README.md | 17 + .../wwwroot/benchmarks/lib/minibench/minibench.js | 486 + .../wwwroot/benchmarks/lib/minibench/style.css | 19 + .../wwwroot/benchmarks/renderList.js | 45 + .../wwwroot/benchmarks/util/BenchmarkEvents.js | 21 + .../wwwroot/benchmarks/util/BlazorApp.js | 25 + .../wwwroot/benchmarks/util/DOM.js | 7 + .../wwwroot/blazor-frame.html | 24 + .../wwwroot/index.html | 17 + wasm/wasm.sln | 14 + 65 files changed, 21531 insertions(+) create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/App.cshtml create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/BenchmarkEvent.cs create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Microsoft.AspNetCore.Blazor.E2EPerformance.csproj create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Index.cshtml create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Json.cshtml create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/RenderList.cshtml create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/_ViewImports.cshtml create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Program.cs create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Shared/MainLayout.cshtml create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Startup.cs create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/_ViewImports.cshtml create mode 100755 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.Build create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.blazor.config create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.pdb create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.pdb create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.xml create mode 100755 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll create mode 100755 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll create mode 100755 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.JSInterop.dll create mode 100755 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Mono.WebAssembly.Interop.dll create mode 100755 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/System.ComponentModel.Annotations.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.pdb create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.Extensions.DependencyInjection.Abstractions.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.Extensions.DependencyInjection.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.JSInterop.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Mono.WebAssembly.Interop.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.ComponentModel.Annotations.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.Core.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.Net.Http.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/mscorlib.dll create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/blazor.boot.json create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/components.server.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/components.webassembly.js create mode 100755 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/wasm/mono.js create mode 100755 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/wasm/mono.wasm create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/appStartup.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/index.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandling.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/jsonHandlingData.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/bootstrap.min.css create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/README.md create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/minibench.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/lib/minibench/style.css create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/renderList.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BenchmarkEvents.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/BlazorApp.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/benchmarks/util/DOM.js create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/blazor-frame.html create mode 100644 wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/wwwroot/index.html diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/App.cshtml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/App.cshtml new file mode 100644 index 0000000..7f4cf93 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/App.cshtml @@ -0,0 +1 @@ + diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/BenchmarkEvent.cs b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/BenchmarkEvent.cs new file mode 100644 index 0000000..bdf98fd --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/BenchmarkEvent.cs @@ -0,0 +1,17 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.JSInterop; + +namespace Microsoft.AspNetCore.Blazor.E2EPerformance +{ + public static class BenchmarkEvent + { + public static void Send(IJSRuntime jsRuntime, string name) + { + ((IJSInProcessRuntime)jsRuntime).Invoke( + "receiveBenchmarkEvent", + name); + } + } +} diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Microsoft.AspNetCore.Blazor.E2EPerformance.csproj b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Microsoft.AspNetCore.Blazor.E2EPerformance.csproj new file mode 100644 index 0000000..a488d15 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Microsoft.AspNetCore.Blazor.E2EPerformance.csproj @@ -0,0 +1,11 @@ + + + + netstandard2.0 + true + + + + + + diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Index.cshtml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Index.cshtml new file mode 100644 index 0000000..870c79b --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Index.cshtml @@ -0,0 +1,11 @@ +@page "/" +@inject IJSRuntime JSRuntime + +Hello, world! + +@functions { + protected override void OnAfterRender() + { + BenchmarkEvent.Send(JSRuntime, "Rendered index.cshtml"); + } +} diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Json.cshtml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Json.cshtml new file mode 100644 index 0000000..9deb601 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/Json.cshtml @@ -0,0 +1,98 @@ +@page "/json" +@inject IJSRuntime JSRuntime + +

JSON performance

+ +

+ + + + +

@serializedValue

+@if (serializedValue != null) +{ +

Serialized length: @serializedValue.Length chars

+} + + + + +@if (numPeopleDeserialized > 0) +{ +

Deserialized @numPeopleDeserialized people

+} + +@functions { + static string[] Clearances = new[] { "Alpha", "Beta", "Gamma", "Delta", "Epsilon" }; + Person smallOrgChart = GenerateOrgChart(1, 4); + Person largeOrgChart = GenerateOrgChart(5, 4); + string smallOrgChartJson; + string largeOrgChartJson; + int numPeopleDeserialized; + + protected override void OnInit() + { + smallOrgChartJson = Microsoft.JSInterop.Json.Serialize(smallOrgChart); + largeOrgChartJson = Microsoft.JSInterop.Json.Serialize(largeOrgChart); + } + + protected override void OnAfterRender() + { + BenchmarkEvent.Send(JSRuntime, "Finished JSON processing"); + } + + string serializedValue; + + void Reset() + { + serializedValue = null; + numPeopleDeserialized = 0; + } + + void SerializeSmall() + => serializedValue = Microsoft.JSInterop.Json.Serialize(smallOrgChart); + + void SerializeLarge() + => serializedValue = Microsoft.JSInterop.Json.Serialize(largeOrgChart); + + void DeserializeSmall() + => numPeopleDeserialized = Deserialize(smallOrgChartJson); + + void DeserializeLarge() + => numPeopleDeserialized = Deserialize(largeOrgChartJson); + + static Person GenerateOrgChart(int totalDepth, int numDescendantsPerNode, int thisDepth = 0, string namePrefix = null, int siblingIndex = 0) + { + var name = $"{namePrefix ?? "CEO"} - Subordinate {siblingIndex}"; + var rng = new Random(0); + return new Person + { + Name = name, + IsAdmin = siblingIndex % 2 == 0, + Salary = 10000000 / (thisDepth + 1), + SecurityClearances = Clearances + .ToDictionary(c => c, _ => (object)(rng.Next(0, 2) == 0)), + Subordinates = Enumerable.Range(0, thisDepth < totalDepth ? numDescendantsPerNode : 0) + .Select(index => GenerateOrgChart(totalDepth, numDescendantsPerNode, thisDepth + 1, name, index)) + .ToList() + }; + } + + static int Deserialize(string json) + { + var ceo = Microsoft.JSInterop.Json.Deserialize(json); + return CountPeople(ceo); + } + + static int CountPeople(Person root) + => 1 + (root.Subordinates?.Sum(CountPeople) ?? 0); + + class Person + { + public string Name { get; set; } + public int Salary { get; set; } + public bool IsAdmin { get; set; } + public List Subordinates { get; set; } + public Dictionary SecurityClearances { get; set; } + } +} diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/RenderList.cshtml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/RenderList.cshtml new file mode 100644 index 0000000..0a9ad97 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/RenderList.cshtml @@ -0,0 +1,75 @@ +@page "/renderlist" +@inject IJSRuntime JSRuntime + +

Render List

+ +Number of items: + + + +@if (show) +{ + + + + + + + + + + + @foreach (var forecast in GenerateForecasts(numItems)) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.DateFormatted@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@functions { + int numItems = 10; + bool show = false; + + void Hide() + { + show = false; + } + + void Show() + { + show = true; + } + + protected override void OnAfterRender() + { + BenchmarkEvent.Send(JSRuntime, "Finished rendering list"); + } + + static IEnumerable GenerateForecasts(int count) + { + for (var i = 0; i < count; i++) + { + yield return new WeatherForecast + { + DateFormatted = DateTime.Now.AddDays(i).ToShortDateString(), + TemperatureC = i % 100, + TemperatureF = (int)((i % 100) * 1.8) + 32, + Summary = $"Item {i}", + }; + } + } + + class WeatherForecast + { + public string DateFormatted { get; set; } + public int TemperatureC { get; set; } + public int TemperatureF { get; set; } + public string Summary { get; set; } + } +} diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/_ViewImports.cshtml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..0f24eda --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Pages/_ViewImports.cshtml @@ -0,0 +1 @@ +@layout MainLayout diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Program.cs b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Program.cs new file mode 100644 index 0000000..f498eb0 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Program.cs @@ -0,0 +1,19 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Blazor.Hosting; + +namespace Microsoft.AspNetCore.Blazor.E2EPerformance +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IWebAssemblyHostBuilder CreateHostBuilder(string[] args) => + BlazorWebAssemblyHost.CreateDefaultBuilder() + .UseBlazorStartup(); + } +} diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Shared/MainLayout.cshtml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Shared/MainLayout.cshtml new file mode 100644 index 0000000..259daf4 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Shared/MainLayout.cshtml @@ -0,0 +1,13 @@ +@inherits LayoutComponentBase + +

E2E Performance

+ +Home | +RenderList | +JSON + +
+ +
+ @Body +
diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Startup.cs b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Startup.cs new file mode 100644 index 0000000..7422cd8 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/Startup.cs @@ -0,0 +1,20 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Components.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Blazor.E2EPerformance +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + } + + public void Configure(IComponentsApplicationBuilder app) + { + app.AddComponent("app"); + } + } +} diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/_ViewImports.cshtml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/_ViewImports.cshtml new file mode 100644 index 0000000..aaba22f --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/_ViewImports.cshtml @@ -0,0 +1,6 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Components.Layouts +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.JSInterop +@using Microsoft.AspNetCore.Blazor.E2EPerformance +@using Microsoft.AspNetCore.Blazor.E2EPerformance.Shared diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.Build b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.Build new file mode 100755 index 0000000..5c5aef1 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.Build differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.blazor.config b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.blazor.config new file mode 100644 index 0000000..92f028a Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.blazor.config differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.dll new file mode 100644 index 0000000..a46b8aa Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb new file mode 100644 index 0000000..c53d541 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.dll new file mode 100644 index 0000000..e9120e7 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb new file mode 100644 index 0000000..d16331b Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Blazor.pdb differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.dll new file mode 100644 index 0000000..73f7d6f Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.pdb b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.pdb new file mode 100644 index 0000000..d06f033 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.pdb differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml new file mode 100644 index 0000000..a29c7c4 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.Browser.xml @@ -0,0 +1,68 @@ + + + + Microsoft.AspNetCore.Components.Browser + + + + + Framework infrastructure, not intended to be used by application code. + + + + + Framework infrastructure, not intended to be used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Framework infrastructure, not intended by used by application code. + + + + + Provides mechanisms for dispatching events to components in a . + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + + For framework use only. + + + + diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.dll new file mode 100644 index 0000000..0a67d89 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.pdb b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.pdb new file mode 100644 index 0000000..8b13f2f Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.pdb differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.xml b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.xml new file mode 100644 index 0000000..b9e4735 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.AspNetCore.Components.xml @@ -0,0 +1,4530 @@ + + + + Microsoft.AspNetCore.Components + + + + + Infrastructure for the discovery of bind attributes for markup elements. + + + To extend the set of bind attributes, define a public class named + BindAttributes and annotate it with the appropriate attributes. + + + + + Configures options for binding specific element types. + + + + + Constructs an instance of . + + The tag name of the element. + The suffix value. For example, set this to value for bind-value, or set this to null for bind. + The name of the value attribute to be bound. + The name of an attribute that will register an associated change event. + + + + Gets the tag name of the element. + + + + + Gets the suffix value. + For example, this will be value to mean bind-value, or null to mean bind. + + + + + Gets the name of the value attribute to be bound. + + + + + Gets the name of an attribute that will register an associated change event. + + + + + Configures options for binding subtypes of an HTML input element. + + + + + Constructs an instance of . + + The value of the element's type attribute. + The suffix value. + The name of the value attribute to be bound. + The name of an attribute that will register an associated change event. + + + + Gets the value of the element's type attribute. + + + + + Gets the suffix value. + + + + + Gets the name of the value attribute to be bound. + + + + + Gets the name of an attribute that will register an associated change event. + + + + + Methods used internally by @bind syntax. Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Not intended to be used directly. + + + + + Denotes the target member as a cascading component parameter. Its value will be + supplied by the closest ancestor component that + supplies values with a compatible type and name. + + + + + If specified, the parameter value will be supplied by the closest + ancestor that supplies a value with + this name. + + If null, the parameter value will be supplied by the closest ancestor + that supplies a value with a compatible + type. + + + + + A component that provides a cascading value to all descendant components. + + + + + The content to which the value should be provided. + + + + + The value to be provided. + + + + + Optionally gives a name to the provided value. Descendant components + will be able to receive the value by specifying this name. + + If no name is specified, then descendant components will receive the + value based the type of value they are requesting. + + + + + If true, indicates that will not change. This is a + performance optimization that allows the framework to skip setting up + change notifications. Set this flag only if you will not change + during the component's lifetime. + + + + + + + + + + + Optional base class for components. Alternatively, components may + implement directly. + + + + + Specifies the name of the -building method. + + + + + Constructs an instance of . + + + + + Renders the component to the supplied . + + A that will receive the render output. + + + + Method invoked when the component is ready to start, having received its + initial parameters from its parent in the render tree. + + + + + Method invoked when the component is ready to start, having received its + initial parameters from its parent in the render tree. + + Override this method if you will perform an asynchronous operation and + want the component to refresh when that operation is completed. + + A representing any asynchronous operation. + + + + Method invoked when the component has received parameters from its parent in + the render tree, and the incoming values have been assigned to properties. + + + + + Method invoked when the component has received parameters from its parent in + the render tree, and the incoming values have been assigned to properties. + + A representing any asynchronous operation. + + + + Notifies the component that its state has changed. When applicable, this will + cause the component to be re-rendered. + + + + + Returns a flag to indicate whether the component should render. + + + + + + Method invoked after each time the component has been rendered. + + + + + Method invoked after each time the component has been rendered. Note that the component does + not automatically re-render after the completion of any returned , because + that would cause an infinite render loop. + + A representing any asynchronous operation. + + + + Executes the supplied work item on the associated renderer's + synchronization context. + + The work item to execute. + + + + Executes the supplied work item on the associated renderer's + synchronization context. + + The work item to execute. + + + + Method invoked to apply initial or updated parameters to the component. + + The parameters to apply. + + + + Resolves components for an application. + + + + + Lists all the types + + + + + + + Represents a reference to a rendered element. + + + + + A bound event handler delegate. + + + + + Gets a reference to the . + + + + + Gets an empty . + + + + + Creates the new . + + The event receiver. + The delegate to bind. + + + + Gets a value that indicates whether the delegate associated with this event dispatcher is non-null. + + + + + Invokes the delegate associated with this binding and dispatches an event notification to the + appropriate component. + + The argument. + A which completes asynchronously once event processing has completed. + + + + A bound event handler delegate. + + + + + Creates the new . + + The event receiver. + The delegate to bind. + + + + Gets a value that indicates whether the delegate associated with this event dispatcher is non-null. + + + + + Invokes the delegate associated with this binding and dispatches an event notification to the + appropriate component. + + The argument. + A which completes asynchronously once event processing has completed. + + + + A factory for creating and + instances. + + + + + Returns the provided . For internal framework use only. + + + + + + + + Creates an for the provided and + . + + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The event receiver. + The event callback. + The . + + + + Returns the provided . For internal framework use only. + + + + + + + + Returns the provided . For internal framework use only. + + + + + + + + Returns the provided . For internal framework use only. + + + + + + + + Creates an for the provided and + . + + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . For internal framework use only. + + + + + + + + + Creates an for the provided and + . For internal framework use only. + + + + + + + + + Contains extension methods for two-way binding using . For internal use only. + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + For internal use only. + + + + + + + + + + + For internal use only. + + + + + + + + + + + Provides extension methods for and types. For internal + framework use. + + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Creates an for the provided and + . + + The . + The event receiver. + The event callback. + The . + + + + Wraps a callback delegate associated with an event. + + + + + An empty . + + + + + Creates a new with the provided . + + The callback delegate. + + + + Invokes the delegate associated with this . + + The argument to provide to the delegate. May be null. + A then will complete asynchronously once the delegate has completed. + + + + Associates an event argument type with an event attribute name. + + + + + Constructs an instance of . + + + + + + + Gets the attribute name. + + + + + Gets the event argument type. + + + + + Holds attributes to configure the mappings between event names and + event argument types. + + + + + Adds Data Annotations validation support to an . + + + + + + + + Holds metadata related to a data editing process, such as flags to indicate which + fields have been modified and the current set of validation messages. + + + + + Constructs an instance of . + + The model object for the . This object should hold the data being edited, for example as a set of properties. + + + + An event that is raised when a field value changes. + + + + + An event that is raised when validation is requested. + + + + + An event that is raised when validation state has changed. + + + + + Supplies a corresponding to a specified field name + on this 's . + + The name of the editable field. + A corresponding to a specified field name on this 's . + + + + Gets the model object for this . + + + + + Signals that the value for the specified field has changed. + + Identifies the field whose value has been changed. + + + + Signals that some aspect of validation state has changed. + + + + + Clears any modification flag that may be tracked for the specified field. + + Identifies the field whose modification flag (if any) should be cleared. + + + + Clears all modification flags within this . + + + + + Determines whether any of the fields in this have been modified. + + True if any of the fields in this have been modified; otherwise false. + + + + Gets the current validation messages across all fields. + + This method does not perform validation itself. It only returns messages determined by previous validation actions. + + The current validation messages. + + + + Gets the current validation messages for the specified field. + + This method does not perform validation itself. It only returns messages determined by previous validation actions. + + Identifies the field whose current validation messages should be returned. + The current validation messages for the specified field. + + + + Determines whether the specified fields in this has been modified. + + True if the field has been modified; otherwise false. + + + + Validates this . + + True if there are no validation messages after validation; otherwise false. + + + + Extension methods to add DataAnnotations validation to an . + + + + + Adds DataAnnotations validation support to the . + + The . + + + + Provides extension methods to simplify using with expressions. + + + + + Gets the current validation messages for the specified field. + + This method does not perform validation itself. It only returns messages determined by previous validation actions. + + The . + Identifies the field whose current validation messages should be returned. + The current validation messages for the specified field. + + + + Determines whether the specified fields in this has been modified. + + The . + Identifies the field whose current validation messages should be returned. + True if the field has been modified; otherwise false. + + + + Provides extension methods to describe the state of + fields as CSS class names. + + + + + Gets a string that indicates the status of the specified field. This will include + some combination of "modified", "valid", or "invalid", depending on the status of the field. + + The . + An identifier for the field. + A string that indicates the status of the field. + + + + Gets a string that indicates the status of the specified field. This will include + some combination of "modified", "valid", or "invalid", depending on the status of the field. + + The . + An identifier for the field. + A string that indicates the status of the field. + + + + Renders a form element that cascades an to descendants. + + + + + Constructs an instance of . + + + + + Supplies the edit context explicitly. If using this parameter, do not + also supply , since the model value will be taken + from the property. + + + + + Specifies the top-level model object for the form. An edit context will + be constructed for this model. If using this parameter, do not also supply + a value for . + + + + + Specifies the content to be rendered inside this . + + + + + A callback that will be invoked when the form is submitted. + + If using this parameter, you are responsible for triggering any validation + manually, e.g., by calling . + + + + + A callback that will be invoked when the form is submitted and the + is determined to be valid. + + + + + A callback that will be invoked when the form is submitted and the + is determined to be invalid. + + + + + + + + + + + Provides information about the event. + + + + + Identifies the field whose value has changed. + + + + + Uniquely identifies a single field that can be edited. This may correspond to a property on a + model object, or can be any other named value. + + + + + Initializes a new instance of the structure. + + An expression that identifies an object member. + + + + Initializes a new instance of the structure. + + The object that owns the field. + The name of the editable field. + + + + Gets the object that owns the editable field. + + + + + Gets the name of the editable field. + + + + + + + + + + + A base class for form input components. This base class automatically + integrates with an , which must be supplied + as a cascading parameter. + + + + + Gets a value for the component's 'id' attribute. + + + + + Gets a value for the component's 'class' attribute. + + + + + Gets or sets the value of the input. This should be used with two-way binding. + + + bind-Value="@model.PropertyName" + + + + + Gets or sets a callback that updates the bound value. + + + + + Gets or sets an expression that identifies the bound value. + + + + + Gets the associated . + + + + + Gets the for the bound value. + + + + + Gets or sets the current value of the input. + + + + + Gets or sets the current value of the input, represented as a string. + + + + + Formats the value as a string. Derived classes can override this to determine the formating used for . + + The value to format. + A string representation of the value. + + + + Parses a string to create an instance of . Derived classes can override this to change how + interprets incoming values. + + The string value to be parsed. + An instance of . + If the value could not be parsed, provides a validation error message. + True if the value could be parsed; otherwise false. + + + + Gets a string that indicates the status of the field being edited. This will include + some combination of "modified", "valid", or "invalid", depending on the status of the field. + + + + + Gets a CSS class string that combines the and + properties. Derived components should typically use this value for the primary HTML element's + 'class' attribute. + + + + + + + + An input component for editing values. + + + + + + + + + + + An input component for editing date values. + Supported types are and . + + + + + + + + + + + + + + An input component for editing numeric values. + Supported numeric types are , , , , . + + + + + + + + + + + A dropdown selection component. + + + + + + + + + + + An input component for editing values. + + + + + + + + + + + A multiline input component for editing values. + + + + + + + + + + + Displays a list of validation messages for a specified field within a cascaded . + + + + + Specifies the field for which validation messages should be displayed. + + + + ` + Constructs an instance of . + + + + + + + + + + + Holds validation messages for an . + + + + + Creates an instance of . + + The with which this store should be associated. + + + + Adds a validation message for the specified field. + + The identifier for the field. + The validation message. + + + + Adds the messages from the specified collection for the specified field. + + The identifier for the field. + The validation messages to be added. + + + + Gets the validation messages within this for the specified field. + + To get the validation messages across all validation message stores, use instead + + The identifier for the field. + The validation messages for the specified field within this . + + + + Gets the validation messages within this for the specified field. + + To get the validation messages across all validation message stores, use instead + + The identifier for the field. + The validation messages for the specified field within this . + + + + Removes all messages within this . + + + + + Removes all messages within this for the specified field. + + The identifier for the field. + + + + Provides extension methods to simplify using with expressions. + + + + + Adds a validation message for the specified field. + + The . + Identifies the field for which to add the message. + The validation message. + + + + Adds the messages from the specified collection for the specified field. + + The . + Identifies the field for which to add the messages. + The validation messages to be added. + + + + Removes all messages within this for the specified field. + + The . + Identifies the field for which to remove the messages. + + + + Provides information about the event. + + + + + Provides information about the event. + + + + + Displays a list of validation messages from a cascaded . + + + + ` + Constructs an instance of . + + + + + + + + + + + Extension methods for working with JSON APIs. + + + + + Sends a GET request to the specified URI, and parses the JSON response body + to create an object of the generic type. + + A type into which the response body can be JSON-deserialized. + The . + The URI that the request will be sent to. + The response parsed as an object of the generic type. + + + + Sends a POST request to the specified URI, including the specified + in JSON-encoded format, and parses the JSON response body to create an object of the generic type. + + The . + The URI that the request will be sent to. + Content for the request body. This will be JSON-encoded and sent as a string. + The response parsed as an object of the generic type. + + + + Sends a POST request to the specified URI, including the specified + in JSON-encoded format, and parses the JSON response body to create an object of the generic type. + + A type into which the response body can be JSON-deserialized. + The . + The URI that the request will be sent to. + Content for the request body. This will be JSON-encoded and sent as a string. + The response parsed as an object of the generic type. + + + + Sends a PUT request to the specified URI, including the specified + in JSON-encoded format. + + The . + The URI that the request will be sent to. + Content for the request body. This will be JSON-encoded and sent as a string. + + + + Sends a PUT request to the specified URI, including the specified + in JSON-encoded format, and parses the JSON response body to create an object of the generic type. + + A type into which the response body can be JSON-deserialized. + The . + The URI that the request will be sent to. + Content for the request body. This will be JSON-encoded and sent as a string. + The response parsed as an object of the generic type. + + + + Sends an HTTP request to the specified URI, including the specified + in JSON-encoded format. + + The . + The HTTP method. + The URI that the request will be sent to. + Content for the request body. This will be JSON-encoded and sent as a string. + + + + Sends an HTTP request to the specified URI, including the specified + in JSON-encoded format, and parses the JSON response body to create an object of the generic type. + + A type into which the response body can be JSON-deserialized. + The . + The HTTP method. + The URI that the request will be sent to. + Content for the request body. This will be JSON-encoded and sent as a string. + The response parsed as an object of the generic type. + + + + Represents a UI component. + + + + + Initializes the component. + + A that allows the component to be rendered. + + + + Sets parameters supplied by the component's parent in the render tree. + + The parameters. + A that completes when the component has finished updating and rendering itself. + + + + Interface implemented by components that receive notification that they have been rendered. + + + + + Notifies the component that it has been rendered. + + A that represents the asynchronous event handling operation. + + + + Interface implemented by components that receive notification of state changes. + + + + + Notifies the a state change has been triggered. + + The associated with this event. + The argument associated with this event. + + A that completes once the component has processed the state change. + + + + + Indicates that the associated property should have a value injected from the + service provider during initialization. + + + + + Indicates that the associated component type uses a specified layout. + + + + + The type of the layout. The type myst implement + and must accept a parameter with the name 'Body'. + + + + + Constructs an instance of . + + The type of the layout. + + + + Optional base class for components that represent a layout. + Alternatively, components may implement directly + and declare their own parameter named . + + + + + Gets the content to be rendered inside the layout. + + + + + Displays the specified page component, rendering it inside its layout + and any further nested layouts. + + + + + Gets or sets the type of the page component to display. + The type must implement . + + + + + Gets or sets the parameters to pass to the page. + + + + + + + + + + + A string value that can be rendered as markup such as HTML. + + + + + Constructs an instance of . + + The value for the new instance. + + + + Gets the value of the . + + + + + Casts a to a . + + The value. + + + + + + + Represents a single parameter supplied to an + by its parent in the render tree. + + + + + Gets the name of the parameter. + + + + + Gets the value being supplied for the parameter. + + + + + Gets a value to indicate whether the parameter is cascading, meaning that it + was supplied by a . + + + + + Denotes the target member as a component parameter. + + + + + Represents a collection of parameters supplied to an + by its parent in the render tree. + + + + + Gets an empty . + + + + + Returns an enumerator that iterates through the . + + The enumerator. + + + + Gets the value of the parameter with the specified name. + + The type of the value. + The name of the parameter. + Receives the result, if any. + True if a matching parameter was found; false otherwise. + + + + Gets the value of the parameter with the specified name, or a default value + if no such parameter exists in the collection. + + The type of the value. + The name of the parameter. + The parameter value if found; otherwise the default value for the specified type. + + + + Gets the value of the parameter with the specified name, or a specified default value + if no such parameter exists in the collection. + + The type of the value. + The name of the parameter. + The default value to return if no such parameter exists in the collection. + The parameter value if found; otherwise . + + + + Returns a dictionary populated with the contents of the . + + A dictionary populated with the contents of the . + + + + Creates a new from the given . + + The with the parameters. + A . + + + + Extension methods for the type. + + + + + For each parameter property on , updates its value to + match the corresponding entry in the . + + The . + An object that has a public writable property matching each parameter's name and type. + + + + An enumerator that iterates through a . + + + + + Gets the current value of the enumerator. + + + + + Instructs the enumerator to move to the next value in the sequence. + + A flag to indicate whether or not there is a next value. + + + + Represents a segment of UI content, implemented as a delegate that + writes the content to a . + + The to which the content should be written. + + + + Represents a segment of UI content for an object of type , implemented as + a function that returns a . + + The type of object. + The value used to build the content. + + + + Allows a component to notify the renderer that it should be rendered. + + + + + Gets a value that indicates whether the has been + initialised and is ready to use. + + + + + Notifies the renderer that the component should be rendered. + + The content that should be rendered. + + + + Executes the supplied work item on the renderer's + synchronization context. + + The work item to execute. + + + + Executes the supplied work item on the renderer's + synchronization context. + + The work item to execute. + + + + Tracks the rendering state associated with an instance + within the context of a . This is an internal implementation + detail of . + + + + + Constructs an instance of . + + The with which the new instance should be associated. + The externally visible identifier for the . The identifier must be unique in the context of the . + The whose state is being tracked. + The for the parent component, or null if this is a root component. + + + + A that produces HTML. + + + + + Initializes a new instance of . + + The to use to instantiate components. + A that will HTML encode the given string. + + + + + + + + Renders a component into a sequence of fragments that represent the textual representation + of the HTML produced by the component. + + The type of the . + A with the initial parameters to render the component. + A that on completion returns a sequence of fragments that represent the HTML text of the component. + + + + Renders a component into a sequence of fragments that represent the textual representation + of the HTML produced by the component. + + The type of the . + A with the initial parameters to render the component. + A that on completion returns a sequence of fragments that represent the HTML text of the component. + + + + + + + Dispatches external actions to be executed on the context of a . + + + + + Invokes the given in the context of the associated . + + The action to execute. + A that will be completed when the action has finished executing. + + + + Invokes the given in the context of the associated . + + The asynchronous action to execute. + A that will be completed when the action has finished executing. + + + + Invokes the given in the context of the associated . + + The function to execute. + A that will be completed when the function has finished executing. + + + + Invokes the given in the context of the associated . + + The asynchronous function to execute. + A that will be completed when the function has finished executing. + + + + Describes a set of UI changes. + + + + + Gets the changes to components that were added or updated. + + + + + Gets render frames that may be referenced by entries in . + For example, edit entries of type + will point to an entry in this array to specify the subtree to be prepended. + + + + + Gets the IDs of the components that were disposed. + + + + + Gets the IDs of the event handlers that were disposed. + + + + + Collects the data produced by the rendering system during the course + of rendering a single batch. This tracks both the final output data + and the intermediate states (such as the queue of components still to + be rendered). + + + + + Provides mechanisms for rendering hierarchies of instances, + dispatching events to them, and notifying when the user interface is being updated. + + + + + Allows the caller to handle exceptions from the SynchronizationContext when one is available. + + + + + Constructs an instance of . + + The to be used when initializing components. + + + + Constructs an instance of . + + The to be used when initializing components. + The to be for invoking user actions into the context. + + + + Creates an that can be used with one or more . + + The . + + + + Constructs a new component of the specified type. + + The type of the component to instantiate. + The component instance. + + + + Associates the with the , assigning + an identifier that is unique within the scope of the . + + The component. + The component's assigned identifier. + + + + Gets the current render tree for a given component. + + The id for the component. + The representing the current render tree. + + + + Performs the first render for a root component, waiting for this component and all + children components to finish rendering in case there is any asynchronous work being + done by any of the components. After this, the root component + makes its own decisions about when to re-render, so there is no need to call + this more than once. + + The ID returned by . + + Rendering a root component is an asynchronous operation. Clients may choose to not await the returned task to + start, but not wait for the entire render to complete. + + + + + Performs the first render for a root component, waiting for this component and all + children components to finish rendering in case there is any asynchronous work being + done by any of the components. After this, the root component + makes its own decisions about when to re-render, so there is no need to call + this more than once. + + The ID returned by . + The with the initial parameters to use for rendering. + + Rendering a root component is an asynchronous operation. Clients may choose to not await the returned task to + start, but not wait for the entire render to complete. + + + + + Allows derived types to handle exceptions during rendering. Defaults to rethrowing the original exception. + + The . + + + + Updates the visible UI. + + The changes to the UI since the previous call. + A to represent the UI update process. + + + + Notifies the renderer that an event has occurred. + + The value from the original event attribute. + Arguments to be passed to the event handler. + + A which will complete once all asynchronous processing related to the event + has completed. + + + + + Executes the supplied work item on the renderer's + synchronization context. + + The work item to execute. + + + + Executes the supplied work item on the renderer's + synchronization context. + + The work item to execute. + + + + Schedules a render for the specified . Its display + will be populated using the specified . + + The ID of the component to render. + A that will supply the updated UI contents. + + + + Releases all resources currently used by this instance. + + if this method is being invoked by , otherwise . + + + + Releases all resources currently used by this instance. + + + + + Implements a list that uses an array of objects to store the elements. + + This differs from a in that + it not only grows as required but also shrinks if cleared with significant + excess capacity. This makes it useful for component rendering, because + components can be long-lived and re-render frequently, with the rendered size + varying dramatically depending on the user's navigation in the app. + + + + + Constructs a new instance of . + + + + + Constructs a new instance of . + + + + + Gets the number of items. + + + + + Gets the underlying buffer. + + + + + Appends a new item, automatically resizing the underlying array if necessary. + + The item to append. + The index of the appended item. + + + + Sets the supplied value at the specified index. The index must be within + range for the array. + + The index. + The value. + + + + Removes the last item. + + + + + Marks the array as empty, also shrinking the underlying storage if it was + not being used to near its full capacity. + + + + + Produces an structure describing the current contents. + + The . + + + + Produces an structure describing the selected contents. + + The index of the first item in the segment. + One plus the index of the last item in the segment. + The . + + + + Represents a range of elements in an array that are in use. + + The array item type. + + + + Gets the underlying array instance. + + + + + Gets the number of items in the array that are considered to be in use. + + + + + Constructs an instance of . + + The array. + The number of items in the array that are in use. + + + + + + + + + + Creates a shallow clone of the instance. + + + + + + Provides methods for building a collection of entries. + + + + + The reserved parameter name used for supplying child content. + + + + + Constructs an instance of . + + The associated . + + + + Appends a frame representing an element, i.e., a container for other frames. + In order for the state to be valid, you must + also call immediately after appending the + new element's child frames. + + An integer that represents the position of the instruction in the source code. + A value representing the type of the element. + + + + Marks a previously appended element frame as closed. Calls to this method + must be balanced with calls to . + + + + + Appends a frame representing markup content. + + An integer that represents the position of the instruction in the source code. + Content for the new markup frame. + + + + Appends a frame representing text content. + + An integer that represents the position of the instruction in the source code. + Content for the new text frame. + + + + Appends frames representing an arbitrary fragment of content. + + An integer that represents the position of the instruction in the source code. + Content to append. + + + + Appends frames representing an arbitrary fragment of content. + + An integer that represents the position of the instruction in the source code. + Content to append. + The value used by . + + + + Appends a frame representing markup content. + + An integer that represents the position of the instruction in the source code. + Content for the new markup frame. + + + + Appends a frame representing text content. + + An integer that represents the position of the instruction in the source code. + Content for the new text frame. + + + + + Appends a frame representing a bool-valued attribute. + + + The attribute is associated with the most recently added element. If the value is false and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing a string-valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing a -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing a -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing a delegate-valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + This method is provided for infrastructure purposes, and is used to be + to provide support for delegates of specific + types. For a good programming experience when using a custom delegate type, define an + extension method similar to + + that calls this method. + + + + + + Appends a frame representing an attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + This method is provided for infrastructure purposes, and is used to support generated code + that uses . + + + + + + Appends a frame representing an attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + This method is provided for infrastructure purposes, and is used to support generated code + that uses . + + + + + Appends a frame representing a string-valued attribute. + The attribute is associated with the most recently added element. If the value is null, or + the value false and the current element is not a component, the + frame will be omitted. + + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an attribute. + + + The attribute is associated with the most recently added element. + + + An integer that represents the position of the instruction in the source code. + A holding the name and value of the attribute. + + + + Appends a frame representing a child component. + + The type of the child component. + An integer that represents the position of the instruction in the source code. + + + + Appends a frame representing a child component. + + An integer that represents the position of the instruction in the source code. + The type of the child component. + + + + Marks a previously appended component frame as closed. Calls to this method + must be balanced with calls to . + + + + + Appends a frame representing an instruction to capture a reference to the parent element. + + An integer that represents the position of the instruction in the source code. + An action to be invoked whenever the reference value changes. + + + + Appends a frame representing an instruction to capture a reference to the parent component. + + An integer that represents the position of the instruction in the source code. + An action to be invoked whenever the reference value changes. + + + + Clears the builder. + + + + + Returns the values that have been appended. + + An array range of values. + + + + Describes changes to a component's render tree between successive renders. + + + + + Gets the ID of the component. + + + + + Gets the changes to the render tree since a previous state. + + + + + Exists only so that the various methods in this class can call each other without + constantly building up long lists of parameters. Is private to this class, so the + fact that it's a mutable struct is manageable. + + Always pass by ref to avoid copying, and because the 'SiblingIndex' is mutable. + + + + + Represents a single edit operation on a component's render tree. + + + + + Gets the type of the edit operation. + + + + + Gets the index of the sibling frame that the edit relates to. + + + + + Gets the index of related data in an associated render frames array. For example, if the + value is , gets the + index of the new frame data in an associated render tree. + + + + + If the value is , + gets the name of the attribute that is being removed. + + + + + Describes the type of a render tree edit operation. + + + + + Indicates that a new frame should be inserted before the specified tree frame. + + + + + Indicates that the specified tree frame should be removed. + + + + + Indicates that an attribute value should be applied to the specified frame. + This may be a change to an existing attribute, or the addition of a new attribute. + + + + + Indicates that a named attribute should be removed from the specified frame. + + + + + Indicates that the text content of the specified frame (which must be a text frame) + should be updated. + + + + + Indicates that the edit position should move inside the specified frame. + + + + + Indicates that there are no further edit operations on the current frame, and the + edit position should move back to the parent frame. + + + + + Indicates that the markup content of the specified frame (which must be a markup frame) + should be updated. + + + + + Represents an entry in a tree of user interface (UI) items. + + + + + Gets the sequence number of the frame. Sequence numbers indicate the relative source + positions of the instructions that inserted the frames. Sequence numbers are only + comparable within the same sequence (typically, the same source method). + + + + + Describes the type of this frame. + + + + + If the property equals + gets the number of frames in the subtree for which this frame is the root. + The value is zero if the frame has not yet been closed. + + + + + If the property equals , + gets a name representing the type of the element. Otherwise, the value is undefined. + + + + + If the property equals , + gets the content of the text frame. Otherwise, the value is undefined. + + + + + If the property equals + gets the ID of the corresponding event handler, if any. + + + + + If the property equals , + gets the attribute name. Otherwise, the value is undefined. + + + + + If the property equals , + gets the attribute value. Otherwise, the value is undefined. + + + + + If the property equals + gets the number of frames in the subtree for which this frame is the root. + The value is zero if the frame has not yet been closed. + + + + + If the property equals , + gets the child component instance identifier. + + + + + If the property equals , + gets the type of the child component. + + + + + If the property equals , + gets the child component state object. Otherwise, the value is undefined. + + + + + If the property equals , + gets the child component instance. Otherwise, the value is undefined. + + + + + If the property equals + gets the number of frames in the subtree for which this frame is the root. + The value is zero if the frame has not yet been closed. + + + + + If the property equals , + gets the ID of the reference capture. Otherwise, the value is undefined. + + + + + If the property equals , + gets the action that writes the reference to its target. Otherwise, the value is undefined. + + + + + If the property equals , + gets the index of the parent frame representing the component being captured. Otherwise, the value is undefined. + WARNING: This index can only be used in the context of the frame's original render tree. If the frame is + copied elsewhere, such as to the ReferenceFrames buffer of a RenderTreeDiff, then the index will + not relate to entries in that other buffer. + Currently there's no scenario where this matters, but if there was, we could change all of the subtree + initialization logic in RenderTreeDiffBuilder to walk the frames hierarchically, then it would know + the parent index at the point where it wants to initialize the ComponentReferenceCapture frame. + + + + + If the property equals , + gets the action that writes the reference to its target. Otherwise, the value is undefined. + + + + + If the property equals , + gets the content of the markup frame. Otherwise, the value is undefined. + + + + + + + + Describes the type of a . + + + + + Represents a container for other frames. + + + + + Represents text content. + + + + + Represents a key-value pair associated with another . + + + + + Represents a child component. + + + + + Defines the boundary around range of sibling frames that should be treated as an + unsplittable group for the purposes of diffing. This is typically used when appending + a tree fragment generated by external code, because the sequence numbers in that tree + fragment are not comparable to sequence numbers outside it. + + + + + Represents an instruction to capture or update a reference to the parent element. + + + + + Represents an instruction to capture or update a reference to the parent component. + + + + + Represents a block of markup content. + + + + + Indicates that the associated component should match the specified route template pattern. + + + + + Constructs an instance of . + + The route template. + + + + Gets the route template. + + + + + A component that renders an anchor tag, automatically toggling its 'active' + class based on whether its 'href' matches the current URI. + + + + + Gets or sets the CSS class name applied to the NavLink when the + current route matches the NavLink href. + + + + + Gets or sets a value representing the URL matching behavior. + + + + + + + + + + + + + + Modifies the URL matching behavior for a . + + + + + Specifies that the should be active when it matches any prefix + of the current URL. + + + + + Specifies that the should be active when it matches the entire + current URL. + + + + + A component that displays whichever other component corresponds to the + current navigation location. + + + + + Gets or sets the assembly that should be searched, along with its referenced + assemblies, for components matching the URI. + + + + + Gets or sets the type of the component that should be used as a fallback when no match is found for the requested route. + + + + + + + + + + + + + + + + + Route precedence algorithm. + We collect all the routes and sort them from most specific to + less specific. The specificity of a route is given by the specificity + of its segments and the position of those segments in the route. + * A literal segment is more specific than a parameter segment. + * A parameter segment with more constraints is more specific than one with fewer constraints + * Segment earlier in the route are evaluated before segments later in the route. + For example: + /Literal is more specific than /Parameter + /Route/With/{parameter} is more specific than /{multiple}/With/{parameters} + /Product/{id:int} is more specific than /Product/{id} + + Routes can be ambiguous if: + They are composed of literals and those literals have the same values (case insensitive) + They are composed of a mix of literals and parameters, in the same relative order and the + literals have the same values. + For example: + * /literal and /Literal + /{parameter}/literal and /{something}/literal + /{parameter:constraint}/literal and /{something:constraint}/literal + + To calculate the precedence we sort the list of routes as follows: + * Shorter routes go first. + * A literal wins over a parameter in precedence. + * For literals with different values (case insensitive) we choose the lexical order + * For parameters with different numbers of constraints, the one with more wins + If we get to the end of the comparison routing we've detected an ambiguous pair of routes. + + + + + A route constraint that requires the value to be parseable as a specified type. + + The type to which the value must be parseable. + + + + Used by generated code produced by the Components code generator. Not intended or supported + for use in application code. + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Not intended for use by application code. + + + + + + + + Helpers for working with URIs and navigation state. + + + + + Gets the current absolute URI. + + The current absolute URI. + + + + An event that fires when the navigation location has changed. + + + + + Converts a relative URI into an absolute one (by resolving it + relative to the current absolute URI). + + The relative URI. + The absolute URI. + + + + Gets the base URI (with trailing slash) that can be prepended before relative URI paths to produce an absolute URI. + Typically this corresponds to the 'href' attribute on the document's <base> element. + + The URI prefix, which has a trailing slash. + + + + Given a base URI (e.g., one previously returned by ), + converts an absolute URI into one relative to the base URI prefix. + + The base URI prefix (e.g., previously returned by ). + An absolute URI that is within the space of the base URI. + A relative URI path. + + + + Navigates to the specified URI. + + The destination URI. This can be absolute, or relative to the base URI + (as returned by ). + + + + Navigates to the specified URI. + + The destination URI. This can be absolute, or relative to the base URI + (as returned by ). + If true, bypasses client-side routing and forces the browser to load the new page from the server, whether or not the URI would normally be handled by the client-side router. + + + + A base class for implementations. + + + + + An event that fires when the navigation location has changed. + + + + + Navigates to the specified URI. + + The destination URI. This can be absolute, or relative to the base URI + (as returned by ). + + + + Navigates to the specified URI. + + The destination URI. This can be absolute, or relative to the base URI + (as returned by ). + If true, bypasses client-side routing and forces the browser to load the new page from the server, whether or not the URI would normally be handled by the client-side router. + + + + Navigates to the specified URI. + + The destination URI. This can be absolute, or relative to the base URI + (as returned by ). + If true, bypasses client-side routing and forces the browser to load the new page from the server, whether or not the URI would normally be handled by the client-side router. + + + + Called to initialize BaseURI and current URI before those values the first time. + Override this method to dynamically calculate the those values. + + + + + Gets the current absolute URI. + + The current absolute URI. + + + + Gets the base URI (with trailing slash) that can be prepended before relative URI paths to + produce an absolute URI. Typically this corresponds to the 'href' attribute on the + document's <base> element. + + The URI prefix, which has a trailing slash. + + + + Converts a relative URI into an absolute one (by resolving it + relative to the current absolute URI). + + The relative URI. + The absolute URI. + + + + Given a base URI (e.g., one previously returned by ), + converts an absolute URI into one relative to the base URI prefix. + + + The base URI prefix (e.g., previously returned by ). + + An absolute URI that is within the space of the base URI. + A relative URI path. + + + + Set the URI to the provided value. + + The URI. Must be an absolute URI. + + Calling does not trigger . + + + + + Sets the base URI to the provided value (after normalization). + + The base URI. Must be an absolute URI. + + Calling does not trigger . + + + + + Triggers the event with the current URI value. + + + + + Supplies information about an event that is being raised. + + + + + An empty instance of . + + + + + Gets or sets the type of the event. + + + + + Supplies information about an input change event that is being raised. + + + + + Gets or sets the new value of the input. This may be a + or a . + + + + + Supplies information about an clipboard event that is being raised. + + + + + Supplies information about an drag event that is being raised. + + + + + A count of consecutive clicks that happened in a short amount of time, incremented by one. + + + + + The data that underlies a drag-and-drop operation, known as the drag data store. + See . + + + + + The X coordinate of the mouse pointer in global (screen) coordinates. + + + + + The Y coordinate of the mouse pointer in global (screen) coordinates. + + + + + The X coordinate of the mouse pointer in local (DOM content) coordinates. + + + + + The Y coordinate of the mouse pointer in local (DOM content) coordinates. + + + + + The button number that was pressed when the mouse event was fired: + Left button=0, + middle button=1 (if present), + right button=2. + For mice configured for left handed use in which the button actions are reversed the values are instead read from right to left. + + + + + The buttons being pressed when the mouse event was fired: + Left button=1, + Right button=2, + Middle (wheel) button=4, + 4th button (typically, "Browser Back" button)=8, + 5th button (typically, "Browser Forward" button)=16. + If two or more buttons are pressed, returns the logical sum of the values. + E.g., if Left button and Right button are pressed, returns 3 (=1 | 2). + + + + + true if the control key was down when the event was fired. false otherwise. + + + + + true if the shift key was down when the event was fired. false otherwise. + + + + + true if the alt key was down when the event was fired. false otherwise. + + + + + true if the meta key was down when the event was fired. false otherwise. + + + + + The object is used to hold the data that is being dragged during a drag and drop operation. + It may hold one or more , each of one or more data types. + For more information about drag and drop, see HTML Drag and Drop API. + + + + + Gets the type of drag-and-drop operation currently selected or sets the operation to a new type. + The value must be none, copy, link or move. + + + + + Provides all of the types of operations that are possible. + Must be one of none, copy, copyLink, copyMove, link, linkMove, move, all or uninitialized. + + + + + Contains a list of all the local files available on the data transfer. + If the drag operation doesn't involve dragging files, this property is an empty list. + + + + + Gives a array which is a list of all of the drag data. + + + + + An array of giving the formats that were set in the dragstart event. + + + + + The object represents one drag data item. + During a drag operation, each drag event has a dataTransfer property which contains a list of drag data items. + Each item in the list is a object. + + + + + The kind of drag data item, string or file + + + + + The drag data item's type, typically a MIME type + + + + + Supplies information about an error event that is being raised. + + + + + Gets a a human-readable error message describing the problem. + + + + + Gets the name of the script file in which the error occurred. + + + + + Gets the line number of the script file on which the error occurred. + + + + + Gets the column number of the script file on which the error occurred. + + + + + Supplies information about a focus event that is being raised. + + + + + Supplies information about a keyboard event that is being raised. + + + + + The key value of the key represented by the event. + If the value has a printed representation, this attribute's value is the same as the char attribute. + Otherwise, it's one of the key value strings specified in 'Key values'. + If the key can't be identified, this is the string "Unidentified" + + + + + Holds a string that identifies the physical key being pressed. + The value is not affected by the current keyboard layout or modifier state, so a particular key will always return the same value. + + + + + The location of the key on the device. + + + + + true if a key has been depressed long enough to trigger key repetition, otherwise false. + + + + + true if the control key was down when the event was fired. false otherwise. + + + + + true if the shift key was down when the event was fired. false otherwise. + + + + + true if the alt key was down when the event was fired. false otherwise. + + + + + true if the meta key was down when the event was fired. false otherwise. + + + + + Supplies information about a mouse event that is being raised. + + + + + A count of consecutive clicks that happened in a short amount of time, incremented by one. + + + + + The X coordinate of the mouse pointer in global (screen) coordinates. + + + + + The Y coordinate of the mouse pointer in global (screen) coordinates. + + + + + The X coordinate of the mouse pointer in local (DOM content) coordinates. + + + + + The Y coordinate of the mouse pointer in local (DOM content) coordinates. + + + + + The button number that was pressed when the mouse event was fired: + Left button=0, + middle button=1 (if present), + right button=2. + For mice configured for left handed use in which the button actions are reversed the values are instead read from right to left. + + + + + The buttons being pressed when the mouse event was fired: + Left button=1, + Right button=2, + Middle (wheel) button=4, + 4th button (typically, "Browser Back" button)=8, + 5th button (typically, "Browser Forward" button)=16. + If two or more buttons are pressed, returns the logical sum of the values. + E.g., if Left button and Right button are pressed, returns 3 (=1 | 2). + + + + + true if the control key was down when the event was fired. false otherwise. + + + + + true if the shift key was down when the event was fired. false otherwise. + + + + + true if the alt key was down when the event was fired. false otherwise. + + + + + true if the meta key was down when the event was fired. false otherwise. + + + + + Supplies information about a mouse event that is being raised. + + + + + A unique identifier for the pointer causing the event. + + + + + The width (magnitude on the X axis), in CSS pixels, of the contact geometry of the pointer. + + + + + The height (magnitude on the Y axis), in CSS pixels, of the contact geometry of the pointer. + + + + + The normalized pressure of the pointer input in the range of 0 to 1, + where 0 and 1 represent the minimum and maximum pressure the hardware is capable of detecting, respectively. + + + + + The plane angle (in degrees, in the range of -90 to 90) between the Y-Z plane + and the plane containing both the transducer (e.g. pen stylus) axis and the Y axis. + + + + + The plane angle (in degrees, in the range of -90 to 90) between the X-Z plane + and the plane containing both the transducer (e.g. pen stylus) axis and the X axis. + + + + + Indicates the device type that caused the event. + Must be one of the strings mouse, pen or touch, or an empty string. + + + + + Indicates if the pointer represents the primary pointer of this pointer type. + + + + + Supplies information about a progress event that is being raised. + + + + + Whether or not the total size of the transfer is known. + + + + + The number of bytes transferred since the beginning of the operation. + This doesn't include headers and other overhead, but only the content itself. + + + + + The total number of bytes of content that will be transferred during the operation. + If the total size is unknown, this value is zero. + + + + + Supplies information about a touch event that is being raised. + + + + + A count of consecutive clicks that happened in a short amount of time, incremented by one. + + + + + A list of for every point of contact currently touching the surface. + + + + + A list of for every point of contact that is touching the surface and started on the element that is the target of the current event. + + + + + A list of Touches for every point of contact which contributed to the event. + For the touchstart event this must be a list of the touch points that just became active with the current event. + For the touchmove event this must be a list of the touch points that have moved since the last event. + For the touchend and touchcancel events this must be a list of the touch points that have just been removed from the surface. + + + + + true if the control key was down when the event was fired. false otherwise. + + + + + true if the shift key was down when the event was fired. false otherwise. + + + + + true if the alt key was down when the event was fired. false otherwise. + + + + + true if the meta key was down when the event was fired. false otherwise. + + + + + Represents a single contact point on a touch-sensitive device. + The contact point is commonly a finger or stylus and the device may be a touchscreen or trackpad. + + + + + A unique identifier for this Touch object. + A given touch point (say, by a finger) will have the same identifier for the duration of its movement around the surface. + This lets you ensure that you're tracking the same touch all the time. + + + + + The X coordinate of the touch point relative to the left edge of the screen. + + + + + The Y coordinate of the touch point relative to the top edge of the screen. + + + + + The X coordinate of the touch point relative to the left edge of the browser viewport, not including any scroll offset. + + + + + The Y coordinate of the touch point relative to the top edge of the browser viewport, not including any scroll offset. + + + + + The X coordinate of the touch point relative to the left edge of the document. + Unlike , this value includes the horizontal scroll offset, if any. + + + + + The Y coordinate of the touch point relative to the top of the document. + Unlike , this value includes the vertical scroll offset, if any. + + + + + Supplies information about a mouse wheel event that is being raised. + + + + + The horizontal scroll amount. + + + + + The vertical scroll amount. + + + + + The scroll amount for the z-axis. + + + + + The unit of the delta values scroll amount. + + + + + Extensions methods on for event handlers. + + + + These methods enable method-group to delegate conversion for delegates and methods that accept + types derived from . + + + This enhances the programming experience for using event handlers with the render tree builder + in components written in pure C#. These extension methods make it possible to write code like: + + builder.AddAttribute(0, "onkeypress", MyKeyPressHandler); + + Where void MyKeyPressHandler(UIKeyboardEventArgs e) is a method defined in the same class. + In this example, the author knows that the onclick event is associated with the + event args type. The component author is responsible for + providing a delegate that matches the expected event args type, an error will result in a failure + at runtime. + + + When a component is authored in Razor (.cshtml), the Razor code generator will maintain a mapping + between event names and event arg types that can be used to generate more strongly typed code. + Generated code for the same case will look like: + + builder.AddAttribute(0, "onkeypress", BindMethods.GetEventHandlerValue<UIKeyboardEventArgs>(MyKeyPressHandler)); + + + + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + + + Appends a frame representing an -valued attribute. + + + The attribute is associated with the most recently added element. If the value is null and the + current element is not a component, the frame will be omitted. + + + The . + An integer that represents the position of the instruction in the source code. + The name of the attribute. + The value of the attribute. + + + diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll new file mode 100755 index 0000000..80058b1 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll new file mode 100755 index 0000000..a859ce6 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.JSInterop.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.JSInterop.dll new file mode 100755 index 0000000..efe4501 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Microsoft.JSInterop.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Mono.WebAssembly.Interop.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Mono.WebAssembly.Interop.dll new file mode 100755 index 0000000..1ac3342 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/Mono.WebAssembly.Interop.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/System.ComponentModel.Annotations.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/System.ComponentModel.Annotations.dll new file mode 100755 index 0000000..bff09e6 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/System.ComponentModel.Annotations.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.dll new file mode 100644 index 0000000..e523046 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb new file mode 100644 index 0000000..cdfe9a8 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.E2EPerformance.pdb differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.dll new file mode 100644 index 0000000..5239765 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb new file mode 100644 index 0000000..9d77703 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Blazor.pdb differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.dll new file mode 100644 index 0000000..83845be Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb new file mode 100644 index 0000000..89798bf Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.Browser.pdb differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.dll new file mode 100644 index 0000000..7117b84 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.pdb b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.pdb new file mode 100644 index 0000000..853acc5 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.AspNetCore.Components.pdb differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.Extensions.DependencyInjection.Abstractions.dll new file mode 100644 index 0000000..7cd9149 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.Extensions.DependencyInjection.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.Extensions.DependencyInjection.dll new file mode 100644 index 0000000..9c1fdc0 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.JSInterop.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.JSInterop.dll new file mode 100644 index 0000000..0b1ea66 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Microsoft.JSInterop.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Mono.WebAssembly.Interop.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Mono.WebAssembly.Interop.dll new file mode 100644 index 0000000..872f078 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/Mono.WebAssembly.Interop.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.ComponentModel.Annotations.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.ComponentModel.Annotations.dll new file mode 100644 index 0000000..4815dad Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.ComponentModel.Annotations.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.Core.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.Core.dll new file mode 100644 index 0000000..f9c71a5 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.Core.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.Net.Http.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.Net.Http.dll new file mode 100644 index 0000000..e219d2d Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.Net.Http.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.dll new file mode 100644 index 0000000..512abc3 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/System.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/mscorlib.dll b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/mscorlib.dll new file mode 100644 index 0000000..a6d8cb0 Binary files /dev/null and b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/_bin/mscorlib.dll differ diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/blazor.boot.json b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/blazor.boot.json new file mode 100644 index 0000000..1cc3e35 --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/blazor.boot.json @@ -0,0 +1 @@ +{"main":"Microsoft.AspNetCore.Blazor.E2EPerformance.dll","entryPoint":"Microsoft.AspNetCore.Blazor.E2EPerformance.Program::Main","assemblyReferences":["Microsoft.AspNetCore.Blazor.dll","Microsoft.AspNetCore.Components.Browser.dll","Microsoft.AspNetCore.Components.dll","Microsoft.Extensions.DependencyInjection.Abstractions.dll","Microsoft.Extensions.DependencyInjection.dll","Microsoft.JSInterop.dll","Mono.WebAssembly.Interop.dll","mscorlib.dll","System.ComponentModel.Annotations.dll","System.Core.dll","System.dll","System.Net.Http.dll","Microsoft.AspNetCore.Blazor.E2EPerformance.pdb","Microsoft.AspNetCore.Blazor.pdb","Microsoft.AspNetCore.Components.Browser.pdb","Microsoft.AspNetCore.Components.pdb"],"cssReferences":[],"jsReferences":[],"linkerEnabled":true} \ No newline at end of file diff --git a/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/components.server.js b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/components.server.js new file mode 100644 index 0000000..f2ca64c --- /dev/null +++ b/wasm/Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Debug/netstandard2.0/dist/_framework/components.server.js @@ -0,0 +1,13562 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./Boot.Server.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./Boot.Server.ts": +/*!************************!*\ + !*** ./Boot.Server.ts ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__webpack_require__(/*! @dotnet/jsinterop */ "./node_modules/@dotnet/jsinterop/dist/Microsoft.JSInterop.js"); +__webpack_require__(/*! ./GlobalExports */ "./GlobalExports.ts"); +var signalR = __webpack_require__(/*! @aspnet/signalr */ "./node_modules/@aspnet/signalr/dist/esm/index.js"); +var signalr_protocol_msgpack_1 = __webpack_require__(/*! @aspnet/signalr-protocol-msgpack */ "./node_modules/@aspnet/signalr-protocol-msgpack/dist/esm/index.js"); +var OutOfProcessRenderBatch_1 = __webpack_require__(/*! ./Rendering/RenderBatch/OutOfProcessRenderBatch */ "./Rendering/RenderBatch/OutOfProcessRenderBatch.ts"); +var UriHelper_1 = __webpack_require__(/*! ./Services/UriHelper */ "./Services/UriHelper.ts"); +var Renderer_1 = __webpack_require__(/*! ./Rendering/Renderer */ "./Rendering/Renderer.ts"); +var BootCommon_1 = __webpack_require__(/*! ./BootCommon */ "./BootCommon.ts"); +var AutoReconnectCircuitHandler_1 = __webpack_require__(/*! ./Platform/Circuits/AutoReconnectCircuitHandler */ "./Platform/Circuits/AutoReconnectCircuitHandler.ts"); +function boot() { + return __awaiter(this, void 0, void 0, function () { + var circuitHandlers, embeddedResourcesPromise, initialConnection, circuitId; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + circuitHandlers = [new AutoReconnectCircuitHandler_1.AutoReconnectCircuitHandler()]; + window['Blazor'].circuitHandlers = circuitHandlers; + embeddedResourcesPromise = BootCommon_1.fetchBootConfigAsync().then(function (bootConfig) { + return BootCommon_1.loadEmbeddedResourcesAsync(bootConfig); + }); + return [4 /*yield*/, initializeConnection(circuitHandlers)]; + case 1: + initialConnection = _a.sent(); + // Ensure any embedded resources have been loaded before starting the app + return [4 /*yield*/, embeddedResourcesPromise]; + case 2: + // Ensure any embedded resources have been loaded before starting the app + _a.sent(); + return [4 /*yield*/, initialConnection.invoke('StartCircuit', UriHelper_1.internalFunctions.getLocationHref(), UriHelper_1.internalFunctions.getBaseURI())]; + case 3: + circuitId = _a.sent(); + window['Blazor'].reconnect = function () { return __awaiter(_this, void 0, void 0, function () { + var reconnection; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, initializeConnection(circuitHandlers)]; + case 1: + reconnection = _a.sent(); + return [4 /*yield*/, reconnection.invoke('ConnectCircuit', circuitId)]; + case 2: + if (!(_a.sent())) { + return [2 /*return*/, false]; + } + circuitHandlers.forEach(function (h) { return h.onConnectionUp && h.onConnectionUp(); }); + return [2 /*return*/, true]; + } + }); + }); }; + circuitHandlers.forEach(function (h) { return h.onConnectionUp && h.onConnectionUp(); }); + return [2 /*return*/]; + } + }); + }); +} +function initializeConnection(circuitHandlers) { + return __awaiter(this, void 0, void 0, function () { + var connection, ex_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + connection = new signalR.HubConnectionBuilder() + .withUrl('_blazor') + .withHubProtocol(new signalr_protocol_msgpack_1.MessagePackHubProtocol()) + .configureLogging(signalR.LogLevel.Information) + .build(); + connection.on('JS.BeginInvokeJS', DotNet.jsCallDispatcher.beginInvokeJSFromDotNet); + connection.on('JS.RenderBatch', function (browserRendererId, renderId, batchData) { + try { + Renderer_1.renderBatch(browserRendererId, new OutOfProcessRenderBatch_1.OutOfProcessRenderBatch(batchData)); + connection.send('OnRenderCompleted', renderId, null); + } + catch (ex) { + // If there's a rendering exception, notify server *and* throw on client + connection.send('OnRenderCompleted', renderId, ex.toString()); + throw ex; + } + }); + connection.onclose(function (error) { return circuitHandlers.forEach(function (h) { return h.onConnectionDown && h.onConnectionDown(error); }); }); + connection.on('JS.Error', function (error) { return unhandledError(connection, error); }); + window['Blazor']._internal.forceCloseConnection = function () { return connection.stop(); }; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, connection.start()]; + case 2: + _a.sent(); + return [3 /*break*/, 4]; + case 3: + ex_1 = _a.sent(); + unhandledError(connection, ex_1); + return [3 /*break*/, 4]; + case 4: + DotNet.attachDispatcher({ + beginInvokeDotNetFromJS: function (callId, assemblyName, methodIdentifier, dotNetObjectId, argsJson) { + connection.send('BeginInvokeDotNetFromJS', callId ? callId.toString() : null, assemblyName, methodIdentifier, dotNetObjectId || 0, argsJson); + } + }); + return [2 /*return*/, connection]; + } + }); + }); +} +function unhandledError(connection, err) { + console.error(err); + // Disconnect on errors. + // + // Trying to call methods on the connection after its been closed will throw. + if (connection) { + connection.stop(); + } +} +boot(); + + +/***/ }), + +/***/ "./BootCommon.ts": +/*!***********************!*\ + !*** ./BootCommon.ts ***! + \***********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +function fetchBootConfigAsync() { + return __awaiter(this, void 0, void 0, function () { + var bootConfigResponse; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, fetch('_framework/blazor.boot.json', { method: 'Get', credentials: 'include' })]; + case 1: + bootConfigResponse = _a.sent(); + return [2 /*return*/, bootConfigResponse.json()]; + } + }); + }); +} +exports.fetchBootConfigAsync = fetchBootConfigAsync; +function loadEmbeddedResourcesAsync(bootConfig) { + var cssLoadingPromises = bootConfig.cssReferences.map(function (cssReference) { + var linkElement = document.createElement('link'); + linkElement.rel = 'stylesheet'; + linkElement.href = cssReference; + return loadResourceFromElement(linkElement); + }); + var jsLoadingPromises = bootConfig.jsReferences.map(function (jsReference) { + var scriptElement = document.createElement('script'); + scriptElement.src = jsReference; + return loadResourceFromElement(scriptElement); + }); + return Promise.all(cssLoadingPromises.concat(jsLoadingPromises)); +} +exports.loadEmbeddedResourcesAsync = loadEmbeddedResourcesAsync; +function loadResourceFromElement(element) { + return new Promise(function (resolve, reject) { + element.onload = resolve; + element.onerror = reject; + document.head.appendChild(element); + }); +} + + +/***/ }), + +/***/ "./Environment.ts": +/*!************************!*\ + !*** ./Environment.ts ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +function setPlatform(platformInstance) { + exports.platform = platformInstance; + return exports.platform; +} +exports.setPlatform = setPlatform; + + +/***/ }), + +/***/ "./GlobalExports.ts": +/*!**************************!*\ + !*** ./GlobalExports.ts ***! + \**************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var UriHelper_1 = __webpack_require__(/*! ./Services/UriHelper */ "./Services/UriHelper.ts"); +var Http_1 = __webpack_require__(/*! ./Services/Http */ "./Services/Http.ts"); +var Renderer_1 = __webpack_require__(/*! ./Rendering/Renderer */ "./Rendering/Renderer.ts"); +// Make the following APIs available in global scope for invocation from JS +window['Blazor'] = { + navigateTo: UriHelper_1.navigateTo, + _internal: { + attachRootComponentToElement: Renderer_1.attachRootComponentToElement, + http: Http_1.internalFunctions, + uriHelper: UriHelper_1.internalFunctions + } +}; + + +/***/ }), + +/***/ "./Platform/Circuits/AutoReconnectCircuitHandler.ts": +/*!**********************************************************!*\ + !*** ./Platform/Circuits/AutoReconnectCircuitHandler.ts ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var UserSpecifiedDisplay_1 = __webpack_require__(/*! ./UserSpecifiedDisplay */ "./Platform/Circuits/UserSpecifiedDisplay.ts"); +var DefaultReconnectDisplay_1 = __webpack_require__(/*! ./DefaultReconnectDisplay */ "./Platform/Circuits/DefaultReconnectDisplay.ts"); +var AutoReconnectCircuitHandler = /** @class */ (function () { + function AutoReconnectCircuitHandler() { + var _this = this; + this.reconnectDisplay = new DefaultReconnectDisplay_1.DefaultReconnectDisplay(document); + document.addEventListener('DOMContentLoaded', function () { + var modal = document.getElementById(AutoReconnectCircuitHandler.DialogId); + if (modal) { + _this.reconnectDisplay = new UserSpecifiedDisplay_1.UserSpecifiedDisplay(modal); + } + }); + } + AutoReconnectCircuitHandler.prototype.onConnectionUp = function () { + this.reconnectDisplay.hide(); + }; + AutoReconnectCircuitHandler.prototype.delay = function () { + return new Promise(function (resolve) { return setTimeout(resolve, AutoReconnectCircuitHandler.RetryInterval); }); + }; + AutoReconnectCircuitHandler.prototype.onConnectionDown = function () { + return __awaiter(this, void 0, void 0, function () { + var i, result, err_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.reconnectDisplay.show(); + i = 0; + _a.label = 1; + case 1: + if (!(i < AutoReconnectCircuitHandler.MaxRetries)) return [3 /*break*/, 7]; + return [4 /*yield*/, this.delay()]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + _a.trys.push([3, 5, , 6]); + return [4 /*yield*/, window['Blazor'].reconnect()]; + case 4: + result = _a.sent(); + if (!result) { + // If the server responded and refused to reconnect, stop auto-retrying. + return [3 /*break*/, 7]; + } + return [2 /*return*/]; + case 5: + err_1 = _a.sent(); + console.error(err_1); + return [3 /*break*/, 6]; + case 6: + i++; + return [3 /*break*/, 1]; + case 7: + this.reconnectDisplay.failed(); + return [2 /*return*/]; + } + }); + }); + }; + AutoReconnectCircuitHandler.MaxRetries = 5; + AutoReconnectCircuitHandler.RetryInterval = 3000; + AutoReconnectCircuitHandler.DialogId = 'components-reconnect-modal'; + return AutoReconnectCircuitHandler; +}()); +exports.AutoReconnectCircuitHandler = AutoReconnectCircuitHandler; + + +/***/ }), + +/***/ "./Platform/Circuits/DefaultReconnectDisplay.ts": +/*!******************************************************!*\ + !*** ./Platform/Circuits/DefaultReconnectDisplay.ts ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var AutoReconnectCircuitHandler_1 = __webpack_require__(/*! ./AutoReconnectCircuitHandler */ "./Platform/Circuits/AutoReconnectCircuitHandler.ts"); +var DefaultReconnectDisplay = /** @class */ (function () { + function DefaultReconnectDisplay(document) { + this.document = document; + this.addedToDom = false; + this.modal = this.document.createElement('div'); + this.modal.id = AutoReconnectCircuitHandler_1.AutoReconnectCircuitHandler.DialogId; + var modalStyles = [ + "position: fixed", + "top: 0", + "right: 0", + "bottom: 0", + "left: 0", + "z-index: 1000", + "display: none", + "overflow: hidden", + "background-color: #fff", + "opacity: 0.8", + "text-align: center", + "font-weight: bold" + ]; + this.modal.style.cssText = modalStyles.join(';'); + this.modal.innerHTML = '
'; + this.message = this.modal.querySelector('h5'); + this.button = this.modal.querySelector('button'); + this.button.addEventListener('click', function () { return window['Blazor'].reconnect(); }); + } + DefaultReconnectDisplay.prototype.show = function () { + if (!this.addedToDom) { + this.addedToDom = true; + this.document.body.appendChild(this.modal); + } + this.modal.style.display = 'block'; + this.button.style.display = 'none'; + this.message.textContent = 'Attempting to reconnect to the server...'; + }; + DefaultReconnectDisplay.prototype.hide = function () { + this.modal.style.display = 'none'; + }; + DefaultReconnectDisplay.prototype.failed = function () { + this.button.style.display = 'block'; + this.message.textContent = 'Failed to reconnect to the server.'; + }; + return DefaultReconnectDisplay; +}()); +exports.DefaultReconnectDisplay = DefaultReconnectDisplay; + + +/***/ }), + +/***/ "./Platform/Circuits/UserSpecifiedDisplay.ts": +/*!***************************************************!*\ + !*** ./Platform/Circuits/UserSpecifiedDisplay.ts ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var UserSpecifiedDisplay = /** @class */ (function () { + function UserSpecifiedDisplay(dialog) { + this.dialog = dialog; + } + UserSpecifiedDisplay.prototype.show = function () { + this.removeClasses(); + this.dialog.classList.add(UserSpecifiedDisplay.ShowClassName); + }; + UserSpecifiedDisplay.prototype.hide = function () { + this.removeClasses(); + this.dialog.classList.add(UserSpecifiedDisplay.HideClassName); + }; + UserSpecifiedDisplay.prototype.failed = function () { + this.removeClasses(); + this.dialog.classList.add(UserSpecifiedDisplay.FailedClassName); + }; + UserSpecifiedDisplay.prototype.removeClasses = function () { + this.dialog.classList.remove(UserSpecifiedDisplay.ShowClassName, UserSpecifiedDisplay.HideClassName, UserSpecifiedDisplay.FailedClassName); + }; + UserSpecifiedDisplay.ShowClassName = 'components-reconnect-show'; + UserSpecifiedDisplay.HideClassName = 'components-reconnect-hide'; + UserSpecifiedDisplay.FailedClassName = 'components-reconnect-failed'; + return UserSpecifiedDisplay; +}()); +exports.UserSpecifiedDisplay = UserSpecifiedDisplay; + + +/***/ }), + +/***/ "./Rendering/BrowserRenderer.ts": +/*!**************************************!*\ + !*** ./Rendering/BrowserRenderer.ts ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var RenderBatch_1 = __webpack_require__(/*! ./RenderBatch/RenderBatch */ "./Rendering/RenderBatch/RenderBatch.ts"); +var EventDelegator_1 = __webpack_require__(/*! ./EventDelegator */ "./Rendering/EventDelegator.ts"); +var LogicalElements_1 = __webpack_require__(/*! ./LogicalElements */ "./Rendering/LogicalElements.ts"); +var ElementReferenceCapture_1 = __webpack_require__(/*! ./ElementReferenceCapture */ "./Rendering/ElementReferenceCapture.ts"); +var selectValuePropname = '_blazorSelectValue'; +var sharedTemplateElemForParsing = document.createElement('template'); +var sharedSvgElemForParsing = document.createElementNS('http://www.w3.org/2000/svg', 'g'); +var preventDefaultEvents = { submit: true }; +var rootComponentsPendingFirstRender = {}; +var BrowserRenderer = /** @class */ (function () { + function BrowserRenderer(browserRendererId) { + var _this = this; + this.browserRendererId = browserRendererId; + this.childComponentLocations = {}; + this.eventDelegator = new EventDelegator_1.EventDelegator(function (event, eventHandlerId, eventArgs) { + raiseEvent(event, _this.browserRendererId, eventHandlerId, eventArgs); + }); + } + BrowserRenderer.prototype.attachRootComponentToElement = function (componentId, element) { + // 'allowExistingContents' to keep any prerendered content until we do the first client-side render + this.attachComponentToElement(componentId, LogicalElements_1.toLogicalElement(element, /* allowExistingContents */ true)); + rootComponentsPendingFirstRender[componentId] = element; + }; + BrowserRenderer.prototype.updateComponent = function (batch, componentId, edits, referenceFrames) { + var element = this.childComponentLocations[componentId]; + if (!element) { + throw new Error("No element is currently associated with component " + componentId); + } + // On the first render for each root component, clear any existing content (e.g., prerendered) + var rootElementToClear = rootComponentsPendingFirstRender[componentId]; + if (rootElementToClear) { + delete rootComponentsPendingFirstRender[componentId]; + clearElement(rootElementToClear); + } + this.applyEdits(batch, element, 0, edits, referenceFrames); + }; + BrowserRenderer.prototype.disposeComponent = function (componentId) { + delete this.childComponentLocations[componentId]; + }; + BrowserRenderer.prototype.disposeEventHandler = function (eventHandlerId) { + this.eventDelegator.removeListener(eventHandlerId); + }; + BrowserRenderer.prototype.attachComponentToElement = function (componentId, element) { + this.childComponentLocations[componentId] = element; + }; + BrowserRenderer.prototype.applyEdits = function (batch, parent, childIndex, edits, referenceFrames) { + var currentDepth = 0; + var childIndexAtCurrentDepth = childIndex; + var arraySegmentReader = batch.arraySegmentReader; + var editReader = batch.editReader; + var frameReader = batch.frameReader; + var editsValues = arraySegmentReader.values(edits); + var editsOffset = arraySegmentReader.offset(edits); + var editsLength = arraySegmentReader.count(edits); + var maxEditIndexExcl = editsOffset + editsLength; + for (var editIndex = editsOffset; editIndex < maxEditIndexExcl; editIndex++) { + var edit = batch.diffReader.editsEntry(editsValues, editIndex); + var editType = editReader.editType(edit); + switch (editType) { + case RenderBatch_1.EditType.prependFrame: { + var frameIndex = editReader.newTreeIndex(edit); + var frame = batch.referenceFramesEntry(referenceFrames, frameIndex); + var siblingIndex = editReader.siblingIndex(edit); + this.insertFrame(batch, parent, childIndexAtCurrentDepth + siblingIndex, referenceFrames, frame, frameIndex); + break; + } + case RenderBatch_1.EditType.removeFrame: { + var siblingIndex = editReader.siblingIndex(edit); + LogicalElements_1.removeLogicalChild(parent, childIndexAtCurrentDepth + siblingIndex); + break; + } + case RenderBatch_1.EditType.setAttribute: { + var frameIndex = editReader.newTreeIndex(edit); + var frame = batch.referenceFramesEntry(referenceFrames, frameIndex); + var siblingIndex = editReader.siblingIndex(edit); + var element = LogicalElements_1.getLogicalChild(parent, childIndexAtCurrentDepth + siblingIndex); + if (element instanceof Element) { + this.applyAttribute(batch, element, frame); + } + else { + throw new Error("Cannot set attribute on non-element child"); + } + break; + } + case RenderBatch_1.EditType.removeAttribute: { + // Note that we don't have to dispose the info we track about event handlers here, because the + // disposed event handler IDs are delivered separately (in the 'disposedEventHandlerIds' array) + var siblingIndex = editReader.siblingIndex(edit); + var element = LogicalElements_1.getLogicalChild(parent, childIndexAtCurrentDepth + siblingIndex); + if (element instanceof HTMLElement) { + var attributeName = editReader.removedAttributeName(edit); + // First try to remove any special property we use for this attribute + if (!this.tryApplySpecialProperty(batch, element, attributeName, null)) { + // If that's not applicable, it's a regular DOM attribute so remove that + element.removeAttribute(attributeName); + } + } + else { + throw new Error("Cannot remove attribute from non-element child"); + } + break; + } + case RenderBatch_1.EditType.updateText: { + var frameIndex = editReader.newTreeIndex(edit); + var frame = batch.referenceFramesEntry(referenceFrames, frameIndex); + var siblingIndex = editReader.siblingIndex(edit); + var textNode = LogicalElements_1.getLogicalChild(parent, childIndexAtCurrentDepth + siblingIndex); + if (textNode instanceof Text) { + textNode.textContent = frameReader.textContent(frame); + } + else { + throw new Error("Cannot set text content on non-text child"); + } + break; + } + case RenderBatch_1.EditType.updateMarkup: { + var frameIndex = editReader.newTreeIndex(edit); + var frame = batch.referenceFramesEntry(referenceFrames, frameIndex); + var siblingIndex = editReader.siblingIndex(edit); + LogicalElements_1.removeLogicalChild(parent, childIndexAtCurrentDepth + siblingIndex); + this.insertMarkup(batch, parent, childIndexAtCurrentDepth + siblingIndex, frame); + break; + } + case RenderBatch_1.EditType.stepIn: { + var siblingIndex = editReader.siblingIndex(edit); + parent = LogicalElements_1.getLogicalChild(parent, childIndexAtCurrentDepth + siblingIndex); + currentDepth++; + childIndexAtCurrentDepth = 0; + break; + } + case RenderBatch_1.EditType.stepOut: { + parent = LogicalElements_1.getLogicalParent(parent); + currentDepth--; + childIndexAtCurrentDepth = currentDepth === 0 ? childIndex : 0; // The childIndex is only ever nonzero at zero depth + break; + } + default: { + var unknownType = editType; // Compile-time verification that the switch was exhaustive + throw new Error("Unknown edit type: " + unknownType); + } + } + } + }; + BrowserRenderer.prototype.insertFrame = function (batch, parent, childIndex, frames, frame, frameIndex) { + var frameReader = batch.frameReader; + var frameType = frameReader.frameType(frame); + switch (frameType) { + case RenderBatch_1.FrameType.element: + this.insertElement(batch, parent, childIndex, frames, frame, frameIndex); + return 1; + case RenderBatch_1.FrameType.text: + this.insertText(batch, parent, childIndex, frame); + return 1; + case RenderBatch_1.FrameType.attribute: + throw new Error('Attribute frames should only be present as leading children of element frames.'); + case RenderBatch_1.FrameType.component: + this.insertComponent(batch, parent, childIndex, frame); + return 1; + case RenderBatch_1.FrameType.region: + return this.insertFrameRange(batch, parent, childIndex, frames, frameIndex + 1, frameIndex + frameReader.subtreeLength(frame)); + case RenderBatch_1.FrameType.elementReferenceCapture: + if (parent instanceof Element) { + ElementReferenceCapture_1.applyCaptureIdToElement(parent, frameReader.elementReferenceCaptureId(frame)); + return 0; // A "capture" is a child in the diff, but has no node in the DOM + } + else { + throw new Error('Reference capture frames can only be children of element frames.'); + } + case RenderBatch_1.FrameType.markup: + this.insertMarkup(batch, parent, childIndex, frame); + return 1; + default: + var unknownType = frameType; // Compile-time verification that the switch was exhaustive + throw new Error("Unknown frame type: " + unknownType); + } + }; + BrowserRenderer.prototype.insertElement = function (batch, parent, childIndex, frames, frame, frameIndex) { + var frameReader = batch.frameReader; + var tagName = frameReader.elementName(frame); + var newDomElementRaw = tagName === 'svg' || LogicalElements_1.isSvgElement(parent) ? + document.createElementNS('http://www.w3.org/2000/svg', tagName) : + document.createElement(tagName); + var newElement = LogicalElements_1.toLogicalElement(newDomElementRaw); + LogicalElements_1.insertLogicalChild(newDomElementRaw, parent, childIndex); + // Apply attributes + var descendantsEndIndexExcl = frameIndex + frameReader.subtreeLength(frame); + for (var descendantIndex = frameIndex + 1; descendantIndex < descendantsEndIndexExcl; descendantIndex++) { + var descendantFrame = batch.referenceFramesEntry(frames, descendantIndex); + if (frameReader.frameType(descendantFrame) === RenderBatch_1.FrameType.attribute) { + this.applyAttribute(batch, newDomElementRaw, descendantFrame); + } + else { + // As soon as we see a non-attribute child, all the subsequent child frames are + // not attributes, so bail out and insert the remnants recursively + this.insertFrameRange(batch, newElement, 0, frames, descendantIndex, descendantsEndIndexExcl); + break; + } + } + }; + BrowserRenderer.prototype.insertComponent = function (batch, parent, childIndex, frame) { + var containerElement = LogicalElements_1.createAndInsertLogicalContainer(parent, childIndex); + // All we have to do is associate the child component ID with its location. We don't actually + // do any rendering here, because the diff for the child will appear later in the render batch. + var childComponentId = batch.frameReader.componentId(frame); + this.attachComponentToElement(childComponentId, containerElement); + }; + BrowserRenderer.prototype.insertText = function (batch, parent, childIndex, textFrame) { + var textContent = batch.frameReader.textContent(textFrame); + var newTextNode = document.createTextNode(textContent); + LogicalElements_1.insertLogicalChild(newTextNode, parent, childIndex); + }; + BrowserRenderer.prototype.insertMarkup = function (batch, parent, childIndex, markupFrame) { + var markupContainer = LogicalElements_1.createAndInsertLogicalContainer(parent, childIndex); + var markupContent = batch.frameReader.markupContent(markupFrame); + var parsedMarkup = parseMarkup(markupContent, LogicalElements_1.isSvgElement(parent)); + var logicalSiblingIndex = 0; + while (parsedMarkup.firstChild) { + LogicalElements_1.insertLogicalChild(parsedMarkup.firstChild, markupContainer, logicalSiblingIndex++); + } + }; + BrowserRenderer.prototype.applyAttribute = function (batch, toDomElement, attributeFrame) { + var frameReader = batch.frameReader; + var attributeName = frameReader.attributeName(attributeFrame); + var browserRendererId = this.browserRendererId; + var eventHandlerId = frameReader.attributeEventHandlerId(attributeFrame); + if (eventHandlerId) { + var firstTwoChars = attributeName.substring(0, 2); + var eventName = attributeName.substring(2); + if (firstTwoChars !== 'on' || !eventName) { + throw new Error("Attribute has nonzero event handler ID, but attribute name '" + attributeName + "' does not start with 'on'."); + } + this.eventDelegator.setListener(toDomElement, eventName, eventHandlerId); + return; + } + // First see if we have special handling for this attribute + if (!this.tryApplySpecialProperty(batch, toDomElement, attributeName, attributeFrame)) { + // If not, treat it as a regular string-valued attribute + toDomElement.setAttribute(attributeName, frameReader.attributeValue(attributeFrame)); + } + }; + BrowserRenderer.prototype.tryApplySpecialProperty = function (batch, element, attributeName, attributeFrame) { + switch (attributeName) { + case 'value': + return this.tryApplyValueProperty(batch, element, attributeFrame); + case 'checked': + return this.tryApplyCheckedProperty(batch, element, attributeFrame); + default: + return false; + } + }; + BrowserRenderer.prototype.tryApplyValueProperty = function (batch, element, attributeFrame) { + // Certain elements have built-in behaviour for their 'value' property + var frameReader = batch.frameReader; + switch (element.tagName) { + case 'INPUT': + case 'SELECT': + case 'TEXTAREA': { + var value = attributeFrame ? frameReader.attributeValue(attributeFrame) : null; + element.value = value; + if (element.tagName === 'SELECT') { + // /