From cb4e0cef8b84e7224ab77ff3c6a85edd23005fc2 Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 14 Jul 2020 15:22:10 -0700 Subject: [PATCH 001/106] Update branding to 2.1.21 (#23920) --- eng/Baseline.Designer.props | 2 +- eng/Baseline.xml | 2 +- eng/PatchConfig.props | 4 ++++ .../Archive.CiServer.Patch.Compat/ArchiveBaseline.2.1.20.txt | 1 + .../Archive.CiServer.Patch/ArchiveBaseline.2.1.20.txt | 1 + version.props | 2 +- 6 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 src/PackageArchive/Archive.CiServer.Patch.Compat/ArchiveBaseline.2.1.20.txt create mode 100644 src/PackageArchive/Archive.CiServer.Patch/ArchiveBaseline.2.1.20.txt diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props index 1622fa7041..11119cef2f 100644 --- a/eng/Baseline.Designer.props +++ b/eng/Baseline.Designer.props @@ -2,7 +2,7 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.1.19 + 2.1.20 diff --git a/eng/Baseline.xml b/eng/Baseline.xml index 7497e78a7b..398381dcad 100644 --- a/eng/Baseline.xml +++ b/eng/Baseline.xml @@ -4,7 +4,7 @@ This file contains a list of all the packages and their versions which were rele build of ASP.NET Core 2.1.x. Update this list when preparing for a new patch. --> - + diff --git a/eng/PatchConfig.props b/eng/PatchConfig.props index aefa226d15..3eb4d105ba 100644 --- a/eng/PatchConfig.props +++ b/eng/PatchConfig.props @@ -66,4 +66,8 @@ Later on, this will be checked using this condition: @aspnet/signalr; + + + + diff --git a/src/PackageArchive/Archive.CiServer.Patch.Compat/ArchiveBaseline.2.1.20.txt b/src/PackageArchive/Archive.CiServer.Patch.Compat/ArchiveBaseline.2.1.20.txt new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/PackageArchive/Archive.CiServer.Patch.Compat/ArchiveBaseline.2.1.20.txt @@ -0,0 +1 @@ + diff --git a/src/PackageArchive/Archive.CiServer.Patch/ArchiveBaseline.2.1.20.txt b/src/PackageArchive/Archive.CiServer.Patch/ArchiveBaseline.2.1.20.txt new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/PackageArchive/Archive.CiServer.Patch/ArchiveBaseline.2.1.20.txt @@ -0,0 +1 @@ + diff --git a/version.props b/version.props index 8a787e0583..e0df5c7e11 100644 --- a/version.props +++ b/version.props @@ -2,7 +2,7 @@ 2 1 - 20 + 21 servicing Servicing t000 From 38126419b803c6fd1946645aabff98aa239d2b79 Mon Sep 17 00:00:00 2001 From: Doug Bunting <6431421+dougbu@users.noreply.github.com> Date: Wed, 15 Jul 2020 12:02:45 -0700 Subject: [PATCH 002/106] Update branding to RC1 (#23943) --- eng/Versions.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 84ec8f51e6..25b336af38 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -9,14 +9,14 @@ 5 0 0 - 8 + 1 false release - preview - Preview $(PreReleaseVersionIteration) + rc + RC $(PreReleaseVersionIteration) true false $(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion) From 2293fc243bfdc7c9fbd547f7a7969e8e6b863a1d Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Wed, 15 Jul 2020 13:31:44 -0700 Subject: [PATCH 003/106] Add Razor Tooling Bug report issue template (#23961) * Add Razor Tooling Bug report issue template - Given we're going to start providing a new Razor tooling editor experience we expect our users to hit a number of issues. To optimize their path of filing an issue we're creating a bug template for them to use. In parallel we're also working with the VS report an issue tool to gather additioanl data so we can encourage users to go the typical "report a bug" route for VS scenarios. Fixes dotnet/aspnetcore#23551 * Addressed code review feedback. * More feedback. --- .github/ISSUE_TEMPLATE/razor_tooling.md | 66 +++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/razor_tooling.md diff --git a/.github/ISSUE_TEMPLATE/razor_tooling.md b/.github/ISSUE_TEMPLATE/razor_tooling.md new file mode 100644 index 0000000000..2341e230bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/razor_tooling.md @@ -0,0 +1,66 @@ +--- +name: 🐞 Razor Tooling Bug report +about: Report an issue about something that is not working in the new Razor tooling +labels: area-razor.tooling, feature-razor.vs +--- + + + + + +### Describe the bug +A clear and concise description of what the bug is. + +### To Reproduce + + +### Logs & Exceptions + +Please collect the data below before reporting your issue to aid us in diagnosing the root cause. + +#### Activity log +[Here](https://docs.microsoft.com/en-us/visualstudio/extensibility/how-to-use-the-activity-log?view=vs-2019#to-examine-the-activity-log) are the instructions on how to generate/acquire one. + +#### Razor Language Server Client log + +
+Razor Language Server Client Log Output + +Paste log output here + +
+ +#### HTML Language Server Client log + +
+HTML Language Server Client Log Output + +Paste log output here + +
+ +### Further technical details +- VS version (Help => About Microsoft Visual Studio, i.e. 16.8.0 Preview 1 30313.27...). If in Codespaces there will be two versions (server and client), please provide both. +- Scenario (Local, LiveShare, Codespaces) + +### Pre-requisite checklist +- [ ] Steps to reproduce the issue +- [ ] Visual Studio Activity Log attached. +- [ ] Razor Language Server client logs included. +- [ ] HTML Language Server client logs included From 49672ee4524be0203986beb7dfdd0beaeb3dd56e Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2020 21:34:40 +0000 Subject: [PATCH 004/106] Update dependencies from https://github.com/dotnet/efcore build 20200715.2 (#23970) Microsoft.EntityFrameworkCore.Tools , Microsoft.EntityFrameworkCore.SqlServer , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.InMemory From Version 5.0.0-preview.8.20360.8 -> To Version 5.0.0-preview.8.20365.2 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 28 ++++++++++++++-------------- eng/Versions.props | 14 +++++++------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 516f46414f..5eb918bc48 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -13,33 +13,33 @@ https://github.com/dotnet/blazor cc449601d638ffaab58ae9487f0fd010bb178a12 - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + ca2a793016c6980c943325c214f42602910d9991 - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + ca2a793016c6980c943325c214f42602910d9991 - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + ca2a793016c6980c943325c214f42602910d9991 - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + ca2a793016c6980c943325c214f42602910d9991 - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + ca2a793016c6980c943325c214f42602910d9991 - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + ca2a793016c6980c943325c214f42602910d9991 - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + ca2a793016c6980c943325c214f42602910d9991 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 25b336af38..540e9dff93 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -133,13 +133,13 @@ 3.2.0 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 + 5.0.0-preview.8.20365.2 + 5.0.0-preview.8.20365.2 + 5.0.0-preview.8.20365.2 + 5.0.0-preview.8.20365.2 + 5.0.0-preview.8.20365.2 + 5.0.0-preview.8.20365.2 + 5.0.0-preview.8.20365.2
true link + false + + + false + true + false + false + false / true @@ -414,7 +422,7 @@ Copyright (c) .NET Foundation. All rights reserved. Condition="'%(ResolvedFileToPublish.RelativePath)' != 'web.config' AND !$([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').Replace('\','/').StartsWith('wwwroot/'))" /> - + From 7f4af095f77063b8a81d1def6fe684c87382471c Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 15 Jul 2020 18:52:37 -0700 Subject: [PATCH 007/106] Add timeout to all awaits in GlobbingAppTests (#23938) --- .../dotnet-watch/test/GlobbingAppTests.cs | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/Tools/dotnet-watch/test/GlobbingAppTests.cs b/src/Tools/dotnet-watch/test/GlobbingAppTests.cs index e731247241..95224ea800 100644 --- a/src/Tools/dotnet-watch/test/GlobbingAppTests.cs +++ b/src/Tools/dotnet-watch/test/GlobbingAppTests.cs @@ -15,7 +15,10 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests { public class GlobbingAppTests : IDisposable { - private GlobbingApp _app; + private static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(60); + + private readonly GlobbingApp _app; + public GlobbingAppTests(ITestOutputHelper logger) { _app = new GlobbingApp(logger); @@ -28,17 +31,17 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests public async Task ChangeCompiledFile(bool usePollingWatcher) { _app.UsePollingWatcher = usePollingWatcher; - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); - var types = await _app.GetCompiledAppDefinedTypes(); + var types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(2, types); var fileToChange = Path.Combine(_app.SourceDirectory, "include", "Foo.cs"); var programCs = File.ReadAllText(fileToChange); File.WriteAllText(fileToChange, programCs); - await _app.HasRestarted(); - types = await _app.GetCompiledAppDefinedTypes(); + await _app.HasRestarted().TimeoutAfter(DefaultTimeout); + types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(2, types); } @@ -46,16 +49,16 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/23360", Queues = "Debian.9.Arm64;Debian.9.Arm64.Open;(Debian.9.Arm64.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036;(Debian.9.Arm64)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036")] public async Task DeleteCompiledFile() { - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); - var types = await _app.GetCompiledAppDefinedTypes(); + var types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(2, types); var fileToChange = Path.Combine(_app.SourceDirectory, "include", "Foo.cs"); File.Delete(fileToChange); - await _app.HasRestarted(); - types = await _app.GetCompiledAppDefinedTypes(); + await _app.HasRestarted().TimeoutAfter(DefaultTimeout); + types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(1, types); } @@ -63,16 +66,16 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/23360", Queues = "Debian.9.Arm64;Debian.9.Arm64.Open;(Debian.9.Arm64.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036;(Debian.9.Arm64)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036")] public async Task DeleteSourceFolder() { - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); - var types = await _app.GetCompiledAppDefinedTypes(); + var types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(2, types); var folderToDelete = Path.Combine(_app.SourceDirectory, "include"); Directory.Delete(folderToDelete, recursive: true); - await _app.HasRestarted(); - types = await _app.GetCompiledAppDefinedTypes(); + await _app.HasRestarted().TimeoutAfter(DefaultTimeout); + types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(1, types); } @@ -80,19 +83,19 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/23360", Queues = "Debian.9.Arm64;Debian.9.Arm64.Open;(Debian.9.Arm64.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036;(Debian.9.Arm64)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036")] public async Task RenameCompiledFile() { - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); var oldFile = Path.Combine(_app.SourceDirectory, "include", "Foo.cs"); var newFile = Path.Combine(_app.SourceDirectory, "include", "Foo_new.cs"); File.Move(oldFile, newFile); - await _app.HasRestarted(); + await _app.HasRestarted().TimeoutAfter(DefaultTimeout); } [Fact] public async Task ChangeExcludedFile() { - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); var changedFile = Path.Combine(_app.SourceDirectory, "exclude", "Baz.cs"); File.WriteAllText(changedFile, ""); @@ -105,11 +108,11 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests [Fact] public async Task ListsFiles() { - await _app.PrepareAsync(); + await _app.PrepareAsync().TimeoutAfter(DefaultTimeout); _app.Start(new[] { "--list" }); var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(30)); - var lines = await _app.Process.GetAllOutputLinesAsync(cts.Token); + var lines = await _app.Process.GetAllOutputLinesAsync(cts.Token).TimeoutAfter(DefaultTimeout); var files = lines.Where(l => !l.StartsWith("watch :")); AssertEx.EqualFileList( From 763ccb21b53f281fdb0ae4c894d9040b7b6223a3 Mon Sep 17 00:00:00 2001 From: Javier Calvarro Nelson Date: Thu, 16 Jul 2020 13:21:56 +0200 Subject: [PATCH 008/106] [Blazor] Async disposable support for Blazor (#23813) * [Blazor] Support IAsyncDisposable in components * Handles async disposal of components within the Blazor pipeline. * Renders remain synchronous and don't wait for disposal to complete. * Synchronous disposal executions remain inlined. * Async disposal executions can trigger renders in different batches. * Async disposals are handled individually and not grouped based on the batch they were generated on. --- AspNetCore.sln | 93 +++++++ .../Components/src/RenderTree/Renderer.cs | 39 ++- .../src/Rendering/ComponentState.cs | 35 ++- .../Components/test/RendererTest.cs | 257 +++++++++++++++++- .../ServerExecutionTests/PrerenderingTest.cs | 9 + .../AsyncDisposableComponent.razor | 11 + .../AsyncDisposalDuringInitialization.razor | 25 ++ 7 files changed, 461 insertions(+), 8 deletions(-) create mode 100644 src/Components/test/testassets/BasicTestApp/AsyncDisposableComponent.razor create mode 100644 src/Components/test/testassets/BasicTestApp/AsyncDisposalDuringInitialization.razor diff --git a/AspNetCore.sln b/AspNetCore.sln index ca9dfcf281..aea9643f47 100644 --- a/AspNetCore.sln +++ b/AspNetCore.sln @@ -1427,6 +1427,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Compon EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web.Extensions.Tests", "src\Components\Web.Extensions\test\Microsoft.AspNetCore.Components.Web.Extensions.Tests.csproj", "{157605CB-5170-4C1A-980F-4BAE42DB60DE}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{6126DCE4-9692-4EE2-B240-C65743572995}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BasicTestApp", "src\Components\test\testassets\BasicTestApp\BasicTestApp.csproj", "{46FB7E93-1294-4068-B80A-D4864F78277A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentsApp.App", "src\Components\test\testassets\ComponentsApp.App\ComponentsApp.App.csproj", "{25FA84DB-EEA7-4068-8E2D-F3D48B281C16}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentsApp.Server", "src\Components\test\testassets\ComponentsApp.Server\ComponentsApp.Server.csproj", "{19974360-4A63-425A-94DB-C2C940A3A97A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LazyTestContentPackage", "src\Components\test\testassets\LazyTestContentPackage\LazyTestContentPackage.csproj", "{ADF9C126-F322-4E34-AFD3-E626A4487206}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestContentPackage", "src\Components\test\testassets\TestContentPackage\TestContentPackage.csproj", "{3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Components.TestServer", "src\Components\test\testassets\TestServer\Components.TestServer.csproj", "{8A59AF88-4A82-46ED-977D-D909001F8107}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -6729,6 +6743,78 @@ Global {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x64.Build.0 = Release|Any CPU {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x86.ActiveCfg = Release|Any CPU {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x86.Build.0 = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x64.ActiveCfg = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x64.Build.0 = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x86.ActiveCfg = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x86.Build.0 = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|Any CPU.Build.0 = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x64.ActiveCfg = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x64.Build.0 = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x86.ActiveCfg = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x86.Build.0 = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x64.ActiveCfg = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x64.Build.0 = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x86.ActiveCfg = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x86.Build.0 = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|Any CPU.Build.0 = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x64.ActiveCfg = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x64.Build.0 = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x86.ActiveCfg = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x86.Build.0 = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x64.ActiveCfg = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x64.Build.0 = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x86.ActiveCfg = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x86.Build.0 = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|Any CPU.Build.0 = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x64.ActiveCfg = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x64.Build.0 = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x86.ActiveCfg = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x86.Build.0 = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x64.ActiveCfg = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x64.Build.0 = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x86.ActiveCfg = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x86.Build.0 = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|Any CPU.Build.0 = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x64.ActiveCfg = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x64.Build.0 = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x86.ActiveCfg = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x86.Build.0 = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x64.ActiveCfg = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x64.Build.0 = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x86.ActiveCfg = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x86.Build.0 = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|Any CPU.Build.0 = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x64.ActiveCfg = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x64.Build.0 = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x86.ActiveCfg = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x86.Build.0 = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x64.Build.0 = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x86.ActiveCfg = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x86.Build.0 = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|Any CPU.Build.0 = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x64.ActiveCfg = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x64.Build.0 = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x86.ActiveCfg = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -7444,6 +7530,13 @@ Global {F71FE795-9923-461B-9809-BB1821A276D0} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} {8294A74F-7DAA-4B69-BC56-7634D93C9693} = {F71FE795-9923-461B-9809-BB1821A276D0} {157605CB-5170-4C1A-980F-4BAE42DB60DE} = {F71FE795-9923-461B-9809-BB1821A276D0} + {6126DCE4-9692-4EE2-B240-C65743572995} = {0508E463-0269-40C9-B5C2-3B600FB2A28B} + {46FB7E93-1294-4068-B80A-D4864F78277A} = {6126DCE4-9692-4EE2-B240-C65743572995} + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16} = {6126DCE4-9692-4EE2-B240-C65743572995} + {19974360-4A63-425A-94DB-C2C940A3A97A} = {6126DCE4-9692-4EE2-B240-C65743572995} + {ADF9C126-F322-4E34-AFD3-E626A4487206} = {6126DCE4-9692-4EE2-B240-C65743572995} + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31} = {6126DCE4-9692-4EE2-B240-C65743572995} + {8A59AF88-4A82-46ED-977D-D909001F8107} = {6126DCE4-9692-4EE2-B240-C65743572995} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F} diff --git a/src/Components/Components/src/RenderTree/Renderer.cs b/src/Components/Components/src/RenderTree/Renderer.cs index 446243201f..e284e0c867 100644 --- a/src/Components/Components/src/RenderTree/Renderer.cs +++ b/src/Components/Components/src/RenderTree/Renderer.cs @@ -498,6 +498,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree { ProcessRenderQueue(); } + ComponentsProfiling.Instance.End(); } @@ -634,11 +635,43 @@ namespace Microsoft.AspNetCore.Components.RenderTree var disposeComponentId = _batchBuilder.ComponentDisposalQueue.Dequeue(); var disposeComponentState = GetRequiredComponentState(disposeComponentId); Log.DisposingComponent(_logger, disposeComponentState); - if (!disposeComponentState.TryDisposeInBatch(_batchBuilder, out var exception)) + if (!(disposeComponentState.Component is IAsyncDisposable)) { - exceptions ??= new List(); - exceptions.Add(exception); + if (!disposeComponentState.TryDisposeInBatch(_batchBuilder, out var exception)) + { + exceptions ??= new List(); + exceptions.Add(exception); + } } + else + { + var result = disposeComponentState.DisposeInBatchAsync(_batchBuilder); + if (result.IsCompleted) + { + if (!result.IsCompletedSuccessfully) + { + exceptions ??= new List(); + exceptions.Add(result.Exception); + } + } + else + { + AddToPendingTasks(GetHandledAsynchronousDisposalErrorsTask(result)); + + async Task GetHandledAsynchronousDisposalErrorsTask(Task result) + { + try + { + await result; + } + catch (Exception e) + { + HandleException(e); + } + } + } + } + _componentStateById.Remove(disposeComponentId); _batchBuilder.DisposedComponentIds.Append(disposeComponentId); } diff --git a/src/Components/Components/src/Rendering/ComponentState.cs b/src/Components/Components/src/Rendering/ComponentState.cs index 7b755efd5d..760d3b8d1a 100644 --- a/src/Components/Components/src/Rendering/ComponentState.cs +++ b/src/Components/Components/src/Rendering/ComponentState.cs @@ -101,6 +101,13 @@ namespace Microsoft.AspNetCore.Components.Rendering exception = ex; } + CleanupComponentStateResources(batchBuilder); + + return exception == null; + } + + private void CleanupComponentStateResources(RenderBatchBuilder batchBuilder) + { // We don't expect these things to throw. RenderTreeDiffBuilder.DisposeFrames(batchBuilder, CurrentRenderTree.GetFrames()); @@ -110,8 +117,6 @@ namespace Microsoft.AspNetCore.Components.Rendering } DisposeBuffers(); - - return exception == null; } // Callers expect this method to always return a faulted task. @@ -222,5 +227,31 @@ namespace Microsoft.AspNetCore.Components.Rendering ((IDisposable)CurrentRenderTree).Dispose(); _latestDirectParametersSnapshot?.Dispose(); } + + public Task DisposeInBatchAsync(RenderBatchBuilder batchBuilder) + { + _componentWasDisposed = true; + + CleanupComponentStateResources(batchBuilder); + + try + { + var result = ((IAsyncDisposable)Component).DisposeAsync(); + if (result.IsCompletedSuccessfully) + { + return Task.CompletedTask; + } + else + { + // We know we are dealing with an exception that happened asynchronously, so return a task + // to the caller so that he can unwrap it. + return result.AsTask(); + } + } + catch (Exception e) + { + return Task.FromException(e); + } + } } } diff --git a/src/Components/Components/test/RendererTest.cs b/src/Components/Components/test/RendererTest.cs index 07022b2edf..fa47f72842 100644 --- a/src/Components/Components/test/RendererTest.cs +++ b/src/Components/Components/test/RendererTest.cs @@ -487,7 +487,8 @@ namespace Microsoft.AspNetCore.Components.Test public void DispatchEventHandlesSynchronousExceptionsFromEventHandlers() { // Arrange: Render a component with an event handler - var renderer = new TestRenderer { + var renderer = new TestRenderer + { ShouldHandleExceptions = true }; @@ -2086,6 +2087,238 @@ namespace Microsoft.AspNetCore.Components.Test Assert.Contains(exception2, aex.InnerExceptions); } + [Fact] + public void RenderBatch_HandlesSynchronousExceptionsInAsyncDisposableComponents() + { + // Arrange + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + var exception1 = new InvalidOperationException(); + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(() => throw exception1)); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + var aex = Assert.IsType(Assert.Single(renderer.HandledExceptions)); + var innerException = Assert.Single(aex.Flatten().InnerExceptions); + Assert.Same(exception1, innerException); + } + + [Fact] + public void RenderBatch_CanDisposeSynchrounousAsyncDisposableImplementations() + { + // Arrange + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(() => default)); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + Assert.Empty(renderer.HandledExceptions); + } + + [Fact] + public void RenderBatch_CanDisposeAsynchronousAsyncDisposables() + { + // Arrange + var semaphore = new Semaphore(0, 1); + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + renderer.OnExceptionHandled = () => semaphore.Release(); + var exception1 = new InvalidOperationException(); + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(async () => { await tcs.Task; })); + builder.CloseComponent(); + } + }); + + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + Assert.Empty(renderer.HandledExceptions); + + // Continue execution + tcs.SetResult(); + Assert.False(semaphore.WaitOne(10)); + Assert.Empty(renderer.HandledExceptions); + } + + [Fact] + public void RenderBatch_HandlesAsynchronousExceptionsInAsyncDisposableComponents() + { + // Arrange + var semaphore = new Semaphore(0, 1); + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + renderer.OnExceptionHandled = () => semaphore.Release(); + var exception1 = new InvalidOperationException(); + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(async () => { await tcs.Task; throw exception1; })); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + Assert.Empty(renderer.HandledExceptions); + + // Continue execution + tcs.SetResult(); + semaphore.WaitOne(); + var aex = Assert.IsType(Assert.Single(renderer.HandledExceptions)); + Assert.Same(exception1, aex); + } + + [Fact] + public void RenderBatch_ReportsSynchronousCancelationsAsErrors() + { + // Arrange + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(() => throw new TaskCanceledException())); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + var aex = Assert.IsType(Assert.Single(renderer.HandledExceptions)); + Assert.IsType(Assert.Single(aex.Flatten().InnerExceptions)); + } + + [Fact] + public void RenderBatch_ReportsAsynchronousCancelationsAsErrors() + { + // Arrange + var semaphore = new Semaphore(0, 1); + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + renderer.OnExceptionHandled += () => semaphore.Release(); + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute( + 1, + nameof(AsyncDisposableComponent.AsyncDisposeAction), + (Func)(() => new ValueTask(tcs.Task))); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + Assert.Empty(renderer.HandledExceptions); + + // Cancel execution + tcs.SetCanceled(); + + semaphore.WaitOne(); + var aex = Assert.IsType(Assert.Single(renderer.HandledExceptions)); + } + [Fact] public void RenderBatch_DoesNotDisposeComponentMultipleTimes() { @@ -2589,7 +2822,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act: Toggle the checkbox var eventArgs = new ChangeEventArgs { Value = true }; - var renderTask = renderer.DispatchEventAsync(checkboxChangeEventHandlerId, eventArgs); + var renderTask = renderer.DispatchEventAsync(checkboxChangeEventHandlerId, eventArgs); Assert.True(renderTask.IsCompletedSuccessfully); var latestBatch = renderer.Batches.Last(); @@ -3768,7 +4001,7 @@ namespace Microsoft.AspNetCore.Components.Test requestedType => Assert.Equal(typeof(TestComponent), requestedType)); } - private class TestComponentActivator : IComponentActivator where TResult: IComponent, new() + private class TestComponentActivator : IComponentActivator where TResult : IComponent, new() { public List RequestedComponentTypes { get; } = new List(); @@ -4147,6 +4380,24 @@ namespace Microsoft.AspNetCore.Components.Test } } + private class AsyncDisposableComponent : AutoRenderComponent, IAsyncDisposable + { + public bool Disposed { get; private set; } + + [Parameter] + public Func AsyncDisposeAction { get; set; } + + public ValueTask DisposeAsync() + { + Disposed = true; + return AsyncDisposeAction == null ? default : AsyncDisposeAction.Invoke(); + } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + } + } + class TestAsyncRenderer : TestRenderer { public Task NextUpdateDisplayReturnTask { get; set; } diff --git a/src/Components/test/E2ETest/ServerExecutionTests/PrerenderingTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/PrerenderingTest.cs index a1c9e8e9b1..9d2f4e3b4e 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/PrerenderingTest.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/PrerenderingTest.cs @@ -44,6 +44,15 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests Browser.Equal("1", () => Browser.FindElement(By.Id("count")).Text); } + [Fact] + public void PrerenderingWaitsForAsyncDisposableComponents() + { + Navigate("/prerendered/prerendered-async-disposal"); + + // Prerendered output shows "not connected" + Browser.Equal("After async disposal", () => Browser.FindElement(By.Id("disposal-message")).Text); + } + [Fact] public void CanUseJSInteropFromOnAfterRenderAsync() { diff --git a/src/Components/test/testassets/BasicTestApp/AsyncDisposableComponent.razor b/src/Components/test/testassets/BasicTestApp/AsyncDisposableComponent.razor new file mode 100644 index 0000000000..70abb1c86d --- /dev/null +++ b/src/Components/test/testassets/BasicTestApp/AsyncDisposableComponent.razor @@ -0,0 +1,11 @@ +@implements IAsyncDisposable +@code{ + [Parameter] public EventCallback SetMessage { get; set; } + + public async ValueTask DisposeAsync() + { + await SetMessage.InvokeAsync("Before async disposal"); + await Task.Yield(); + await SetMessage.InvokeAsync("After async disposal"); + } +} diff --git a/src/Components/test/testassets/BasicTestApp/AsyncDisposalDuringInitialization.razor b/src/Components/test/testassets/BasicTestApp/AsyncDisposalDuringInitialization.razor new file mode 100644 index 0000000000..3a6b2eac8c --- /dev/null +++ b/src/Components/test/testassets/BasicTestApp/AsyncDisposalDuringInitialization.razor @@ -0,0 +1,25 @@ +@page "/prerendered-async-disposal" + +

+ This component shows that prerendering will work for components that implement IAsyncDisposable to finish + disposing before rendering the output as html. +

+ +

@_message

+ +@if (!_hideComponent) +{ + +} + +@code { + private bool _hideComponent = false; + private string _message = "Uninitialized"; + protected override async Task OnInitializedAsync() + { + await Task.Yield(); + _hideComponent = true; + } + + private void SetMessage(string message) => _message = message; +} From 410eb6db539dea66ac37afb2b8889952ce28f135 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 16 Jul 2020 06:57:05 -0700 Subject: [PATCH 009/106] Sync shared code from runtime (#24000) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../runtime/Quic/Implementations/Mock/MockConnection.cs | 4 ++-- src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Shared/runtime/Quic/Implementations/Mock/MockConnection.cs b/src/Shared/runtime/Quic/Implementations/Mock/MockConnection.cs index 361474bcb1..cba2f936ef 100644 --- a/src/Shared/runtime/Quic/Implementations/Mock/MockConnection.cs +++ b/src/Shared/runtime/Quic/Implementations/Mock/MockConnection.cs @@ -93,7 +93,7 @@ namespace System.Net.Quic.Implementations.Mock int bytesRead = 0; do { - bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None).ConfigureAwait(false); + bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None, cancellationToken).ConfigureAwait(false); } while (bytesRead != buffer.Length); int peerListenPort = BinaryPrimitives.ReadInt32LittleEndian(buffer); @@ -163,7 +163,7 @@ namespace System.Net.Quic.Implementations.Mock int bytesRead = 0; do { - bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None).ConfigureAwait(false); + bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None, cancellationToken).ConfigureAwait(false); } while (bytesRead != buffer.Length); long streamId = BinaryPrimitives.ReadInt64LittleEndian(buffer); diff --git a/src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs b/src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs index f4c0cfdf2c..e7b24548d2 100644 --- a/src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs +++ b/src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs @@ -45,7 +45,7 @@ namespace System.Net.Quic.Implementations.Mock int bytesRead = 0; do { - bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None).ConfigureAwait(false); + bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None, cancellationToken).ConfigureAwait(false); } while (bytesRead != buffer.Length); int peerListenPort = BinaryPrimitives.ReadInt32LittleEndian(buffer); From cee763b189e37ca082977537a18b572282798829 Mon Sep 17 00:00:00 2001 From: Michael Randers-Pehrson Date: Thu, 16 Jul 2020 10:44:16 -0400 Subject: [PATCH 010/106] [Blazor][Fixes #22895] Page header can be covered by other elements when there is a lot of content on the page (#24005) Adds z-index to top-row to avoid the header being covered by other elements --- src/Components/Samples/BlazorServerApp/wwwroot/css/site.css | 1 + .../content/BlazorServerWeb-CSharp/wwwroot/css/site.css | 1 + .../ComponentsWebAssembly-CSharp/Client/wwwroot/css/app.css | 1 + 3 files changed, 3 insertions(+) diff --git a/src/Components/Samples/BlazorServerApp/wwwroot/css/site.css b/src/Components/Samples/BlazorServerApp/wwwroot/css/site.css index c15c2e1556..bdca6fbfcb 100644 --- a/src/Components/Samples/BlazorServerApp/wwwroot/css/site.css +++ b/src/Components/Samples/BlazorServerApp/wwwroot/css/site.css @@ -24,6 +24,7 @@ app { height: 3.5rem; display: flex; align-items: center; + z-index: 10; } .main { diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css index 2ebdff93e6..dd1b08bd85 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css @@ -24,6 +24,7 @@ app { height: 3.5rem; display: flex; align-items: center; + z-index: 10; } .main { diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/wwwroot/css/app.css b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/wwwroot/css/app.css index 0c0c94d820..76b9667ff5 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/wwwroot/css/app.css +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/wwwroot/css/app.css @@ -24,6 +24,7 @@ app { height: 3.5rem; display: flex; align-items: center; + z-index: 10; } .main { From cf77999a3b6bdb9d861ca7bf157b1264d67f3130 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Thu, 16 Jul 2020 19:46:39 +0430 Subject: [PATCH 011/106] Dispost CancellationTokenSource in WebHostExtensions (#23969) --- .../Hosting/ref/Microsoft.AspNetCore.Hosting.netcoreapp.cs | 1 + src/Hosting/Hosting/src/WebHostExtensions.cs | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Hosting/Hosting/ref/Microsoft.AspNetCore.Hosting.netcoreapp.cs b/src/Hosting/Hosting/ref/Microsoft.AspNetCore.Hosting.netcoreapp.cs index b87c115dea..0ed621abe1 100644 --- a/src/Hosting/Hosting/ref/Microsoft.AspNetCore.Hosting.netcoreapp.cs +++ b/src/Hosting/Hosting/ref/Microsoft.AspNetCore.Hosting.netcoreapp.cs @@ -50,6 +50,7 @@ namespace Microsoft.AspNetCore.Hosting public static void Run(this Microsoft.AspNetCore.Hosting.IWebHost host) { } [System.Diagnostics.DebuggerStepThroughAttribute] public static System.Threading.Tasks.Task RunAsync(this Microsoft.AspNetCore.Hosting.IWebHost host, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) { throw null; } + [System.Diagnostics.DebuggerStepThroughAttribute] public static System.Threading.Tasks.Task StopAsync(this Microsoft.AspNetCore.Hosting.IWebHost host, System.TimeSpan timeout) { throw null; } public static void WaitForShutdown(this Microsoft.AspNetCore.Hosting.IWebHost host) { } [System.Diagnostics.DebuggerStepThroughAttribute] diff --git a/src/Hosting/Hosting/src/WebHostExtensions.cs b/src/Hosting/Hosting/src/WebHostExtensions.cs index b1b317272b..fe77b13443 100644 --- a/src/Hosting/Hosting/src/WebHostExtensions.cs +++ b/src/Hosting/Hosting/src/WebHostExtensions.cs @@ -19,9 +19,10 @@ namespace Microsoft.AspNetCore.Hosting /// The timeout for stopping gracefully. Once expired the /// server may terminate any remaining active connections. /// A that completes when the stops. - public static Task StopAsync(this IWebHost host, TimeSpan timeout) + public static async Task StopAsync(this IWebHost host, TimeSpan timeout) { - return host.StopAsync(new CancellationTokenSource(timeout).Token); + using var cts = new CancellationTokenSource(timeout); + await host.StopAsync(cts.Token); } /// From 2c66f9ee64553afc01f4839c169cee297b6376ed Mon Sep 17 00:00:00 2001 From: Adrian Wright Date: Thu, 16 Jul 2020 17:21:30 +0100 Subject: [PATCH 012/106] fix various minor spelling mistakes --- .../Components/src/Routing/OptionalTypeRouteConstraint.cs | 2 +- src/Components/Components/test/ParameterViewTest.Assignment.cs | 2 +- src/Components/Components/test/RendererTest.cs | 2 +- .../Components/test/Routing/RouteTableFactoryTests.cs | 2 +- src/Components/Components/test/Routing/RouterTest.cs | 2 +- src/Components/Server/test/Circuits/RemoteRendererTest.cs | 2 +- src/Shared/Components/ServerComponentSerializationSettings.cs | 2 +- .../test/Internal/Protocol/MessagePackHubProtocolTestBase.cs | 2 +- src/submodules/MessagePack-CSharp | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Components/Components/src/Routing/OptionalTypeRouteConstraint.cs b/src/Components/Components/src/Routing/OptionalTypeRouteConstraint.cs index 426b26b8f2..dcd0238ea4 100644 --- a/src/Components/Components/src/Routing/OptionalTypeRouteConstraint.cs +++ b/src/Components/Components/src/Routing/OptionalTypeRouteConstraint.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Components.Routing public override bool Match(string pathSegment, out object? convertedValue) { // Unset values are set to null in the Parameters object created in - // the RouteContext. To match this pattern, unset optional parmeters + // the RouteContext. To match this pattern, unset optional parameters // are converted to null. if (string.IsNullOrEmpty(pathSegment)) { diff --git a/src/Components/Components/test/ParameterViewTest.Assignment.cs b/src/Components/Components/test/ParameterViewTest.Assignment.cs index 7dd8537f4c..f7d170129d 100644 --- a/src/Components/Components/test/ParameterViewTest.Assignment.cs +++ b/src/Components/Components/test/ParameterViewTest.Assignment.cs @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Components } [Fact] - public void IncomingParameterMatchesOverridenParameter_ThatDoesNotHasAttribute() + public void IncomingParameterMatchesOverriddenParameter_ThatDoesNotHasAttribute() { // Test for https://github.com/dotnet/aspnetcore/issues/13162 // Arrange diff --git a/src/Components/Components/test/RendererTest.cs b/src/Components/Components/test/RendererTest.cs index fa47f72842..d1f8bb5623 100644 --- a/src/Components/Components/test/RendererTest.cs +++ b/src/Components/Components/test/RendererTest.cs @@ -2124,7 +2124,7 @@ namespace Microsoft.AspNetCore.Components.Test } [Fact] - public void RenderBatch_CanDisposeSynchrounousAsyncDisposableImplementations() + public void RenderBatch_CanDisposeSynchronousAsyncDisposableImplementations() { // Arrange var renderer = new TestRenderer { ShouldHandleExceptions = true }; diff --git a/src/Components/Components/test/Routing/RouteTableFactoryTests.cs b/src/Components/Components/test/Routing/RouteTableFactoryTests.cs index ec5370d578..f8893aa0a4 100644 --- a/src/Components/Components/test/Routing/RouteTableFactoryTests.cs +++ b/src/Components/Components/test/Routing/RouteTableFactoryTests.cs @@ -476,7 +476,7 @@ namespace Microsoft.AspNetCore.Components.Test.Routing [Fact] - public void PrefersLiteralTemplateOverParmeterizedTemplates() + public void PrefersLiteralTemplateOverParameterizedTemplates() { // Arrange var routeTable = new TestRouteTableBuilder() diff --git a/src/Components/Components/test/Routing/RouterTest.cs b/src/Components/Components/test/Routing/RouterTest.cs index d9476f3498..7e8a78b382 100644 --- a/src/Components/Components/test/Routing/RouterTest.cs +++ b/src/Components/Components/test/Routing/RouterTest.cs @@ -81,7 +81,7 @@ namespace Microsoft.AspNetCore.Components.Test.Routing var janTaskException = await Record.ExceptionAsync(() => janTask); var febTaskException = await Record.ExceptionAsync(() => febTask); - // Assert neither exceution threw an exception + // Assert neither execution threw an exception Assert.Null(janTaskException); Assert.Null(febTaskException); // Assert refresh should've only been called once for the second route diff --git a/src/Components/Server/test/Circuits/RemoteRendererTest.cs b/src/Components/Server/test/Circuits/RemoteRendererTest.cs index 19f2ff0034..063685d80f 100644 --- a/src/Components/Server/test/Circuits/RemoteRendererTest.cs +++ b/src/Components/Server/test/Circuits/RemoteRendererTest.cs @@ -296,7 +296,7 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering exceptions.Add(e); }; - // Receive the ack for the intial batch + // Receive the ack for the initial batch _ = renderer.OnRenderCompletedAsync(2, null); // Receive the ack for the second batch _ = renderer.OnRenderCompletedAsync(2, null); diff --git a/src/Shared/Components/ServerComponentSerializationSettings.cs b/src/Shared/Components/ServerComponentSerializationSettings.cs index 7aabb013b5..db061bf52a 100644 --- a/src/Shared/Components/ServerComponentSerializationSettings.cs +++ b/src/Shared/Components/ServerComponentSerializationSettings.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Components }; // This setting is not configurable, but realistically we don't expect an app to take more than 30 seconds from when - // it got rendrered to when the circuit got started, and having an expiration on the serialized server-components helps + // it got rendered to when the circuit got started, and having an expiration on the serialized server-components helps // prevent old payloads from being replayed. public static readonly TimeSpan DataExpiration = TimeSpan.FromMinutes(5); } diff --git a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTestBase.cs b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTestBase.cs index 0192641dad..8a3a9562b7 100644 --- a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTestBase.cs +++ b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTestBase.cs @@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol message: new InvocationMessage(null, "Target", new object[] { 42 }, new string[] { "__test_id__" }), binary: "lgGAwKZUYXJnZXSRKpGrX190ZXN0X2lkX18="), new ProtocolTestData( - name: "InvocationWithMulitpleStreams", + name: "InvocationWithMultipleStreams", message: new InvocationMessage(null, "Target", Array.Empty(), new string[] { "__test_id__", "__test_id2__" }), binary: "lgGAwKZUYXJnZXSQkqtfX3Rlc3RfaWRfX6xfX3Rlc3RfaWQyX18="), diff --git a/src/submodules/MessagePack-CSharp b/src/submodules/MessagePack-CSharp index a4a14ce447..df2a065423 160000 --- a/src/submodules/MessagePack-CSharp +++ b/src/submodules/MessagePack-CSharp @@ -1 +1 @@ -Subproject commit a4a14ce447e4ef694af1a485fb672db35e766111 +Subproject commit df2a065423545aa57ce7fafa1eefdd37c22ef1a5 From b8261dfe9d13bf87cbcf84885ed13effe431b8ee Mon Sep 17 00:00:00 2001 From: Josh Dadak Date: Thu, 16 Jul 2020 18:59:39 +0100 Subject: [PATCH 013/106] Return null in getCacheToUseIfEnabled when the protocol is not https (#24012) Addresses #23082 If served over http the cache is assumed compromised, this can happen when the page first loads over http before the https redirect. --- src/Components/Web.JS/dist/Release/blazor.webassembly.js | 2 +- .../Web.JS/src/Platform/WebAssemblyResourceLoader.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Components/Web.JS/dist/Release/blazor.webassembly.js b/src/Components/Web.JS/dist/Release/blazor.webassembly.js index e177aa1b24..1d85c8fd46 100644 --- a/src/Components/Web.JS/dist/Release/blazor.webassembly.js +++ b/src/Components/Web.JS/dist/Release/blazor.webassembly.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=45)}([,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){window.DotNet=e;var t=[],n={},r={},o=1,i=null;function a(e){t.push(e)}function s(e,t,n,r){var o=c();if(o.invokeDotNetFromJS){var i=JSON.stringify(r,m),a=o.invokeDotNetFromJS(e,t,n,i);return a?f(a):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead.")}function u(e,t,r,i){if(e&&r)throw new Error("For instance method calls, assemblyName should be null. Received '"+e+"'.");var a=o++,s=new Promise((function(e,t){n[a]={resolve:e,reject:t}}));try{var u=JSON.stringify(i,m);c().beginInvokeDotNetFromJS(a,e,t,r,u)}catch(e){l(a,!1,e)}return s}function c(){if(null!==i)return i;throw new Error("No .NET call dispatcher has been set.")}function l(e,t,r){if(!n.hasOwnProperty(e))throw new Error("There is no pending async call with ID "+e+".");var o=n[e];delete n[e],t?o.resolve(r):o.reject(r)}function f(e){return e?JSON.parse(e,(function(e,n){return t.reduce((function(t,n){return n(e,t)}),n)})):null}function d(e){return e instanceof Error?e.message+"\n"+e.stack:e?e.toString():"null"}function p(e){if(Object.prototype.hasOwnProperty.call(r,e))return r[e];var t,n=window,o="window";if(e.split(".").forEach((function(e){if(!(e in n))throw new Error("Could not find '"+e+"' in '"+o+"'.");t=n,n=n[e],o+="."+e})),n instanceof Function)return n=n.bind(t),r[e]=n,n;throw new Error("The value '"+o+"' is not a function.")}e.attachDispatcher=function(e){i=e},e.attachReviver=a,e.invokeMethod=function(e,t){for(var n=[],r=2;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(31),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),c=n(5),l=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){c.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus(),c.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),v=m+f.count(a),y=m;y0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(46),c=n(4),l=n(49),f=n(35),d=n(19),p=n(50),h=n(51),m=n(52),v=n(5),y=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(y)throw new Error("Blazor has already started.");return y=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){v.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}v.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),l.initializeProfiling((function(e){y("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,v=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),v.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function v(e){return e+12}function y(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(33),a=n(34);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],v=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,v,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(31),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),c=n(5),l=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){c.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus(),c.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),v=m+f.count(a),y=m;y0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(46),c=n(4),l=n(49),f=n(35),d=n(19),p=n(50),h=n(51),m=n(52),v=n(5),y=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(y)throw new Error("Blazor has already started.");return y=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){v.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}v.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),l.initializeProfiling((function(e){y("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,v=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),v.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function v(e){return e+12}function y(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(33),a=n(34);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],v=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,v,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] Date: Thu, 16 Jul 2020 14:31:15 -0400 Subject: [PATCH 014/106] Blazor: Add empty InvokeAsync() overload for EventCallback (#24021) Adds an empty InvokeAsync() overload for both EventCallback and EventCallbackOfT. Updated tests to simply use this new overload instead of InvokeAsync(null). Addresses #23603. --- ...rosoft.AspNetCore.Components.netcoreapp.cs | 2 ++ .../Components/src/EventCallback.cs | 7 ++++++ .../Components/src/EventCallbackOfT.cs | 7 ++++++ .../Components/test/EventCallbackTest.cs | 24 +++++++++---------- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netcoreapp.cs b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netcoreapp.cs index b6c4f834e2..beb27d0f0c 100644 --- a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netcoreapp.cs +++ b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netcoreapp.cs @@ -142,6 +142,7 @@ namespace Microsoft.AspNetCore.Components public static readonly Microsoft.AspNetCore.Components.EventCallbackFactory Factory; public EventCallback(Microsoft.AspNetCore.Components.IHandleEvent? receiver, System.MulticastDelegate? @delegate) { throw null; } public bool HasDelegate { get { throw null; } } + public System.Threading.Tasks.Task InvokeAsync() { throw null; } public System.Threading.Tasks.Task InvokeAsync(object arg) { throw null; } } public sealed partial class EventCallbackFactory @@ -217,6 +218,7 @@ namespace Microsoft.AspNetCore.Components public static readonly Microsoft.AspNetCore.Components.EventCallback Empty; public EventCallback(Microsoft.AspNetCore.Components.IHandleEvent? receiver, System.MulticastDelegate? @delegate) { throw null; } public bool HasDelegate { get { throw null; } } + public System.Threading.Tasks.Task InvokeAsync() { throw null; } public System.Threading.Tasks.Task InvokeAsync(TValue arg) { throw null; } } [System.AttributeUsageAttribute(System.AttributeTargets.Class, AllowMultiple=true, Inherited=true)] diff --git a/src/Components/Components/src/EventCallback.cs b/src/Components/Components/src/EventCallback.cs index 0acc823124..c053f810ab 100644 --- a/src/Components/Components/src/EventCallback.cs +++ b/src/Components/Components/src/EventCallback.cs @@ -61,6 +61,13 @@ namespace Microsoft.AspNetCore.Components return Receiver.HandleEventAsync(new EventCallbackWorkItem(Delegate), arg); } + /// + /// Invokes the delegate associated with this binding and dispatches an event notification to the + /// appropriate component. + /// + /// A which completes asynchronously once event processing has completed. + public Task InvokeAsync() => InvokeAsync(null!); + object? IEventCallback.UnpackForRenderTree() { return RequiresExplicitReceiver ? (object)this : Delegate; diff --git a/src/Components/Components/src/EventCallbackOfT.cs b/src/Components/Components/src/EventCallbackOfT.cs index 12072171fa..23f7888826 100644 --- a/src/Components/Components/src/EventCallbackOfT.cs +++ b/src/Components/Components/src/EventCallbackOfT.cs @@ -56,6 +56,13 @@ namespace Microsoft.AspNetCore.Components return Receiver.HandleEventAsync(new EventCallbackWorkItem(Delegate), arg); } + /// + /// Invokes the delegate associated with this binding and dispatches an event notification to the + /// appropriate component. + /// + /// A which completes asynchronously once event processing has completed. + public Task InvokeAsync() => InvokeAsync(default!); + internal EventCallback AsUntyped() { return new EventCallback(Receiver ?? Delegate?.Target as IHandleEvent, Delegate); diff --git a/src/Components/Components/test/EventCallbackTest.cs b/src/Components/Components/test/EventCallbackTest.cs index 25405c2180..57c2538e48 100644 --- a/src/Components/Components/test/EventCallbackTest.cs +++ b/src/Components/Components/test/EventCallbackTest.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Components var callback = default(EventCallback); // Act & Assert (Does not throw) - await callback.InvokeAsync(null); + await callback.InvokeAsync(); } [Fact] @@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Components var callback = default(EventCallback); // Act & Assert (Does not throw) - await callback.InvokeAsync(null); + await callback.InvokeAsync(); } @@ -39,7 +39,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(null, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -54,7 +54,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(null, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -297,7 +297,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -334,7 +334,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -373,7 +373,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -410,7 +410,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert From 30c33aad11f0a5771423b859ec946db840da42b5 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Thu, 16 Jul 2020 11:47:47 -0700 Subject: [PATCH 015/106] Quarantine flaky tests (#23995) --- .../BlazorTemplates.Tests/BlazorWasmTemplateTest.cs | 3 +++ src/ProjectTemplates/test/BaselineTest.cs | 3 ++- src/ProjectTemplates/test/MvcTemplateTest.cs | 1 + .../integrationtests/StaticWebAssetsIntegrationTest.cs | 1 + src/Tools/dotnet-watch/test/AppWithDepsTests.cs | 1 + 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs index decd986856..1a72d92d54 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs @@ -132,6 +132,7 @@ namespace Templates.Test } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23992")] public async Task BlazorWasmStandalonePwaTemplate_Works() { var project = await ProjectFactory.GetOrCreateProject("blazorstandalonepwa", Output); @@ -251,6 +252,7 @@ namespace Templates.Test } [ConditionalFact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23992")] // LocalDB doesn't work on non Windows platforms [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] public Task BlazorWasmHostedTemplate_IndividualAuth_Works_WithLocalDB() @@ -259,6 +261,7 @@ namespace Templates.Test } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23992")] public Task BlazorWasmHostedTemplate_IndividualAuth_Works_WithOutLocalDB() { return BlazorWasmHostedTemplate_IndividualAuth_Works(false); diff --git a/src/ProjectTemplates/test/BaselineTest.cs b/src/ProjectTemplates/test/BaselineTest.cs index 243d13d67f..eabacc336d 100644 --- a/src/ProjectTemplates/test/BaselineTest.cs +++ b/src/ProjectTemplates/test/BaselineTest.cs @@ -71,6 +71,7 @@ namespace Templates.Test [Theory] [MemberData(nameof(TemplateBaselines))] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23993")] public async Task Template_Produces_The_Right_Set_Of_FilesAsync(string arguments, string[] expectedFiles) { Project = await ProjectFactory.GetOrCreateProject("baseline" + SanitizeArgs(arguments), Output); @@ -151,4 +152,4 @@ namespace Templates.Test } } } -} \ No newline at end of file +} diff --git a/src/ProjectTemplates/test/MvcTemplateTest.cs b/src/ProjectTemplates/test/MvcTemplateTest.cs index 3bcb51416a..c88493ccd1 100644 --- a/src/ProjectTemplates/test/MvcTemplateTest.cs +++ b/src/ProjectTemplates/test/MvcTemplateTest.cs @@ -223,6 +223,7 @@ namespace Templates.Test } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23993")] public async Task MvcTemplate_RazorRuntimeCompilation_BuildsAndPublishes() { Project = await ProjectFactory.GetOrCreateProject("mvc_rc", Output); diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs index 49d2172f6e..63c0afee0f 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs @@ -82,6 +82,7 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests } [ConditionalFact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/18543")] [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] [InitializeTestProject("AppWithPackageAndP2PReferenceAndRID", additionalProjects: new[] { "ClassLibrary", "ClassLibrary2" })] public async Task Publish_CopiesStaticWebAssetsToDestinationFolder_PublishSingleFile() diff --git a/src/Tools/dotnet-watch/test/AppWithDepsTests.cs b/src/Tools/dotnet-watch/test/AppWithDepsTests.cs index bef740ad10..b4f9510ad9 100644 --- a/src/Tools/dotnet-watch/test/AppWithDepsTests.cs +++ b/src/Tools/dotnet-watch/test/AppWithDepsTests.cs @@ -20,6 +20,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests } [ConditionalFact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23994")] [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/23360", Queues = "Windows.10.Arm64;Windows.10.Arm64.Open;Debian.9.Arm64;Debian.9.Arm64.Open;(Debian.9.Arm64.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036;(Debian.9.Arm64)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036")] public async Task ChangeFileInDependency() { From bbb5bb7755ef4de4f8832feda095f08db3f220c1 Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Thu, 16 Jul 2020 19:24:32 +0000 Subject: [PATCH 016/106] Update setup instructions in BuildFromSource (#24025) --- docs/BuildFromSource.md | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/docs/BuildFromSource.md b/docs/BuildFromSource.md index 4fe7763153..95b08ab146 100644 --- a/docs/BuildFromSource.md +++ b/docs/BuildFromSource.md @@ -4,6 +4,22 @@ Building ASP.NET Core from source allows you to tweak and customize ASP.NET Core See for known issues and to track ongoing work. +## Clone the source code + +ASP.NET Core uses git submodules to include the source from a few other projects. + +For a new copy of the project, run: + +```ps1 +git clone --recursive https://github.com/dotnet/aspnetcore +``` + +To update an existing copy, run: + +```ps1 +git submodule update --init --recursive +``` + ## Install pre-requisites ### Windows @@ -52,22 +68,6 @@ Building ASP.NET Core on macOS or Linux requires: * OpenJDK * Oracle's JDK -## Clone the source code - -ASP.NET Core uses git submodules to include the source from a few other projects. - -For a new copy of the project, run: - -```ps1 -git clone --recursive https://github.com/dotnet/aspnetcore -``` - -To update an existing copy, run: - -```ps1 -git submodule update --init --recursive -``` - **NOTE** some ISPs have been know to use web filtering software that has caused issues with git repository cloning, if you experience issues cloning this repo please review ## Building in Visual Studio @@ -86,6 +86,9 @@ Before opening our .sln/.slnf files in Visual Studio or VS Code, you need to per > :bulb: Pro tip: you will also want to run this command after pulling large sets of changes. On the master > branch, we regularly update the versions of .NET Core SDK required to build the repo. > You will need to restart Visual Studio every time we update the .NET Core SDK. + > To allow executing the setup script, you may need to update the execution policy on your machine. + You can do so by running the `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser` command + in PowerShell. For more information on execution policies, you can read the [execution policy docs](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy). 2. Use the `startvs.cmd` script to open Visual Studio .sln/.slnf files. This script first sets the required environment variables. From 615e70bf844234e77ab597942c1f7763a3e54258 Mon Sep 17 00:00:00 2001 From: Adrian Wright <47532258+adrianwright109@users.noreply.github.com> Date: Thu, 16 Jul 2020 20:30:10 +0100 Subject: [PATCH 017/106] Update src/Components/Components/test/ParameterViewTest.Assignment.cs Co-authored-by: Steve Sanderson --- src/Components/Components/test/ParameterViewTest.Assignment.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Components/test/ParameterViewTest.Assignment.cs b/src/Components/Components/test/ParameterViewTest.Assignment.cs index f7d170129d..8e2fb5d600 100644 --- a/src/Components/Components/test/ParameterViewTest.Assignment.cs +++ b/src/Components/Components/test/ParameterViewTest.Assignment.cs @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Components } [Fact] - public void IncomingParameterMatchesOverriddenParameter_ThatDoesNotHasAttribute() + public void IncomingParameterMatchesOverriddenParameter_ThatDoesNotHaveAttribute() { // Test for https://github.com/dotnet/aspnetcore/issues/13162 // Arrange From b8a0fa74dcd41d43880fcaf2b35c532787c84ddf Mon Sep 17 00:00:00 2001 From: Keiichi IGUCHI Date: Fri, 17 Jul 2020 04:43:38 +0900 Subject: [PATCH 018/106] arcade requires MSBuild 16.3 (#21878) --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 974708a611..023704b7ac 100644 --- a/global.json +++ b/global.json @@ -15,7 +15,7 @@ "Git": "2.22.0", "jdk": "11.0.3", "vs": { - "version": "16.0", + "version": "16.3", "components": [ "Microsoft.VisualStudio.Component.VC.ATL", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", From 5b10c2d1fa50dee0b3ba127273aa5cc184d40b68 Mon Sep 17 00:00:00 2001 From: Adrian Wright Date: Thu, 16 Jul 2020 22:23:55 +0100 Subject: [PATCH 019/106] undo changes to submodule --- src/submodules/MessagePack-CSharp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/submodules/MessagePack-CSharp b/src/submodules/MessagePack-CSharp index df2a065423..a4a14ce447 160000 --- a/src/submodules/MessagePack-CSharp +++ b/src/submodules/MessagePack-CSharp @@ -1 +1 @@ -Subproject commit df2a065423545aa57ce7fafa1eefdd37c22ef1a5 +Subproject commit a4a14ce447e4ef694af1a485fb672db35e766111 From 5bc2c49ed560663c57198df3c6e92273c319173b Mon Sep 17 00:00:00 2001 From: Haytam Zanid <34218324+zHaytam@users.noreply.github.com> Date: Thu, 16 Jul 2020 23:08:09 +0100 Subject: [PATCH 020/106] Add DisplayName to inputs (#24029) Add a `DisplayName` parameter to `InputBase`, which is used in validation messages instead of `FieldIdentifier.FieldName`. - This works for `InputDate`, `InputNumber` and `InputSelect`. - Extracted some shared code, just like what @StephanZahariev did in his PR. Addresses #11414 --- ...ft.AspNetCore.Components.Web.netcoreapp.cs | 2 + src/Components/Web/src/Forms/InputBase.cs | 6 ++ src/Components/Web/src/Forms/InputDate.cs | 2 +- .../Web/src/Forms/InputExtensions.cs | 2 +- src/Components/Web/src/Forms/InputNumber.cs | 2 +- .../Web/test/Forms/InputBaseTest.cs | 78 +++------------ .../Web/test/Forms/InputDateTest.cs | 56 +++++++++++ .../Web/test/Forms/InputNumberTest.cs | 55 +++++++++++ .../Web/test/Forms/InputRenderer.cs | 29 ++++++ .../Web/test/Forms/InputSelectTest.cs | 97 +++++++++---------- .../Web/test/Forms/TestInputHostComponent.cs | 41 ++++++++ 11 files changed, 253 insertions(+), 117 deletions(-) create mode 100644 src/Components/Web/test/Forms/InputDateTest.cs create mode 100644 src/Components/Web/test/Forms/InputNumberTest.cs create mode 100644 src/Components/Web/test/Forms/InputRenderer.cs create mode 100644 src/Components/Web/test/Forms/TestInputHostComponent.cs diff --git a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs index 795dbe6ea3..14ff4f7367 100644 --- a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs +++ b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs @@ -60,6 +60,8 @@ namespace Microsoft.AspNetCore.Components.Forms [System.Diagnostics.CodeAnalysis.AllowNullAttribute] protected TValue CurrentValue { get { throw null; } set { } } protected string? CurrentValueAsString { get { throw null; } set { } } + [Microsoft.AspNetCore.Components.ParameterAttribute] + public string? DisplayName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } protected Microsoft.AspNetCore.Components.Forms.EditContext EditContext { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } protected internal Microsoft.AspNetCore.Components.Forms.FieldIdentifier FieldIdentifier { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] diff --git a/src/Components/Web/src/Forms/InputBase.cs b/src/Components/Web/src/Forms/InputBase.cs index 5a8fceecf8..08fd03c92a 100644 --- a/src/Components/Web/src/Forms/InputBase.cs +++ b/src/Components/Web/src/Forms/InputBase.cs @@ -50,6 +50,12 @@ namespace Microsoft.AspNetCore.Components.Forms /// [Parameter] public Expression>? ValueExpression { get; set; } + /// + /// Gets or sets the display name for this field. + /// This value is used when generating error messages when the input value fails to parse correctly. + /// + [Parameter] public string? DisplayName { get; set; } + /// /// Gets the associated . /// diff --git a/src/Components/Web/src/Forms/InputDate.cs b/src/Components/Web/src/Forms/InputDate.cs index e7132988b9..4372646c7b 100644 --- a/src/Components/Web/src/Forms/InputDate.cs +++ b/src/Components/Web/src/Forms/InputDate.cs @@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Components.Forms } else { - validationErrorMessage = string.Format(ParsingErrorMessage, FieldIdentifier.FieldName); + validationErrorMessage = string.Format(ParsingErrorMessage, DisplayName ?? FieldIdentifier.FieldName); return false; } } diff --git a/src/Components/Web/src/Forms/InputExtensions.cs b/src/Components/Web/src/Forms/InputExtensions.cs index a1ace92141..748af5c78e 100644 --- a/src/Components/Web/src/Forms/InputExtensions.cs +++ b/src/Components/Web/src/Forms/InputExtensions.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Components.Forms else { result = default; - validationErrorMessage = $"The {input.FieldIdentifier.FieldName} field is not valid."; + validationErrorMessage = $"The {input.DisplayName ?? input.FieldIdentifier.FieldName} field is not valid."; return false; } } diff --git a/src/Components/Web/src/Forms/InputNumber.cs b/src/Components/Web/src/Forms/InputNumber.cs index 515fc5ceac..51ac2c5241 100644 --- a/src/Components/Web/src/Forms/InputNumber.cs +++ b/src/Components/Web/src/Forms/InputNumber.cs @@ -64,7 +64,7 @@ namespace Microsoft.AspNetCore.Components.Forms } else { - validationErrorMessage = string.Format(ParsingErrorMessage, FieldIdentifier.FieldName); + validationErrorMessage = string.Format(ParsingErrorMessage, DisplayName ?? FieldIdentifier.FieldName); return false; } } diff --git a/src/Components/Web/test/Forms/InputBaseTest.cs b/src/Components/Web/test/Forms/InputBaseTest.cs index 26464b8386..6a8da5ca76 100644 --- a/src/Components/Web/test/Forms/InputBaseTest.cs +++ b/src/Components/Web/test/Forms/InputBaseTest.cs @@ -4,10 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; using System.Threading.Tasks; -using Microsoft.AspNetCore.Components.Rendering; -using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.AspNetCore.Components.Test.Helpers; using Xunit; @@ -35,7 +32,7 @@ namespace Microsoft.AspNetCore.Components.Forms // Arrange var model = new TestModel(); var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.StringProperty }; - await RenderAndGetTestInputComponentAsync(rootComponent); + await InputRenderer.RenderAndGetComponent(rootComponent); // Act/Assert rootComponent.EditContext = new EditContext(model); @@ -51,7 +48,7 @@ namespace Microsoft.AspNetCore.Components.Forms var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model) }; // Act/Assert - var ex = await Assert.ThrowsAsync(() => RenderAndGetTestInputComponentAsync(rootComponent)); + var ex = await Assert.ThrowsAsync(() => InputRenderer.RenderAndGetComponent(rootComponent)); Assert.Contains($"{typeof(TestInputComponent)} requires a value for the 'ValueExpression' parameter. Normally this is provided automatically when using 'bind-Value'.", ex.Message); } @@ -68,7 +65,7 @@ namespace Microsoft.AspNetCore.Components.Forms }; // Act - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Assert Assert.Equal("some value", inputComponent.CurrentValue); @@ -87,7 +84,7 @@ namespace Microsoft.AspNetCore.Components.Forms }; // Act - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Assert Assert.Same(rootComponent.EditContext, inputComponent.EditContext); @@ -106,7 +103,7 @@ namespace Microsoft.AspNetCore.Components.Forms }; // Act - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Assert Assert.Equal(FieldIdentifier.Create(() => model.StringProperty), inputComponent.FieldIdentifier); @@ -123,7 +120,7 @@ namespace Microsoft.AspNetCore.Components.Forms Value = "initial value", ValueExpression = () => model.StringProperty }; - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); Assert.Equal("initial value", inputComponent.CurrentValue); // Act @@ -146,7 +143,7 @@ namespace Microsoft.AspNetCore.Components.Forms ValueChanged = val => valueChangedCallLog.Add(val), ValueExpression = () => model.StringProperty }; - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); Assert.Empty(valueChangedCallLog); // Act @@ -169,7 +166,7 @@ namespace Microsoft.AspNetCore.Components.Forms ValueChanged = val => valueChangedCallLog.Add(val), ValueExpression = () => model.StringProperty }; - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); Assert.Empty(valueChangedCallLog); // Act @@ -190,7 +187,7 @@ namespace Microsoft.AspNetCore.Components.Forms Value = "initial value", ValueExpression = () => model.StringProperty }; - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); Assert.False(rootComponent.EditContext.IsModified(() => model.StringProperty)); // Act @@ -213,7 +210,7 @@ namespace Microsoft.AspNetCore.Components.Forms var fieldIdentifier = FieldIdentifier.Create(() => model.StringProperty); // Act/Assert: Initially, it's valid and unmodified - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); Assert.Equal("valid", inputComponent.CssClass); // no Class was specified // Act/Assert: Modify the field @@ -251,7 +248,7 @@ namespace Microsoft.AspNetCore.Components.Forms var fieldIdentifier = FieldIdentifier.Create(() => model.StringProperty); // Act/Assert - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); Assert.Equal("my-class other-class valid", inputComponent.CssClass); // Act/Assert: Retains custom class when changing field class @@ -270,7 +267,7 @@ namespace Microsoft.AspNetCore.Components.Forms Value = new DateTime(1915, 3, 2), ValueExpression = () => model.DateProperty }; - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act/Assert Assert.Equal("1915/03/02", inputComponent.CurrentValueAsString); @@ -289,7 +286,7 @@ namespace Microsoft.AspNetCore.Components.Forms ValueExpression = () => model.DateProperty }; var fieldIdentifier = FieldIdentifier.Create(() => model.DateProperty); - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); var numValidationStateChanges = 0; rootComponent.EditContext.OnValidationStateChanged += (sender, eventArgs) => { numValidationStateChanges++; }; @@ -319,7 +316,7 @@ namespace Microsoft.AspNetCore.Components.Forms ValueExpression = () => model.DateProperty }; var fieldIdentifier = FieldIdentifier.Create(() => model.DateProperty); - var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); var numValidationStateChanges = 0; rootComponent.EditContext.OnValidationStateChanged += (sender, eventArgs) => { numValidationStateChanges++; }; @@ -470,21 +467,6 @@ namespace Microsoft.AspNetCore.Components.Forms Assert.Equal("userSpecifiedValue", component.AdditionalAttributes["aria-invalid"]); } - private static TComponent FindComponent(CapturedBatch batch) - => batch.ReferenceFrames - .Where(f => f.FrameType == RenderTreeFrameType.Component) - .Select(f => f.Component) - .OfType() - .Single(); - - private static async Task RenderAndGetTestInputComponentAsync(TestInputHostComponent hostComponent) where TComponent : TestInputComponent - { - var testRenderer = new TestRenderer(); - var componentId = testRenderer.AssignRootComponentId(hostComponent); - await testRenderer.RenderRootComponentAsync(componentId); - return FindComponent(testRenderer.Batches.Single()); - } - class TestModel { public string StringProperty { get; set; } @@ -530,7 +512,7 @@ namespace Microsoft.AspNetCore.Components.Forms } } - class TestDateInputComponent : TestInputComponent + private class TestDateInputComponent : TestInputComponent { protected override string FormatValueAsString(DateTime value) => value.ToString("yyyy/MM/dd"); @@ -549,35 +531,5 @@ namespace Microsoft.AspNetCore.Components.Forms } } } - - class TestInputHostComponent : AutoRenderComponent where TComponent : TestInputComponent - { - public Dictionary AdditionalAttributes { get; set; } - - public EditContext EditContext { get; set; } - - public TValue Value { get; set; } - - public Action ValueChanged { get; set; } - - public Expression> ValueExpression { get; set; } - - protected override void BuildRenderTree(RenderTreeBuilder builder) - { - builder.OpenComponent>(0); - builder.AddAttribute(1, "Value", EditContext); - builder.AddAttribute(2, "ChildContent", new RenderFragment(childBuilder => - { - childBuilder.OpenComponent(0); - childBuilder.AddAttribute(0, "Value", Value); - childBuilder.AddAttribute(1, "ValueChanged", - EventCallback.Factory.Create(this, ValueChanged)); - childBuilder.AddAttribute(2, "ValueExpression", ValueExpression); - childBuilder.AddMultipleAttributes(3, AdditionalAttributes); - childBuilder.CloseComponent(); - })); - builder.CloseComponent(); - } - } } } diff --git a/src/Components/Web/test/Forms/InputDateTest.cs b/src/Components/Web/test/Forms/InputDateTest.cs new file mode 100644 index 0000000000..9c6f87b832 --- /dev/null +++ b/src/Components/Web/test/Forms/InputDateTest.cs @@ -0,0 +1,56 @@ +// 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 System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.AspNetCore.Components.Forms +{ + public class InputDateTest + { + [Fact] + public async Task ValidationErrorUsesDisplayAttributeName() + { + // Arrange + var model = new TestModel(); + var rootComponent = new TestInputHostComponent + { + EditContext = new EditContext(model), + ValueExpression = () => model.DateProperty, + AdditionalAttributes = new Dictionary + { + { "DisplayName", "Date property" } + } + }; + var fieldIdentifier = FieldIdentifier.Create(() => model.DateProperty); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); + + // Act + await inputComponent.SetCurrentValueAsStringAsync("invalidDate"); + + // Assert + var validationMessages = rootComponent.EditContext.GetValidationMessages(fieldIdentifier); + Assert.NotEmpty(validationMessages); + Assert.Contains("The Date property field must be a date.", validationMessages); + } + + private class TestModel + { + public DateTime DateProperty { get; set; } + } + + private class TestInputDateComponent : InputDate + { + public async Task SetCurrentValueAsStringAsync(string value) + { + // This is equivalent to the subclass writing to CurrentValueAsString + // (e.g., from @bind), except to simplify the test code there's an InvokeAsync + // here. In production code it wouldn't normally be required because @bind + // calls run on the sync context anyway. + await InvokeAsync(() => { base.CurrentValueAsString = value; }); + } + } + } +} diff --git a/src/Components/Web/test/Forms/InputNumberTest.cs b/src/Components/Web/test/Forms/InputNumberTest.cs new file mode 100644 index 0000000000..6916f0e06e --- /dev/null +++ b/src/Components/Web/test/Forms/InputNumberTest.cs @@ -0,0 +1,55 @@ +// 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 System.Collections.Generic; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.AspNetCore.Components.Forms +{ + public class InputNumberTest + { + [Fact] + public async Task ValidationErrorUsesDisplayAttributeName() + { + // Arrange + var model = new TestModel(); + var rootComponent = new TestInputHostComponent + { + EditContext = new EditContext(model), + ValueExpression = () => model.SomeNumber, + AdditionalAttributes = new Dictionary + { + { "DisplayName", "Some number" } + } + }; + var fieldIdentifier = FieldIdentifier.Create(() => model.SomeNumber); + var inputComponent = await InputRenderer.RenderAndGetComponent(rootComponent); + + // Act + await inputComponent.SetCurrentValueAsStringAsync("notANumber"); + + // Assert + var validationMessages = rootComponent.EditContext.GetValidationMessages(fieldIdentifier); + Assert.NotEmpty(validationMessages); + Assert.Contains("The Some number field must be a number.", validationMessages); + } + + private class TestModel + { + public int SomeNumber { get; set; } + } + + private class TestInputNumberComponent : InputNumber + { + public async Task SetCurrentValueAsStringAsync(string value) + { + // This is equivalent to the subclass writing to CurrentValueAsString + // (e.g., from @bind), except to simplify the test code there's an InvokeAsync + // here. In production code it wouldn't normally be required because @bind + // calls run on the sync context anyway. + await InvokeAsync(() => { base.CurrentValueAsString = value; }); + } + } + } +} diff --git a/src/Components/Web/test/Forms/InputRenderer.cs b/src/Components/Web/test/Forms/InputRenderer.cs new file mode 100644 index 0000000000..3c83981915 --- /dev/null +++ b/src/Components/Web/test/Forms/InputRenderer.cs @@ -0,0 +1,29 @@ +// 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 System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.AspNetCore.Components.Test.Helpers; + +namespace Microsoft.AspNetCore.Components.Forms +{ + internal static class InputRenderer + { + public static async Task RenderAndGetComponent(TestInputHostComponent hostComponent) + where TComponent : InputBase + { + var testRenderer = new TestRenderer(); + var componentId = testRenderer.AssignRootComponentId(hostComponent); + await testRenderer.RenderRootComponentAsync(componentId); + return FindComponent(testRenderer.Batches.Single()); + } + + private static TComponent FindComponent(CapturedBatch batch) + => batch.ReferenceFrames + .Where(f => f.FrameType == RenderTreeFrameType.Component) + .Select(f => f.Component) + .OfType() + .Single(); + } +} diff --git a/src/Components/Web/test/Forms/InputSelectTest.cs b/src/Components/Web/test/Forms/InputSelectTest.cs index 65c3351e5e..8945867fd0 100644 --- a/src/Components/Web/test/Forms/InputSelectTest.cs +++ b/src/Components/Web/test/Forms/InputSelectTest.cs @@ -2,12 +2,8 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Linq; -using System.Linq.Expressions; +using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.AspNetCore.Components.Rendering; -using Microsoft.AspNetCore.Components.RenderTree; -using Microsoft.AspNetCore.Components.Test.Helpers; using Xunit; namespace Microsoft.AspNetCore.Components.Forms @@ -19,12 +15,12 @@ namespace Microsoft.AspNetCore.Components.Forms { // Arrange var model = new TestModel(); - var rootComponent = new TestInputSelectHostComponent + var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.NotNullableEnum }; - var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act inputSelectComponent.CurrentValueAsString = "Two"; @@ -38,12 +34,12 @@ namespace Microsoft.AspNetCore.Components.Forms { // Arrange var model = new TestModel(); - var rootComponent = new TestInputSelectHostComponent + var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.NotNullableEnum }; - var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act inputSelectComponent.CurrentValueAsString = ""; @@ -57,12 +53,12 @@ namespace Microsoft.AspNetCore.Components.Forms { // Arrange var model = new TestModel(); - var rootComponent = new TestInputSelectHostComponent + var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.NullableEnum }; - var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act inputSelectComponent.CurrentValueAsString = "Two"; @@ -76,12 +72,12 @@ namespace Microsoft.AspNetCore.Components.Forms { // Arrange var model = new TestModel(); - var rootComponent = new TestInputSelectHostComponent + var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.NullableEnum }; - var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act inputSelectComponent.CurrentValueAsString = ""; @@ -96,12 +92,12 @@ namespace Microsoft.AspNetCore.Components.Forms { // Arrange var model = new TestModel(); - var rootComponent = new TestInputSelectHostComponent + var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.NotNullableGuid }; - var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act var guid = Guid.NewGuid(); @@ -117,12 +113,12 @@ namespace Microsoft.AspNetCore.Components.Forms { // Arrange var model = new TestModel(); - var rootComponent = new TestInputSelectHostComponent + var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.NullableGuid }; - var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act var guid = Guid.NewGuid(); @@ -138,12 +134,12 @@ namespace Microsoft.AspNetCore.Components.Forms { // Arrange var model = new TestModel(); - var rootComponent = new TestInputSelectHostComponent + var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.NotNullableInt }; - var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act inputSelectComponent.CurrentValueAsString = "42"; @@ -158,12 +154,12 @@ namespace Microsoft.AspNetCore.Components.Forms { // Arrange var model = new TestModel(); - var rootComponent = new TestInputSelectHostComponent + var rootComponent = new TestInputHostComponent> { EditContext = new EditContext(model), ValueExpression = () => model.NullableInt }; - var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); // Act inputSelectComponent.CurrentValueAsString = "42"; @@ -172,19 +168,30 @@ namespace Microsoft.AspNetCore.Components.Forms Assert.Equal(42, inputSelectComponent.CurrentValue); } - private static TestInputSelect FindInputSelectComponent(CapturedBatch batch) - => batch.ReferenceFrames - .Where(f => f.FrameType == RenderTreeFrameType.Component) - .Select(f => f.Component) - .OfType>() - .Single(); - - private static async Task> RenderAndGetTestInputComponentAsync(TestInputSelectHostComponent hostComponent) + [Fact] + public async Task ValidationErrorUsesDisplayAttributeName() { - var testRenderer = new TestRenderer(); - var componentId = testRenderer.AssignRootComponentId(hostComponent); - await testRenderer.RenderRootComponentAsync(componentId); - return FindInputSelectComponent(testRenderer.Batches.Single()); + // Arrange + var model = new TestModel(); + var rootComponent = new TestInputHostComponent> + { + EditContext = new EditContext(model), + ValueExpression = () => model.NotNullableInt, + AdditionalAttributes = new Dictionary + { + { "DisplayName", "Some number" } + } + }; + var fieldIdentifier = FieldIdentifier.Create(() => model.NotNullableInt); + var inputSelectComponent = await InputRenderer.RenderAndGetComponent(rootComponent); + + // Act + await inputSelectComponent.SetCurrentValueAsStringAsync("invalidNumber"); + + // Assert + var validationMessages = rootComponent.EditContext.GetValidationMessages(fieldIdentifier); + Assert.NotEmpty(validationMessages); + Assert.Contains("The Some number field is not valid.", validationMessages); } enum TestEnum @@ -218,25 +225,13 @@ namespace Microsoft.AspNetCore.Components.Forms get => base.CurrentValueAsString; set => base.CurrentValueAsString = value; } - } - - class TestInputSelectHostComponent : AutoRenderComponent - { - public EditContext EditContext { get; set; } - - public Expression> ValueExpression { get; set; } - - protected override void BuildRenderTree(RenderTreeBuilder builder) + public async Task SetCurrentValueAsStringAsync(string value) { - builder.OpenComponent>(0); - builder.AddAttribute(1, "Value", EditContext); - builder.AddAttribute(2, "ChildContent", new RenderFragment(childBuilder => - { - childBuilder.OpenComponent>(0); - childBuilder.AddAttribute(0, "ValueExpression", ValueExpression); - childBuilder.CloseComponent(); - })); - builder.CloseComponent(); + // This is equivalent to the subclass writing to CurrentValueAsString + // (e.g., from @bind), except to simplify the test code there's an InvokeAsync + // here. In production code it wouldn't normally be required because @bind + // calls run on the sync context anyway. + await InvokeAsync(() => { base.CurrentValueAsString = value; }); } } } diff --git a/src/Components/Web/test/Forms/TestInputHostComponent.cs b/src/Components/Web/test/Forms/TestInputHostComponent.cs new file mode 100644 index 0000000000..4eb194a718 --- /dev/null +++ b/src/Components/Web/test/Forms/TestInputHostComponent.cs @@ -0,0 +1,41 @@ +// 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 System; +using System.Collections.Generic; +using System.Linq.Expressions; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Components.Test.Helpers; + +namespace Microsoft.AspNetCore.Components.Forms +{ + internal class TestInputHostComponent : AutoRenderComponent where TComponent : InputBase + { + public Dictionary AdditionalAttributes { get; set; } + + public EditContext EditContext { get; set; } + + public TValue Value { get; set; } + + public Action ValueChanged { get; set; } + + public Expression> ValueExpression { get; set; } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + builder.OpenComponent>(0); + builder.AddAttribute(1, "Value", EditContext); + builder.AddAttribute(2, "ChildContent", new RenderFragment(childBuilder => + { + childBuilder.OpenComponent(0); + childBuilder.AddAttribute(0, "Value", Value); + childBuilder.AddAttribute(1, "ValueChanged", + EventCallback.Factory.Create(this, ValueChanged)); + childBuilder.AddAttribute(2, "ValueExpression", ValueExpression); + childBuilder.AddMultipleAttributes(3, AdditionalAttributes); + childBuilder.CloseComponent(); + })); + builder.CloseComponent(); + } + } +} From 6940249de2623e0135b62aabbdc6c8386515d4ec Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Thu, 16 Jul 2020 15:13:24 -0700 Subject: [PATCH 021/106] Handle exception thrown by ProcessName during ProcessEx timeout (#23990) * Handle exception thrown by ProcessName during ProcessEx timeout * Update src/Shared/Process/ProcessEx.cs Co-authored-by: Brennan * PR feedback Co-authored-by: Brennan --- src/Shared/Process/ProcessEx.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Shared/Process/ProcessEx.cs b/src/Shared/Process/ProcessEx.cs index c4f0002d5c..ad7d06b1ed 100644 --- a/src/Shared/Process/ProcessEx.cs +++ b/src/Shared/Process/ProcessEx.cs @@ -49,10 +49,15 @@ namespace Microsoft.AspNetCore.Internal _exited = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + // We greedily create a timeout exception message even though a timeout is unlikely to happen for two reasons: + // 1. To make it less likely for Process getters to throw exceptions like "System.InvalidOperationException: Process has exited, ..." + // 2. To ensure if/when exceptions are thrown from Process getters, these exceptions can easily be observed. + var timeoutExMessage = $"Process proc {proc.ProcessName} {proc.StartInfo.Arguments} timed out after {DefaultProcessTimeout}."; + _processTimeoutCts = new CancellationTokenSource(timeout); _processTimeoutCts.Token.Register(() => { - _exited.TrySetException(new TimeoutException($"Process proc {proc.ProcessName} {proc.StartInfo.Arguments} timed out after {DefaultProcessTimeout}.")); + _exited.TrySetException(new TimeoutException(timeoutExMessage)); }); } From 049f421cff998de19d97df586f404138190106f8 Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Thu, 16 Jul 2020 22:20:56 +0000 Subject: [PATCH 022/106] Resolve type error when running JS tests locally (#24026) * Resolve type error when running JS tests locally * Update pre-compiled JavaScript --- src/Components/Web.JS/dist/Release/blazor.server.js | 8 ++++---- src/Components/Web.JS/dist/Release/blazor.webassembly.js | 2 +- src/Components/Web.JS/src/Platform/Profiling.ts | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js index d31bbe381a..b71a196406 100644 --- a/src/Components/Web.JS/dist/Release/blazor.server.js +++ b/src/Components/Web.JS/dist/Release/blazor.server.js @@ -1,19 +1,19 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=53)}([function(e,t,n){"use strict";var r;n.d(t,"a",(function(){return r})),function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(r||(r={}))},function(e,t,n){"use strict";(function(e){n.d(t,"e",(function(){return c})),n.d(t,"a",(function(){return u})),n.d(t,"c",(function(){return l})),n.d(t,"g",(function(){return f})),n.d(t,"i",(function(){return h})),n.d(t,"j",(function(){return p})),n.d(t,"f",(function(){return d})),n.d(t,"d",(function(){return g})),n.d(t,"b",(function(){return y})),n.d(t,"h",(function(){return v}));var r=n(0),o=n(6),i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(14))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(44);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return K(this,void 0,void 0,(function(){var t,n,r;return V(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(14))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(45);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return K(this,void 0,void 0,(function(){var t,n,r;return V(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] * @license MIT */ -var r=n(54),o=n(55),i=n(56);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(9))},function(e,t,n){"use strict";var r=n(15).Buffer,o=n(57),i=n(21),a=n(70),s=n(73),c=n(74);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(59);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(60),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(38).EventEmitter},function(e,t,n){"use strict";var r=n(22);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(66).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(22);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(20);u.inherits=n(16);var l={deprecate:n(69)},f=n(39),h=n(15).Buffer,p=o.Uint8Array||function(){};var d,g=n(40);function y(){}function v(e,t){s=s||n(10),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(10),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(14),n(67).setImmediate,n(9))},function(e,t,n){"use strict";e.exports=a;var r=n(10),o=n(20);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(11).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(58); +var r=n(55),o=n(56),i=n(57);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(9))},function(e,t,n){"use strict";var r=n(15).Buffer,o=n(58),i=n(21),a=n(71),s=n(74),c=n(75);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(60);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(61),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(39).EventEmitter},function(e,t,n){"use strict";var r=n(22);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(67).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(22);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(20);u.inherits=n(16);var l={deprecate:n(70)},f=n(40),h=n(15).Buffer,p=o.Uint8Array||function(){};var d,g=n(41);function y(){}function v(e,t){s=s||n(10),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(10),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(14),n(68).setImmediate,n(9))},function(e,t,n){"use strict";e.exports=a;var r=n(10),o=n(20);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(11).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(59); /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT - */function o(e,t){if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o=0;u--)if(l[u]!==f[u])return!1;for(u=l.length-1;u>=0;u--)if(s=l[u],!m(e[s],t[s],n,r))return!1;return!0}(e,t,n,r))}return n?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function S(e,t,n,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof n&&(r=n,n=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(n&&n.name?" ("+n.name+").":".")+(r?" "+r:"."),e&&!o&&v(o,n,"Missing expected exception"+r);var i="string"==typeof r,s=!e&&o&&!n;if((!e&&a.isError(o)&&i&&E(o,n)||s)&&v(o,n,"Got unwanted exception"+r),e&&o&&n&&!E(o,n)||!e&&o)throw o}h.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return g(y(e.actual),128)+" "+e.operator+" "+g(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,o=d(t),i=r.indexOf("\n"+o);if(i>=0){var a=r.indexOf("\n",i+1);r=r.substring(a+1)}this.stack=r}}},a.inherits(h.AssertionError,Error),h.fail=v,h.ok=b,h.equal=function(e,t,n){e!=t&&v(e,t,n,"==",h.equal)},h.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",h.notEqual)},h.deepEqual=function(e,t,n){m(e,t,!1)||v(e,t,n,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,n){m(e,t,!0)||v(e,t,n,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,n){m(e,t,!1)&&v(e,t,n,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,n,r){m(t,n,!0)&&v(t,n,r,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",h.strictEqual)},h.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",h.notStrictEqual)},h.throws=function(e,t,n){S(!0,e,t,n)},h.doesNotThrow=function(e,t,n){S(!1,e,t,n)},h.ifError=function(e){if(e)throw e},h.strict=r((function e(t,n){t||v(t,!0,n,"==",e)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict=h.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(9))},function(e,t,n){"use strict"; + */function o(e,t){if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o=0;u--)if(l[u]!==f[u])return!1;for(u=l.length-1;u>=0;u--)if(s=l[u],!m(e[s],t[s],n,r))return!1;return!0}(e,t,n,r))}return n?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function S(e,t,n,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof n&&(r=n,n=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(n&&n.name?" ("+n.name+").":".")+(r?" "+r:"."),e&&!o&&v(o,n,"Missing expected exception"+r);var i="string"==typeof r,s=!e&&o&&!n;if((!e&&a.isError(o)&&i&&E(o,n)||s)&&v(o,n,"Got unwanted exception"+r),e&&o&&n&&!E(o,n)||!e&&o)throw o}h.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return g(y(e.actual),128)+" "+e.operator+" "+g(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,o=d(t),i=r.indexOf("\n"+o);if(i>=0){var a=r.indexOf("\n",i+1);r=r.substring(a+1)}this.stack=r}}},a.inherits(h.AssertionError,Error),h.fail=v,h.ok=b,h.equal=function(e,t,n){e!=t&&v(e,t,n,"==",h.equal)},h.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",h.notEqual)},h.deepEqual=function(e,t,n){m(e,t,!1)||v(e,t,n,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,n){m(e,t,!0)||v(e,t,n,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,n){m(e,t,!1)&&v(e,t,n,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,n,r){m(t,n,!0)&&v(t,n,r,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",h.strictEqual)},h.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",h.notStrictEqual)},h.throws=function(e,t,n){S(!0,e,t,n)},h.doesNotThrow=function(e,t,n){S(!1,e,t,n)},h.ifError=function(e){if(e)throw e},h.strict=r((function e(t,n){t||v(t,!0,n,"==",e)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict=h.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(9))},function(e,t,n){"use strict"; /* object-assign (c) Sindre Sorhus @license MIT -*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(11),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(68),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(9))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(37)).Stream=t,t.Readable=t,t.Writable=n(42),t.Duplex=n(10),t.Transform=n(43),t.PassThrough=n(72)},function(e,t,n){"use strict";e.exports=i;var r=n(43),o=n(20);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(16),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(21);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(36).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(34),o=n(33),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(11),o=n(12),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="5.0.0-dev"}]); \ No newline at end of file +*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(11),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(69),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(9))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(38)).Stream=t,t.Readable=t,t.Writable=n(43),t.Duplex=n(10),t.Transform=n(44),t.PassThrough=n(73)},function(e,t,n){"use strict";e.exports=i;var r=n(44),o=n(20);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(16),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(21);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(37).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(35),o=n(34),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(11),o=n(12),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="5.0.0-dev"}]); \ No newline at end of file diff --git a/src/Components/Web.JS/dist/Release/blazor.webassembly.js b/src/Components/Web.JS/dist/Release/blazor.webassembly.js index 1d85c8fd46..24e1068930 100644 --- a/src/Components/Web.JS/dist/Release/blazor.webassembly.js +++ b/src/Components/Web.JS/dist/Release/blazor.webassembly.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=45)}([,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){window.DotNet=e;var t=[],n={},r={},o=1,i=null;function a(e){t.push(e)}function s(e,t,n,r){var o=c();if(o.invokeDotNetFromJS){var i=JSON.stringify(r,m),a=o.invokeDotNetFromJS(e,t,n,i);return a?f(a):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead.")}function u(e,t,r,i){if(e&&r)throw new Error("For instance method calls, assemblyName should be null. Received '"+e+"'.");var a=o++,s=new Promise((function(e,t){n[a]={resolve:e,reject:t}}));try{var u=JSON.stringify(i,m);c().beginInvokeDotNetFromJS(a,e,t,r,u)}catch(e){l(a,!1,e)}return s}function c(){if(null!==i)return i;throw new Error("No .NET call dispatcher has been set.")}function l(e,t,r){if(!n.hasOwnProperty(e))throw new Error("There is no pending async call with ID "+e+".");var o=n[e];delete n[e],t?o.resolve(r):o.reject(r)}function f(e){return e?JSON.parse(e,(function(e,n){return t.reduce((function(t,n){return n(e,t)}),n)})):null}function d(e){return e instanceof Error?e.message+"\n"+e.stack:e?e.toString():"null"}function p(e){if(Object.prototype.hasOwnProperty.call(r,e))return r[e];var t,n=window,o="window";if(e.split(".").forEach((function(e){if(!(e in n))throw new Error("Could not find '"+e+"' in '"+o+"'.");t=n,n=n[e],o+="."+e})),n instanceof Function)return n=n.bind(t),r[e]=n,n;throw new Error("The value '"+o+"' is not a function.")}e.attachDispatcher=function(e){i=e},e.attachReviver=a,e.invokeMethod=function(e,t){for(var n=[],r=2;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(31),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),c=n(5),l=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){c.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus(),c.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),v=m+f.count(a),y=m;y0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(46),c=n(4),l=n(49),f=n(35),d=n(19),p=n(50),h=n(51),m=n(52),v=n(5),y=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(y)throw new Error("Blazor has already started.");return y=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){v.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}v.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),l.initializeProfiling((function(e){y("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,v=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),v.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function v(e){return e+12}function y(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(33),a=n(34);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],v=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,v,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(32),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),c=n(5),l=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){c.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus(),c.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),v=m+f.count(a),y=m;y0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(47),c=n(4),l=n(50),f=n(36),d=n(19),p=n(51),h=n(52),m=n(53),v=n(5),y=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(y)throw new Error("Blazor has already started.");return y=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){v.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}v.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),l.initializeProfiling((function(e){y("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,v=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),v.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function v(e){return e+12}function y(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(34),a=n(35);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],v=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,v,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] Date: Thu, 16 Jul 2020 16:46:15 -0700 Subject: [PATCH 023/106] StopAsync resets state on inactive connection (#20083) (#23962) --- .../csharp/Client.Core/src/HubConnection.cs | 5 +++++ .../HubConnectionTests.ConnectionLifecycle.cs | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs b/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs index e8d35d753f..392d0ac7c8 100644 --- a/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs +++ b/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs @@ -501,6 +501,11 @@ namespace Microsoft.AspNetCore.SignalR.Client { connectionState.Stopping = true; } + else + { + // Reset StopCts if there isn't an active connection so that the next StartAsync wont immediately fail due to the token being canceled + _state.StopCts = new CancellationTokenSource(); + } if (disposing) { diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.ConnectionLifecycle.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.ConnectionLifecycle.cs index 3c669ef94d..f1d191ee8c 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.ConnectionLifecycle.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.ConnectionLifecycle.cs @@ -334,6 +334,26 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests }); } + [Fact] + public async Task StopAsyncOnInactiveConnectionDoesNotAffectNextStartAsync() + { + // Regression test: + // If there wasn't an active underlying connection, StopAsync would leave a CTS canceled which would cause the next StartAsync to fail + var testConnection = new TestConnection(); + await AsyncUsing(CreateHubConnection(testConnection), async connection => + { + Assert.Equal(HubConnectionState.Disconnected, connection.State); + + await connection.StopAsync().OrTimeout(); + Assert.False(testConnection.Disposed.IsCompleted); + Assert.Equal(HubConnectionState.Disconnected, connection.State); + + await connection.StartAsync().OrTimeout(); + Assert.True(testConnection.Started.IsCompleted); + Assert.Equal(HubConnectionState.Connected, connection.State); + }); + } + [Fact] public async Task CompletingTheTransportSideMarksConnectionAsClosed() { From bace984f606bc642ecc2309610a2878adaa1b0d5 Mon Sep 17 00:00:00 2001 From: Pranav K Date: Thu, 16 Jul 2020 17:03:49 -0700 Subject: [PATCH 024/106] Update BuildFromSource.md (#24020) --- docs/BuildFromSource.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/BuildFromSource.md b/docs/BuildFromSource.md index 95b08ab146..f16e82b559 100644 --- a/docs/BuildFromSource.md +++ b/docs/BuildFromSource.md @@ -38,7 +38,8 @@ Building ASP.NET Core on Windows requires: However, any Visual Studio 2019 instance that meets the requirements should be fine. See [global.json](/global.json) and [eng/scripts/vs.json](/eng/scripts/vs.json) for those requirements. By default, the script will install Visual Studio Enterprise Edition, however you can use a different edition by passing the `-Edition` flag. * Git. -* NodeJS. LTS version of 10.14.2 or newer +* NodeJS. LTS version of 10.14.2 or newer . +* Install yarn globally (`npm install -g yarn`) * Java Development Kit 11 or newer. Either: * OpenJDK * Oracle's JDK From 1455aaeff118aeaf2b0ab5f1627c2c8ca5df7f11 Mon Sep 17 00:00:00 2001 From: Vladimir Samoilenko Date: Fri, 17 Jul 2020 03:09:06 +0200 Subject: [PATCH 025/106] Blazor: add support for ontoggle event (#24036) Summary of the changes - Implemented `@ontoggle` event - Added test component to BasicTestApp Fix Issue: #20859 --- src/Components/Shared/src/WebEventData.cs | 1 + .../Web.JS/dist/Release/blazor.server.js | 2 +- .../Web.JS/dist/Release/blazor.webassembly.js | 2 +- .../Web.JS/src/Rendering/EventDelegator.ts | 1 + .../Web.JS/src/Rendering/EventForDotNet.ts | 5 +++- ...ft.AspNetCore.Components.Web.netcoreapp.cs | 1 + src/Components/Web/src/Web/EventHandlers.cs | 2 ++ .../test/E2ETest/Tests/EventTest.cs | 18 +++++++++++++ .../test/testassets/BasicTestApp/Index.razor | 1 + .../BasicTestApp/ToggleEventComponent.razor | 25 +++++++++++++++++++ 10 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 src/Components/test/testassets/BasicTestApp/ToggleEventComponent.razor diff --git a/src/Components/Shared/src/WebEventData.cs b/src/Components/Shared/src/WebEventData.cs index c0d5824e53..f809807fbe 100644 --- a/src/Components/Shared/src/WebEventData.cs +++ b/src/Components/Shared/src/WebEventData.cs @@ -71,6 +71,7 @@ namespace Microsoft.AspNetCore.Components.Web "touch" => Deserialize(eventArgsJson), "unknown" => EventArgs.Empty, "wheel" => Deserialize(eventArgsJson), + "toggle" => Deserialize(eventArgsJson), _ => throw new InvalidOperationException($"Unsupported event type '{eventArgsType}'. EventId: '{eventHandlerId}'."), }; } diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js index b71a196406..a576b4914e 100644 --- a/src/Components/Web.JS/dist/Release/blazor.server.js +++ b/src/Components/Web.JS/dist/Release/blazor.server.js @@ -5,7 +5,7 @@ * @author Feross Aboukhadijeh * @license MIT */ -var r=n(55),o=n(56),i=n(57);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(9))},function(e,t,n){"use strict";var r=n(15).Buffer,o=n(58),i=n(21),a=n(71),s=n(74),c=n(75);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(60);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(61),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(39).EventEmitter},function(e,t,n){"use strict";var r=n(22);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(67).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(22);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(20);u.inherits=n(16);var l={deprecate:n(70)},f=n(40),h=n(15).Buffer,p=o.Uint8Array||function(){};var d,g=n(41);function y(){}function v(e,t){s=s||n(10),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(10),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(14),n(68).setImmediate,n(9))},function(e,t,n){"use strict";e.exports=a;var r=n(10),o=n(20);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(11).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(59); +var r=n(55),o=n(56),i=n(57);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(9))},function(e,t,n){"use strict";var r=n(15).Buffer,o=n(58),i=n(21),a=n(71),s=n(74),c=n(75);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(60);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(61),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(39).EventEmitter},function(e,t,n){"use strict";var r=n(22);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(67).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(22);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(20);u.inherits=n(16);var l={deprecate:n(70)},f=n(40),h=n(15).Buffer,p=o.Uint8Array||function(){};var d,g=n(41);function y(){}function v(e,t){s=s||n(10),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(10),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(14),n(68).setImmediate,n(9))},function(e,t,n){"use strict";e.exports=a;var r=n(10),o=n(20);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(11).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(59); /*! * The buffer module from node.js, for the browser. * diff --git a/src/Components/Web.JS/dist/Release/blazor.webassembly.js b/src/Components/Web.JS/dist/Release/blazor.webassembly.js index 24e1068930..6786a93fb0 100644 --- a/src/Components/Web.JS/dist/Release/blazor.webassembly.js +++ b/src/Components/Web.JS/dist/Release/blazor.webassembly.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=46)}([,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){window.DotNet=e;var t=[],n={},r={},o=1,i=null;function a(e){t.push(e)}function s(e,t,n,r){var o=c();if(o.invokeDotNetFromJS){var i=JSON.stringify(r,m),a=o.invokeDotNetFromJS(e,t,n,i);return a?f(a):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead.")}function u(e,t,r,i){if(e&&r)throw new Error("For instance method calls, assemblyName should be null. Received '"+e+"'.");var a=o++,s=new Promise((function(e,t){n[a]={resolve:e,reject:t}}));try{var u=JSON.stringify(i,m);c().beginInvokeDotNetFromJS(a,e,t,r,u)}catch(e){l(a,!1,e)}return s}function c(){if(null!==i)return i;throw new Error("No .NET call dispatcher has been set.")}function l(e,t,r){if(!n.hasOwnProperty(e))throw new Error("There is no pending async call with ID "+e+".");var o=n[e];delete n[e],t?o.resolve(r):o.reject(r)}function f(e){return e?JSON.parse(e,(function(e,n){return t.reduce((function(t,n){return n(e,t)}),n)})):null}function d(e){return e instanceof Error?e.message+"\n"+e.stack:e?e.toString():"null"}function p(e){if(Object.prototype.hasOwnProperty.call(r,e))return r[e];var t,n=window,o="window";if(e.split(".").forEach((function(e){if(!(e in n))throw new Error("Could not find '"+e+"' in '"+o+"'.");t=n,n=n[e],o+="."+e})),n instanceof Function)return n=n.bind(t),r[e]=n,n;throw new Error("The value '"+o+"' is not a function.")}e.attachDispatcher=function(e){i=e},e.attachReviver=a,e.invokeMethod=function(e,t){for(var n=[],r=2;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(32),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),c=n(5),l=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){c.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus(),c.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),v=m+f.count(a),y=m;y0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(47),c=n(4),l=n(50),f=n(36),d=n(19),p=n(51),h=n(52),m=n(53),v=n(5),y=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(y)throw new Error("Blazor has already started.");return y=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){v.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}v.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),l.initializeProfiling((function(e){y("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,v=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),v.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function v(e){return e+12}function y(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(34),a=n(35);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],v=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,v,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(32),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),c=n(5),l=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){c.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus(),c.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),y=m+f.count(a),v=m;v0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(47),c=n(4),l=n(50),f=n(36),d=n(19),p=n(51),h=n(52),m=n(53),y=n(5),v=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(v)throw new Error("Blazor has already started.");return v=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){y.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}y.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),l.initializeProfiling((function(e){v("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,y=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),y.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function y(e){return e+12}function v(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(34),a=n(35);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],y=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,y,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] { case 'mousewheel': return new EventForDotNet('wheel', parseWheelEvent(event as WheelEvent)); + case 'toggle': + return new EventForDotNet('toggle', { type: event.type }); + default: return new EventForDotNet('unknown', { type: event.type }); } @@ -248,7 +251,7 @@ function normalizeTimeBasedValue(element: HTMLInputElement): string { // The following interfaces must be kept in sync with the UIEventArgs C# classes -export type EventArgsType = 'change' | 'clipboard' | 'drag' | 'error' | 'focus' | 'keyboard' | 'mouse' | 'pointer' | 'progress' | 'touch' | 'unknown' | 'wheel'; +export type EventArgsType = 'change' | 'clipboard' | 'drag' | 'error' | 'focus' | 'keyboard' | 'mouse' | 'pointer' | 'progress' | 'touch' | 'unknown' | 'wheel' | 'toggle'; export interface UIEventArgs { type: string; diff --git a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs index 14ff4f7367..aa04448bd7 100644 --- a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs +++ b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs @@ -345,6 +345,7 @@ namespace Microsoft.AspNetCore.Components.Web [Microsoft.AspNetCore.Components.EventHandlerAttribute("onsuspend", typeof(System.EventArgs), true, true)] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontimeout", typeof(Microsoft.AspNetCore.Components.Web.ProgressEventArgs), true, true)] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontimeupdate", typeof(System.EventArgs), true, true)] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontoggle", typeof(System.EventArgs), true, true)] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchcancel", typeof(Microsoft.AspNetCore.Components.Web.TouchEventArgs), true, true)] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchend", typeof(Microsoft.AspNetCore.Components.Web.TouchEventArgs), true, true)] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchenter", typeof(Microsoft.AspNetCore.Components.Web.TouchEventArgs), true, true)] diff --git a/src/Components/Web/src/Web/EventHandlers.cs b/src/Components/Web/src/Web/EventHandlers.cs index 5e4bb8e83f..e83892f2da 100644 --- a/src/Components/Web/src/Web/EventHandlers.cs +++ b/src/Components/Web/src/Web/EventHandlers.cs @@ -122,6 +122,8 @@ namespace Microsoft.AspNetCore.Components.Web [EventHandler("onpointerlockerror", typeof(EventArgs), true, true)] [EventHandler("onreadystatechange", typeof(EventArgs), true, true)] [EventHandler("onscroll", typeof(EventArgs), true, true)] + + [EventHandler("ontoggle", typeof(EventArgs), true, true)] public static class EventHandlers { } diff --git a/src/Components/test/E2ETest/Tests/EventTest.cs b/src/Components/test/E2ETest/Tests/EventTest.cs index 218e545229..19a0ad9d0a 100644 --- a/src/Components/test/E2ETest/Tests/EventTest.cs +++ b/src/Components/test/E2ETest/Tests/EventTest.cs @@ -115,6 +115,24 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests Browser.Equal("onmousedown,onmouseup,", () => output.Text); } + + [Fact] + public void Toggle_CanTrigger() + { + Browser.MountTestComponent(); + + var detailsToggle = Browser.FindElement(By.Id("details-toggle")); + + var output = Browser.FindElement(By.Id("output")); + Assert.Equal(string.Empty, output.Text); + + // Click + var actions = new Actions(Browser).Click(detailsToggle); + + actions.Perform(); + Browser.Equal("ontoggle,", () => output.Text); + } + [Fact] public void PointerDown_CanTrigger() { diff --git a/src/Components/test/testassets/BasicTestApp/Index.razor b/src/Components/test/testassets/BasicTestApp/Index.razor index aa87700d5b..6241d46347 100644 --- a/src/Components/test/testassets/BasicTestApp/Index.razor +++ b/src/Components/test/testassets/BasicTestApp/Index.razor @@ -82,6 +82,7 @@ + @System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription diff --git a/src/Components/test/testassets/BasicTestApp/ToggleEventComponent.razor b/src/Components/test/testassets/BasicTestApp/ToggleEventComponent.razor new file mode 100644 index 0000000000..1639dbb383 --- /dev/null +++ b/src/Components/test/testassets/BasicTestApp/ToggleEventComponent.razor @@ -0,0 +1,25 @@ +
+

+ Output: @message +

+ + +

Open the details.

+ +
+ Summary +

+

Detailed content

+
+ +
+ +@code { + string message { get; set; } + + void OnToggle(EventArgs e) + { + message += "ontoggle,"; + StateHasChanged(); + } +} From 71327921ed3afde65358a10517d6a108aaa068ee Mon Sep 17 00:00:00 2001 From: Chris Sainty Date: Fri, 17 Jul 2020 03:06:50 +0100 Subject: [PATCH 026/106] Modified EditForm to return _fixedEditContext via the EditContext parameter (#24007) * Modified EditForm to return _fixedEditContext via the EditContext parameter. Also added some tests to cover the new functionality * Swapped to boolean to track provided EditContext * Patched ref assembly * Simplified setting _hasSetEditContextExplicitly * Renamed _fixedEditContext to _editContext * Updated null check in OnParametersSet * Simplified check for EditContext updates based on Model changes --- ...ft.AspNetCore.Components.Web.netcoreapp.cs | 2 +- src/Components/Web/src/Forms/EditForm.cs | 49 ++++--- src/Components/Web/test/Forms/EditFormTest.cs | 120 ++++++++++++++++++ 3 files changed, 153 insertions(+), 18 deletions(-) create mode 100644 src/Components/Web/test/Forms/EditFormTest.cs diff --git a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs index aa04448bd7..d60e512b5d 100644 --- a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs +++ b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs @@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Components.Forms [Microsoft.AspNetCore.Components.ParameterAttribute] public Microsoft.AspNetCore.Components.RenderFragment? ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] - public Microsoft.AspNetCore.Components.Forms.EditContext? EditContext { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } + public Microsoft.AspNetCore.Components.Forms.EditContext? EditContext { get { throw null; } set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] public object? Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] diff --git a/src/Components/Web/src/Forms/EditForm.cs b/src/Components/Web/src/Forms/EditForm.cs index e4467b532a..f5a13fc9fd 100644 --- a/src/Components/Web/src/Forms/EditForm.cs +++ b/src/Components/Web/src/Forms/EditForm.cs @@ -16,7 +16,8 @@ namespace Microsoft.AspNetCore.Components.Forms { private readonly Func _handleSubmitDelegate; // Cache to avoid per-render allocations - private EditContext? _fixedEditContext; + private EditContext? _editContext; + private bool _hasSetEditContextExplicitly; /// /// Constructs an instance of . @@ -36,7 +37,16 @@ namespace Microsoft.AspNetCore.Components.Forms /// also supply , since the model value will be taken /// from the property. /// - [Parameter] public EditContext? EditContext { get; set; } + [Parameter] + public EditContext? EditContext + { + get => _editContext; + set + { + _editContext = value; + _hasSetEditContextExplicitly = value != null; + } + } /// /// Specifies the top-level model object for the form. An edit context will @@ -73,11 +83,16 @@ namespace Microsoft.AspNetCore.Components.Forms /// protected override void OnParametersSet() { - if ((EditContext == null) == (Model == null)) + if (_hasSetEditContextExplicitly && Model != null) { throw new InvalidOperationException($"{nameof(EditForm)} requires a {nameof(Model)} " + $"parameter, or an {nameof(EditContext)} parameter, but not both."); } + else if (!_hasSetEditContextExplicitly && Model == null) + { + throw new InvalidOperationException($"{nameof(EditForm)} requires either a {nameof(Model)} " + + $"parameter, or an {nameof(EditContext)} parameter, please provide one of these."); + } // If you're using OnSubmit, it becomes your responsibility to trigger validation manually // (e.g., so you can display a "pending" state in the UI). In that case you don't want the @@ -89,31 +104,31 @@ namespace Microsoft.AspNetCore.Components.Forms $"{nameof(EditForm)}, do not also supply {nameof(OnValidSubmit)} or {nameof(OnInvalidSubmit)}."); } - // Update _fixedEditContext if we don't have one yet, or if they are supplying a + // Update _editContext if we don't have one yet, or if they are supplying a // potentially new EditContext, or if they are supplying a different Model - if (_fixedEditContext == null || EditContext != null || Model != _fixedEditContext.Model) + if (Model != null && Model != _editContext?.Model) { - _fixedEditContext = EditContext ?? new EditContext(Model!); + _editContext = new EditContext(Model!); } } /// protected override void BuildRenderTree(RenderTreeBuilder builder) { - Debug.Assert(_fixedEditContext != null); + Debug.Assert(_editContext != null); - // If _fixedEditContext changes, tear down and recreate all descendants. + // If _editContext changes, tear down and recreate all descendants. // This is so we can safely use the IsFixed optimization on CascadingValue, - // optimizing for the common case where _fixedEditContext never changes. - builder.OpenRegion(_fixedEditContext.GetHashCode()); + // optimizing for the common case where _editContext never changes. + builder.OpenRegion(_editContext.GetHashCode()); builder.OpenElement(0, "form"); builder.AddMultipleAttributes(1, AdditionalAttributes); builder.AddAttribute(2, "onsubmit", _handleSubmitDelegate); builder.OpenComponent>(3); builder.AddAttribute(4, "IsFixed", true); - builder.AddAttribute(5, "Value", _fixedEditContext); - builder.AddAttribute(6, "ChildContent", ChildContent?.Invoke(_fixedEditContext)); + builder.AddAttribute(5, "Value", _editContext); + builder.AddAttribute(6, "ChildContent", ChildContent?.Invoke(_editContext)); builder.CloseComponent(); builder.CloseElement(); @@ -122,26 +137,26 @@ namespace Microsoft.AspNetCore.Components.Forms private async Task HandleSubmitAsync() { - Debug.Assert(_fixedEditContext != null); + Debug.Assert(_editContext != null); if (OnSubmit.HasDelegate) { // When using OnSubmit, the developer takes control of the validation lifecycle - await OnSubmit.InvokeAsync(_fixedEditContext); + await OnSubmit.InvokeAsync(_editContext); } else { // Otherwise, the system implicitly runs validation on form submission - var isValid = _fixedEditContext.Validate(); // This will likely become ValidateAsync later + var isValid = _editContext.Validate(); // This will likely become ValidateAsync later if (isValid && OnValidSubmit.HasDelegate) { - await OnValidSubmit.InvokeAsync(_fixedEditContext); + await OnValidSubmit.InvokeAsync(_editContext); } if (!isValid && OnInvalidSubmit.HasDelegate) { - await OnInvalidSubmit.InvokeAsync(_fixedEditContext); + await OnInvalidSubmit.InvokeAsync(_editContext); } } } diff --git a/src/Components/Web/test/Forms/EditFormTest.cs b/src/Components/Web/test/Forms/EditFormTest.cs new file mode 100644 index 0000000000..05a390ddca --- /dev/null +++ b/src/Components/Web/test/Forms/EditFormTest.cs @@ -0,0 +1,120 @@ +// 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 System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.AspNetCore.Components.Test.Helpers; +using Xunit; + +namespace Microsoft.AspNetCore.Components.Forms +{ + public class EditFormTest + { + + [Fact] + public async Task ThrowsIfBothEditContextAndModelAreSupplied() + { + // Arrange + var editForm = new EditForm + { + EditContext = new EditContext(new TestModel()), + Model = new TestModel() + }; + var testRenderer = new TestRenderer(); + var componentId = testRenderer.AssignRootComponentId(editForm); + + // Act/Assert + var ex = await Assert.ThrowsAsync( + () => testRenderer.RenderRootComponentAsync(componentId)); + Assert.StartsWith($"{nameof(EditForm)} requires a {nameof(EditForm.Model)} parameter, or an {nameof(EditContext)} parameter, but not both.", ex.Message); + } + + [Fact] + public async Task ThrowsIfBothEditContextAndModelAreNull() + { + // Arrange + var editForm = new EditForm(); + var testRenderer = new TestRenderer(); + var componentId = testRenderer.AssignRootComponentId(editForm); + + // Act/Assert + var ex = await Assert.ThrowsAsync( + () => testRenderer.RenderRootComponentAsync(componentId)); + Assert.StartsWith($"{nameof(EditForm)} requires either a {nameof(EditForm.Model)} parameter, or an {nameof(EditContext)} parameter, please provide one of these.", ex.Message); + } + + [Fact] + public async Task ReturnsEditContextWhenModelParameterUsed() + { + // Arrange + var model = new TestModel(); + var rootComponent = new TestEditFormHostComponent + { + Model = model + }; + var editFormComponent = await RenderAndGetTestEditFormComponentAsync(rootComponent); + + // Act + var returnedEditContext = editFormComponent.EditContext; + + // Assert + Assert.NotNull(returnedEditContext); + Assert.Same(model, returnedEditContext.Model); + } + + [Fact] + public async Task ReturnsEditContextWhenEditContextParameterUsed() + { + // Arrange + var editContext = new EditContext(new TestModel()); + var rootComponent = new TestEditFormHostComponent + { + EditContext = editContext + }; + var editFormComponent = await RenderAndGetTestEditFormComponentAsync(rootComponent); + + // Act + var returnedEditContext = editFormComponent.EditContext; + + // Assert + Assert.Same(editContext, returnedEditContext); + } + + private static EditForm FindEditFormComponent(CapturedBatch batch) + => batch.ReferenceFrames + .Where(f => f.FrameType == RenderTreeFrameType.Component) + .Select(f => f.Component) + .OfType() + .Single(); + + private static async Task RenderAndGetTestEditFormComponentAsync(TestEditFormHostComponent hostComponent) + { + var testRenderer = new TestRenderer(); + var componentId = testRenderer.AssignRootComponentId(hostComponent); + await testRenderer.RenderRootComponentAsync(componentId); + return FindEditFormComponent(testRenderer.Batches.Single()); + } + + class TestModel + { + public string StringProperty { get; set; } + } + + class TestEditFormHostComponent : AutoRenderComponent + { + public EditContext EditContext { get; set; } + public TestModel Model { get; set; } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + builder.OpenComponent(0); + builder.AddAttribute(1, "Model", Model); + builder.AddAttribute(2, "EditContext", EditContext); + builder.CloseComponent(); + } + } + } +} From ec4b2221c24a8b4e4501b6a63eb858b32f170825 Mon Sep 17 00:00:00 2001 From: Stephen Lorello <42971704+slorello89@users.noreply.github.com> Date: Fri, 17 Jul 2020 06:54:48 -0400 Subject: [PATCH 027/106] [Blazor][Fixes #22679] Flow the Resource to the authorization service in AuthorizeRouteView AuthorizeRouteView combines AuthorizeView and RouteView on one abstraction for convenience, but it was missing a Resource parameter to capture and flow the resource to pass on to the AuthorizationService. This PR adds a new Resource parameter and makes sure that the value is passed to the authorization service so that it is available for the authorization handlers in a policy. --- ...ore.Components.Authorization.netcoreapp.cs | 2 + .../Authorization/src/AuthorizeRouteView.cs | 7 ++ .../test/AuthorizeRouteViewTest.cs | 72 +++++++++++++++++++ 3 files changed, 81 insertions(+) diff --git a/src/Components/Authorization/ref/Microsoft.AspNetCore.Components.Authorization.netcoreapp.cs b/src/Components/Authorization/ref/Microsoft.AspNetCore.Components.Authorization.netcoreapp.cs index 1ed5ecbf0e..6ce83a6bcf 100644 --- a/src/Components/Authorization/ref/Microsoft.AspNetCore.Components.Authorization.netcoreapp.cs +++ b/src/Components/Authorization/ref/Microsoft.AspNetCore.Components.Authorization.netcoreapp.cs @@ -23,6 +23,8 @@ namespace Microsoft.AspNetCore.Components.Authorization public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] public Microsoft.AspNetCore.Components.RenderFragment NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } + [Microsoft.AspNetCore.Components.ParameterAttribute] + public object Resource { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } protected override void Render(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { } } public partial class AuthorizeView : Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore diff --git a/src/Components/Authorization/src/AuthorizeRouteView.cs b/src/Components/Authorization/src/AuthorizeRouteView.cs index 2d7ea76698..b236dfd158 100644 --- a/src/Components/Authorization/src/AuthorizeRouteView.cs +++ b/src/Components/Authorization/src/AuthorizeRouteView.cs @@ -54,6 +54,12 @@ namespace Microsoft.AspNetCore.Components.Authorization [Parameter] public RenderFragment Authorizing { get; set; } + /// + /// The resource to which access is being controlled. + /// + [Parameter] + public object Resource { get; set; } + [CascadingParameter] private Task ExistingCascadedAuthenticationState { get; set; } @@ -82,6 +88,7 @@ namespace Microsoft.AspNetCore.Components.Authorization builder.AddAttribute(2, nameof(AuthorizeRouteViewCore.Authorized), _renderAuthorizedDelegate); builder.AddAttribute(3, nameof(AuthorizeRouteViewCore.Authorizing), _renderAuthorizingDelegate); builder.AddAttribute(4, nameof(AuthorizeRouteViewCore.NotAuthorized), _renderNotAuthorizedDelegate); + builder.AddAttribute(5, nameof(AuthorizeRouteViewCore.Resource), Resource); builder.CloseComponent(); } diff --git a/src/Components/Authorization/test/AuthorizeRouteViewTest.cs b/src/Components/Authorization/test/AuthorizeRouteViewTest.cs index 5a3a5683c7..9951014a51 100644 --- a/src/Components/Authorization/test/AuthorizeRouteViewTest.cs +++ b/src/Components/Authorization/test/AuthorizeRouteViewTest.cs @@ -76,6 +76,78 @@ namespace Microsoft.AspNetCore.Components.Authorization edit => AssertPrependText(batch, edit, "Hello from the page with message: Hello, world!")); } + [Fact] + public void AuthorizesWhenResourceIsSet() + { + // Arrange + var routeData = new RouteData(typeof(TestPageRequiringAuthorization), new Dictionary + { + { nameof(TestPageRequiringAuthorization.Message), "Hello, world!" } + }); + var resource = "foo"; + _testAuthorizationService.NextResult = AuthorizationResult.Success(); + + // Act + _renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary + { + { nameof(AuthorizeRouteView.RouteData), routeData }, + { nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) }, + { nameof(AuthorizeRouteView.Resource), resource } + })); + + // Assert: renders layout + var batch = _renderer.Batches.Single(); + var layoutDiff = batch.GetComponentDiffs().Single(); + Assert.Collection(layoutDiff.Edits, + edit => AssertPrependText(batch, edit, "Layout starts here"), + edit => + { + Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type); + AssertFrame.Component(batch.ReferenceFrames[edit.ReferenceFrameIndex]); + }, + edit => AssertPrependText(batch, edit, "Layout ends here")); + + // Assert: renders page + var pageDiff = batch.GetComponentDiffs().Single(); + Assert.Collection(pageDiff.Edits, + edit => AssertPrependText(batch, edit, "Hello from the page with message: Hello, world!")); + + // Assert: Asserts that the Resource is present and set to "foo" + Assert.Collection(_testAuthorizationService.AuthorizeCalls, call=> + { + Assert.Equal(resource, call.resource.ToString()); + }); + } + + [Fact] + public void NotAuthorizedWhenResourceMissing() + { + // Arrange + var routeData = new RouteData(typeof(TestPageRequiringAuthorization), EmptyParametersDictionary); + _testAuthorizationService.NextResult = AuthorizationResult.Failed(); + + // Act + _renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary + { + { nameof(AuthorizeRouteView.RouteData), routeData }, + { nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) }, + })); + + // Assert: renders layout containing "not authorized" message + var batch = _renderer.Batches.Single(); + var layoutDiff = batch.GetComponentDiffs().Single(); + Assert.Collection(layoutDiff.Edits, + edit => AssertPrependText(batch, edit, "Layout starts here"), + edit => AssertPrependText(batch, edit, "Not authorized"), + edit => AssertPrependText(batch, edit, "Layout ends here")); + + // Assert: Asserts that the Resource is Null + Assert.Collection(_testAuthorizationService.AuthorizeCalls, call=> + { + Assert.Null(call.resource); + }); + } + [Fact] public void WhenNotAuthorized_RendersDefaultNotAuthorizedContentInsideLayout() { From 4b943417a7d3e266d3ac998b3ec7e8ffff429910 Mon Sep 17 00:00:00 2001 From: Jan-Willem Spuij Date: Thu, 16 Jul 2020 15:10:15 +0200 Subject: [PATCH 028/106] Switched order of attribute initialization and DOM addition. Fixes #6218. --- .../Web.JS/dist/Release/blazor.server.js | 2 +- .../Web.JS/dist/Release/blazor.webassembly.js | 2 +- .../Web.JS/src/Rendering/BrowserRenderer.ts | 47 ++++++++++++++----- src/Components/test/E2ETest/Tests/BindTest.cs | 4 ++ .../test/E2ETest/Tests/EventTest.cs | 11 +++++ .../BasicTestApp/BindCasesComponent.razor | 12 ++++- .../test/testassets/BasicTestApp/Index.razor | 1 + ...derAttributesBeforeConnectedCallback.razor | 14 ++++++ .../BasicTestApp/wwwroot/index.html | 1 + .../wwwroot/js/renderattributestest.js | 9 ++++ .../TestServer/Pages/_ServerHost.cshtml | 1 + 11 files changed, 89 insertions(+), 15 deletions(-) create mode 100644 src/Components/test/testassets/BasicTestApp/RenderAttributesBeforeConnectedCallback.razor create mode 100644 src/Components/test/testassets/BasicTestApp/wwwroot/js/renderattributestest.js diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js index a576b4914e..ee1868075c 100644 --- a/src/Components/Web.JS/dist/Release/blazor.server.js +++ b/src/Components/Web.JS/dist/Release/blazor.server.js @@ -5,7 +5,7 @@ * @author Feross Aboukhadijeh * @license MIT */ -var r=n(55),o=n(56),i=n(57);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(9))},function(e,t,n){"use strict";var r=n(15).Buffer,o=n(58),i=n(21),a=n(71),s=n(74),c=n(75);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(60);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(61),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(39).EventEmitter},function(e,t,n){"use strict";var r=n(22);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(67).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(22);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(20);u.inherits=n(16);var l={deprecate:n(70)},f=n(40),h=n(15).Buffer,p=o.Uint8Array||function(){};var d,g=n(41);function y(){}function v(e,t){s=s||n(10),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(10),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(14),n(68).setImmediate,n(9))},function(e,t,n){"use strict";e.exports=a;var r=n(10),o=n(20);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(11).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(59); +var r=n(55),o=n(56),i=n(57);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(9))},function(e,t,n){"use strict";var r=n(15).Buffer,o=n(58),i=n(21),a=n(71),s=n(74),c=n(75);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(60);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(61),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(39).EventEmitter},function(e,t,n){"use strict";var r=n(22);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(67).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(22);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(20);u.inherits=n(16);var l={deprecate:n(70)},f=n(40),h=n(15).Buffer,p=o.Uint8Array||function(){};var d,g=n(41);function y(){}function v(e,t){s=s||n(10),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(10),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(14),n(68).setImmediate,n(9))},function(e,t,n){"use strict";e.exports=a;var r=n(10),o=n(20);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(11).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(59); /*! * The buffer module from node.js, for the browser. * diff --git a/src/Components/Web.JS/dist/Release/blazor.webassembly.js b/src/Components/Web.JS/dist/Release/blazor.webassembly.js index 6786a93fb0..578dbea90e 100644 --- a/src/Components/Web.JS/dist/Release/blazor.webassembly.js +++ b/src/Components/Web.JS/dist/Release/blazor.webassembly.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=46)}([,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){window.DotNet=e;var t=[],n={},r={},o=1,i=null;function a(e){t.push(e)}function s(e,t,n,r){var o=c();if(o.invokeDotNetFromJS){var i=JSON.stringify(r,m),a=o.invokeDotNetFromJS(e,t,n,i);return a?f(a):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead.")}function u(e,t,r,i){if(e&&r)throw new Error("For instance method calls, assemblyName should be null. Received '"+e+"'.");var a=o++,s=new Promise((function(e,t){n[a]={resolve:e,reject:t}}));try{var u=JSON.stringify(i,m);c().beginInvokeDotNetFromJS(a,e,t,r,u)}catch(e){l(a,!1,e)}return s}function c(){if(null!==i)return i;throw new Error("No .NET call dispatcher has been set.")}function l(e,t,r){if(!n.hasOwnProperty(e))throw new Error("There is no pending async call with ID "+e+".");var o=n[e];delete n[e],t?o.resolve(r):o.reject(r)}function f(e){return e?JSON.parse(e,(function(e,n){return t.reduce((function(t,n){return n(e,t)}),n)})):null}function d(e){return e instanceof Error?e.message+"\n"+e.stack:e?e.toString():"null"}function p(e){if(Object.prototype.hasOwnProperty.call(r,e))return r[e];var t,n=window,o="window";if(e.split(".").forEach((function(e){if(!(e in n))throw new Error("Could not find '"+e+"' in '"+o+"'.");t=n,n=n[e],o+="."+e})),n instanceof Function)return n=n.bind(t),r[e]=n,n;throw new Error("The value '"+o+"' is not a function.")}e.attachDispatcher=function(e){i=e},e.attachReviver=a,e.invokeMethod=function(e,t){for(var n=[],r=2;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(32),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),c=n(5),l=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){c.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus(),c.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),y=m+f.count(a),v=m;v0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(47),c=n(4),l=n(50),f=n(36),d=n(19),p=n(51),h=n(52),m=n(53),y=n(5),v=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(v)throw new Error("Blazor has already started.");return v=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){y.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}y.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),l.initializeProfiling((function(e){v("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,y=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),y.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function y(e){return e+12}function v(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(34),a=n(35);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],y=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,y,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0);var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(32),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),c=n(5),l=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){c.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus(),c.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),y=m+f.count(a),v=m;v0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(47),c=n(4),l=n(50),f=n(36),d=n(19),p=n(51),h=n(52),m=n(53),y=n(5),v=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(v)throw new Error("Blazor has already started.");return v=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){y.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}y.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),l.initializeProfiling((function(e){v("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,y=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),y.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function y(e){return e+12}function v(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(34),a=n(35);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],y=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,y,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] in two different ways: - // [1] When inserting a corresponding [MethodImpl(MethodImplOptions.AggressiveInlining)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void SecureZeroMemory(byte* buffer, uint byteCount) { if (byteCount != 0) @@ -145,7 +159,9 @@ namespace Microsoft.AspNetCore.Cryptography /// Securely clears a memory buffer. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void SecureZeroMemory(byte* buffer, ulong byteCount) { if (byteCount != 0) @@ -163,7 +179,9 @@ namespace Microsoft.AspNetCore.Cryptography /// /// Securely clears a memory buffer. /// +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void SecureZeroMemory(byte* buffer, IntPtr length) { if (sizeof(IntPtr) == 4) diff --git a/src/DataProtection/Cryptography.Internal/src/UnsafeNativeMethods.cs b/src/DataProtection/Cryptography.Internal/src/UnsafeNativeMethods.cs index 3a5a4d8db3..d638b79d8d 100644 --- a/src/DataProtection/Cryptography.Internal/src/UnsafeNativeMethods.cs +++ b/src/DataProtection/Cryptography.Internal/src/UnsafeNativeMethods.cs @@ -82,13 +82,17 @@ namespace Microsoft.AspNetCore.Cryptography [In] uint dwFlags); [DllImport(BCRYPT_LIB, CallingConvention = CallingConvention.Winapi)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif // http://msdn.microsoft.com/en-us/library/windows/desktop/aa375399(v=vs.85).aspx internal static extern int BCryptDestroyHash( [In] IntPtr hHash); [DllImport(BCRYPT_LIB, CallingConvention = CallingConvention.Winapi)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif // http://msdn.microsoft.com/en-us/library/windows/desktop/aa375404(v=vs.85).aspx internal static extern int BCryptDestroyKey( [In] IntPtr hKey); @@ -240,7 +244,9 @@ namespace Microsoft.AspNetCore.Cryptography */ [DllImport(NCRYPT_LIB, CallingConvention = CallingConvention.Winapi)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif // http://msdn.microsoft.com/en-us/library/windows/desktop/hh706799(v=vs.85).aspx internal static extern int NCryptCloseProtectionDescriptor( [In] IntPtr hDescriptor); diff --git a/src/DataProtection/DataProtection/src/Cng/DpapiSecretSerializerHelper.cs b/src/DataProtection/DataProtection/src/Cng/DpapiSecretSerializerHelper.cs index 61bbb4f9ea..2fa693851f 100644 --- a/src/DataProtection/DataProtection/src/Cng/DpapiSecretSerializerHelper.cs +++ b/src/DataProtection/DataProtection/src/Cng/DpapiSecretSerializerHelper.cs @@ -78,7 +78,9 @@ namespace Microsoft.AspNetCore.DataProtection.Cng }; var dataOut = default(DATA_BLOB); +#if NETSTANDARD2_0 RuntimeHelpers.PrepareConstrainedRegions(); +#endif try { @@ -168,7 +170,9 @@ namespace Microsoft.AspNetCore.DataProtection.Cng { var handleAcquired = false; +#if NETSTANDARD2_0 RuntimeHelpers.PrepareConstrainedRegions(); +#endif try { @@ -217,7 +221,9 @@ namespace Microsoft.AspNetCore.DataProtection.Cng }; var dataOut = default(DATA_BLOB); +#if NETSTANDARD2_0 RuntimeHelpers.PrepareConstrainedRegions(); +#endif try { @@ -290,7 +296,9 @@ namespace Microsoft.AspNetCore.DataProtection.Cng { var handleAcquired = false; +#if NETSTANDARD2_0 RuntimeHelpers.PrepareConstrainedRegions(); +#endif try { diff --git a/src/Grpc/test/InteropTests/InteropTests.csproj b/src/Grpc/test/InteropTests/InteropTests.csproj index bcbd1fc4b6..24d479432b 100644 --- a/src/Grpc/test/InteropTests/InteropTests.csproj +++ b/src/Grpc/test/InteropTests/InteropTests.csproj @@ -3,6 +3,9 @@ true $(DefaultNetCoreTargetFramework) + + + false diff --git a/src/Grpc/test/testassets/InteropClient/InteropClient.cs b/src/Grpc/test/testassets/InteropClient/InteropClient.cs index 273bcd1950..d6b47ab241 100644 --- a/src/Grpc/test/testassets/InteropClient/InteropClient.cs +++ b/src/Grpc/test/testassets/InteropClient/InteropClient.cs @@ -97,7 +97,7 @@ namespace InteropTestsClient services.AddLogging(configure => { configure.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); - configure.AddConsole(loggerOptions => + configure.AddSimpleConsole(loggerOptions => { loggerOptions.IncludeScopes = true; loggerOptions.DisableColors = true; diff --git a/src/Grpc/test/testassets/InteropWebsite/Program.cs b/src/Grpc/test/testassets/InteropWebsite/Program.cs index 0648004d95..3efd0d647c 100644 --- a/src/Grpc/test/testassets/InteropWebsite/Program.cs +++ b/src/Grpc/test/testassets/InteropWebsite/Program.cs @@ -37,7 +37,7 @@ namespace InteropTestsWebsite Host.CreateDefaultBuilder(args) .ConfigureLogging(builder => { - builder.AddConsole(o => o.DisableColors = true); + builder.AddSimpleConsole(o => o.DisableColors = true); builder.SetMinimumLevel(LogLevel.Trace); }) .ConfigureWebHostDefaults(webBuilder => diff --git a/src/Http/Http.Abstractions/test/HttpResponseWritingExtensionsTests.cs b/src/Http/Http.Abstractions/test/HttpResponseWritingExtensionsTests.cs index ed0c103006..bdbb48375e 100644 --- a/src/Http/Http.Abstractions/test/HttpResponseWritingExtensionsTests.cs +++ b/src/Http/Http.Abstractions/test/HttpResponseWritingExtensionsTests.cs @@ -80,9 +80,9 @@ namespace Microsoft.AspNetCore.Http { Encoding.BigEndianUnicode }, { Encoding.Unicode }, { Encoding.UTF32 }, -#pragma warning disable CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning disable CS0618, SYSLIB0001 // Type or member is obsolete { Encoding.UTF7 }, -#pragma warning restore CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning restore CS0618, SYSLIB0001 // Type or member is obsolete { Encoding.UTF8 } }; diff --git a/src/Http/Http/src/Features/FormFeature.cs b/src/Http/Http/src/Features/FormFeature.cs index d7f1888139..8b4d06896c 100644 --- a/src/Http/Http/src/Features/FormFeature.cs +++ b/src/Http/Http/src/Features/FormFeature.cs @@ -276,9 +276,9 @@ namespace Microsoft.AspNetCore.Http.Features private static Encoding FilterEncoding(Encoding? encoding) { // UTF-7 is insecure and should not be honored. UTF-8 will succeed for most cases. -#pragma warning disable CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning disable CS0618, SYSLIB0001 // Type or member is obsolete if (encoding == null || Encoding.UTF7.Equals(encoding)) -#pragma warning restore CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning restore CS0618, SYSLIB0001 // Type or member is obsolete { return Encoding.UTF8; } diff --git a/src/Http/WebUtilities/src/FormPipeReader.cs b/src/Http/WebUtilities/src/FormPipeReader.cs index bcb553458d..18a9762f7f 100644 --- a/src/Http/WebUtilities/src/FormPipeReader.cs +++ b/src/Http/WebUtilities/src/FormPipeReader.cs @@ -47,10 +47,10 @@ namespace Microsoft.AspNetCore.WebUtilities public FormPipeReader(PipeReader pipeReader, Encoding encoding) { -#pragma warning disable CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning disable CS0618, SYSLIB0001 // Type or member is obsolete if (encoding == Encoding.UTF7) { -#pragma warning restore CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning restore CS0618, SYSLIB0001 // Type or member is obsolete throw new ArgumentException("UTF7 is unsupported and insecure. Please select a different encoding."); } @@ -271,7 +271,7 @@ namespace Microsoft.AspNetCore.WebUtilities var keyValueReader = new SequenceReader(keyValuePair); ReadOnlySequence value; - if (keyValueReader.TryReadTo(out var key, equalsDelimiter)) + if (keyValueReader.TryReadTo(out ReadOnlySequence key, equalsDelimiter)) { if (key.Length > KeyLengthLimit) { diff --git a/src/Http/WebUtilities/src/MultipartSectionStreamExtensions.cs b/src/Http/WebUtilities/src/MultipartSectionStreamExtensions.cs index 58c16bd605..e7d9ab0353 100644 --- a/src/Http/WebUtilities/src/MultipartSectionStreamExtensions.cs +++ b/src/Http/WebUtilities/src/MultipartSectionStreamExtensions.cs @@ -34,9 +34,9 @@ namespace Microsoft.AspNetCore.WebUtilities MediaTypeHeaderValue.TryParse(section.ContentType, out var sectionMediaType); var streamEncoding = sectionMediaType?.Encoding; -#pragma warning disable CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning disable CS0618, SYSLIB0001 // Type or member is obsolete if (streamEncoding == null || streamEncoding == Encoding.UTF7) -#pragma warning restore CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning restore CS0618, SYSLIB0001 // Type or member is obsolete { streamEncoding = Encoding.UTF8; } diff --git a/src/ProjectTemplates/Shared/Project.cs b/src/ProjectTemplates/Shared/Project.cs index 939a49089f..cb28d482f4 100644 --- a/src/ProjectTemplates/Shared/Project.cs +++ b/src/ProjectTemplates/Shared/Project.cs @@ -145,7 +145,7 @@ namespace Templates.Test.Helpers ["ASPNETCORE_Logging__Console__LogLevel__Default"] = "Debug", ["ASPNETCORE_Logging__Console__LogLevel__System"] = "Debug", ["ASPNETCORE_Logging__Console__LogLevel__Microsoft"] = "Debug", - ["ASPNETCORE_Logging__Console__IncludeScopes"] = "true", + ["ASPNETCORE_Logging__Console__FormatterOptions__IncludeScopes"] = "true", }; var launchSettingsJson = Path.Combine(TemplateOutputDir, "Properties", "launchSettings.json"); @@ -185,7 +185,7 @@ namespace Templates.Test.Helpers ["ASPNETCORE_Logging__Console__LogLevel__Default"] = "Debug", ["ASPNETCORE_Logging__Console__LogLevel__System"] = "Debug", ["ASPNETCORE_Logging__Console__LogLevel__Microsoft"] = "Debug", - ["ASPNETCORE_Logging__Console__IncludeScopes"] = "true", + ["ASPNETCORE_Logging__Console__FormatterOptions__IncludeScopes"] = "true", }; var projectDll = $"{ProjectName}.dll"; diff --git a/src/Servers/HttpSys/src/NativeInterop/SafeLibraryHandle.cs b/src/Servers/HttpSys/src/NativeInterop/SafeLibraryHandle.cs index bf3254c6d6..0e16996fcf 100644 --- a/src/Servers/HttpSys/src/NativeInterop/SafeLibraryHandle.cs +++ b/src/Servers/HttpSys/src/NativeInterop/SafeLibraryHandle.cs @@ -76,7 +76,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys { // http://msdn.microsoft.com/en-us/library/ms683152(v=vs.85).aspx [return: MarshalAs(UnmanagedType.Bool)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)] internal static extern bool FreeLibrary(IntPtr hModule); diff --git a/src/Servers/IIS/IIS/src/Core/WrappingStream.cs b/src/Servers/IIS/IIS/src/Core/WrappingStream.cs index e765550b8f..d9d3b9bc37 100644 --- a/src/Servers/IIS/IIS/src/Core/WrappingStream.cs +++ b/src/Servers/IIS/IIS/src/Core/WrappingStream.cs @@ -107,6 +107,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core public override void EndWrite(IAsyncResult asyncResult) => _inner.EndWrite(asyncResult); + [Obsolete("This Remoting API is not supported and throws PlatformNotSupportedException.", DiagnosticId = "SYSLIB0010", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] public override object InitializeLifetimeService() => _inner.InitializeLifetimeService(); diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/WrappingStream.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/WrappingStream.cs index c62cda3342..bec06edcb2 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/WrappingStream.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/WrappingStream.cs @@ -107,6 +107,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure public override void EndWrite(IAsyncResult asyncResult) => _inner.EndWrite(asyncResult); + [Obsolete("This Remoting API is not supported and throws PlatformNotSupportedException.", DiagnosticId = "SYSLIB0010", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] public override object InitializeLifetimeService() => _inner.InitializeLifetimeService(); diff --git a/src/Shared/test/Shared.Tests/DotNetMuxerTests.cs b/src/Shared/test/Shared.Tests/DotNetMuxerTests.cs index 8840d87bb8..2835380142 100644 --- a/src/Shared/test/Shared.Tests/DotNetMuxerTests.cs +++ b/src/Shared/test/Shared.Tests/DotNetMuxerTests.cs @@ -10,7 +10,7 @@ namespace Microsoft.Extensions.CommandLineUtils { public class DotNetMuxerTests { - [Fact] + [Fact(Skip = "https://github.com/dotnet/aspnetcore/issues/24082")] public void FindsTheMuxer() { var muxerPath = DotNetMuxer.MuxerPath; diff --git a/src/SignalR/clients/ts/FunctionalTests/Program.cs b/src/SignalR/clients/ts/FunctionalTests/Program.cs index bc1cc0a323..358bba527e 100644 --- a/src/SignalR/clients/ts/FunctionalTests/Program.cs +++ b/src/SignalR/clients/ts/FunctionalTests/Program.cs @@ -35,7 +35,7 @@ namespace FunctionalTests webHostBuilder .ConfigureLogging(factory => { - factory.AddConsole(options => + factory.AddSimpleConsole(options => { options.IncludeScopes = true; options.TimestampFormat = "[HH:mm:ss] "; From 3cf8b5cf10cbf76ccce08d8ef229b7b17d58e1ff Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Wed, 22 Jul 2020 06:54:00 +0430 Subject: [PATCH 040/106] Add IgnoreAntiforgeryToken to Error Page Fixes https://github.com/dotnet/aspnetcore/issues/23759 --- .../ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs | 1 + .../content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs index 3867a3976d..92282ce4c2 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Logging; namespace ComponentsWebAssembly_CSharp.Server.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs index 302c5ce4a6..10108d2b10 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Logging; namespace Company.WebApplication1.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } From 113805aba8162ba7bac42943bcb1324801c20f46 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Wed, 22 Jul 2020 08:58:44 -0700 Subject: [PATCH 041/106] Add support for instantiating the startup class (#24144) * Add support for instantiating the startup class - Adds an overload of UseStartup that takes a factory so users can control the instance creation. The factory is given the WebHostBuilderContext to expose access to configuration and IWebHostEnvironment. - Make sure only one startup delegate runs, the last one registered. * Update src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs Co-authored-by: Chris Ross * PR feedback and bug fixes - Use actual throw expressions... - Added null checks Co-authored-by: Chris Ross --- .../src/GenericHost/GenericWebHostBuilder.cs | 45 ++++-- .../HostingStartupWebHostBuilder.cs | 5 + .../src/GenericHost/ISupportsStartup.cs | 1 + .../Hosting/src/Internal/StartupLoader.cs | 11 +- .../Hosting/src/WebHostBuilderExtensions.cs | 47 ++++++ .../Fakes/GenericWebHostBuilderWrapper.cs | 6 + .../Hosting/test/WebHostBuilderTests.cs | 141 +++++++++++++++++- 7 files changed, 239 insertions(+), 17 deletions(-) diff --git a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs index 8bf97d5763..a9625a7907 100644 --- a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs +++ b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs @@ -21,6 +21,7 @@ namespace Microsoft.AspNetCore.Hosting { private readonly IHostBuilder _builder; private readonly IConfiguration _config; + private object _startupObject; private readonly object _startupKey = new object(); private AggregateException _hostingStartupErrors; @@ -198,10 +199,12 @@ namespace Microsoft.AspNetCore.Hosting public IWebHostBuilder UseStartup(Type startupType) { // UseStartup can be called multiple times. Only run the last one. - _builder.Properties["UseStartup.StartupType"] = startupType; + _startupObject = startupType; + _builder.ConfigureServices((context, services) => { - if (_builder.Properties.TryGetValue("UseStartup.StartupType", out var cachedType) && (Type)cachedType == startupType) + // Run this delegate if the startup type matches + if (object.ReferenceEquals(_startupObject, startupType)) { UseStartup(startupType, context, services); } @@ -210,13 +213,31 @@ namespace Microsoft.AspNetCore.Hosting return this; } - private void UseStartup(Type startupType, HostBuilderContext context, IServiceCollection services) + public IWebHostBuilder UseStartup(Func startupFactory) + { + // Clear the startup type + _startupObject = startupFactory; + + _builder.ConfigureServices((context, services) => + { + // UseStartup can be called multiple times. Only run the last one. + if (object.ReferenceEquals(_startupObject, startupFactory)) + { + var webHostBuilderContext = GetWebHostBuilderContext(context); + var instance = startupFactory(webHostBuilderContext) ?? throw new InvalidOperationException("The specified factory returned null startup instance."); + UseStartup(instance.GetType(), context, services, instance); + } + }); + + return this; + } + + private void UseStartup(Type startupType, HostBuilderContext context, IServiceCollection services, object instance = null) { var webHostBuilderContext = GetWebHostBuilderContext(context); var webHostOptions = (WebHostOptions)context.Properties[typeof(WebHostOptions)]; ExceptionDispatchInfo startupError = null; - object instance = null; ConfigureBuilder configureBuilder = null; try @@ -231,7 +252,7 @@ namespace Microsoft.AspNetCore.Hosting throw new NotSupportedException($"ConfigureServices returning an {typeof(IServiceProvider)} isn't supported."); } - instance = ActivatorUtilities.CreateInstance(new HostServiceProvider(webHostBuilderContext), startupType); + instance ??= ActivatorUtilities.CreateInstance(new HostServiceProvider(webHostBuilderContext), startupType); context.Properties[_startupKey] = instance; // Startup.ConfigureServices @@ -296,13 +317,19 @@ namespace Microsoft.AspNetCore.Hosting public IWebHostBuilder Configure(Action configure) { + // Clear the startup type + _startupObject = configure; + _builder.ConfigureServices((context, services) => { - services.Configure(options => + if (object.ReferenceEquals(_startupObject, configure)) { - var webhostBuilderContext = GetWebHostBuilderContext(context); - options.ConfigureApplication = app => configure(webhostBuilderContext, app); - }); + services.Configure(options => + { + var webhostBuilderContext = GetWebHostBuilderContext(context); + options.ConfigureApplication = app => configure(webhostBuilderContext, app); + }); + } }); return this; diff --git a/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs b/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs index 42cda1cc81..f4034fc38b 100644 --- a/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs +++ b/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs @@ -75,5 +75,10 @@ namespace Microsoft.AspNetCore.Hosting { return _builder.UseStartup(startupType); } + + public IWebHostBuilder UseStartup(Func startupFactory) + { + return _builder.UseStartup(startupFactory); + } } } diff --git a/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs b/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs index 8a2d1dd8ab..998f73d06b 100644 --- a/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs +++ b/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs @@ -10,5 +10,6 @@ namespace Microsoft.AspNetCore.Hosting { IWebHostBuilder Configure(Action configure); IWebHostBuilder UseStartup(Type startupType); + IWebHostBuilder UseStartup(Func startupFactory); } } diff --git a/src/Hosting/Hosting/src/Internal/StartupLoader.cs b/src/Hosting/Hosting/src/Internal/StartupLoader.cs index 46c195c22a..8c80884b83 100644 --- a/src/Hosting/Hosting/src/Internal/StartupLoader.cs +++ b/src/Hosting/Hosting/src/Internal/StartupLoader.cs @@ -37,15 +37,14 @@ namespace Microsoft.AspNetCore.Hosting // // If the Startup class ConfigureServices returns an and there is at least an registered we // throw as the filters can't be applied. - public static StartupMethods LoadMethods(IServiceProvider hostingServiceProvider, Type startupType, string environmentName) + public static StartupMethods LoadMethods(IServiceProvider hostingServiceProvider, Type startupType, string environmentName, object instance = null) { var configureMethod = FindConfigureDelegate(startupType, environmentName); var servicesMethod = FindConfigureServicesDelegate(startupType, environmentName); var configureContainerMethod = FindConfigureContainerDelegate(startupType, environmentName); - object instance = null; - if (!configureMethod.MethodInfo.IsStatic || (servicesMethod != null && !servicesMethod.MethodInfo.IsStatic)) + if (instance == null && (!configureMethod.MethodInfo.IsStatic || (servicesMethod != null && !servicesMethod.MethodInfo.IsStatic))) { instance = ActivatorUtilities.GetServiceOrCreateInstance(hostingServiceProvider, startupType); } @@ -54,7 +53,7 @@ namespace Microsoft.AspNetCore.Hosting // going to be used for anything. var type = configureContainerMethod.MethodInfo != null ? configureContainerMethod.GetContainerType() : typeof(object); - var builder = (ConfigureServicesDelegateBuilder) Activator.CreateInstance( + var builder = (ConfigureServicesDelegateBuilder)Activator.CreateInstance( typeof(ConfigureServicesDelegateBuilder<>).MakeGenericType(type), hostingServiceProvider, servicesMethod, @@ -104,13 +103,13 @@ namespace Microsoft.AspNetCore.Hosting // The ConfigureContainer pipeline needs an Action as source, so we just adapt the // signature with this function. - void Source(TContainerBuilder containerBuilder) => + void Source(TContainerBuilder containerBuilder) => action(containerBuilder); // The ConfigureContainerBuilder.ConfigureContainerFilters expects an Action as value, but our pipeline // produces an Action given a source, so we wrap it on an Action that internally casts // the object containerBuilder to TContainerBuilder to match the expected signature of our ConfigureContainer pipeline. - void Target(object containerBuilder) => + void Target(object containerBuilder) => BuildStartupConfigureContainerFiltersPipeline(Source)((TContainerBuilder)containerBuilder); } } diff --git a/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs b/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs index 9189786b1f..5d2b7133cc 100644 --- a/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs +++ b/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs @@ -61,6 +61,48 @@ namespace Microsoft.AspNetCore.Hosting }); } + /// + /// Specify a factory that creates the startup instance to be used by the web host. + /// + /// The to configure. + /// A delegate that specifies a factory for the startup class. + /// The . + public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, Func startupFactory) + { + if (startupFactory == null) + { + throw new ArgumentNullException(nameof(startupFactory)); + } + + var startupAssemblyName = startupFactory.GetMethodInfo().DeclaringType.GetTypeInfo().Assembly.GetName().Name; + + hostBuilder.UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName); + + // Light up the GenericWebHostBuilder implementation + if (hostBuilder is ISupportsStartup supportsStartup) + { + return supportsStartup.UseStartup(startupFactory); + } + + return hostBuilder + .ConfigureServices((context, services) => + { + services.AddSingleton(typeof(IStartup), sp => + { + var instance = startupFactory(context) ?? throw new InvalidOperationException("The specified factory returned null startup instance."); + + var hostingEnvironment = sp.GetRequiredService(); + + // Check if the instance implements IStartup before wrapping + if (instance is IStartup startup) + { + return startup; + } + + return new ConventionBasedStartup(StartupLoader.LoadMethods(sp, instance.GetType(), hostingEnvironment.EnvironmentName, instance)); + }); + }); + } /// /// Specify the startup type to be used by the web host. @@ -70,6 +112,11 @@ namespace Microsoft.AspNetCore.Hosting /// The . public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, Type startupType) { + if (startupType == null) + { + throw new ArgumentNullException(nameof(startupType)); + } + var startupAssemblyName = startupType.GetTypeInfo().Assembly.GetName().Name; hostBuilder.UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName); diff --git a/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs b/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs index 876cc7199b..e87be3a9ad 100644 --- a/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs +++ b/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs @@ -73,5 +73,11 @@ namespace Microsoft.AspNetCore.Hosting.Tests.Fakes _builder.UseStartup(startupType); return this; } + + public IWebHostBuilder UseStartup(Func startupFactory) + { + _builder.UseStartup(startupFactory); + return this; + } } } diff --git a/src/Hosting/Hosting/test/WebHostBuilderTests.cs b/src/Hosting/Hosting/test/WebHostBuilderTests.cs index e34ae49388..81a8ab4941 100644 --- a/src/Hosting/Hosting/test/WebHostBuilderTests.cs +++ b/src/Hosting/Hosting/test/WebHostBuilderTests.cs @@ -6,15 +6,19 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; +using System.Runtime.ExceptionServices; using System.Threading; using System.Threading.Tasks; +using System.Web; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.Fakes; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Tests.Fakes; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -68,6 +72,71 @@ namespace Microsoft.AspNetCore.Hosting } } + [Theory] + [MemberData(nameof(DefaultWebHostBuildersWithConfig))] + public void UseStartupThrowsWhenFactoryIsNull(IWebHostBuilder builder) + { + var server = new TestServer(); + Assert.Throws(() => builder.UseServer(server).UseStartup((Func)null)); + } + + [Theory] + [MemberData(nameof(DefaultWebHostBuilders))] + public void UseStartupThrowsWhenFactoryReturnsNull(IWebHostBuilder builder) + { + var server = new TestServer(); + var ex = Assert.Throws(() => builder.UseServer(server).UseStartup(context => null).Build()); + Assert.Equal("The specified factory returned null startup instance.", ex.Message); + } + + [Theory] + [MemberData(nameof(DefaultWebHostBuildersWithConfig))] + public async Task MultipleUseStartupCallsLastWins(IWebHostBuilder builder) + { + var server = new TestServer(); + var host = builder.UseServer(server) + .UseStartup() + .UseStartup(context => throw new InvalidOperationException("This doesn't run")) + .Configure(app => + { + throw new InvalidOperationException("This doesn't run"); + }) + .Configure(app => + { + app.Run(context => + { + return context.Response.WriteAsync("This wins"); + }); + }) + .Build(); + using (host) + { + await host.StartAsync(); + await AssertResponseContains(server.RequestDelegate, "This wins"); + } + } + + [Theory] + [MemberData(nameof(DefaultWebHostBuildersWithConfig))] + public async Task UseStartupFactoryWorks(IWebHostBuilder builder) + { + void ConfigureServices(IServiceCollection services) { } + void Configure(IApplicationBuilder app) + { + app.Run(context => context.Response.WriteAsync("UseStartupFactoryWorks")); + } + + var server = new TestServer(); + var host = builder.UseServer(server) + .UseStartup(context => new DelegatingStartup(ConfigureServices, Configure)) + .Build(); + using (host) + { + await host.StartAsync(); + await AssertResponseContains(server.RequestDelegate, "UseStartupFactoryWorks"); + } + } + [Theory] [MemberData(nameof(DefaultWebHostBuildersWithConfig))] public async Task StartupCtorThrows_Fallback(IWebHostBuilder builder) @@ -199,7 +268,7 @@ namespace Microsoft.AspNetCore.Hosting options.ValidateScopes = true; }); - using var host = hostBuilder.Build(); + using var host = hostBuilder.Build(); Assert.Throws(() => host.Start()); Assert.True(configurationCallbackCalled); } @@ -728,6 +797,22 @@ namespace Microsoft.AspNetCore.Hosting } } + [Theory] + [MemberData(nameof(DefaultWebHostBuilders))] + public void DefaultApplicationNameWithUseStartupFactory(IWebHostBuilder builder) + { + using (var host = builder + .UseServer(new TestServer()) + .UseStartup(context => new DelegatingStartup(s => { }, app => { })) + .Build()) + { + var hostingEnv = host.Services.GetService(); + + // Should be the assembly containing this test, because that's where the delegate comes from + Assert.Equal(typeof(WebHostBuilderTests).Assembly.GetName().Name, hostingEnv.ApplicationName); + } + } + [Theory] [MemberData(nameof(DefaultWebHostBuilders))] public void Configure_SupportsNonStaticMethodDelegate(IWebHostBuilder builder) @@ -770,6 +855,27 @@ namespace Microsoft.AspNetCore.Hosting } } + [Fact] + public async Task UseStartupImplementingIStartupWorks() + { + void Configure(IApplicationBuilder app) + { + app.Run(context => context.Response.WriteAsync("Configure")); + } + + IServiceProvider ConfigureServices(IServiceCollection services) => services.BuildServiceProvider(); + + var builder = CreateWebHostBuilder(); + var server = new TestServer(); + using (var host = builder.UseServer(server) + .UseStartup(context => new DelegatingStartupWithIStartup(ConfigureServices, Configure)) + .Build()) + { + await host.StartAsync(); + await AssertResponseContains(server.RequestDelegate, "Configure"); + } + } + [Theory] [MemberData(nameof(DefaultWebHostBuildersWithConfig))] public void Build_DoesNotOverrideILoggerFactorySetByConfigureServices(IWebHostBuilder builder) @@ -1218,7 +1324,7 @@ namespace Microsoft.AspNetCore.Hosting Assert.Equal("nestedvalue", builder.GetSetting("key")); - using var host = builder.Build(); + using var host = builder.Build(); var appConfig = host.Services.GetRequiredService(); Assert.Equal("nestedvalue", appConfig["key"]); } @@ -1574,6 +1680,37 @@ namespace Microsoft.AspNetCore.Hosting } } + private class DelegatingStartupWithIStartup : IStartup + { + private readonly Func _configureServices; + private readonly Action _configure; + + public DelegatingStartupWithIStartup(Func configureServices, Action configure) + { + _configureServices = configureServices; + _configure = configure; + } + + // These are explicitly implemented to verify they don't get called via reflection + IServiceProvider IStartup.ConfigureServices(IServiceCollection services) => _configureServices(services); + void IStartup.Configure(IApplicationBuilder app) => _configure(app); + } + + public class DelegatingStartup + { + private readonly Action _configureServices; + private readonly Action _configure; + + public DelegatingStartup(Action configureServices, Action configure) + { + _configureServices = configureServices; + _configure = configure; + } + + public void ConfigureServices(IServiceCollection services) => _configureServices(services); + public void Configure(IApplicationBuilder app) => _configure(app); + } + public class StartupWithResolvedDisposableThatThrows { public StartupWithResolvedDisposableThatThrows(DisposableService service) From 0ef891f75e878eb95e6e3f996552006f8eb2c4d0 Mon Sep 17 00:00:00 2001 From: Zachary Becknell Date: Wed, 22 Jul 2020 12:50:56 -0400 Subject: [PATCH 042/106] Blazor: Add element/component name for duplicate key (#24153) * Add element/component name for duplicate key * Add in keyword for frame param Co-authored-by: Javier Calvarro Nelson Co-authored-by: Javier Calvarro Nelson --- .../src/RenderTree/RenderTreeDiffBuilder.cs | 18 ++++++++++++++---- .../test/RenderTreeDiffBuilderTest.cs | 6 +++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs index a7892991f4..8f39258ddc 100644 --- a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs +++ b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs @@ -318,7 +318,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree { if (result.ContainsKey(key)) { - ThrowExceptionForDuplicateKey(key); + ThrowExceptionForDuplicateKey(key, frame); } result[key] = new KeyedItemInfo(oldStartIndex, -1); @@ -341,7 +341,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree { if (existingEntry.NewIndex >= 0) { - ThrowExceptionForDuplicateKey(key); + ThrowExceptionForDuplicateKey(key, frame); } result[key] = new KeyedItemInfo(existingEntry.OldIndex, newStartIndex); @@ -355,9 +355,19 @@ namespace Microsoft.AspNetCore.Components.RenderTree return result; } - private static void ThrowExceptionForDuplicateKey(object key) + private static void ThrowExceptionForDuplicateKey(object key, in RenderTreeFrame frame) { - throw new InvalidOperationException($"More than one sibling has the same key value, '{key}'. Key values must be unique."); + switch (frame.FrameType) + { + case RenderTreeFrameType.Component: + throw new InvalidOperationException($"More than one sibling of component '{frame.ComponentType}' has the same key value, '{key}'. Key values must be unique."); + + case RenderTreeFrameType.Element: + throw new InvalidOperationException($"More than one sibling of element '{frame.ElementName}' has the same key value, '{key}'. Key values must be unique."); + + default: + throw new InvalidOperationException($"More than one sibling has the same key value, '{key}'. Key values must be unique."); + } } private static object KeyValue(ref RenderTreeFrame frame) diff --git a/src/Components/Components/test/RenderTreeDiffBuilderTest.cs b/src/Components/Components/test/RenderTreeDiffBuilderTest.cs index 9f3ba71809..0ec9e95fa7 100644 --- a/src/Components/Components/test/RenderTreeDiffBuilderTest.cs +++ b/src/Components/Components/test/RenderTreeDiffBuilderTest.cs @@ -340,7 +340,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act/Assert var ex = Assert.Throws(() => GetSingleUpdatedComponent()); - Assert.Equal("More than one sibling has the same key value, 'key1'. Key values must be unique.", ex.Message); + Assert.Equal("More than one sibling of element 'el' has the same key value, 'key1'. Key values must be unique.", ex.Message); } [Fact] @@ -357,7 +357,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act/Assert var ex = Assert.Throws(() => GetSingleUpdatedComponent()); - Assert.Equal("More than one sibling has the same key value, 'key1'. Key values must be unique.", ex.Message); + Assert.Equal("More than one sibling of element 'el' has the same key value, 'key1'. Key values must be unique.", ex.Message); } [Fact] @@ -374,7 +374,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act/Assert var ex = Assert.Throws(() => GetSingleUpdatedComponent()); - Assert.Equal("More than one sibling has the same key value, 'key1'. Key values must be unique.", ex.Message); + Assert.Equal("More than one sibling of element 'el' has the same key value, 'key1'. Key values must be unique.", ex.Message); } [Fact] From f23460e9018b1a03daf61864b85357f91bca6ac0 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 22 Jul 2020 10:02:23 -0700 Subject: [PATCH 043/106] Quarantine flaky test (#24191) --- src/Components/test/E2ETest/Tests/KeyTest.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Components/test/E2ETest/Tests/KeyTest.cs b/src/Components/test/E2ETest/Tests/KeyTest.cs index 71dae5c290..8b8ee57b72 100644 --- a/src/Components/test/E2ETest/Tests/KeyTest.cs +++ b/src/Components/test/E2ETest/Tests/KeyTest.cs @@ -92,6 +92,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/24190")] public void CanDeleteUnkeyed() { PerformTest( From 059fe39ae094a5d7076ad3583ef4bd70fa6aed0c Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Wed, 22 Jul 2020 10:50:55 -0700 Subject: [PATCH 044/106] Try using helix sdk support directly again (#23585) --- eng/helix/content/InstallDotNet.ps1 | 13 ++------ eng/helix/content/RunTests/RunTestsOptions.cs | 7 ---- eng/helix/content/runtests.cmd | 33 ++++++++++--------- eng/helix/content/runtests.sh | 26 ++++----------- eng/helix/helix.proj | 5 +-- eng/targets/Helix.targets | 4 +-- 6 files changed, 32 insertions(+), 56 deletions(-) diff --git a/eng/helix/content/InstallDotNet.ps1 b/eng/helix/content/InstallDotNet.ps1 index 7e87866433..080a14bd7d 100644 --- a/eng/helix/content/InstallDotNet.ps1 +++ b/eng/helix/content/InstallDotNet.ps1 @@ -1,12 +1,10 @@ <# .SYNOPSIS - Installs dotnet sdk and runtime using https://dot.net/v1/dotnet-install.ps1 + Installs dotnet runtime using https://dot.net/v1/dotnet-install.ps1 .DESCRIPTION - Installs dotnet sdk and runtime using https://dot.net/v1/dotnet-install.ps1 + Installs dotnet runtime using https://dot.net/v1/dotnet-install.ps1 .PARAMETER arch The architecture to install. -.PARAMETER sdkVersion - The sdk version to install .PARAMETER runtimeVersion The runtime version to install .PARAMETER installDir @@ -16,9 +14,6 @@ param( [Parameter(Mandatory = $true)] $arch, - [Parameter(Mandatory = $true)] - $sdkVersion, - [Parameter(Mandatory = $true)] $runtimeVersion, @@ -28,8 +23,6 @@ param( & $PSScriptRoot\Download.ps1 "https://dot.net/v1/dotnet-install.ps1" $PSScriptRoot\dotnet-install.ps1 Write-Host "Download of dotnet-install.ps1 complete..." -Write-Host "Installing SDK...& $PSScriptRoot\dotnet-install.ps1 -Architecture $arch -Version $sdkVersion -InstallDir $installDir" -Invoke-Expression "& $PSScriptRoot\dotnet-install.ps1 -Architecture $arch -Version $sdkVersion -InstallDir $installDir" Write-Host "Installing Runtime...& $PSScriptRoot\dotnet-install.ps1 -Architecture $arch -Runtime dotnet -Version $runtimeVersion -InstallDir $installDir" Invoke-Expression "& $PSScriptRoot\dotnet-install.ps1 -Architecture $arch -Runtime dotnet -Version $runtimeVersion -InstallDir $installDir" -Write-Host "InstallDotNet.ps1 complete..." \ No newline at end of file +Write-Host "InstallDotNet.ps1 complete..." diff --git a/eng/helix/content/RunTests/RunTestsOptions.cs b/eng/helix/content/RunTests/RunTestsOptions.cs index 9e076c9701..e62adef6d5 100644 --- a/eng/helix/content/RunTests/RunTestsOptions.cs +++ b/eng/helix/content/RunTests/RunTestsOptions.cs @@ -21,11 +21,6 @@ namespace RunTests description: "The test dll to run") { Argument = new Argument(), Required = true }, - new Option( - aliases: new string[] { "--sdk" }, - description: "The version of the sdk being used") - { Argument = new Argument(), Required = true }, - new Option( aliases: new string[] { "--runtime" }, description: "The version of the runtime being used") @@ -70,7 +65,6 @@ namespace RunTests var parseResult = command.Parse(args); var options = new RunTestsOptions(); options.Target = parseResult.ValueForOption("--target"); - options.SdkVersion = parseResult.ValueForOption("--sdk"); options.RuntimeVersion = parseResult.ValueForOption("--runtime"); options.HelixQueue = parseResult.ValueForOption("--queue"); options.Architecture = parseResult.ValueForOption("--arch"); @@ -86,7 +80,6 @@ namespace RunTests } public string Target { get; set;} - public string SdkVersion { get; set;} public string RuntimeVersion { get; set;} public string AspNetRuntime { get; set;} public string AspNetRef { get; set;} diff --git a/eng/helix/content/runtests.cmd b/eng/helix/content/runtests.cmd index c1b27b1c89..4b3c4dfea6 100644 --- a/eng/helix/content/runtests.cmd +++ b/eng/helix/content/runtests.cmd @@ -4,35 +4,36 @@ setlocal enabledelayedexpansion REM Use '$' as a variable name prefix to avoid MSBuild variable collisions with these variables set $target=%1 -set $sdkVersion=%2 -set $runtimeVersion=%3 -set $queue=%4 -set $arch=%5 -set $quarantined=%6 -set $ef=%7 -set $aspnetruntime=%8 -set $aspnetref=%9 -REM Batch only supports up to 9 arguments using the %# syntax, need to shift to get more -shift +set $runtimeVersion=%2 +set $queue=%3 +set $arch=%4 +set $quarantined=%5 +set $ef=%6 +set $aspnetruntime=%7 +set $aspnetref=%8 set $helixTimeout=%9 +REM Batch only supports up to 9 arguments using the %# syntax, need to shift to get more -set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk -set DOTNET_ROOT=%DOTNET_HOME%\%$arch% +set DOTNET_ROOT=%HELIX_CORRELATION_PAYLOAD%\dotnet +set DOTNET_HOME=%DOTNET_ROOT% set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 set DOTNET_MULTILEVEL_LOOKUP=0 set DOTNET_CLI_HOME=%HELIX_CORRELATION_PAYLOAD%\home set PATH=%DOTNET_ROOT%;!PATH!;%HELIX_CORRELATION_PAYLOAD%\node\bin echo Set path to: %PATH% -echo "Invoking InstallDotNet.ps1 %$arch% %$sdkVersion% %$runtimeVersion% %DOTNET_ROOT%" -powershell.exe -NoProfile -ExecutionPolicy unrestricted -file InstallDotNet.ps1 %$arch% %$sdkVersion% %$runtimeVersion% %DOTNET_ROOT% +echo "Invoking InstallDotNet.ps1 %$arch% %$runtimeVersion% %DOTNET_ROOT%" +powershell.exe -NoProfile -ExecutionPolicy unrestricted -file InstallDotNet.ps1 %$arch% %$runtimeVersion% %DOTNET_ROOT% + +dotnet --list-sdks +dotnet --list-runtimes set exit_code=0 echo "Restore: dotnet restore RunTests\RunTests.csproj --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json --source https://api.nuget.org/v3/index.json --ignore-failed-sources..." dotnet restore RunTests\RunTests.csproj --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json --source https://api.nuget.org/v3/index.json --ignore-failed-sources -echo "Running tests: dotnet run --project RunTests\RunTests.csproj -- --target %$target% --sdk %$sdkVersion% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout%..." -dotnet run --project RunTests\RunTests.csproj -- --target %$target% --sdk %$sdkVersion% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout% +echo "Running tests: dotnet run --project RunTests\RunTests.csproj -- --target %$target% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout%..." +dotnet run --project RunTests\RunTests.csproj -- --target %$target% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout% if errorlevel neq 0 ( set exit_code=%errorlevel% ) diff --git a/eng/helix/content/runtests.sh b/eng/helix/content/runtests.sh index a1bf932706..583514535f 100644 --- a/eng/helix/content/runtests.sh +++ b/eng/helix/content/runtests.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash -dotnet_sdk_version="$2" -dotnet_runtime_version="$3" +dotnet_runtime_version="$2" RESET="\033[0m" RED="\033[0;31m" @@ -11,7 +10,7 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Ensures every invocation of dotnet apps uses the same dotnet.exe # Add $random to path to ensure tests don't expect dotnet to be in a particular path -export DOTNET_ROOT="$DIR/.dotnet$RANDOM" +export DOTNET_ROOT="$HELIX_CORRELATION_PAYLOAD/dotnet" # Ensure dotnet comes first on PATH export PATH="$DOTNET_ROOT:$PATH:$DIR/node/bin" @@ -47,20 +46,6 @@ fi # Call "sync" between "chmod" and execution to prevent "text file busy" error in Docker (aufs) chmod +x "dotnet-install.sh"; sync -./dotnet-install.sh --version $dotnet_sdk_version --install-dir "$DOTNET_ROOT" -if [ $? -ne 0 ]; then - sdk_retries=3 - while [ $sdk_retries -gt 0 ]; do - ./dotnet-install.sh --version $dotnet_sdk_version --install-dir "$DOTNET_ROOT" - if [ $? -ne 0 ]; then - let sdk_retries=sdk_retries-1 - echo -e "${YELLOW}Failed to install .NET Core SDK $version. Retries left: $sdk_retries.${RESET}" - else - sdk_retries=0 - fi - done -fi - ./dotnet-install.sh --runtime dotnet --version $dotnet_runtime_version --install-dir "$DOTNET_ROOT" if [ $? -ne 0 ]; then runtime_retries=3 @@ -85,11 +70,14 @@ fi # dontet-install.sh seems to affect the Linux filesystem and causes test flakiness unless we sync the filesystem before running tests sync +$DOTNET_ROOT/dotnet --list-sdks +$DOTNET_ROOT/dotnet --list-runtimes + exit_code=0 echo "Restore: $DOTNET_ROOT/dotnet restore RunTests/RunTests.csproj --source https://api.nuget.org/v3/index.json --ignore-failed-sources..." $DOTNET_ROOT/dotnet restore RunTests/RunTests.csproj --source https://api.nuget.org/v3/index.json --ignore-failed-sources -echo "Running tests: $DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --sdk $2 --runtime $3 --queue $4 --arch $5 --quarantined $6 --ef $7 --aspnetruntime $8 --aspnetref $9 --helixTimeout ${10}..." -$DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --sdk $2 --runtime $3 --queue $4 --arch $5 --quarantined $6 --ef $7 --aspnetruntime $8 --aspnetref $9 --helixTimeout ${10} +echo "Running tests: $DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --runtime $2 --queue $3 --arch $4 --quarantined $5 --ef $6 --aspnetruntime $7 --aspnetref $8 --helixTimeout $9..." +$DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --runtime $2 --queue $3 --arch $4 --quarantined $5 --ef $6 --aspnetruntime $7 --aspnetref $8 --helixTimeout $9 exit_code=$? echo "Finished tests...exit_code=$exit_code" diff --git a/eng/helix/helix.proj b/eng/helix/helix.proj index 250b2fb9b2..3a179a8866 100644 --- a/eng/helix/helix.proj +++ b/eng/helix/helix.proj @@ -1,5 +1,4 @@ - bin\ $(BaseOutputPath)$(Configuration)\ diff --git a/eng/targets/Helix.targets b/eng/targets/Helix.targets index 0743963a02..ad7b35da23 100644 --- a/eng/targets/Helix.targets +++ b/eng/targets/Helix.targets @@ -117,8 +117,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj $(TargetFileName) @(HelixPreCommand) @(HelixPostCommand) - call runtests.cmd $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) - ./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) + call runtests.cmd $(TargetFileName) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) + ./runtests.sh $(TargetFileName) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) $(HelixCommand) $(HelixTimeout) From 95c3bd542629ddd4400622db6d71f09e7f911bd1 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Thu, 23 Jul 2020 08:51:37 +1200 Subject: [PATCH 045/106] Add gRPC testassets projects to solution (#24177) --- AspNetCore.sln | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/AspNetCore.sln b/AspNetCore.sln index 541d020247..4d728cb40f 100644 --- a/AspNetCore.sln +++ b/AspNetCore.sln @@ -1455,6 +1455,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ObjectPool", "ObjectPool", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ObjectPool", "src\ObjectPool\src\Microsoft.Extensions.ObjectPool.csproj", "{CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{00B2DD87-7E2A-4460-BE1B-5E18B1062B7F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropClient", "src\Grpc\test\testassets\InteropClient\InteropClient.csproj", "{C3A0F425-669F-46A8-893F-CF449A6DAE56}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropWebsite", "src\Grpc\test\testassets\InteropWebsite\InteropWebsite.csproj", "{19189670-E206-471D-94F8-7D3D545E5020}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -6889,6 +6895,30 @@ Global {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x64.Build.0 = Release|Any CPU {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x86.ActiveCfg = Release|Any CPU {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x86.Build.0 = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x64.ActiveCfg = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x64.Build.0 = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x86.ActiveCfg = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x86.Build.0 = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|Any CPU.Build.0 = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x64.ActiveCfg = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x64.Build.0 = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x86.ActiveCfg = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x86.Build.0 = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x64.ActiveCfg = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x64.Build.0 = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x86.ActiveCfg = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x86.Build.0 = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|Any CPU.Build.0 = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|x64.ActiveCfg = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|x64.Build.0 = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|x86.ActiveCfg = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -7618,6 +7648,9 @@ Global {8A59AF88-4A82-46ED-977D-D909001F8107} = {6126DCE4-9692-4EE2-B240-C65743572995} {E235DAAD-FE73-469E-B16F-F2B8E872E217} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD} = {E235DAAD-FE73-469E-B16F-F2B8E872E217} + {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} = {E763DA15-8F4E-446C-99B8-309053C75598} + {C3A0F425-669F-46A8-893F-CF449A6DAE56} = {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} + {19189670-E206-471D-94F8-7D3D545E5020} = {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F} From e7b55df6c5bf40121f339c435b1d5cdbbb9a8e73 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Wed, 22 Jul 2020 15:04:33 -0700 Subject: [PATCH 046/106] Fix blocking call in FindByEmailAsync (#24116) --- src/Identity/EntityFrameworkCore/src/UserStore.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Identity/EntityFrameworkCore/src/UserStore.cs b/src/Identity/EntityFrameworkCore/src/UserStore.cs index 4709916a12..362d046548 100644 --- a/src/Identity/EntityFrameworkCore/src/UserStore.cs +++ b/src/Identity/EntityFrameworkCore/src/UserStore.cs @@ -322,7 +322,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore return UserLogins.SingleOrDefaultAsync(userLogin => userLogin.LoginProvider == loginProvider && userLogin.ProviderKey == providerKey, cancellationToken); } - /// /// Adds the given to the specified . /// @@ -637,7 +636,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore cancellationToken.ThrowIfCancellationRequested(); ThrowIfDisposed(); - return Task.FromResult(Users.Where(u => u.NormalizedEmail == normalizedEmail).SingleOrDefault()); + return Users.SingleOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail); } /// @@ -719,7 +718,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore return Task.CompletedTask; } - /// /// Remove a new user token. /// From a8c39e9cc5dafbb64f29780a0575df46ab9b7714 Mon Sep 17 00:00:00 2001 From: Brennan Date: Wed, 22 Jul 2020 16:02:00 -0700 Subject: [PATCH 047/106] Provide default implementation for IHubFilter.InvokeMethodAsync (#23968) --- src/SignalR/server/Core/src/IHubFilter.cs | 2 +- .../server/SignalR/test/HubFilterTests.cs | 35 ++++++++++++++++++- .../server/SignalR/test/TestFilters.cs | 5 +++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/SignalR/server/Core/src/IHubFilter.cs b/src/SignalR/server/Core/src/IHubFilter.cs index 398d24a253..baf754bb6c 100644 --- a/src/SignalR/server/Core/src/IHubFilter.cs +++ b/src/SignalR/server/Core/src/IHubFilter.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.SignalR /// The context for the method invocation that holds all the important information about the invoke. /// The next filter to run, and for the final one, the Hub invocation. /// Returns the result of the Hub method invoke. - ValueTask InvokeMethodAsync(HubInvocationContext invocationContext, Func> next); + ValueTask InvokeMethodAsync(HubInvocationContext invocationContext, Func> next) => next(invocationContext); /// /// Allows handling of the method. diff --git a/src/SignalR/server/SignalR/test/HubFilterTests.cs b/src/SignalR/server/SignalR/test/HubFilterTests.cs index 91bc5d835c..5675029eee 100644 --- a/src/SignalR/server/SignalR/test/HubFilterTests.cs +++ b/src/SignalR/server/SignalR/test/HubFilterTests.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Diagnostics; using System.Threading.Tasks; using Microsoft.AspNetCore.Internal; using Microsoft.Extensions.DependencyInjection; @@ -136,6 +135,40 @@ namespace Microsoft.AspNetCore.SignalR.Tests } } + [Fact] + public async Task HubFilterDoesNotNeedToImplementMethods() + { + using (StartVerifiableLog()) + { + var tcsService = new TcsService(); + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(services => + { + services.AddSignalR().AddHubOptions(options => + { + options.AddFilter(typeof(EmptyFilter)); + }); + }, LoggerFactory); + + + var connectionHandler = serviceProvider.GetService>(); + + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + await client.Connected.OrTimeout(); + + var completion = await client.InvokeAsync(nameof(DynamicTestHub.Echo), "hello"); + Assert.Null(completion.Error); + Assert.Equal("hello", completion.Result); + + client.Dispose(); + + await connectionHandlerTask.OrTimeout(); + } + } + } + [Fact] public async Task MutlipleFilters_MethodsAreCalled() { diff --git a/src/SignalR/server/SignalR/test/TestFilters.cs b/src/SignalR/server/SignalR/test/TestFilters.cs index e32c48284a..50f124e5f3 100644 --- a/src/SignalR/server/SignalR/test/TestFilters.cs +++ b/src/SignalR/server/SignalR/test/TestFilters.cs @@ -233,4 +233,9 @@ namespace Microsoft.AspNetCore.SignalR.Tests return next(context); } } + + public class EmptyFilter : IHubFilter + { + // Purposefully not implementing any methods + } } From 8b7972064f068f76452eff7994263a5e4ee3ca46 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Thu, 23 Jul 2020 06:27:06 +0430 Subject: [PATCH 048/106] Load ClientCertificateMode from config #18660 (#24076) --- .../Core/src/Internal/ConfigurationReader.cs | 28 +++- .../Core/src/KestrelConfigurationLoader.cs | 6 + .../Kestrel/test/ConfigurationReaderTests.cs | 48 ++++++- .../test/KestrelConfigurationLoaderTests.cs | 130 ++++++++++++++++++ 4 files changed, 206 insertions(+), 6 deletions(-) diff --git a/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs b/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs index 2843bb014c..894cd0fa01 100644 --- a/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs +++ b/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Security.Authentication; +using Microsoft.AspNetCore.Server.Kestrel.Https; using Microsoft.Extensions.Configuration; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal @@ -18,6 +19,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal private const string EndpointDefaultsKey = "EndpointDefaults"; private const string EndpointsKey = "Endpoints"; private const string UrlKey = "Url"; + private const string ClientCertificateModeKey = "ClientCertificateMode"; private readonly IConfiguration _configuration; @@ -50,6 +52,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal // "EndpointDefaults": { // "Protocols": "Http1AndHttp2", // "SslProtocols": [ "Tls11", "Tls12", "Tls13"], + // "ClientCertificateMode" : "NoCertificate" // } private EndpointDefaults ReadEndpointDefaults() { @@ -57,7 +60,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal return new EndpointDefaults { Protocols = ParseProtocols(configSection[ProtocolsKey]), - SslProtocols = ParseSslProcotols(configSection.GetSection(SslProtocolsKey)) + SslProtocols = ParseSslProcotols(configSection.GetSection(SslProtocolsKey)), + ClientCertificateMode = ParseClientCertificateMode(configSection[ClientCertificateModeKey]) }; } @@ -75,7 +79,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal // "Certificate": { // "Path": "testCert.pfx", // "Password": "testPassword" - // } + // }, + // "ClientCertificateMode" : "NoCertificate" // } var url = endpointConfig[UrlKey]; @@ -91,7 +96,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal Protocols = ParseProtocols(endpointConfig[ProtocolsKey]), ConfigSection = endpointConfig, Certificate = new CertificateConfig(endpointConfig.GetSection(CertificateKey)), - SslProtocols = ParseSslProcotols(endpointConfig.GetSection(SslProtocolsKey)) + SslProtocols = ParseSslProcotols(endpointConfig.GetSection(SslProtocolsKey)), + ClientCertificateMode = ParseClientCertificateMode(endpointConfig[ClientCertificateModeKey]) }; endpoints.Add(endpoint); @@ -100,6 +106,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal return endpoints; } + private ClientCertificateMode? ParseClientCertificateMode(string clientCertificateMode) + { + if (Enum.TryParse(clientCertificateMode, ignoreCase: true, out var result)) + { + return result; + } + + return null; + } + private static HttpProtocols? ParseProtocols(string protocols) { if (Enum.TryParse(protocols, ignoreCase: true, out var result)) @@ -129,11 +145,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal // "EndpointDefaults": { // "Protocols": "Http1AndHttp2", // "SslProtocols": [ "Tls11", "Tls12", "Tls13"], + // "ClientCertificateMode" : "NoCertificate" // } internal class EndpointDefaults { public HttpProtocols? Protocols { get; set; } public SslProtocols? SslProtocols { get; set; } + public ClientCertificateMode? ClientCertificateMode { get; set; } } // "EndpointName": { @@ -143,7 +161,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal // "Certificate": { // "Path": "testCert.pfx", // "Password": "testPassword" - // } + // }, + // "ClientCertificateMode" : "NoCertificate" // } internal class EndpointConfig { @@ -155,6 +174,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal public HttpProtocols? Protocols { get; set; } public SslProtocols? SslProtocols { get; set; } public CertificateConfig Certificate { get; set; } + public ClientCertificateMode? ClientCertificateMode { get; set; } // Compare config sections because it's accessible to app developers via an Action callback. // We cannot rely entirely on comparing config sections for equality, because KestrelConfigurationLoader.Reload() sets diff --git a/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs b/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs index 04349031e2..86e63ddc6a 100644 --- a/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs +++ b/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs @@ -280,6 +280,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel if (https) { httpsOptions.SslProtocols = ConfigurationReader.EndpointDefaults.SslProtocols ?? SslProtocols.None; + httpsOptions.ClientCertificateMode = ConfigurationReader.EndpointDefaults.ClientCertificateMode ?? ClientCertificateMode.NoCertificate; // Defaults Options.ApplyHttpsDefaults(httpsOptions); @@ -289,6 +290,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel httpsOptions.SslProtocols = endpoint.SslProtocols.Value; } + if (endpoint.ClientCertificateMode.HasValue) + { + httpsOptions.ClientCertificateMode = endpoint.ClientCertificateMode.Value; + } + // Specified httpsOptions.ServerCertificate = LoadCertificate(endpoint.Certificate, endpoint.Name) ?? httpsOptions.ServerCertificate; diff --git a/src/Servers/Kestrel/Kestrel/test/ConfigurationReaderTests.cs b/src/Servers/Kestrel/Kestrel/test/ConfigurationReaderTests.cs index 06345cc462..6b24b86b62 100644 --- a/src/Servers/Kestrel/Kestrel/test/ConfigurationReaderTests.cs +++ b/src/Servers/Kestrel/Kestrel/test/ConfigurationReaderTests.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Security.Authentication; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Https; using Microsoft.Extensions.Configuration; using Xunit; @@ -92,7 +93,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests [Fact] public void ReadCertificatesSection_ThrowsOnCaseInsensitiveDuplicate() { - var exception = Assert.Throws(() => + var exception = Assert.Throws(() => new ConfigurationBuilder().AddInMemoryCollection(new[] { new KeyValuePair("Certificates:filecert:Password", "certpassword"), @@ -154,10 +155,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests { new KeyValuePair("Endpoints:End1:Url", "http://*:5001"), new KeyValuePair("Endpoints:End2:Url", "https://*:5002"), + new KeyValuePair("Endpoints:End2:ClientCertificateMode", "AllowCertificate"), new KeyValuePair("Endpoints:End3:Url", "https://*:5003"), + new KeyValuePair("Endpoints:End3:ClientCertificateMode", "RequireCertificate"), new KeyValuePair("Endpoints:End3:Certificate:Path", "/path/cert.pfx"), new KeyValuePair("Endpoints:End3:Certificate:Password", "certpassword"), new KeyValuePair("Endpoints:End4:Url", "https://*:5004"), + new KeyValuePair("Endpoints:End4:ClientCertificateMode", "NoCertificate"), new KeyValuePair("Endpoints:End4:Certificate:Subject", "certsubject"), new KeyValuePair("Endpoints:End4:Certificate:Store", "certstore"), new KeyValuePair("Endpoints:End4:Certificate:Location", "cetlocation"), @@ -171,6 +175,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var end1 = endpoints.First(); Assert.Equal("End1", end1.Name); Assert.Equal("http://*:5001", end1.Url); + Assert.Null(end1.ClientCertificateMode); Assert.NotNull(end1.ConfigSection); Assert.NotNull(end1.Certificate); Assert.False(end1.Certificate.ConfigSection.Exists()); @@ -178,6 +183,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var end2 = endpoints.Skip(1).First(); Assert.Equal("End2", end2.Name); Assert.Equal("https://*:5002", end2.Url); + Assert.Equal(ClientCertificateMode.AllowCertificate, end2.ClientCertificateMode); Assert.NotNull(end2.ConfigSection); Assert.NotNull(end2.Certificate); Assert.False(end2.Certificate.ConfigSection.Exists()); @@ -185,6 +191,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var end3 = endpoints.Skip(2).First(); Assert.Equal("End3", end3.Name); Assert.Equal("https://*:5003", end3.Url); + Assert.Equal(ClientCertificateMode.RequireCertificate, end3.ClientCertificateMode); Assert.NotNull(end3.ConfigSection); Assert.NotNull(end3.Certificate); Assert.True(end3.Certificate.ConfigSection.Exists()); @@ -197,6 +204,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var end4 = endpoints.Skip(3).First(); Assert.Equal("End4", end4.Name); Assert.Equal("https://*:5004", end4.Url); + Assert.Equal(ClientCertificateMode.NoCertificate, end4.ClientCertificateMode); Assert.NotNull(end4.ConfigSection); Assert.NotNull(end4.Certificate); Assert.True(end4.Certificate.ConfigSection.Exists()); @@ -235,7 +243,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var reader = new ConfigurationReader(config); var endpoint = reader.Endpoints.First(); - Assert.Equal(SslProtocols.Tls11|SslProtocols.Tls12, endpoint.SslProtocols); + Assert.Equal(SslProtocols.Tls11 | SslProtocols.Tls12, endpoint.SslProtocols); } [Fact] @@ -287,5 +295,41 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var endpoint = reader.EndpointDefaults; Assert.Null(endpoint.SslProtocols); } + + [Fact] + public void ReadEndpointWithNoClientCertificateModeSettings_ReturnsNull() + { + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("Endpoints:End1:Url", "http://*:5001"), + }).Build(); + var reader = new ConfigurationReader(config); + + var endpoint = reader.Endpoints.First(); + Assert.Null(endpoint.ClientCertificateMode); + } + + [Fact] + public void ReadEndpointDefaultsWithClientCertificateModeSet_ReturnsCorrectValue() + { + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("EndpointDefaults:ClientCertificateMode", "AllowCertificate"), + }).Build(); + var reader = new ConfigurationReader(config); + + var endpoint = reader.EndpointDefaults; + Assert.Equal(ClientCertificateMode.AllowCertificate, endpoint.ClientCertificateMode); + } + + [Fact] + public void ReadEndpointDefaultsWithNoAllowCertificateSettings_ReturnsCorrectValue() + { + var config = new ConfigurationBuilder().Build(); + var reader = new ConfigurationReader(config); + + var endpoint = reader.EndpointDefaults; + Assert.Null(endpoint.ClientCertificateMode); + } } } diff --git a/src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs b/src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs index 5053b3cffb..2e71cdb223 100644 --- a/src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs +++ b/src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs @@ -704,6 +704,136 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests Assert.True(ran1); } + [Fact] + public void EndpointConfigureSection_CanSetClientCertificateMode() + { + var serverOptions = CreateServerOptions(); + var ranDefault = false; + + serverOptions.ConfigureHttpsDefaults(opt => + { + opt.ServerCertificate = TestResources.GetTestCertificate(); + + // Kestrel default + Assert.Equal(ClientCertificateMode.NoCertificate, opt.ClientCertificateMode); + ranDefault = true; + }); + + var ran1 = false; + var ran2 = false; + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("Endpoints:End1:ClientCertificateMode", "AllowCertificate"), + new KeyValuePair("Endpoints:End1:Url", "https://*:5001"), + }).Build(); + serverOptions.Configure(config) + .Endpoint("End1", opt => + { + Assert.Equal(ClientCertificateMode.AllowCertificate, opt.HttpsOptions.ClientCertificateMode); + ran1 = true; + }) + .Load(); + serverOptions.ListenAnyIP(0, opt => + { + opt.UseHttps(httpsOptions => + { + // Kestrel default. + Assert.Equal(ClientCertificateMode.NoCertificate, httpsOptions.ClientCertificateMode); + ran2 = true; + }); + }); + + Assert.True(ranDefault); + Assert.True(ran1); + Assert.True(ran2); + } + + [Fact] + public void EndpointConfigureSection_CanOverrideClientCertificateModeFromConfigureHttpsDefaults() + { + var serverOptions = CreateServerOptions(); + + serverOptions.ConfigureHttpsDefaults(opt => + { + opt.ServerCertificate = TestResources.GetTestCertificate(); + opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate; + }); + + var ran1 = false; + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("Endpoints:End1:ClientCertificateMode", "AllowCertificate"), + new KeyValuePair("Endpoints:End1:Url", "https://*:5001"), + }).Build(); + serverOptions.Configure(config) + .Endpoint("End1", opt => + { + Assert.Equal(ClientCertificateMode.AllowCertificate, opt.HttpsOptions.ClientCertificateMode); + ran1 = true; + }) + .Load(); + + Assert.True(ran1); + } + + [Fact] + public void DefaultEndpointConfigureSection_CanSetClientCertificateMode() + { + var serverOptions = CreateServerOptions(); + + serverOptions.ConfigureHttpsDefaults(opt => + { + opt.ServerCertificate = TestResources.GetTestCertificate(); + }); + + var ran1 = false; + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("EndpointDefaults:ClientCertificateMode", "AllowCertificate"), + new KeyValuePair("Endpoints:End1:Url", "https://*:5001"), + }).Build(); + serverOptions.Configure(config) + .Endpoint("End1", opt => + { + Assert.Equal(ClientCertificateMode.AllowCertificate, opt.HttpsOptions.ClientCertificateMode); + ran1 = true; + }) + .Load(); + + Assert.True(ran1); + } + + + [Fact] + public void DefaultEndpointConfigureSection_ConfigureHttpsDefaultsCanOverrideClientCertificateMode() + { + var serverOptions = CreateServerOptions(); + + serverOptions.ConfigureHttpsDefaults(opt => + { + opt.ServerCertificate = TestResources.GetTestCertificate(); + + Assert.Equal(ClientCertificateMode.AllowCertificate, opt.ClientCertificateMode); + opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate; + }); + + var ran1 = false; + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("EndpointDefaults:ClientCertificateMode", "AllowCertificate"), + new KeyValuePair("Endpoints:End1:Url", "https://*:5001"), + }).Build(); + serverOptions.Configure(config) + .Endpoint("End1", opt => + { + Assert.Equal(ClientCertificateMode.RequireCertificate, opt.HttpsOptions.ClientCertificateMode); + ran1 = true; + }) + .Load(); + + Assert.True(ran1); + } + [Fact] public void Reload_IdentifiesEndpointsToStartAndStop() { From c27dcc4b39d8345c255cdb7e12a68225f36ded3b Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Thu, 23 Jul 2020 14:57:33 -0700 Subject: [PATCH 049/106] Move DataProtection tests to HostBuilder (#24254) --- src/DataProtection/DataProtection.slnf | 23 ++++++++++++++----- .../DataProtection/test/HostingTests.cs | 6 ++--- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/DataProtection/DataProtection.slnf b/src/DataProtection/DataProtection.slnf index 6ecd6ec09c..ec0ec1e358 100644 --- a/src/DataProtection/DataProtection.slnf +++ b/src/DataProtection/DataProtection.slnf @@ -1,7 +1,7 @@ -{ +{ "solution": { "path": "..\\..\\AspNetCore.sln", - "projects" : [ + "projects": [ "src\\DataProtection\\Abstractions\\src\\Microsoft.AspNetCore.DataProtection.Abstractions.csproj", "src\\DataProtection\\Abstractions\\test\\Microsoft.AspNetCore.DataProtection.Abstractions.Tests.csproj", "src\\DataProtection\\Cryptography.Internal\\src\\Microsoft.AspNetCore.Cryptography.Internal.csproj", @@ -10,17 +10,28 @@ "src\\DataProtection\\Cryptography.KeyDerivation\\test\\Microsoft.AspNetCore.Cryptography.KeyDerivation.Tests.csproj", "src\\DataProtection\\DataProtection\\src\\Microsoft.AspNetCore.DataProtection.csproj", "src\\DataProtection\\DataProtection\\test\\Microsoft.AspNetCore.DataProtection.Tests.csproj", + "src\\DataProtection\\EntityFrameworkCore\\src\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj", + "src\\DataProtection\\EntityFrameworkCore\\test\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test.csproj", "src\\DataProtection\\Extensions\\src\\Microsoft.AspNetCore.DataProtection.Extensions.csproj", "src\\DataProtection\\Extensions\\test\\Microsoft.AspNetCore.DataProtection.Extensions.Tests.csproj", "src\\DataProtection\\StackExchangeRedis\\src\\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj", "src\\DataProtection\\StackExchangeRedis\\test\\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.Tests.csproj", "src\\DataProtection\\samples\\CustomEncryptorSample\\CustomEncryptorSample.csproj", + "src\\DataProtection\\samples\\EntityFrameworkCoreSample\\EntityFrameworkCoreSample.csproj", "src\\DataProtection\\samples\\KeyManagementSample\\KeyManagementSample.csproj", "src\\DataProtection\\samples\\NonDISample\\NonDISample.csproj", "src\\DataProtection\\samples\\Redis\\Redis.csproj", - "src\\DataProtection\\EntityFrameworkCore\\src\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj", - "src\\DataProtection\\EntityFrameworkCore\\test\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test.csproj", - "src\\DataProtection\\samples\\EntityFrameworkCoreSample\\EntityFrameworkCoreSample.csproj" + "src\\Hosting\\Abstractions\\src\\Microsoft.AspNetCore.Hosting.Abstractions.csproj", + "src\\Hosting\\Hosting\\src\\Microsoft.AspNetCore.Hosting.csproj", + "src\\Hosting\\Server.Abstractions\\src\\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj", + "src\\Http\\Headers\\src\\Microsoft.Net.Http.Headers.csproj", + "src\\Http\\Http.Abstractions\\src\\Microsoft.AspNetCore.Http.Abstractions.csproj", + "src\\Http\\Http.Extensions\\src\\Microsoft.AspNetCore.Http.Extensions.csproj", + "src\\Http\\Http.Features\\src\\Microsoft.AspNetCore.Http.Features.csproj", + "src\\Http\\Http\\src\\Microsoft.AspNetCore.Http.csproj", + "src\\Http\\WebUtilities\\src\\Microsoft.AspNetCore.WebUtilities.csproj", + "src\\ObjectPool\\src\\Microsoft.Extensions.ObjectPool.csproj", + "src\\Testing\\src\\Microsoft.AspNetCore.Testing.csproj" ] } -} +} \ No newline at end of file diff --git a/src/DataProtection/DataProtection/test/HostingTests.cs b/src/DataProtection/DataProtection/test/HostingTests.cs index c687715a4c..a01be3afd0 100644 --- a/src/DataProtection/DataProtection/test/HostingTests.cs +++ b/src/DataProtection/DataProtection/test/HostingTests.cs @@ -82,13 +82,13 @@ namespace Microsoft.AspNetCore.DataProtection.Test .Throws(new NotSupportedException("This mock doesn't actually work, but shouldn't kill the server")) .Verifiable(); - var builder = new WebHostBuilder() - .UseStartup() + var builder = new HostBuilder() .ConfigureServices(s => s.AddDataProtection() .Services .Replace(ServiceDescriptor.Singleton(mockKeyRing.Object)) - .AddSingleton(Mock.Of())); + .AddSingleton(Mock.Of())) + .ConfigureWebHost(b => b.UseStartup()); using (var host = builder.Build()) { From d9049eca9ced2ea65e21c137ccbff38c51351062 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Thu, 23 Jul 2020 15:47:36 -0700 Subject: [PATCH 050/106] Revert "Try using helix sdk support directly again (#23585)" (#24250) This reverts commit 059fe39ae094a5d7076ad3583ef4bd70fa6aed0c. --- eng/helix/content/InstallDotNet.ps1 | 13 ++++++-- eng/helix/content/RunTests/RunTestsOptions.cs | 7 ++++ eng/helix/content/runtests.cmd | 33 +++++++++---------- eng/helix/content/runtests.sh | 26 +++++++++++---- eng/helix/helix.proj | 5 ++- eng/targets/Helix.targets | 4 +-- 6 files changed, 56 insertions(+), 32 deletions(-) diff --git a/eng/helix/content/InstallDotNet.ps1 b/eng/helix/content/InstallDotNet.ps1 index 080a14bd7d..7e87866433 100644 --- a/eng/helix/content/InstallDotNet.ps1 +++ b/eng/helix/content/InstallDotNet.ps1 @@ -1,10 +1,12 @@ <# .SYNOPSIS - Installs dotnet runtime using https://dot.net/v1/dotnet-install.ps1 + Installs dotnet sdk and runtime using https://dot.net/v1/dotnet-install.ps1 .DESCRIPTION - Installs dotnet runtime using https://dot.net/v1/dotnet-install.ps1 + Installs dotnet sdk and runtime using https://dot.net/v1/dotnet-install.ps1 .PARAMETER arch The architecture to install. +.PARAMETER sdkVersion + The sdk version to install .PARAMETER runtimeVersion The runtime version to install .PARAMETER installDir @@ -14,6 +16,9 @@ param( [Parameter(Mandatory = $true)] $arch, + [Parameter(Mandatory = $true)] + $sdkVersion, + [Parameter(Mandatory = $true)] $runtimeVersion, @@ -23,6 +28,8 @@ param( & $PSScriptRoot\Download.ps1 "https://dot.net/v1/dotnet-install.ps1" $PSScriptRoot\dotnet-install.ps1 Write-Host "Download of dotnet-install.ps1 complete..." +Write-Host "Installing SDK...& $PSScriptRoot\dotnet-install.ps1 -Architecture $arch -Version $sdkVersion -InstallDir $installDir" +Invoke-Expression "& $PSScriptRoot\dotnet-install.ps1 -Architecture $arch -Version $sdkVersion -InstallDir $installDir" Write-Host "Installing Runtime...& $PSScriptRoot\dotnet-install.ps1 -Architecture $arch -Runtime dotnet -Version $runtimeVersion -InstallDir $installDir" Invoke-Expression "& $PSScriptRoot\dotnet-install.ps1 -Architecture $arch -Runtime dotnet -Version $runtimeVersion -InstallDir $installDir" -Write-Host "InstallDotNet.ps1 complete..." +Write-Host "InstallDotNet.ps1 complete..." \ No newline at end of file diff --git a/eng/helix/content/RunTests/RunTestsOptions.cs b/eng/helix/content/RunTests/RunTestsOptions.cs index e62adef6d5..9e076c9701 100644 --- a/eng/helix/content/RunTests/RunTestsOptions.cs +++ b/eng/helix/content/RunTests/RunTestsOptions.cs @@ -21,6 +21,11 @@ namespace RunTests description: "The test dll to run") { Argument = new Argument(), Required = true }, + new Option( + aliases: new string[] { "--sdk" }, + description: "The version of the sdk being used") + { Argument = new Argument(), Required = true }, + new Option( aliases: new string[] { "--runtime" }, description: "The version of the runtime being used") @@ -65,6 +70,7 @@ namespace RunTests var parseResult = command.Parse(args); var options = new RunTestsOptions(); options.Target = parseResult.ValueForOption("--target"); + options.SdkVersion = parseResult.ValueForOption("--sdk"); options.RuntimeVersion = parseResult.ValueForOption("--runtime"); options.HelixQueue = parseResult.ValueForOption("--queue"); options.Architecture = parseResult.ValueForOption("--arch"); @@ -80,6 +86,7 @@ namespace RunTests } public string Target { get; set;} + public string SdkVersion { get; set;} public string RuntimeVersion { get; set;} public string AspNetRuntime { get; set;} public string AspNetRef { get; set;} diff --git a/eng/helix/content/runtests.cmd b/eng/helix/content/runtests.cmd index 4b3c4dfea6..c1b27b1c89 100644 --- a/eng/helix/content/runtests.cmd +++ b/eng/helix/content/runtests.cmd @@ -4,36 +4,35 @@ setlocal enabledelayedexpansion REM Use '$' as a variable name prefix to avoid MSBuild variable collisions with these variables set $target=%1 -set $runtimeVersion=%2 -set $queue=%3 -set $arch=%4 -set $quarantined=%5 -set $ef=%6 -set $aspnetruntime=%7 -set $aspnetref=%8 -set $helixTimeout=%9 +set $sdkVersion=%2 +set $runtimeVersion=%3 +set $queue=%4 +set $arch=%5 +set $quarantined=%6 +set $ef=%7 +set $aspnetruntime=%8 +set $aspnetref=%9 REM Batch only supports up to 9 arguments using the %# syntax, need to shift to get more +shift +set $helixTimeout=%9 -set DOTNET_ROOT=%HELIX_CORRELATION_PAYLOAD%\dotnet -set DOTNET_HOME=%DOTNET_ROOT% +set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk +set DOTNET_ROOT=%DOTNET_HOME%\%$arch% set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 set DOTNET_MULTILEVEL_LOOKUP=0 set DOTNET_CLI_HOME=%HELIX_CORRELATION_PAYLOAD%\home set PATH=%DOTNET_ROOT%;!PATH!;%HELIX_CORRELATION_PAYLOAD%\node\bin echo Set path to: %PATH% -echo "Invoking InstallDotNet.ps1 %$arch% %$runtimeVersion% %DOTNET_ROOT%" -powershell.exe -NoProfile -ExecutionPolicy unrestricted -file InstallDotNet.ps1 %$arch% %$runtimeVersion% %DOTNET_ROOT% - -dotnet --list-sdks -dotnet --list-runtimes +echo "Invoking InstallDotNet.ps1 %$arch% %$sdkVersion% %$runtimeVersion% %DOTNET_ROOT%" +powershell.exe -NoProfile -ExecutionPolicy unrestricted -file InstallDotNet.ps1 %$arch% %$sdkVersion% %$runtimeVersion% %DOTNET_ROOT% set exit_code=0 echo "Restore: dotnet restore RunTests\RunTests.csproj --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json --source https://api.nuget.org/v3/index.json --ignore-failed-sources..." dotnet restore RunTests\RunTests.csproj --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json --source https://api.nuget.org/v3/index.json --ignore-failed-sources -echo "Running tests: dotnet run --project RunTests\RunTests.csproj -- --target %$target% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout%..." -dotnet run --project RunTests\RunTests.csproj -- --target %$target% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout% +echo "Running tests: dotnet run --project RunTests\RunTests.csproj -- --target %$target% --sdk %$sdkVersion% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout%..." +dotnet run --project RunTests\RunTests.csproj -- --target %$target% --sdk %$sdkVersion% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout% if errorlevel neq 0 ( set exit_code=%errorlevel% ) diff --git a/eng/helix/content/runtests.sh b/eng/helix/content/runtests.sh index 583514535f..a1bf932706 100644 --- a/eng/helix/content/runtests.sh +++ b/eng/helix/content/runtests.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash -dotnet_runtime_version="$2" +dotnet_sdk_version="$2" +dotnet_runtime_version="$3" RESET="\033[0m" RED="\033[0;31m" @@ -10,7 +11,7 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Ensures every invocation of dotnet apps uses the same dotnet.exe # Add $random to path to ensure tests don't expect dotnet to be in a particular path -export DOTNET_ROOT="$HELIX_CORRELATION_PAYLOAD/dotnet" +export DOTNET_ROOT="$DIR/.dotnet$RANDOM" # Ensure dotnet comes first on PATH export PATH="$DOTNET_ROOT:$PATH:$DIR/node/bin" @@ -46,6 +47,20 @@ fi # Call "sync" between "chmod" and execution to prevent "text file busy" error in Docker (aufs) chmod +x "dotnet-install.sh"; sync +./dotnet-install.sh --version $dotnet_sdk_version --install-dir "$DOTNET_ROOT" +if [ $? -ne 0 ]; then + sdk_retries=3 + while [ $sdk_retries -gt 0 ]; do + ./dotnet-install.sh --version $dotnet_sdk_version --install-dir "$DOTNET_ROOT" + if [ $? -ne 0 ]; then + let sdk_retries=sdk_retries-1 + echo -e "${YELLOW}Failed to install .NET Core SDK $version. Retries left: $sdk_retries.${RESET}" + else + sdk_retries=0 + fi + done +fi + ./dotnet-install.sh --runtime dotnet --version $dotnet_runtime_version --install-dir "$DOTNET_ROOT" if [ $? -ne 0 ]; then runtime_retries=3 @@ -70,14 +85,11 @@ fi # dontet-install.sh seems to affect the Linux filesystem and causes test flakiness unless we sync the filesystem before running tests sync -$DOTNET_ROOT/dotnet --list-sdks -$DOTNET_ROOT/dotnet --list-runtimes - exit_code=0 echo "Restore: $DOTNET_ROOT/dotnet restore RunTests/RunTests.csproj --source https://api.nuget.org/v3/index.json --ignore-failed-sources..." $DOTNET_ROOT/dotnet restore RunTests/RunTests.csproj --source https://api.nuget.org/v3/index.json --ignore-failed-sources -echo "Running tests: $DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --runtime $2 --queue $3 --arch $4 --quarantined $5 --ef $6 --aspnetruntime $7 --aspnetref $8 --helixTimeout $9..." -$DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --runtime $2 --queue $3 --arch $4 --quarantined $5 --ef $6 --aspnetruntime $7 --aspnetref $8 --helixTimeout $9 +echo "Running tests: $DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --sdk $2 --runtime $3 --queue $4 --arch $5 --quarantined $6 --ef $7 --aspnetruntime $8 --aspnetref $9 --helixTimeout ${10}..." +$DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --sdk $2 --runtime $3 --queue $4 --arch $5 --quarantined $6 --ef $7 --aspnetruntime $8 --aspnetref $9 --helixTimeout ${10} exit_code=$? echo "Finished tests...exit_code=$exit_code" diff --git a/eng/helix/helix.proj b/eng/helix/helix.proj index 3a179a8866..250b2fb9b2 100644 --- a/eng/helix/helix.proj +++ b/eng/helix/helix.proj @@ -1,4 +1,5 @@ + bin\ $(BaseOutputPath)$(Configuration)\ diff --git a/eng/targets/Helix.targets b/eng/targets/Helix.targets index ad7b35da23..0743963a02 100644 --- a/eng/targets/Helix.targets +++ b/eng/targets/Helix.targets @@ -117,8 +117,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj $(TargetFileName) @(HelixPreCommand) @(HelixPostCommand) - call runtests.cmd $(TargetFileName) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) - ./runtests.sh $(TargetFileName) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) + call runtests.cmd $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) + ./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) $(HelixCommand) $(HelixTimeout) From 4485f586aa1d10f00f3daa705bf94786f35239e5 Mon Sep 17 00:00:00 2001 From: Brennan Date: Thu, 23 Jul 2020 18:49:44 -0700 Subject: [PATCH 051/106] Update signalr-daily-tests.yml (#24266) --- .azure/pipelines/signalr-daily-tests.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.azure/pipelines/signalr-daily-tests.yml b/.azure/pipelines/signalr-daily-tests.yml index a60958a0ac..a53c08e9f9 100644 --- a/.azure/pipelines/signalr-daily-tests.yml +++ b/.azure/pipelines/signalr-daily-tests.yml @@ -4,6 +4,11 @@ # Daily Tests for ASP.NET Core SignalR # These use Sauce Labs resources, hence they run daily rather than per-commit. +variables: + - ${{ if ne(variables['System.TeamProject'], 'public') }}: + - group: DotNet-MSRC-Storage + - group: AzureDevOps-Artifact-Feeds-Pats + # The only Daily Tests we have run in Sauce Labs and only need to run on one machine (because they just trigger SauceLabs) # Hence we use the 'default-build.yml' template because it represents a single phase jobs: From 4d45b1803b9412ca37d45cf3d6fb63a19c0056f4 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2020 19:03:01 -0700 Subject: [PATCH 052/106] [master] Update dependencies from dotnet/efcore (#24206) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update dependencies from https://github.com/dotnet/efcore build 20200720.1 Microsoft.EntityFrameworkCore.Tools , Microsoft.EntityFrameworkCore.SqlServer , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.InMemory From Version 5.0.0-rc.1.20367.2 -> To Version 5.0.0-rc.1.20370.1 … * Update dependencies from https://github.com/dotnet/efcore build 20200722.13 Microsoft.EntityFrameworkCore.Tools , Microsoft.EntityFrameworkCore.SqlServer , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.InMemory From Version 5.0.0-rc.1.20367.2 -> To Version 5.0.0-rc.1.20372.13 * Postponing roslyn update Co-authored-by: dotnet-maestro[bot] Co-authored-by: Sébastien Ros --- NuGet.config | 3 --- eng/Version.Details.xml | 28 ++++++++++++++-------------- eng/Versions.props | 14 +++++++------- 3 files changed, 21 insertions(+), 24 deletions(-) diff --git a/NuGet.config b/NuGet.config index 358177f770..94e12ce1b4 100644 --- a/NuGet.config +++ b/NuGet.config @@ -2,9 +2,6 @@ - - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index c5c24dd78c..6a2e61c561 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -13,33 +13,33 @@ https://github.com/dotnet/blazor cc449601d638ffaab58ae9487f0fd010bb178a12 - + https://github.com/dotnet/efcore - 1aac0aec91bb6e5baa682450b7157331f2226173 + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 1aac0aec91bb6e5baa682450b7157331f2226173 + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 1aac0aec91bb6e5baa682450b7157331f2226173 + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 1aac0aec91bb6e5baa682450b7157331f2226173 + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 1aac0aec91bb6e5baa682450b7157331f2226173 + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 1aac0aec91bb6e5baa682450b7157331f2226173 + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 1aac0aec91bb6e5baa682450b7157331f2226173 + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 69ebdd6225..00896bd2bc 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -133,13 +133,13 @@ 3.2.0 - 5.0.0-rc.1.20367.2 - 5.0.0-rc.1.20367.2 - 5.0.0-rc.1.20367.2 - 5.0.0-rc.1.20367.2 - 5.0.0-rc.1.20367.2 - 5.0.0-rc.1.20367.2 - 5.0.0-rc.1.20367.2 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + + + + + + + + + + + + + + + <_ScopedCssExtension>.rz.scp.css + $(ResolveStaticWebAssetsInputsDependsOn);_CollectAllScopedCssAssets;AddScopedCssBundle + $(ResolveCurrentProjectStaticWebAssetsInputsDependsOn);_AddGeneratedScopedCssFiles + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ScopedCssIntermediatePath>$([System.IO.Path]::GetFullPath($(IntermediateOutputPath)scopedcss\)) + + + + <_ScopedCss Condition="'%(_ScopedCss.Identity)' != ''"> + $(_ScopedCssIntermediatePath)%(RelativeDir)%(RecursiveDir)%(FileName)$(_ScopedCssExtension) + + <_ScopedCssOutputs Include="%(_ScopedCss.OutputFile)" /> + + + + + + + + + + + + + + + + + + + <_ScopedCssOutputPath>$(_ScopedCssIntermediatePath)_framework\scoped.styles.css + <_ScopedCssOutputFullPath>$([System.IO.Path]::Combine('$(MSBuildProjectFileDirectory)', '$(_ScopedCssIntermediatePath)_framework\scoped.styles.css')) + + + + + + + + $(PackageId) + $(_ScopedCssIntermediatePath) + $(StaticWebAssetBasePath) + _framework/scoped.styles.css + + <_ExternalStaticWebAsset Include="$(_ScopedCssOutputPath)" Condition="@(_AllScopedCss) != ''"> + generated + $(PackageId) + $(_ScopedCssIntermediatePath) + $(StaticWebAssetBasePath) + _framework/scoped.styles.css + + + + + + + + + + + + + + + + + _content/$(PackageId) + + + + + $(PackageId) + $(IntermediateOutputPath)scopedcss\ + $(StaticWebAssetBasePath) + $([MSBuild]::MakeRelative('$(_ScopedCssIntermediatePath)','%(_ScopedCss.OutputFile)')) + + + + + + + + + + + + + + + + + + + + <_ExternalPublishStaticWebAsset Include="$(_ScopedCssOutputFullPath)" ExcludeFromSingleFile="true"> + generated + $(PackageId) + $(_ScopedCssIntermediatePath) + $(StaticWebAssetBasePath) + PreserveNewest + $([MSBuild]::MakeRelative('$(MSBuildProjectDirectory)',$([MSBuild]::NormalizePath('wwwroot/$(StaticWebAssetBasePath)/_framework/scoped.styles.css')))) + + + + + + + <_CurrentProjectStaticWebAsset Remove="$(_ScopedCssOutputFullPath)" /> + + + + + + diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.props b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.props index 19e380c3a4..3bc7a24d9e 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.props +++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.props @@ -36,6 +36,11 @@ Copyright (c) .NET Foundation. All rights reserved. --> true + + true + $(_Targeting30OrNewerRazorLangVersion) + + + $(_Targeting30OrNewerRazorLangVersion) @@ -353,6 +356,8 @@ Copyright (c) .NET Foundation. All rights reserved. + + diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/test/GenerateStaticWebAssetsPropsFileTest.cs b/src/Razor/Microsoft.NET.Sdk.Razor/test/GenerateStaticWebAssetsPropsFileTest.cs index 2525e15626..48a70dca61 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/test/GenerateStaticWebAssetsPropsFileTest.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/test/GenerateStaticWebAssetsPropsFileTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System.Collections.Generic; @@ -269,7 +269,7 @@ namespace Microsoft.AspNetCore.Razor.Tasks Assert.Equal(expectedError, message); } - [Fact] + [Fact(Skip = "https://github.com/dotnet/aspnetcore/issues/24257")] public void Fails_WhenStaticWebAsset_HaveDifferentContentRoot() { // Arrange diff --git a/src/Razor/test/testassets/ClassLibrary/Components/App.razor b/src/Razor/test/testassets/ClassLibrary/Components/App.razor new file mode 100644 index 0000000000..6ab209770e --- /dev/null +++ b/src/Razor/test/testassets/ClassLibrary/Components/App.razor @@ -0,0 +1 @@ +

Hello from razor

diff --git a/src/Razor/test/testassets/ClassLibrary/Components/App.razor.css b/src/Razor/test/testassets/ClassLibrary/Components/App.razor.css new file mode 100644 index 0000000000..8bf950df47 --- /dev/null +++ b/src/Razor/test/testassets/ClassLibrary/Components/App.razor.css @@ -0,0 +1,3 @@ +p { + font-size: bold; +} diff --git a/src/Razor/test/testassets/ComponentApp/Components/Pages/Counter.razor.css b/src/Razor/test/testassets/ComponentApp/Components/Pages/Counter.razor.css new file mode 100644 index 0000000000..6fd5c7d6df --- /dev/null +++ b/src/Razor/test/testassets/ComponentApp/Components/Pages/Counter.razor.css @@ -0,0 +1,3 @@ +button { + font-size: 16px; +} diff --git a/src/Razor/test/testassets/ComponentApp/Components/Pages/Index.razor.css b/src/Razor/test/testassets/ComponentApp/Components/Pages/Index.razor.css new file mode 100644 index 0000000000..ae982b6049 --- /dev/null +++ b/src/Razor/test/testassets/ComponentApp/Components/Pages/Index.razor.css @@ -0,0 +1,3 @@ +h1 { + font-weight: bold; +} diff --git a/src/Razor/test/testassets/PackageLibraryDirectDependency/Components/App.razor b/src/Razor/test/testassets/PackageLibraryDirectDependency/Components/App.razor new file mode 100644 index 0000000000..6ab209770e --- /dev/null +++ b/src/Razor/test/testassets/PackageLibraryDirectDependency/Components/App.razor @@ -0,0 +1 @@ +

Hello from razor

diff --git a/src/Razor/test/testassets/PackageLibraryDirectDependency/Components/App.razor.css b/src/Razor/test/testassets/PackageLibraryDirectDependency/Components/App.razor.css new file mode 100644 index 0000000000..8bf950df47 --- /dev/null +++ b/src/Razor/test/testassets/PackageLibraryDirectDependency/Components/App.razor.css @@ -0,0 +1,3 @@ +p { + font-size: bold; +} From e23f83d5573cafd896e92ab2e3eea153379c8ed1 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Fri, 24 Jul 2020 08:05:59 -0700 Subject: [PATCH 054/106] Remove duplicate projects from AspNetCore.sln (#24263) --- AspNetCore.sln | 93 -------------------------------------------------- 1 file changed, 93 deletions(-) diff --git a/AspNetCore.sln b/AspNetCore.sln index 0d5d197437..4d728cb40f 100644 --- a/AspNetCore.sln +++ b/AspNetCore.sln @@ -1427,20 +1427,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Compon EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web.Extensions.Tests", "src\Components\Web.Extensions\test\Microsoft.AspNetCore.Components.Web.Extensions.Tests.csproj", "{157605CB-5170-4C1A-980F-4BAE42DB60DE}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{2531F00A-54EB-4074-9C0B-9AF9FB3679DC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestApp", "src\Components\test\testassets\BasicTestApp\BasicTestApp.csproj", "{85D67E40-4B11-48ED-8C43-34590A1FB9ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LazyTestContentPackage", "src\Components\test\testassets\LazyTestContentPackage\LazyTestContentPackage.csproj", "{C0EF53A5-5A94-4849-86B0-2297EA08D649}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.App", "src\Components\test\testassets\ComponentsApp.App\ComponentsApp.App.csproj", "{4FDD820F-8397-41B7-956E-F257DD044BD8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.Server", "src\Components\test\testassets\ComponentsApp.Server\ComponentsApp.Server.csproj", "{CA7C7A53-446F-453A-A57B-78BB1443B8A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestContentPackage", "src\Components\test\testassets\TestContentPackage\TestContentPackage.csproj", "{B32C5882-2313-40D0-A003-2FF33724CFE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.TestServer", "src\Components\test\testassets\TestServer\Components.TestServer.csproj", "{26F88A06-319C-43F3-9FD9-8BC2D29F8C00}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{FED4267E-E5E4-49C5-98DB-8B3F203596EE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Sdk.BlazorWebAssembly", "src\Components\WebAssembly\Sdk\src\Microsoft.NET.Sdk.BlazorWebAssembly.csproj", "{6B2734BF-C61D-4889-ABBF-456A4075D59B}" @@ -6777,78 +6763,6 @@ Global {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x64.Build.0 = Release|Any CPU {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x86.ActiveCfg = Release|Any CPU {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x86.Build.0 = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|x64.ActiveCfg = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|x64.Build.0 = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|x86.ActiveCfg = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|x86.Build.0 = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|Any CPU.Build.0 = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|x64.ActiveCfg = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|x64.Build.0 = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|x86.ActiveCfg = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|x86.Build.0 = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|x64.ActiveCfg = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|x64.Build.0 = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|x86.ActiveCfg = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|x86.Build.0 = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|Any CPU.Build.0 = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|x64.ActiveCfg = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|x64.Build.0 = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|x86.ActiveCfg = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|x86.Build.0 = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|x64.ActiveCfg = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|x64.Build.0 = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|x86.ActiveCfg = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|x86.Build.0 = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|Any CPU.Build.0 = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|x64.ActiveCfg = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|x64.Build.0 = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|x86.ActiveCfg = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|x86.Build.0 = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|x64.ActiveCfg = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|x64.Build.0 = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|x86.ActiveCfg = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|x86.Build.0 = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|Any CPU.Build.0 = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|x64.ActiveCfg = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|x64.Build.0 = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|x86.ActiveCfg = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|x86.Build.0 = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|x64.ActiveCfg = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|x64.Build.0 = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|x86.ActiveCfg = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|x86.Build.0 = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|Any CPU.Build.0 = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|x64.ActiveCfg = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|x64.Build.0 = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|x86.ActiveCfg = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|x86.Build.0 = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|x64.ActiveCfg = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|x64.Build.0 = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|x86.ActiveCfg = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|x86.Build.0 = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|Any CPU.Build.0 = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|x64.ActiveCfg = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|x64.Build.0 = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|x86.ActiveCfg = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|x86.Build.0 = Release|Any CPU {6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -7720,13 +7634,6 @@ Global {F71FE795-9923-461B-9809-BB1821A276D0} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} {8294A74F-7DAA-4B69-BC56-7634D93C9693} = {F71FE795-9923-461B-9809-BB1821A276D0} {157605CB-5170-4C1A-980F-4BAE42DB60DE} = {F71FE795-9923-461B-9809-BB1821A276D0} - {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} = {0508E463-0269-40C9-B5C2-3B600FB2A28B} - {85D67E40-4B11-48ED-8C43-34590A1FB9ED} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {C0EF53A5-5A94-4849-86B0-2297EA08D649} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {4FDD820F-8397-41B7-956E-F257DD044BD8} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {CA7C7A53-446F-453A-A57B-78BB1443B8A8} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {B32C5882-2313-40D0-A003-2FF33724CFE6} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} {FED4267E-E5E4-49C5-98DB-8B3F203596EE} = {562D5067-8CD8-4F19-BCBB-873204932C61} {6B2734BF-C61D-4889-ABBF-456A4075D59B} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE} {83371889-9A3E-4D16-AE77-EB4F83BC6374} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE} From 9a4eb515955154d8cb3e1234a8a2a5311d01fe62 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Fri, 24 Jul 2020 21:12:50 +0430 Subject: [PATCH 055/106] [Azure] Move to GenericHost (#24283) --- .../samples/AzureADB2CSample/Program.cs | 31 ++++++++++++------- .../AzureAD/samples/AzureADSample/Program.cs | 29 ++++++++++------- .../Startup.cs | 16 +++++++--- .../samples/AzureAppServicesSample/Startup.cs | 19 +++++++----- 4 files changed, 60 insertions(+), 35 deletions(-) diff --git a/src/Azure/AzureAD/samples/AzureADB2CSample/Program.cs b/src/Azure/AzureAD/samples/AzureADB2CSample/Program.cs index 66988576d0..a497b4c56e 100644 --- a/src/Azure/AzureAD/samples/AzureADB2CSample/Program.cs +++ b/src/Azure/AzureAD/samples/AzureADB2CSample/Program.cs @@ -1,24 +1,30 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace AzureADB2CSample { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - CreateWebHostBuilder(args).Build().Run(); - } - - public static IWebHostBuilder CreateWebHostBuilder(string[] args) => - new WebHostBuilder() - .UseContentRoot(Directory.GetCurrentDirectory()) - .ConfigureAppConfiguration((hostingContext, config) =>{ + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseKestrel() + .UseStartup(); + }) + .ConfigureAppConfiguration((hostingContext, config) => + { var env = hostingContext.HostingEnvironment; config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) @@ -32,8 +38,9 @@ namespace AzureADB2CSample .AddConsole() .AddDebug(); }) - .UseIISIntegration() - .UseKestrel() - .UseStartup(); + .Build(); + + return host.RunAsync(); + } } } diff --git a/src/Azure/AzureAD/samples/AzureADSample/Program.cs b/src/Azure/AzureAD/samples/AzureADSample/Program.cs index 6d31f69bc8..daf04c6f2f 100644 --- a/src/Azure/AzureAD/samples/AzureADSample/Program.cs +++ b/src/Azure/AzureAD/samples/AzureADSample/Program.cs @@ -2,23 +2,29 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace AzureADSample { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - CreateWebHostBuilder(args).Build().Run(); - } - - public static IWebHostBuilder CreateWebHostBuilder(string[] args) => - new WebHostBuilder() - .UseContentRoot(Directory.GetCurrentDirectory()) - .ConfigureAppConfiguration((hostingContext, config) =>{ + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseKestrel() + .UseStartup(); + }) + .ConfigureAppConfiguration((hostingContext, config) => + { var env = hostingContext.HostingEnvironment; config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) @@ -32,8 +38,9 @@ namespace AzureADSample .AddConsole() .AddDebug(); }) - .UseIISIntegration() - .UseKestrel() - .UseStartup(); + .Build(); + + return host.RunAsync(); + } } } diff --git a/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs b/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs index 1a91822bc1..09de3fb3f0 100644 --- a/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs +++ b/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs @@ -1,8 +1,10 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace IISSample @@ -58,18 +60,22 @@ namespace IISSample }); } - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); }) - .UseKestrel() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Azure/samples/AzureAppServicesSample/Startup.cs b/src/Azure/samples/AzureAppServicesSample/Startup.cs index 4638758d90..2347a3cb37 100644 --- a/src/Azure/samples/AzureAppServicesSample/Startup.cs +++ b/src/Azure/samples/AzureAppServicesSample/Startup.cs @@ -1,9 +1,11 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace IISSample @@ -70,20 +72,23 @@ namespace IISSample }); } - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseAzureAppServices() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); }) - .UseKestrel() - .UseAzureAppServices() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } - From 918d953767a8a9988c9e075254b70866e8b24e76 Mon Sep 17 00:00:00 2001 From: Doug Bunting <6431421+dougbu@users.noreply.github.com> Date: Fri, 24 Jul 2020 09:45:11 -0700 Subject: [PATCH 056/106] Use Microsoft.CodeAnalysis.PublicApiAnalyzers (#24188) * Use Microsoft.CodeAnalysis.PublicApiAnalyzers - #4259 1/2 - followup 2/3 for 5266918ed2be - includes baselines for 16 MVC projects - will automated further additions in another PR - suppress warnings that may cause back-compat problems if fixed nit: sort `@(LatestPackageReference)` a bit better --- eng/Dependencies.props | 3 +- eng/Versions.props | 1 + eng/targets/CSharp.Common.targets | 24 + .../src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 852 ++++++ .../Mvc.ApiExplorer/src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 98 + src/Mvc/Mvc.Core/src/PublicAPI.Shipped.txt | 1 + src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt | 2453 +++++++++++++++++ .../ControllerLinkGeneratorExtensions.cs | 11 +- .../Routing/PageLinkGeneratorExtensions.cs | 7 +- src/Mvc/Mvc.Cors/src/PublicAPI.Shipped.txt | 1 + src/Mvc/Mvc.Cors/src/PublicAPI.Unshipped.txt | 12 + .../src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 38 + .../src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 13 + .../src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 137 + .../src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 78 + .../src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 54 + .../src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 24 + src/Mvc/Mvc.Razor/src/PublicAPI.Shipped.txt | 1 + src/Mvc/Mvc.Razor/src/PublicAPI.Unshipped.txt | 264 ++ .../Mvc.RazorPages/src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 638 +++++ .../Mvc.TagHelpers/src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 373 +++ src/Mvc/Mvc.Testing/src/PublicAPI.Shipped.txt | 1 + .../Mvc.Testing/src/PublicAPI.Unshipped.txt | 48 + .../src/PublicAPI.Shipped.txt | 1 + .../src/PublicAPI.Unshipped.txt | 1160 ++++++++ src/Mvc/Mvc/src/PublicAPI.Shipped.txt | 1 + src/Mvc/Mvc/src/PublicAPI.Unshipped.txt | 10 + 37 files changed, 6309 insertions(+), 5 deletions(-) create mode 100644 src/Mvc/Mvc.Abstractions/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.Core/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.Cors/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Cors/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.Localization/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Localization/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.Razor/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Razor/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.RazorPages/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.RazorPages/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.TagHelpers/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.TagHelpers/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.Testing/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.Testing/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Unshipped.txt create mode 100644 src/Mvc/Mvc/src/PublicAPI.Shipped.txt create mode 100644 src/Mvc/Mvc/src/PublicAPI.Unshipped.txt diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 0e3a756de7..081db9be88 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -106,6 +106,7 @@ and are generated based on the last package release. + @@ -161,6 +162,7 @@ and are generated based on the last package release. + @@ -178,7 +180,6 @@ and are generated based on the last package release. - diff --git a/eng/Versions.props b/eng/Versions.props index 00896bd2bc..d11516a861 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -219,6 +219,7 @@ 3.7.0-4.20351.7 3.7.0-4.20351.7 3.7.0-4.20351.7 + 3.3.0-beta2.final 3.0.0 1.0.0-20200708.1 3.19.8 diff --git a/eng/targets/CSharp.Common.targets b/eng/targets/CSharp.Common.targets index 65d5f3b0fc..62b7462035 100644 --- a/eng/targets/CSharp.Common.targets +++ b/eng/targets/CSharp.Common.targets @@ -6,6 +6,30 @@ .NETFramework + + + <_TFMDirectory>$(TargetFramework) + <_TFMDirectory Condition=" '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' ">netcoreapp + + + $(NoWarn);RS0041 + + + + + + + + + + + diff --git a/src/Mvc/Mvc.Abstractions/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..af5b4f50c8 --- /dev/null +++ b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt @@ -0,0 +1,852 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.ActionConstraints.get -> System.Collections.Generic.IList? +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.ActionConstraints.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.ActionDescriptor() -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.AttributeRouteInfo.get -> Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo? +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.AttributeRouteInfo.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.BoundProperties.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.BoundProperties.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.EndpointMetadata.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.EndpointMetadata.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.FilterDescriptors.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.FilterDescriptors.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Id.get -> string! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Parameters.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Parameters.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Properties.get -> System.Collections.Generic.IDictionary! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Properties.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.RouteValues.get -> System.Collections.Generic.IDictionary! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.RouteValues.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorExtensions +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext.ActionDescriptorProviderContext() -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext.ActionInvokerProviderContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext) -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext.Result.get -> Microsoft.AspNetCore.Mvc.Abstractions.IActionInvoker? +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext.Result.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionDescriptorProvider +Microsoft.AspNetCore.Mvc.Abstractions.IActionDescriptorProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionDescriptorProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionDescriptorProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvoker +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvoker.InvokeAsync() -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo! +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.BindingInfo.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.Name.get -> string! +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.Name.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.ParameterDescriptor() -> void +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.ParameterType.get -> System.Type! +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.ParameterType.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.ActionConstraintContext() -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.Candidates.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.Candidates.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.CurrentCandidate.get -> Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.CurrentCandidate.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.RouteContext.get -> Microsoft.AspNetCore.Routing.RouteContext! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.RouteContext.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.ActionConstraintItem(Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintMetadata! metadata) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.Constraint.get -> Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.Constraint.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.Metadata.get -> Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintMetadata! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext.Action.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext.ActionConstraintProviderContext(Microsoft.AspNetCore.Http.HttpContext! context, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! action, System.Collections.Generic.IList! items) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate.Action.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate.ActionSelectorCandidate(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! action, System.Collections.Generic.IReadOnlyList! constraints) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate.Constraints.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint.Accept(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext! context) -> bool +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint.Order.get -> int +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintFactory +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintFactory.CreateInstance(System.IServiceProvider! services) -> Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint! +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintFactory.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintMetadata +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintProvider +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ActionContext +Microsoft.AspNetCore.Mvc.ActionContext.ActionContext() -> void +Microsoft.AspNetCore.Mvc.ActionContext.ActionContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, Microsoft.AspNetCore.Routing.RouteData! routeData, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! actionDescriptor) -> void +Microsoft.AspNetCore.Mvc.ActionContext.ActionContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, Microsoft.AspNetCore.Routing.RouteData! routeData, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! actionDescriptor, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! modelState) -> void +Microsoft.AspNetCore.Mvc.ActionContext.ActionContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext) -> void +Microsoft.AspNetCore.Mvc.ActionContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! +Microsoft.AspNetCore.Mvc.ActionContext.ActionDescriptor.set -> void +Microsoft.AspNetCore.Mvc.ActionContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +Microsoft.AspNetCore.Mvc.ActionContext.HttpContext.set -> void +Microsoft.AspNetCore.Mvc.ActionContext.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! +Microsoft.AspNetCore.Mvc.ActionContext.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData! +Microsoft.AspNetCore.Mvc.ActionContext.RouteData.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ActionDescriptor.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ApiDescription() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.GroupName.get -> string? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.GroupName.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.HttpMethod.get -> string? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.HttpMethod.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ParameterDescriptions.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.Properties.get -> System.Collections.Generic.IDictionary! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.RelativePath.get -> string! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.RelativePath.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.SupportedRequestFormats.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.SupportedResponseTypes.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.Actions.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.ApiDescriptionProviderContext(System.Collections.Generic.IReadOnlyList! actions) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ApiParameterDescription() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.BindingInfo.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.DefaultValue.get -> object? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.DefaultValue.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.IsRequired.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.IsRequired.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ModelMetadata.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Name.get -> string! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Name.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ParameterDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ParameterDescriptor.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.RouteInfo.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.RouteInfo.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Source.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Source.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Type.get -> System.Type! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Type.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.ApiParameterRouteInfo() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.Constraints.get -> System.Collections.Generic.IEnumerable? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.Constraints.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.DefaultValue.get -> object? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.DefaultValue.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.IsOptional.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.IsOptional.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.ApiRequestFormat() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.Formatter.get -> Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.Formatter.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.MediaType.get -> string! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.MediaType.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.ApiResponseFormat() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.Formatter.get -> Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.Formatter.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.MediaType.get -> string! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.MediaType.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseFormats.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseFormats.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseType() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.IsDefaultResponse.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.IsDefaultResponse.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ModelMetadata.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.Type.get -> System.Type? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.Type.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.Authorization.IAllowAnonymousFilter +Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext +Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ActionExecutedContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, object! controller) -> void +Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext +Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.ActionExecutingContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, System.Collections.Generic.IDictionary! actionArguments, object! controller) -> void +Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate +Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext +Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.AuthorizationFilterContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters) -> void +Microsoft.AspNetCore.Mvc.Filters.ExceptionContext +Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterContext +Microsoft.AspNetCore.Mvc.Filters.FilterContext.FilterContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterContext.FindEffectivePolicy() -> TMetadata +Microsoft.AspNetCore.Mvc.Filters.FilterContext.IsEffectivePolicy(TMetadata policy) -> bool +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.FilterDescriptor(Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! filter, int filterScope) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.Order.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.Scope.get -> int +Microsoft.AspNetCore.Mvc.Filters.FilterItem +Microsoft.AspNetCore.Mvc.Filters.FilterItem.Descriptor.get -> Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor! +Microsoft.AspNetCore.Mvc.Filters.FilterItem.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! +Microsoft.AspNetCore.Mvc.Filters.FilterItem.Filter.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterItem.FilterItem(Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor! descriptor) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterItem.FilterItem(Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor! descriptor, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! filter) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterItem.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.Filters.FilterItem.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.ActionContext.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.FilterProviderContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! items) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.Results.set -> void +Microsoft.AspNetCore.Mvc.Filters.IActionFilter +Microsoft.AspNetCore.Mvc.Filters.IActionFilter.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IActionFilter.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IAlwaysRunResultFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncActionFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncActionFilter.OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext! context, Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate! next) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAsyncAlwaysRunResultFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncAuthorizationFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncAuthorizationFilter.OnAuthorizationAsync(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAsyncExceptionFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncExceptionFilter.OnExceptionAsync(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAsyncResourceFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncResourceFilter.OnResourceExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext! context, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutionDelegate! next) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAsyncResultFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncResultFilter.OnResultExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext! context, Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate! next) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAuthorizationFilter +Microsoft.AspNetCore.Mvc.Filters.IAuthorizationFilter.OnAuthorization(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IExceptionFilter +Microsoft.AspNetCore.Mvc.Filters.IExceptionFilter.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IFilterContainer +Microsoft.AspNetCore.Mvc.Filters.IFilterContainer.FilterDefinition.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! +Microsoft.AspNetCore.Mvc.Filters.IFilterContainer.FilterDefinition.set -> void +Microsoft.AspNetCore.Mvc.Filters.IFilterFactory +Microsoft.AspNetCore.Mvc.Filters.IFilterFactory.CreateInstance(System.IServiceProvider! serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! +Microsoft.AspNetCore.Mvc.Filters.IFilterFactory.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +Microsoft.AspNetCore.Mvc.Filters.IFilterProvider +Microsoft.AspNetCore.Mvc.Filters.IFilterProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IFilterProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IFilterProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.IOrderedFilter +Microsoft.AspNetCore.Mvc.Filters.IOrderedFilter.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.IResourceFilter +Microsoft.AspNetCore.Mvc.Filters.IResourceFilter.OnResourceExecuted(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IResourceFilter.OnResourceExecuting(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IResultFilter +Microsoft.AspNetCore.Mvc.Filters.IResultFilter.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IResultFilter.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ResourceExecutedContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters) -> void +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext.ResourceExecutingContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, System.Collections.Generic.IList! valueProviderFactories) -> void +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext.ValueProviderFactories.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutionDelegate +Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext +Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ResultExecutedContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, Microsoft.AspNetCore.Mvc.IActionResult! result, object! controller) -> void +Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext +Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.ResultExecutingContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, Microsoft.AspNetCore.Mvc.IActionResult! result, object! controller) -> void +Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection.FormatterCollection() -> void +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection.FormatterCollection(System.Collections.Generic.IList! list) -> void +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection.RemoveType(System.Type! formatterType) -> void +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection.RemoveType() -> void +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter.CanRead(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext! context) -> bool +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter.ReadAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatterExceptionPolicy.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext! context) -> bool +Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.InputFormatterContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, string! modelName, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! modelState, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, System.Func! readerFactory) -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.InputFormatterContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, string! modelName, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! modelState, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, System.Func! readerFactory, bool treatEmptyInputAsDefaultValue) -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.ModelName.get -> string! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.ModelType.get -> System.Type! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.ReaderFactory.get -> System.Func! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.TreatEmptyInputAsDefaultValue.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException() -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException(string! message) -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException(string! message, System.Exception! innerException) -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy.AllExceptions = 0 -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy.MalformedInputExceptions = 1 -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.HasError.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.IsModelSet.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.Model.get -> object? +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.OutputFormatterCanWriteContext(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> void +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext.OutputFormatterWriteContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, System.Func! writerFactory, System.Type! objectType, object! object) -> void +Microsoft.AspNetCore.Mvc.IActionResult +Microsoft.AspNetCore.Mvc.IActionResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.IUrlHelper +Microsoft.AspNetCore.Mvc.IUrlHelper.Action(Microsoft.AspNetCore.Mvc.Routing.UrlActionContext! actionContext) -> string! +Microsoft.AspNetCore.Mvc.IUrlHelper.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.IUrlHelper.Content(string! contentPath) -> string! +Microsoft.AspNetCore.Mvc.IUrlHelper.IsLocalUrl(string! url) -> bool +Microsoft.AspNetCore.Mvc.IUrlHelper.Link(string! routeName, object! values) -> string! +Microsoft.AspNetCore.Mvc.IUrlHelper.RouteUrl(Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext! routeContext) -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BinderModelName.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BinderModelName.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BinderType.get -> System.Type? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BinderType.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BindingInfo() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BindingInfo(Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo! other) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BindingSource.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.EmptyBodyBehavior.get -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.EmptyBodyBehavior.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.PropertyFilterProvider.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.RequestPredicate.get -> System.Func? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.RequestPredicate.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.TryApplyBindingInfo(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.BindingSource(string! id, string! displayName, bool isGreedy, bool isFromRequest) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.DisplayName.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Id.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.IsFromRequest.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.IsGreedy.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource +Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource.BindingSources.get -> System.Collections.Generic.IEnumerable! +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior.Allow = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior.Default = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior.Disallow = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName.EnumGroupAndName(string! group, System.Func! name) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName.EnumGroupAndName(string! group, string! name) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName.Group.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName.Name.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.IBinderTypeProviderMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.IBinderTypeProviderMetadata.BinderType.get -> System.Type! +Microsoft.AspNetCore.Mvc.ModelBinding.IBindingSourceMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.IBindingSourceMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext! bindingContext) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext! context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder! +Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider.GetMetadataForProperties(System.Type! modelType) -> System.Collections.Generic.IEnumerable! +Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider.GetMetadataForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.IModelNameProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IModelNameProvider.Name.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider.PropertyFilter.get -> System.Func! +Microsoft.AspNetCore.Mvc.ModelBinding.IRequestPredicateProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IRequestPredicateProvider.RequestPredicate.get -> System.Func! +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider.ContainsPrefix(string! prefix) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider.GetValue(string! key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ModelBindingMessageProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ContainerType.get -> System.Type? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.MetadataKind.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ModelType.get -> System.Type! +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.Name.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ParameterInfo.get -> System.Reflection.ParameterInfo? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.PropertyInfo.get -> System.Reflection.PropertyInfo? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Parameter = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Property = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Type = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.ModelBinderProviderContext() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelBindingContext() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope.NestedScope(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.OriginalModelName.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.OriginalModelName.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.IsModelSet.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Model.get -> object? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.ErrorMessage.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.Exception.get -> System.Exception? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.ModelError(System.Exception! exception) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.ModelError(System.Exception! exception, string? errorMessage) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.ModelError(string? errorMessage) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection +Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection.Add(System.Exception! exception) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection.Add(string! errorMessage) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection.ModelErrorCollection() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ContainerType.get -> System.Type? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ElementType.get -> System.Type? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetDisplayName() -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Identity.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsCollectionType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsComplexType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsEnumerableType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsNullableValueType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsReferenceOrNullableType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.MetadataKind.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ModelMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity identity) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ModelType.get -> System.Type! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Name.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ParameterName.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyName.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.UnderlyingOrModelType.get -> System.Type! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.ModelMetadataProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection +Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection.ModelPropertyCollection(System.Collections.Generic.IEnumerable! properties) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection.this[string! propertyName].get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.AddModelError(string! key, System.Exception! exception, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.AddModelError(string! key, string! errorMessage) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ClearValidationState(string! key) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ContainsKey(string! key) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.Current.get -> System.Collections.Generic.KeyValuePair +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.Enumerator(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary, string! prefix) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ErrorCount.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.FindKeysWithPrefix(string! prefix) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.PrefixEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.GetFieldValidationState(string! key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.GetValidationState(string! key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.HasReachedMaxErrors.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.IsValid.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerable.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerable.KeyEnumerable(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.Current.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.KeyEnumerator(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary, string! prefix) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Keys.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.MarkFieldSkipped(string! key) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.MarkFieldValid(string! key) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.MaxAllowedErrors.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.MaxAllowedErrors.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Merge(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ModelStateDictionary() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ModelStateDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ModelStateDictionary(int maxAllowedErrors) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.PrefixEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.PrefixEnumerable.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.PrefixEnumerable.PrefixEnumerable(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary, string! prefix) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Remove(string! key) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Root.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.SetModelValue(string! key, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult valueProviderResult) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.SetModelValue(string! key, object? rawValue, string! attemptedValue) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.TryAddModelError(string! key, System.Exception! exception, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.TryAddModelError(string! key, string! errorMessage) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.TryAddModelException(string! key, System.Exception! exception) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.TryGetValue(string! key, out Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry? value) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerable.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerable.ValueEnumerable(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.Current.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.ValueEnumerator(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary, string! prefix) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Values.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.this[string! key].get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.AttemptedValue.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.AttemptedValue.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.Errors.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.ModelStateEntry() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.RawValue.get -> object? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.RawValue.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.ValidationState.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Skipped = 3 -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Unvalidated = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Valid = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.TooManyModelErrorsException +Microsoft.AspNetCore.Mvc.ModelBinding.TooManyModelErrorsException.TooManyModelErrorsException(string! message) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext.Attributes.get -> System.Collections.Generic.IDictionary! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext.ClientModelValidationContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! metadataProvider, System.Collections.Generic.IDictionary! attributes) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.ClientValidatorItem() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.ClientValidatorItem(object! validatorMetadata) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.Validator.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidator! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.Validator.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.ValidatorMetadata.get -> object! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext.ClientValidatorProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, System.Collections.Generic.IList! items) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidator +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidator.AddValidation(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidatorProvider.CreateValidators(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidator +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidator.Validate(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext! context) -> System.Collections.Generic.IEnumerable! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider.CreateValidators(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter.ShouldValidateEntry(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry entry, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry parentEntry) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy.GetChildren(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, string! key, object! model) -> System.Collections.Generic.IEnumerator! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext.Container.get -> object! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext.Model.get -> object! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext.ModelValidationContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! metadataProvider, object! container, object! model) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase.ModelValidationContextBase(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! metadataProvider) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationResult +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationResult.MemberName.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationResult.Message.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationResult.ModelValidationResult(string! memberName, string! message) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.ModelMetadata.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.ModelValidatorProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, System.Collections.Generic.IList! items) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.Key.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.Model.get -> object? +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.ValidationEntry(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, string! key, System.Func! modelAccessor) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.ValidationEntry(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, string! key, object! model) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Add(System.Collections.Generic.KeyValuePair item) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Add(object! key, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry! value) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Contains(System.Collections.Generic.KeyValuePair item) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.ContainsKey(object! key) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.CopyTo(System.Collections.Generic.KeyValuePair[]! array, int arrayIndex) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.GetEnumerator() -> System.Collections.Generic.IEnumerator>! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.IsReadOnly.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Keys.get -> System.Collections.Generic.ICollection! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Remove(System.Collections.Generic.KeyValuePair item) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Remove(object! key) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.TryGetValue(object! key, out Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry! value) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.ValidationStateDictionary() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Values.get -> System.Collections.Generic.ICollection! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.this[object! key].get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry? +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.this[object! key].set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Key.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Key.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Metadata.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Strategy.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Strategy.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.SuppressValidation.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.SuppressValidation.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.ValidationStateEntry() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.Validator.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidator! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.Validator.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.ValidatorItem() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.ValidatorItem(object! validatorMetadata) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.ValidatorMetadata.get -> object! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderException +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderException.ValueProviderException(string! message) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderException.ValueProviderException(string! message, System.Exception! innerException) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext.ValueProviderFactoryContext(Microsoft.AspNetCore.Mvc.ActionContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext.ValueProviders.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Culture.get -> System.Globalization.CultureInfo! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.FirstValue.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.GetEnumerator() -> System.Collections.Generic.IEnumerator! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Length.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.ValueProviderResult(Microsoft.Extensions.Primitives.StringValues values) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.ValueProviderResult(Microsoft.Extensions.Primitives.StringValues values, System.Globalization.CultureInfo! culture) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Values.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.AttributeRouteInfo() -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Name.get -> string! +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Name.set -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Order.get -> int +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Order.set -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.SuppressLinkGeneration.get -> bool +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.SuppressLinkGeneration.set -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.SuppressPathMatching.get -> bool +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.SuppressPathMatching.set -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Template.get -> string? +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Template.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Action.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Action.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Controller.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Controller.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Fragment.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Fragment.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Host.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Host.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Protocol.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Protocol.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.UrlActionContext() -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Values.get -> object? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Values.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Fragment.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Fragment.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Host.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Host.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Protocol.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Protocol.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.RouteName.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.RouteName.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.UrlRouteContext() -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Values.get -> object? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Values.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.CreateBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ActionContext.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.BinderModelName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.BinderModelName.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.BindingSource.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.EnterNestedScope() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.EnterNestedScope(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, string! fieldName, string! modelName, object! model) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ExitNestedScope() -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.FieldName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.FieldName.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.IsTopLevelObject.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.IsTopLevelObject.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.Model.get -> object! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.Model.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelMetadata.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelName.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelState.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.PropertyFilter.get -> System.Func! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.PropertyFilter.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.Result.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.Result.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ValidationState.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ValueProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ValueProvider.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.AdditionalValues.get -> System.Collections.Generic.IReadOnlyDictionary! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BinderModelName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BinderType.get -> System.Type! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ConvertEmptyStringToNull.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.DataTypeName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Description.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.DisplayFormatString.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.DisplayName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.EditFormatString.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ElementMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.EnumGroupedDisplayNamesAndValues.get -> System.Collections.Generic.IEnumerable>! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.EnumNamesAndValues.get -> System.Collections.Generic.IReadOnlyDictionary! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HasNonDefaultEditFormat.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HideSurroundingHtml.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HtmlEncode.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsBindingAllowed.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsBindingRequired.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsEnum.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsFlagsEnum.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsReadOnly.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsRequired.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.NullDisplayText.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Order.get -> int +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Placeholder.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Properties.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyGetter.get -> System.Func! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertySetter.get -> System.Action! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ShowForDisplay.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ShowForEdit.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.SimpleDisplayProperty.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.TemplateHint.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ValidateChildren.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo! parameter) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForProperties(System.Type! modelType) -> System.Collections.Generic.IEnumerable! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.Children.get -> System.Collections.Generic.IReadOnlyList? +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.GetModelStateForProperty(string! propertyName) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry? +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.IsContainerNode.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource.CanAcceptDataFrom(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! bindingSource) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.ToString() -> string! +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.ToString() -> string! +static Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorExtensions.GetProperty(this Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! actionDescriptor) -> T +static Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorExtensions.SetProperty(this Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! actionDescriptor, T value) -> void +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.Failure() -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.FailureAsync() -> System.Threading.Tasks.Task! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.NoValue() -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.NoValueAsync() -> System.Threading.Tasks.Task! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.Success(object! model) -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.SuccessAsync(object! model) -> System.Threading.Tasks.Task! +static Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.GetBindingInfo(System.Collections.Generic.IEnumerable! attributes) -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo? +static Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.GetBindingInfo(System.Collections.Generic.IEnumerable! attributes, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata) -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo? +static Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.operator !=(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s1, Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s2) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.operator ==(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s1, Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s2) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource.Create(System.Collections.Generic.IEnumerable! bindingSources, string! displayName) -> Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource! +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForParameter(System.Reflection.ParameterInfo! parameter) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForParameter(System.Reflection.ParameterInfo! parameter, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForProperty(System.Reflection.PropertyInfo! propertyInfo, System.Type! modelType, System.Type! containerType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForProperty(System.Type! modelType, string! name, System.Type! containerType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Failed() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Success(object! model) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.operator !=(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult x, Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult y) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.operator ==(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult x, Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult y) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.StartsWithPrefix(string! prefix, string! key) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.None -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.explicit operator string!(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult result) -> string! +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.explicit operator string![]!(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult result) -> string![]! +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.operator !=(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult x, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult y) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.operator ==(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult x, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult y) -> bool +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Body -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Custom -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Form -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.FormFile -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Header -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.ModelBinding -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Path -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Query -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Services -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Special -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.DefaultOrder -> int +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.DefaultMaxAllowedErrors -> int +virtual Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.DisplayName.get -> string? +virtual Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.DisplayName.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Canceled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Canceled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Controller.get -> object! +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Exception.get -> System.Exception? +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Exception.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo? +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ExceptionDispatchInfo.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ExceptionHandled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult! +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.ActionArguments.get -> System.Collections.Generic.IDictionary! +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.Controller.get -> object! +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Exception.get -> System.Exception! +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Exception.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo? +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionDispatchInfo.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionHandled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.FilterContext.Filters.get -> System.Collections.Generic.IList! +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Canceled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Canceled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Exception.get -> System.Exception? +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Exception.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo? +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ExceptionDispatchInfo.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ExceptionHandled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Canceled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Canceled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Controller.get -> object! +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Exception.get -> System.Exception? +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Exception.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo? +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ExceptionDispatchInfo.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ExceptionHandled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult! +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Cancel.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Cancel.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Controller.get -> object! +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult! +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ContentType.get -> Microsoft.Extensions.Primitives.StringSegment +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ContentType.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ContentTypeIsServerDefined.get -> bool +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ContentTypeIsServerDefined.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.HttpContext.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.Object.get -> object? +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.Object.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ObjectType.get -> System.Type? +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ObjectType.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext.WriterFactory.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext.WriterFactory.set -> void +virtual Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.CanAcceptDataFrom(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! bindingSource) -> bool +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.AttemptedValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.MissingBindRequiredValueAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.MissingKeyOrValueAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.MissingRequestBodyRequiredValueAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.NonPropertyAttemptedValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.NonPropertyUnknownValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.NonPropertyValueMustBeANumberAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.UnknownValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ValueMustBeANumberAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ValueMustNotBeNullAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.CreateBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo! bindingInfo) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.Services.get -> System.IServiceProvider! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelType.get -> System.Type! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetMetadataForProperties(System.Type! modelType) -> System.Collections.Generic.IEnumerable! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetMetadataForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HasValidators.get -> bool? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyValidationFilter.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo! parameter, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForProperty(System.Reflection.PropertyInfo! propertyInfo, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! diff --git a/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..350535acbe --- /dev/null +++ b/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Unshipped.txt @@ -0,0 +1,98 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ActionDescriptor.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ApiDescription() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.GroupName.get -> string? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.GroupName.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.HttpMethod.get -> string? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.HttpMethod.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ParameterDescriptions.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.Properties.get -> System.Collections.Generic.IDictionary! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.RelativePath.get -> string! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.RelativePath.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.SupportedRequestFormats.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.SupportedResponseTypes.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionExtensions +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroup +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection.Version.get -> int +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.Actions.get -> System.Collections.Generic.IReadOnlyList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.ApiDescriptionProviderContext(System.Collections.Generic.IReadOnlyList! actions) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.Results.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ApiParameterDescription() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.BindingInfo.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.DefaultValue.get -> object? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.DefaultValue.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.IsRequired.get -> bool (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.IsRequired.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ModelMetadata.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Name.get -> string! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Name.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ParameterDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ParameterDescriptor.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.RouteInfo.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.RouteInfo.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Source.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Source.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Type.get -> System.Type! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Type.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.ApiParameterRouteInfo() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.Constraints.get -> System.Collections.Generic.IEnumerable? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.Constraints.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.DefaultValue.get -> object? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.DefaultValue.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.IsOptional.get -> bool (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.IsOptional.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.ApiRequestFormat() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.Formatter.get -> Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.Formatter.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.MediaType.get -> string! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.MediaType.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.ApiResponseFormat() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.Formatter.get -> Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.Formatter.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.MediaType.get -> string! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.MediaType.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseFormats.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseFormats.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseType() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.IsDefaultResponse.get -> bool (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.IsDefaultResponse.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ModelMetadata.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.StatusCode.get -> int (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.StatusCode.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.Type.get -> System.Type? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.Type.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext! context) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext! context) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.Order.get -> int (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.Extensions.DependencyInjection.MvcApiExplorerMvcCoreBuilderExtensions +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroup.ApiDescriptionGroup(string groupName, System.Collections.Generic.IReadOnlyList items) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroup.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroup.Items.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection.ApiDescriptionGroupCollection(System.Collections.Generic.IReadOnlyList items, int version) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection.Items.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider.ApiDescriptionGroupCollectionProvider(Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider actionDescriptorCollectionProvider, System.Collections.Generic.IEnumerable apiDescriptionProviders) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider.ApiDescriptionGroups.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection +~Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider.DefaultApiDescriptionProvider(Microsoft.Extensions.Options.IOptions optionsAccessor, Microsoft.AspNetCore.Routing.IInlineConstraintResolver constraintResolver, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultTypeMapper mapper, Microsoft.Extensions.Options.IOptions routeOptions) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider.ApiDescriptionGroups.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection +~static Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionExtensions.GetProperty(this Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription apiDescription) -> T +~static Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionExtensions.SetProperty(this Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription apiDescription, T value) -> void +~static Microsoft.Extensions.DependencyInjection.MvcApiExplorerMvcCoreBuilderExtensions.AddApiExplorer(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder diff --git a/src/Mvc/Mvc.Core/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Core/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Core/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..04d15cb58d --- /dev/null +++ b/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt @@ -0,0 +1,2453 @@ +#nullable enable +Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions +Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions +Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions +Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute +Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +Microsoft.AspNetCore.Mvc.AcceptedResult +Microsoft.AspNetCore.Mvc.AcceptedResult.AcceptedResult() -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.ActionMethodSelectorAttribute() -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint +Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.Order.get -> int +Microsoft.AspNetCore.Mvc.ActionContextAttribute +Microsoft.AspNetCore.Mvc.ActionContextAttribute.ActionContextAttribute() -> void +Microsoft.AspNetCore.Mvc.ActionNameAttribute +Microsoft.AspNetCore.Mvc.ActionResult +Microsoft.AspNetCore.Mvc.ActionResult.ActionResult() -> void +Microsoft.AspNetCore.Mvc.ActionResult +Microsoft.AspNetCore.Mvc.ActionResult.ActionResult(TValue value) -> void +Microsoft.AspNetCore.Mvc.ActionResult.Value.get -> TValue +Microsoft.AspNetCore.Mvc.AntiforgeryValidationFailedResult +Microsoft.AspNetCore.Mvc.AntiforgeryValidationFailedResult.AntiforgeryValidationFailedResult() -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.ApiBehaviorOptions() -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressConsumesConstraintForFormFileParameters.get -> bool +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressConsumesConstraintForFormFileParameters.set -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressInferBindingSourcesForParameters.get -> bool +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressInferBindingSourcesForParameters.set -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressMapClientErrors.get -> bool +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressMapClientErrors.set -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressModelStateInvalidFilter.get -> bool +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressModelStateInvalidFilter.set -> void +Microsoft.AspNetCore.Mvc.ApiControllerAttribute +Microsoft.AspNetCore.Mvc.ApiControllerAttribute.ApiControllerAttribute() -> void +Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute +Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute +Microsoft.AspNetCore.Mvc.ApiDescriptionActionData +Microsoft.AspNetCore.Mvc.ApiDescriptionActionData.ApiDescriptionActionData() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchAttribute +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchAttribute.ApiConventionNameMatchAttribute(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior matchBehavior) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchAttribute.MatchBehavior.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Any = 0 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Exact = 1 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefix = 2 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffix = 3 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionResult +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchAttribute +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchAttribute.ApiConventionTypeMatchAttribute(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior matchBehavior) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchAttribute.MatchBehavior.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior.Any = 0 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior.AssignableFrom = 1 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDefaultResponseMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupNameProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionVisibilityProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionVisibilityProvider.IgnoreApi.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiRequestFormatMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiRequestMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseMetadataProvider.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseTypeMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute +Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.ApiExplorerSettingsAttribute() -> void +Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.IgnoreApi.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.IgnoreApi.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.ApiExplorerModel() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.IsVisible.get -> bool? +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.IsVisible.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiVisibilityConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiVisibilityConvention.ApiVisibilityConvention() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.ApplicationModel() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.AttributeRouteModel() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.IsAbsoluteTemplate.get -> bool +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Order.get -> int? +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Order.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.SuppressLinkGeneration.get -> bool +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.SuppressLinkGeneration.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.SuppressPathMatching.get -> bool +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.SuppressPathMatching.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ClientErrorResultFilterConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.ClientErrorResultFilterConvention.ClientErrorResultFilterConvention() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ConsumesConstraintForFormFileParameterConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.ConsumesConstraintForFormFileParameterConvention.ConsumesConstraintForFormFileParameterConvention() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel +Microsoft.AspNetCore.Mvc.ApplicationModels.IActionModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IApiExplorerModel +Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelProvider +Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ApplicationModels.IBindingModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel +Microsoft.AspNetCore.Mvc.ApplicationModels.IControllerModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IFilterModel +Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelBaseConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPropertyModel +Microsoft.AspNetCore.Mvc.ApplicationModels.InferParameterBindingInfoConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.InvalidModelStateFilterConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.InvalidModelStateFilterConvention.InvalidModelStateFilterConvention() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase +Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel +Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel +Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.SelectorModel() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPart +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPart.ApplicationPart() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory.ApplicationPartFactory() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.ApplicationPartManager() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateFeature(TFeature feature) -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart +Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory +Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory.DefaultApplicationPartFactory() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationFeatureProvider +Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationFeatureProvider +Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationPartTypeProvider +Microsoft.AspNetCore.Mvc.ApplicationParts.ICompilationReferencesProvider +Microsoft.AspNetCore.Mvc.ApplicationParts.NullApplicationPartFactory +Microsoft.AspNetCore.Mvc.ApplicationParts.NullApplicationPartFactory.NullApplicationPartFactory() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute +Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute +Microsoft.AspNetCore.Mvc.AreaAttribute +Microsoft.AspNetCore.Mvc.Authorization.AllowAnonymousFilter +Microsoft.AspNetCore.Mvc.Authorization.AllowAnonymousFilter.AllowAnonymousFilter() -> void +Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter +Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter() -> void +Microsoft.AspNetCore.Mvc.BadRequestObjectResult +Microsoft.AspNetCore.Mvc.BadRequestResult +Microsoft.AspNetCore.Mvc.BadRequestResult.BadRequestResult() -> void +Microsoft.AspNetCore.Mvc.BindAttribute +Microsoft.AspNetCore.Mvc.BindPropertiesAttribute +Microsoft.AspNetCore.Mvc.BindPropertiesAttribute.BindPropertiesAttribute() -> void +Microsoft.AspNetCore.Mvc.BindPropertiesAttribute.SupportsGet.get -> bool +Microsoft.AspNetCore.Mvc.BindPropertiesAttribute.SupportsGet.set -> void +Microsoft.AspNetCore.Mvc.BindPropertyAttribute +Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BindPropertyAttribute() -> void +Microsoft.AspNetCore.Mvc.BindPropertyAttribute.SupportsGet.get -> bool +Microsoft.AspNetCore.Mvc.BindPropertyAttribute.SupportsGet.set -> void +Microsoft.AspNetCore.Mvc.CacheProfile +Microsoft.AspNetCore.Mvc.CacheProfile.CacheProfile() -> void +Microsoft.AspNetCore.Mvc.CacheProfile.Duration.get -> int? +Microsoft.AspNetCore.Mvc.CacheProfile.Duration.set -> void +Microsoft.AspNetCore.Mvc.CacheProfile.Location.get -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation? +Microsoft.AspNetCore.Mvc.CacheProfile.Location.set -> void +Microsoft.AspNetCore.Mvc.CacheProfile.NoStore.get -> bool? +Microsoft.AspNetCore.Mvc.CacheProfile.NoStore.set -> void +Microsoft.AspNetCore.Mvc.ChallengeResult +Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult() -> void +Microsoft.AspNetCore.Mvc.ClientErrorData +Microsoft.AspNetCore.Mvc.ClientErrorData.ClientErrorData() -> void +Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Latest = 2147483647 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_0 = 0 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1 = 1 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2 = 2 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_3_0 = 3 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.ConflictObjectResult +Microsoft.AspNetCore.Mvc.ConflictResult +Microsoft.AspNetCore.Mvc.ConflictResult.ConflictResult() -> void +Microsoft.AspNetCore.Mvc.ConsumesAttribute +Microsoft.AspNetCore.Mvc.ContentResult +Microsoft.AspNetCore.Mvc.ContentResult.ContentResult() -> void +Microsoft.AspNetCore.Mvc.ContentResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.ContentResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.ControllerAttribute +Microsoft.AspNetCore.Mvc.ControllerAttribute.ControllerAttribute() -> void +Microsoft.AspNetCore.Mvc.ControllerBase +Microsoft.AspNetCore.Mvc.ControllerBase.ControllerBase() -> void +Microsoft.AspNetCore.Mvc.ControllerContext +Microsoft.AspNetCore.Mvc.ControllerContext.ControllerContext() -> void +Microsoft.AspNetCore.Mvc.ControllerContextAttribute +Microsoft.AspNetCore.Mvc.ControllerContextAttribute.ControllerContextAttribute() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor +Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerActionDescriptor() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider +Microsoft.AspNetCore.Mvc.Controllers.ControllerBoundPropertyDescriptor +Microsoft.AspNetCore.Mvc.Controllers.ControllerBoundPropertyDescriptor.ControllerBoundPropertyDescriptor() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerFeature +Microsoft.AspNetCore.Mvc.Controllers.ControllerFeature.ControllerFeature() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider +Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.ControllerFeatureProvider() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerParameterDescriptor +Microsoft.AspNetCore.Mvc.Controllers.ControllerParameterDescriptor.ControllerParameterDescriptor() -> void +Microsoft.AspNetCore.Mvc.Controllers.IControllerActivator +Microsoft.AspNetCore.Mvc.Controllers.IControllerActivatorProvider +Microsoft.AspNetCore.Mvc.Controllers.IControllerFactory +Microsoft.AspNetCore.Mvc.Controllers.IControllerFactoryProvider +Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator +Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator.ServiceBasedControllerActivator() -> void +Microsoft.AspNetCore.Mvc.Core.Infrastructure.IAntiforgeryValidationFailedResult +Microsoft.AspNetCore.Mvc.CreatedAtActionResult +Microsoft.AspNetCore.Mvc.CreatedAtRouteResult +Microsoft.AspNetCore.Mvc.CreatedResult +Microsoft.AspNetCore.Mvc.DefaultApiConventions +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.EventData +Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Enumerator +Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Enumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Enumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.Diagnostics.EventData.EventData() -> void +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.DisableRequestSizeLimitAttribute() -> void +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.EmptyResult +Microsoft.AspNetCore.Mvc.EmptyResult.EmptyResult() -> void +Microsoft.AspNetCore.Mvc.FileContentResult +Microsoft.AspNetCore.Mvc.FileResult +Microsoft.AspNetCore.Mvc.FileResult.EnableRangeProcessing.get -> bool +Microsoft.AspNetCore.Mvc.FileResult.EnableRangeProcessing.set -> void +Microsoft.AspNetCore.Mvc.FileResult.LastModified.get -> System.DateTimeOffset? +Microsoft.AspNetCore.Mvc.FileResult.LastModified.set -> void +Microsoft.AspNetCore.Mvc.FileStreamResult +Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute +Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.ActionFilterAttribute() -> void +Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute +Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.ExceptionFilterAttribute() -> void +Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterCollection +Microsoft.AspNetCore.Mvc.Filters.FilterCollection.FilterCollection() -> void +Microsoft.AspNetCore.Mvc.Filters.FilterScope +Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute +Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.ResultFilterAttribute() -> void +Microsoft.AspNetCore.Mvc.ForbidResult +Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult() -> void +Microsoft.AspNetCore.Mvc.FormatFilterAttribute +Microsoft.AspNetCore.Mvc.FormatFilterAttribute.FormatFilterAttribute() -> void +Microsoft.AspNetCore.Mvc.FormatFilterAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.FormatFilter +Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings +Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.FormatterMappings() -> void +Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.HttpNoContentOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.TreatNullValueAsNoContent.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.TreatNullValueAsNoContent.set -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatter +Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.InputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException(string! message) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException(string! message, System.Exception! innerException) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.Formatters.MediaType +Microsoft.AspNetCore.Mvc.Formatters.MediaType.Charset.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.GetParameter(Microsoft.Extensions.Primitives.StringSegment parameterName) -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.HasWildcard.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.IsSubsetOf(Microsoft.AspNetCore.Mvc.Formatters.MediaType set) -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.MatchesAllSubTypes.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.MatchesAllSubTypesWithoutSuffix.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.MatchesAllTypes.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.MediaType(Microsoft.Extensions.Primitives.StringSegment mediaType) -> void +Microsoft.AspNetCore.Mvc.Formatters.MediaType.SubType.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.SubTypeSuffix.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.SubTypeWithoutSuffix.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.Type.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection.MediaTypeCollection() -> void +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality.MediaType.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality.MediaTypeSegmentWithQuality(Microsoft.Extensions.Primitives.StringSegment mediaType, double quality) -> void +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality.Quality.get -> double +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.OutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.StreamOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.StreamOutputFormatter.StreamOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.StringOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.StringOutputFormatter.StringOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.TextInputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.TextOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.FromBodyAttribute +Microsoft.AspNetCore.Mvc.FromBodyAttribute.EmptyBodyBehavior.get -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.FromBodyAttribute.EmptyBodyBehavior.set -> void +Microsoft.AspNetCore.Mvc.FromBodyAttribute.FromBodyAttribute() -> void +Microsoft.AspNetCore.Mvc.FromFormAttribute +Microsoft.AspNetCore.Mvc.FromFormAttribute.FromFormAttribute() -> void +Microsoft.AspNetCore.Mvc.FromHeaderAttribute +Microsoft.AspNetCore.Mvc.FromHeaderAttribute.FromHeaderAttribute() -> void +Microsoft.AspNetCore.Mvc.FromQueryAttribute +Microsoft.AspNetCore.Mvc.FromQueryAttribute.FromQueryAttribute() -> void +Microsoft.AspNetCore.Mvc.FromRouteAttribute +Microsoft.AspNetCore.Mvc.FromRouteAttribute.FromRouteAttribute() -> void +Microsoft.AspNetCore.Mvc.FromServicesAttribute +Microsoft.AspNetCore.Mvc.FromServicesAttribute.FromServicesAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpDeleteAttribute +Microsoft.AspNetCore.Mvc.HttpDeleteAttribute.HttpDeleteAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpGetAttribute +Microsoft.AspNetCore.Mvc.HttpGetAttribute.HttpGetAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpHeadAttribute +Microsoft.AspNetCore.Mvc.HttpHeadAttribute.HttpHeadAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpOptionsAttribute +Microsoft.AspNetCore.Mvc.HttpOptionsAttribute.HttpOptionsAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpPatchAttribute +Microsoft.AspNetCore.Mvc.HttpPatchAttribute.HttpPatchAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpPostAttribute +Microsoft.AspNetCore.Mvc.HttpPostAttribute.HttpPostAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpPutAttribute +Microsoft.AspNetCore.Mvc.HttpPutAttribute.HttpPutAttribute() -> void +Microsoft.AspNetCore.Mvc.IDesignTimeMvcBuilderConfiguration +Microsoft.AspNetCore.Mvc.IRequestFormLimitsPolicy +Microsoft.AspNetCore.Mvc.IRequestSizePolicy +Microsoft.AspNetCore.Mvc.Infrastructure.ActionContextAccessor +Microsoft.AspNetCore.Mvc.Infrastructure.ActionContextAccessor.ActionContextAccessor() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection +Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection.Version.get -> int +Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollectionProvider +Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollectionProvider.ActionDescriptorCollectionProvider() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute +Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute.ActionResultObjectValueAttribute() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultStatusCodeAttribute +Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultStatusCodeAttribute.ActionResultStatusCodeAttribute() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.AmbiguousActionException +Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch +Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.IsValueSet.get -> bool +Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.Value.get -> TValue +Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.Value.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions.Version.get -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector +Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute +Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute.DefaultStatusCodeAttribute(int statusCode) -> void +Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase +Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.IActionContextAccessor +Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorChangeProvider +Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider +Microsoft.AspNetCore.Mvc.Infrastructure.IActionInvokerFactory +Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultTypeMapper +Microsoft.AspNetCore.Mvc.Infrastructure.IActionSelector +Microsoft.AspNetCore.Mvc.Infrastructure.IApiBehaviorMetadata +Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorActionResult +Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorFactory +Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch +Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch.IsValueSet.get -> bool +Microsoft.AspNetCore.Mvc.Infrastructure.IConvertToActionResult +Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory +Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory +Microsoft.AspNetCore.Mvc.Infrastructure.IParameterInfoParameterDescriptor +Microsoft.AspNetCore.Mvc.Infrastructure.IPropertyInfoParameterDescriptor +Microsoft.AspNetCore.Mvc.Infrastructure.IStatusCodeActionResult +Microsoft.AspNetCore.Mvc.Infrastructure.IStatusCodeActionResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.Infrastructure.LocalRedirectResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter +Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.Order.get -> int +Microsoft.AspNetCore.Mvc.Infrastructure.MvcCompatibilityOptions +Microsoft.AspNetCore.Mvc.Infrastructure.MvcCompatibilityOptions.CompatibilityVersion.get -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.Infrastructure.MvcCompatibilityOptions.CompatibilityVersion.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.MvcCompatibilityOptions.MvcCompatibilityOptions() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector +Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector.OutputFormatterSelector() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.Exists.get -> bool +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.Exists.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.FileMetadata() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.LastModified.get -> System.DateTimeOffset +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.LastModified.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.Length.get -> long +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.Length.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory +Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory.ProblemDetailsFactory() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.RedirectResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToActionResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToPageResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToRouteResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor +Microsoft.AspNetCore.Mvc.JsonOptions +Microsoft.AspNetCore.Mvc.JsonOptions.JsonOptions() -> void +Microsoft.AspNetCore.Mvc.JsonResult +Microsoft.AspNetCore.Mvc.JsonResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.JsonResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.LocalRedirectResult +Microsoft.AspNetCore.Mvc.LocalRedirectResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.LocalRedirectResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.LocalRedirectResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.LocalRedirectResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute +Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ModelBinderAttribute +Microsoft.AspNetCore.Mvc.ModelBinderAttribute.ModelBinderAttribute() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindNeverAttribute +Microsoft.AspNetCore.Mvc.ModelBinding.BindNeverAttribute.BindNeverAttribute() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindRequiredAttribute +Microsoft.AspNetCore.Mvc.ModelBinding.BindRequiredAttribute.BindRequiredAttribute() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinderProvider.ArrayModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinderProvider.BinderTypeModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinderProvider.ByteArrayModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinder.CancellationTokenModelBinder() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinderProvider.CancellationTokenModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider.CollectionModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider.ComplexTypeModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DecimalModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinderProvider.DictionaryModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatingPointTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatingPointTypeModelBinderProvider.FloatingPointTypeModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinderProvider.FormCollectionModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinderProvider.FormFileModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinderProvider.HeaderModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinderProvider.KeyValuePairModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinder.ServicesModelBinder() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinderProvider.ServicesModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinderProvider.SimpleTypeModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior.Never = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior.Optional = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior.Required = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehaviorAttribute +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehaviorAttribute.Behavior.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehaviorAttribute.BindingBehaviorAttribute(Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior behavior) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CompositeValueProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext +Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.DefaultModelBindingContext() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider.DefaultPropertyFilterProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyModelMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyModelMetadataProvider.EmptyModelMetadataProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProviderFactory.FormFileValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory.FormValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.IBindingSourceValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.ICollectionModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.IEnumerableValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IKeyRewriterValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProviderFactory.JQueryFormValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProviderFactory.JQueryQueryStringValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BindingMetadata() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsBindingAllowed.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsBindingAllowed.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsBindingRequired.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsBindingRequired.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsReadOnly.get -> bool? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsReadOnly.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.Key.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.Key.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.DefaultModelBindingMessageProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ConvertEmptyStringToNull.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ConvertEmptyStringToNull.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayMetadata() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HasNonDefaultEditFormat.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HasNonDefaultEditFormat.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HideSurroundingHtml.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HideSurroundingHtml.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HtmlEncode.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HtmlEncode.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.IsEnum.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.IsEnum.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.IsFlagsEnum.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.IsFlagsEnum.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Order.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Order.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ShowForDisplay.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ShowForDisplay.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ShowForEdit.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ShowForEdit.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.Key.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ExcludeBindingMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IBindingMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IDisplayMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IMetadataDetailsProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IValidationMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.MetadataDetailsProviderExtensions +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.HasValidators.get -> bool? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.HasValidators.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.IsRequired.get -> bool? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.IsRequired.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.ValidateChildren.get -> bool? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.ValidateChildren.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.ValidationMetadata() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.Key.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.ModelBinderFactoryContext() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderExtensions +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProviderExtensions +Microsoft.AspNetCore.Mvc.ModelBinding.ModelNames +Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator +Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder +Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProviderFactory.QueryStringValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProviderFactory.RouteValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeException +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.Order.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.Order.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.UnsupportedContentTypeFilter() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorCache +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorCache.ClientValidatorCache() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IMetadataBasedModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderExtensions +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidateNeverAttribute +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidateNeverAttribute.ShouldValidateEntry(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry entry, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry parentEntry) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidateNeverAttribute.ValidateNeverAttribute() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.AllowShortCircuitingValidationWhenNoValidatorsArePresent.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.AllowShortCircuitingValidationWhenNoValidatorsArePresent.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.MaxValidationDepth.get -> int? +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.MaxValidationDepth.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidateComplexTypesIfChildValidationFails.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidateComplexTypesIfChildValidationFails.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache.ValidatorCache() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryExtensions +Microsoft.AspNetCore.Mvc.ModelMetadataTypeAttribute +Microsoft.AspNetCore.Mvc.MvcOptions +Microsoft.AspNetCore.Mvc.MvcOptions.AllowEmptyInputInBodyModelBinding.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.AllowEmptyInputInBodyModelBinding.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.EnableEndpointRouting.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.EnableEndpointRouting.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxIAsyncEnumerableBufferLimit.get -> int +Microsoft.AspNetCore.Mvc.MvcOptions.MaxIAsyncEnumerableBufferLimit.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelBindingCollectionSize.get -> int +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelBindingCollectionSize.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelBindingRecursionDepth.get -> int +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelBindingRecursionDepth.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelValidationErrors.get -> int +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelValidationErrors.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxValidationDepth.get -> int? +Microsoft.AspNetCore.Mvc.MvcOptions.MaxValidationDepth.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MvcOptions() -> void +Microsoft.AspNetCore.Mvc.MvcOptions.RequireHttpsPermanent.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.RequireHttpsPermanent.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.RespectBrowserAcceptHeader.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.RespectBrowserAcceptHeader.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.ReturnHttpNotAcceptable.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.ReturnHttpNotAcceptable.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SslPort.get -> int? +Microsoft.AspNetCore.Mvc.MvcOptions.SslPort.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressAsyncSuffixInActionNames.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressAsyncSuffixInActionNames.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressInputFormatterBuffering.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressInputFormatterBuffering.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressOutputFormatterBuffering.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressOutputFormatterBuffering.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.ValidateComplexTypesIfChildValidationFails.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.ValidateComplexTypesIfChildValidationFails.set -> void +Microsoft.AspNetCore.Mvc.NoContentResult +Microsoft.AspNetCore.Mvc.NoContentResult.NoContentResult() -> void +Microsoft.AspNetCore.Mvc.NonActionAttribute +Microsoft.AspNetCore.Mvc.NonActionAttribute.NonActionAttribute() -> void +Microsoft.AspNetCore.Mvc.NonControllerAttribute +Microsoft.AspNetCore.Mvc.NonControllerAttribute.NonControllerAttribute() -> void +Microsoft.AspNetCore.Mvc.NonViewComponentAttribute +Microsoft.AspNetCore.Mvc.NonViewComponentAttribute.NonViewComponentAttribute() -> void +Microsoft.AspNetCore.Mvc.NotFoundObjectResult +Microsoft.AspNetCore.Mvc.NotFoundResult +Microsoft.AspNetCore.Mvc.NotFoundResult.NotFoundResult() -> void +Microsoft.AspNetCore.Mvc.ObjectResult +Microsoft.AspNetCore.Mvc.ObjectResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.ObjectResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.OkObjectResult +Microsoft.AspNetCore.Mvc.OkResult +Microsoft.AspNetCore.Mvc.OkResult.OkResult() -> void +Microsoft.AspNetCore.Mvc.PhysicalFileResult +Microsoft.AspNetCore.Mvc.ProblemDetails +Microsoft.AspNetCore.Mvc.ProblemDetails.ProblemDetails() -> void +Microsoft.AspNetCore.Mvc.ProblemDetails.Status.get -> int? +Microsoft.AspNetCore.Mvc.ProblemDetails.Status.set -> void +Microsoft.AspNetCore.Mvc.ProducesAttribute +Microsoft.AspNetCore.Mvc.ProducesAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ProducesAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ProducesAttribute.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute +Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute.ProducesDefaultResponseTypeAttribute() -> void +Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute +Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute +Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.ProducesResponseTypeAttribute(int statusCode) -> void +Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.RedirectResult +Microsoft.AspNetCore.Mvc.RedirectResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RedirectResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RedirectResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.RedirectResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.RedirectToActionResult +Microsoft.AspNetCore.Mvc.RedirectToActionResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToActionResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RedirectToActionResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToActionResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.RedirectToPageResult +Microsoft.AspNetCore.Mvc.RedirectToPageResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToPageResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RedirectToPageResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToPageResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.RedirectToRouteResult +Microsoft.AspNetCore.Mvc.RedirectToRouteResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToRouteResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RedirectToRouteResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToRouteResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.BufferBody.get -> bool +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.BufferBody.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.BufferBodyLengthLimit.get -> long +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.BufferBodyLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.KeyLengthLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.KeyLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MemoryBufferThreshold.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MemoryBufferThreshold.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartBodyLengthLimit.get -> long +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartBodyLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartBoundaryLengthLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartBoundaryLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartHeadersCountLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartHeadersCountLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartHeadersLengthLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartHeadersLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.RequestFormLimitsAttribute() -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.ValueCountLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.ValueCountLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.ValueLengthLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.ValueLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.RequestSizeLimitAttribute(long bytes) -> void +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.RequireHttpsAttribute() -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Duration.get -> int +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Duration.set -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Location.get -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Location.set -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.NoStore.get -> bool +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.NoStore.set -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.ResponseCacheAttribute() -> void +Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.ResponseCacheLocation.Any = 0 -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.ResponseCacheLocation.Client = 1 -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.ResponseCacheLocation.None = 2 -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.RouteAttribute +Microsoft.AspNetCore.Mvc.RouteAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.RouteAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer +Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.DynamicRouteValueTransformer() -> void +Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute +Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Routing.IActionHttpMethodProvider +Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider +Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider.Order.get -> int? +Microsoft.AspNetCore.Mvc.Routing.IRouteValueProvider +Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory +Microsoft.AspNetCore.Mvc.Routing.KnownRouteValueConstraint +Microsoft.AspNetCore.Mvc.Routing.RouteValueAttribute +Microsoft.AspNetCore.Mvc.Routing.UrlHelper +Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase +Microsoft.AspNetCore.Mvc.Routing.UrlHelperFactory +Microsoft.AspNetCore.Mvc.Routing.UrlHelperFactory.UrlHelperFactory() -> void +Microsoft.AspNetCore.Mvc.SerializableError +Microsoft.AspNetCore.Mvc.SerializableError.SerializableError() -> void +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.SignInResult +Microsoft.AspNetCore.Mvc.SignOutResult +Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult() -> void +Microsoft.AspNetCore.Mvc.StatusCodeResult +Microsoft.AspNetCore.Mvc.StatusCodeResult.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.StatusCodeResult.StatusCodeResult(int statusCode) -> void +Microsoft.AspNetCore.Mvc.TypeFilterAttribute +Microsoft.AspNetCore.Mvc.TypeFilterAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.TypeFilterAttribute.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.TypeFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.TypeFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult +Microsoft.AspNetCore.Mvc.UnauthorizedResult +Microsoft.AspNetCore.Mvc.UnauthorizedResult.UnauthorizedResult() -> void +Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult +Microsoft.AspNetCore.Mvc.UnprocessableEntityResult +Microsoft.AspNetCore.Mvc.UnprocessableEntityResult.UnprocessableEntityResult() -> void +Microsoft.AspNetCore.Mvc.UnsupportedMediaTypeResult +Microsoft.AspNetCore.Mvc.UnsupportedMediaTypeResult.UnsupportedMediaTypeResult() -> void +Microsoft.AspNetCore.Mvc.UrlHelperExtensions +Microsoft.AspNetCore.Mvc.ValidationProblemDetails +Microsoft.AspNetCore.Mvc.ValidationProblemDetails.ValidationProblemDetails() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.IKeepTempDataResult +Microsoft.AspNetCore.Mvc.VirtualFileResult +Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions +Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions +Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions +Microsoft.Extensions.DependencyInjection.IMvcBuilder +Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions +abstract Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Count.get -> int +const Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.BufferSize = 65536 -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.EnterNestedScope() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ExitNestedScope() -> void +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.IsTopLevelObject.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.IsTopLevelObject.set -> void +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.Result.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.Result.set -> void +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ConvertEmptyStringToNull.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.HasNonDefaultEditFormat.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.HasValidators.get -> bool? +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.HideSurroundingHtml.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.HtmlEncode.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsBindingAllowed.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsBindingRequired.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsEnum.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsFlagsEnum.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsReadOnly.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsRequired.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Order.get -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ShowForDisplay.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ShowForEdit.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ValidateChildren.get -> bool +static readonly Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.HttpMethodConstraintOrder -> int +static readonly Microsoft.AspNetCore.Mvc.ConsumesAttribute.ConsumesActionConstraintOrder -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.Action -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.Controller -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.First -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.Global -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.Last -> int +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidateNode() -> bool +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitSimpleType() -> bool +~Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder.Add(System.Action convention) -> void +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.AcceptVerbsAttribute(params string[] methods) -> void +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.AcceptVerbsAttribute(string method) -> void +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.HttpMethods.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Route.get -> string +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Route.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.AcceptedAtActionResult(string actionName, string controllerName, object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.ActionName.get -> string +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.ActionName.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.AcceptedAtRouteResult(object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.AcceptedAtRouteResult(string routeName, object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.RouteName.get -> string +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.RouteName.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedResult.AcceptedResult(System.Uri locationUri, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedResult.AcceptedResult(string location, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedResult.Location.get -> string +~Microsoft.AspNetCore.Mvc.AcceptedResult.Location.set -> void +~Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.Accept(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext context) -> bool +~Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.HttpMethodActionConstraint(System.Collections.Generic.IEnumerable httpMethods) -> void +~Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.HttpMethods.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ActionNameAttribute.ActionNameAttribute(string name) -> void +~Microsoft.AspNetCore.Mvc.ActionNameAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.ActionResult.ActionResult(Microsoft.AspNetCore.Mvc.ActionResult result) -> void +~Microsoft.AspNetCore.Mvc.ActionResult.Result.get -> Microsoft.AspNetCore.Mvc.ActionResult +~Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.ClientErrorMapping.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.InvalidModelStateResponseFactory.get -> System.Func +~Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.InvalidModelStateResponseFactory.set -> void +~Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute.ApiConventionMethodAttribute(System.Type conventionType, string methodName) -> void +~Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute.ConventionType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute.ApiConventionTypeAttribute(System.Type conventionType) -> void +~Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute.ConventionType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ApiDescriptionActionData.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApiDescriptionActionData.GroupName.set -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionResult.ApiConventionResult(System.Collections.Generic.IReadOnlyList responseMetadataProviders) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionResult.ResponseMetadataProviders.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupNameProvider.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiRequestFormatMetadataProvider.GetSupportedContentTypes(string contentType, System.Type objectType) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiRequestMetadataProvider.SetContentTypes(Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseMetadataProvider.SetContentTypes(Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseMetadataProvider.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseTypeMetadataProvider.GetSupportedContentTypes(string contentType, System.Type objectType) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.GroupName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionMethod.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionModel(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionModel(System.Reflection.MethodInfo actionMethod, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ApiExplorer.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ApiExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Controller.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Controller.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.DisplayName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Parameters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.RouteParameterTransformer.get -> Microsoft.AspNetCore.Routing.IOutboundParameterTransformer +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.RouteParameterTransformer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Selectors.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention.ApiConventionApplicationModelConvention(Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute defaultErrorResponseType) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention.DefaultErrorResponseType.get -> Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.ApiExplorerModel(Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.GroupName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiVisibilityConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.ApiExplorer.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.ApiExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.Controllers.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext.ApplicationModelProviderContext(System.Collections.Generic.IEnumerable controllerTypes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext.ControllerTypes.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext.Result.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Attribute.get -> Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.AttributeRouteModel(Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.AttributeRouteModel(Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider templateProvider) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Name.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Name.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Template.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Template.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ClientErrorResultFilterConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ConsumesConstraintForFormFileParameterConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Actions.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ApiExplorer.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ApiExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Application.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Application.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerModel(Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerModel(System.Reflection.TypeInfo controllerType, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerProperties.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.DisplayName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Selectors.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.IActionModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApiExplorerModel.ApiExplorer.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApiExplorerModel.ApiExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel application) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IBindingModel.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.IBindingModel.BindingInfo.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.MemberInfo.get -> System.Reflection.MemberInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.Name.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.IControllerModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel controller) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IFilterModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelBaseConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase parameter) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel parameter) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPropertyModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.InferParameterBindingInfoConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.InferParameterBindingInfoConvention.InferParameterBindingInfoConvention(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.InvalidModelStateFilterConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.Action.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.Action.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.DisplayName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterModel(Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterModel(System.Reflection.ParameterInfo parameterInfo, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.BindingInfo.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.Name.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.Name.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.ParameterModelBase(Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.ParameterModelBase(System.Type parameterType, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.ParameterType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.Controller.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.Controller.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyModel(System.Reflection.PropertyInfo propertyInfo, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention.RouteTokenTransformerConvention(Microsoft.AspNetCore.Routing.IOutboundParameterTransformer parameterTransformer) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.ActionConstraints.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.AttributeRouteModel.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.AttributeRouteModel.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.EndpointMetadata.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.SelectorModel(Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute.ApplicationPartAttribute(string assemblyName) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute.AssemblyName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.ApplicationParts.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.FeatureProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.Assembly.get -> System.Reflection.Assembly +~Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.AssemblyPart(System.Reflection.Assembly assembly) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.Types.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationFeatureProvider.PopulateFeature(System.Collections.Generic.IEnumerable parts, TFeature feature) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationPartTypeProvider.Types.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ApplicationParts.ICompilationReferencesProvider.GetReferencePaths() -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute.GetFactoryType() -> System.Type +~Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute.ProvideApplicationPartFactoryAttribute(System.Type factoryType) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute.ProvideApplicationPartFactoryAttribute(string factoryTypeName) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute.AssemblyFileName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute.RelatedAssemblyAttribute(string assemblyFileName) -> void +~Microsoft.AspNetCore.Mvc.AreaAttribute.AreaAttribute(string areaName) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeData.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter(Microsoft.AspNetCore.Authorization.AuthorizationPolicy policy) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter(Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider policyProvider, System.Collections.Generic.IEnumerable authorizeData) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter(System.Collections.Generic.IEnumerable authorizeData) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter(string policy) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.Policy.get -> Microsoft.AspNetCore.Authorization.AuthorizationPolicy +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.PolicyProvider.get -> Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider +~Microsoft.AspNetCore.Mvc.BadRequestObjectResult.BadRequestObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.BadRequestObjectResult.BadRequestObjectResult(object error) -> void +~Microsoft.AspNetCore.Mvc.BindAttribute.BindAttribute(params string[] include) -> void +~Microsoft.AspNetCore.Mvc.BindAttribute.Include.get -> string[] +~Microsoft.AspNetCore.Mvc.BindAttribute.Prefix.get -> string +~Microsoft.AspNetCore.Mvc.BindAttribute.Prefix.set -> void +~Microsoft.AspNetCore.Mvc.BindAttribute.PropertyFilter.get -> System.Func +~Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BinderType.get -> System.Type +~Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BinderType.set -> void +~Microsoft.AspNetCore.Mvc.BindPropertyAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.BindPropertyAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.CacheProfile.VaryByHeader.get -> string +~Microsoft.AspNetCore.Mvc.CacheProfile.VaryByHeader.set -> void +~Microsoft.AspNetCore.Mvc.CacheProfile.VaryByQueryKeys.get -> string[] +~Microsoft.AspNetCore.Mvc.CacheProfile.VaryByQueryKeys.set -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.AuthenticationSchemes.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ChallengeResult.AuthenticationSchemes.set -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(System.Collections.Generic.IList authenticationSchemes) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(System.Collections.Generic.IList authenticationSchemes, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(string authenticationScheme) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(string authenticationScheme, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.Properties.get -> Microsoft.AspNetCore.Authentication.AuthenticationProperties +~Microsoft.AspNetCore.Mvc.ChallengeResult.Properties.set -> void +~Microsoft.AspNetCore.Mvc.ClientErrorData.Link.get -> string +~Microsoft.AspNetCore.Mvc.ClientErrorData.Link.set -> void +~Microsoft.AspNetCore.Mvc.ClientErrorData.Title.get -> string +~Microsoft.AspNetCore.Mvc.ClientErrorData.Title.set -> void +~Microsoft.AspNetCore.Mvc.ConflictObjectResult.ConflictObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ConflictObjectResult.ConflictObjectResult(object error) -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.Accept(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext context) -> bool +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.ConsumesAttribute(string contentType, params string[] otherContentTypes) -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.ContentTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.ContentTypes.set -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.OnResourceExecuted(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.OnResourceExecuting(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.SetContentTypes(Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> void +~Microsoft.AspNetCore.Mvc.ContentResult.Content.get -> string +~Microsoft.AspNetCore.Mvc.ContentResult.Content.set -> void +~Microsoft.AspNetCore.Mvc.ContentResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.ContentResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.ControllerContext.get -> Microsoft.AspNetCore.Mvc.ControllerContext +~Microsoft.AspNetCore.Mvc.ControllerBase.ControllerContext.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.ControllerBase.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.ControllerBase.MetadataProvider.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.ModelBinderFactory.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory +~Microsoft.AspNetCore.Mvc.ControllerBase.ModelBinderFactory.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.ControllerBase.ObjectValidator.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator +~Microsoft.AspNetCore.Mvc.ControllerBase.ObjectValidator.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.ProblemDetailsFactory.get -> Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory +~Microsoft.AspNetCore.Mvc.ControllerBase.ProblemDetailsFactory.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.Request.get -> Microsoft.AspNetCore.Http.HttpRequest +~Microsoft.AspNetCore.Mvc.ControllerBase.Response.get -> Microsoft.AspNetCore.Http.HttpResponse +~Microsoft.AspNetCore.Mvc.ControllerBase.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(object model, System.Type modelType, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.Url.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.ControllerBase.Url.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.User.get -> System.Security.Claims.ClaimsPrincipal +~Microsoft.AspNetCore.Mvc.ControllerContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor +~Microsoft.AspNetCore.Mvc.ControllerContext.ActionDescriptor.set -> void +~Microsoft.AspNetCore.Mvc.ControllerContext.ControllerContext(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.MethodInfo.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.MethodInfo.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.ControllerActivatorProvider(Microsoft.AspNetCore.Mvc.Controllers.IControllerActivator controllerActivator) -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.Controllers.ControllerBoundPropertyDescriptor.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.Controllers.ControllerBoundPropertyDescriptor.PropertyInfo.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerFeature.Controllers.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.PopulateFeature(System.Collections.Generic.IEnumerable parts, Microsoft.AspNetCore.Mvc.Controllers.ControllerFeature feature) -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerParameterDescriptor.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.Controllers.ControllerParameterDescriptor.ParameterInfo.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.IControllerActivator.Create(Microsoft.AspNetCore.Mvc.ControllerContext context) -> object +~Microsoft.AspNetCore.Mvc.Controllers.IControllerActivator.Release(Microsoft.AspNetCore.Mvc.ControllerContext context, object controller) -> void +~Microsoft.AspNetCore.Mvc.Controllers.IControllerActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.Controllers.IControllerActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.Controllers.IControllerFactory.CreateController(Microsoft.AspNetCore.Mvc.ControllerContext context) -> object +~Microsoft.AspNetCore.Mvc.Controllers.IControllerFactory.ReleaseController(Microsoft.AspNetCore.Mvc.ControllerContext context, object controller) -> void +~Microsoft.AspNetCore.Mvc.Controllers.IControllerFactoryProvider.CreateControllerFactory(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.Controllers.IControllerFactoryProvider.CreateControllerReleaser(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator.Create(Microsoft.AspNetCore.Mvc.ControllerContext actionContext) -> object +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.ActionName.get -> string +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.ActionName.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.CreatedAtActionResult(string actionName, string controllerName, object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.CreatedAtRouteResult(object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.CreatedAtRouteResult(string routeName, object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.RouteName.get -> string +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.RouteName.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.CreatedResult.CreatedResult(System.Uri location, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedResult.CreatedResult(string location, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedResult.Location.get -> string +~Microsoft.AspNetCore.Mvc.CreatedResult.Location.set -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.AfterActionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteData routeData) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.ActionExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.AfterActionFilterOnActionExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext actionExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.ActionExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.AfterActionFilterOnActionExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext actionExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.ActionExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.AfterActionFilterOnActionExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext actionExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData.AfterActionResultEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.IActionResult result) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.AfterAuthorizationFilterOnAuthorizationEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext authorizationContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.AuthorizationContext.get -> Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.AfterControllerActionMethodEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IReadOnlyDictionary arguments, object controller, Microsoft.AspNetCore.Mvc.IActionResult result) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.Arguments.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.Controller.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.AfterExceptionFilterOnExceptionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ExceptionContext exceptionContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.ExceptionContext.get -> Microsoft.AspNetCore.Mvc.Filters.ExceptionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.AfterResourceFilterOnResourceExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext resourceExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.ResourceExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.AfterResourceFilterOnResourceExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext resourceExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.ResourceExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.AfterResourceFilterOnResourceExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext resourceExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.ResourceExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.AfterResultFilterOnResultExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext resultExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.ResultExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.AfterResultFilterOnResultExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext resultExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.ResultExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.AfterResultFilterOnResultExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext resultExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.ResultExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.BeforeActionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteData routeData) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.ActionExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.BeforeActionFilterOnActionExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext actionExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.ActionExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.BeforeActionFilterOnActionExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext actionExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.ActionExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.BeforeActionFilterOnActionExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext actionExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData.BeforeActionResultEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.IActionResult result) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.AuthorizationContext.get -> Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.BeforeAuthorizationFilterOnAuthorizationEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext authorizationContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.ActionArguments.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.BeforeControllerActionMethodEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IReadOnlyDictionary actionArguments, object controller) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.Controller.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.BeforeExceptionFilterOnException(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ExceptionContext exceptionContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.ExceptionContext.get -> Microsoft.AspNetCore.Mvc.Filters.ExceptionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.BeforeResourceFilterOnResourceExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext resourceExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.ResourceExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.BeforeResourceFilterOnResourceExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext resourceExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.ResourceExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.BeforeResourceFilterOnResourceExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext resourceExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.ResourceExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.BeforeResultFilterOnResultExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext resultExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.ResultExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.BeforeResultFilterOnResultExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext resultExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.ResultExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.BeforeResultFilterOnResultExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext resultExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.ResultExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Enumerator.Current.get -> System.Collections.Generic.KeyValuePair +~Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.FileContentResult.FileContentResult(byte[] fileContents, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.FileContentResult.FileContentResult(byte[] fileContents, string contentType) -> void +~Microsoft.AspNetCore.Mvc.FileContentResult.FileContents.get -> byte[] +~Microsoft.AspNetCore.Mvc.FileContentResult.FileContents.set -> void +~Microsoft.AspNetCore.Mvc.FileResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.FileResult.EntityTag.get -> Microsoft.Net.Http.Headers.EntityTagHeaderValue +~Microsoft.AspNetCore.Mvc.FileResult.EntityTag.set -> void +~Microsoft.AspNetCore.Mvc.FileResult.FileDownloadName.get -> string +~Microsoft.AspNetCore.Mvc.FileResult.FileDownloadName.set -> void +~Microsoft.AspNetCore.Mvc.FileResult.FileResult(string contentType) -> void +~Microsoft.AspNetCore.Mvc.FileStreamResult.FileStream.get -> System.IO.Stream +~Microsoft.AspNetCore.Mvc.FileStreamResult.FileStream.set -> void +~Microsoft.AspNetCore.Mvc.FileStreamResult.FileStreamResult(System.IO.Stream fileStream, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.FileStreamResult.FileStreamResult(System.IO.Stream fileStream, string contentType) -> void +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add(System.Type filterType) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add(System.Type filterType, int order) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add() -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add(int order) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.AddService(System.Type filterType) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.AddService(System.Type filterType, int order) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.AddService() -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.AddService(int order) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ForbidResult.AuthenticationSchemes.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ForbidResult.AuthenticationSchemes.set -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(System.Collections.Generic.IList authenticationSchemes) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(System.Collections.Generic.IList authenticationSchemes, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(string authenticationScheme) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(string authenticationScheme, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.Properties.get -> Microsoft.AspNetCore.Authentication.AuthenticationProperties +~Microsoft.AspNetCore.Mvc.ForbidResult.Properties.set -> void +~Microsoft.AspNetCore.Mvc.FormatFilterAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.FormatFilter(Microsoft.Extensions.Options.IOptions options, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.OnResourceExecuted(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.OnResourceExecuting(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.ClearMediaTypeMappingForFormat(string format) -> bool +~Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.GetMediaTypeMappingForFormat(string format) -> string +~Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.SetMediaTypeMappingForFormat(string format, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.SetMediaTypeMappingForFormat(string format, string contentType) -> void +~Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context) -> bool +~Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.SupportedMediaTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.Formatters.MediaType.Encoding.get -> System.Text.Encoding +~Microsoft.AspNetCore.Mvc.Formatters.MediaType.GetParameter(string parameterName) -> Microsoft.Extensions.Primitives.StringSegment +~Microsoft.AspNetCore.Mvc.Formatters.MediaType.MediaType(string mediaType) -> void +~Microsoft.AspNetCore.Mvc.Formatters.MediaType.MediaType(string mediaType, int offset, int? length) -> void +~Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection.Add(Microsoft.Net.Http.Headers.MediaTypeHeaderValue item) -> void +~Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection.Insert(int index, Microsoft.Net.Http.Headers.MediaTypeHeaderValue item) -> void +~Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection.Remove(Microsoft.Net.Http.Headers.MediaTypeHeaderValue item) -> bool +~Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.SupportedMediaTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.Formatters.StreamOutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context) -> bool +~Microsoft.AspNetCore.Mvc.Formatters.StreamOutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.SerializerOptions.get -> System.Text.Json.JsonSerializerOptions +~Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.SystemTextJsonInputFormatter(Microsoft.AspNetCore.Mvc.JsonOptions options, Microsoft.Extensions.Logging.ILogger logger) -> void +~Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.SerializerOptions.get -> System.Text.Json.JsonSerializerOptions +~Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.SystemTextJsonOutputFormatter(System.Text.Json.JsonSerializerOptions jsonSerializerOptions) -> void +~Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.SelectCharacterEncoding(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> System.Text.Encoding +~Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.SupportedEncodings.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.SupportedEncodings.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.FromBodyAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromFormAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromFormAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.FromFormAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.FromHeaderAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromHeaderAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.FromHeaderAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.FromQueryAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromQueryAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.FromQueryAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.FromRouteAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromRouteAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.FromRouteAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.FromServicesAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.HttpDeleteAttribute.HttpDeleteAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpGetAttribute.HttpGetAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpHeadAttribute.HttpHeadAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpOptionsAttribute.HttpOptionsAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpPatchAttribute.HttpPatchAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpPostAttribute.HttpPostAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpPutAttribute.HttpPutAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.IDesignTimeMvcBuilderConfiguration.ConfigureMvc(Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ActionContextAccessor.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Infrastructure.ActionContextAccessor.ActionContext.set -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection.ActionDescriptorCollection(System.Collections.Generic.IReadOnlyList items, int version) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection.Items.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.Infrastructure.AmbiguousActionException.AmbiguousActionException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.AmbiguousActionException.AmbiguousActionException(string message) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.CompatibilitySwitch(string name) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.CompatibilitySwitch(string name, TValue initialValue) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.Name.get -> string +~Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions +~Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions.ConfigureCompatibilityOptions(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions compatibilityOptions) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor.ContentResultExecutor(Microsoft.Extensions.Logging.ILogger logger, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory httpResponseStreamWriterFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector.DefaultOutputFormatterSelector(Microsoft.Extensions.Options.IOptions options, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor.FileContentResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.FileResultExecutorBase(Microsoft.Extensions.Logging.ILogger logger) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor.FileStreamResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionContextAccessor.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionContextAccessor.ActionContext.set -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorChangeProvider.GetChangeToken() -> Microsoft.Extensions.Primitives.IChangeToken +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider.ActionDescriptors.get -> Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionInvokerFactory.CreateInvoker(Microsoft.AspNetCore.Mvc.ActionContext actionContext) -> Microsoft.AspNetCore.Mvc.Abstractions.IActionInvoker +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultExecutor +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, TResult result) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultTypeMapper.Convert(object value, System.Type returnType) -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultTypeMapper.GetResultDataType(System.Type returnType) -> System.Type +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionSelector.SelectBestCandidate(Microsoft.AspNetCore.Routing.RouteContext context, System.Collections.Generic.IReadOnlyList candidates) -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionSelector.SelectCandidates(Microsoft.AspNetCore.Routing.RouteContext context) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorFactory.GetClientError(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorActionResult clientError) -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch.Name.get -> string +~Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch.Value.get -> object +~Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch.Value.set -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.IConvertToActionResult.Convert() -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory.CreateReader(System.IO.Stream stream, System.Text.Encoding encoding) -> System.IO.TextReader +~Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory.CreateWriter(System.IO.Stream stream, System.Text.Encoding encoding) -> System.IO.TextWriter +~Microsoft.AspNetCore.Mvc.Infrastructure.IParameterInfoParameterDescriptor.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.Infrastructure.IPropertyInfoParameterDescriptor.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.Infrastructure.LocalRedirectResultExecutor.LocalRedirectResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.ModelStateInvalidFilter(Microsoft.AspNetCore.Mvc.ApiBehaviorOptions apiBehaviorOptions, Microsoft.Extensions.Logging.ILogger logger) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.FormatterSelector.get -> Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ObjectResultExecutor(Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector formatterSelector, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ObjectResultExecutor(Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector formatterSelector, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.WriterFactory.get -> System.Func +~Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.PhysicalFileResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.RedirectResultExecutor.RedirectResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToActionResultExecutor.RedirectToActionResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToPageResultExecutor.RedirectToPageResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToRouteResultExecutor.RedirectToRouteResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.VirtualFileResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment) -> void +~Microsoft.AspNetCore.Mvc.JsonOptions.JsonSerializerOptions.get -> System.Text.Json.JsonSerializerOptions +~Microsoft.AspNetCore.Mvc.JsonResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.JsonResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.JsonResult.JsonResult(object value) -> void +~Microsoft.AspNetCore.Mvc.JsonResult.JsonResult(object value, object serializerSettings) -> void +~Microsoft.AspNetCore.Mvc.JsonResult.SerializerSettings.get -> object +~Microsoft.AspNetCore.Mvc.JsonResult.SerializerSettings.set -> void +~Microsoft.AspNetCore.Mvc.JsonResult.Value.get -> object +~Microsoft.AspNetCore.Mvc.JsonResult.Value.set -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.LocalRedirectResult(string localUrl) -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.LocalRedirectResult(string localUrl, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.LocalRedirectResult(string localUrl, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.Url.get -> string +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.Url.set -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.ConfigurationType.get -> System.Type +~Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.MiddlewareFilterAttribute(System.Type configurationType) -> void +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.BinderType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.BinderType.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.ModelBinderAttribute(System.Type binderType) -> void +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.ArrayModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.ArrayModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.ArrayModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, Microsoft.AspNetCore.Mvc.MvcOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinder.BinderTypeModelBinder(System.Type binderType) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BodyModelBinder(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BodyModelBinder(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BodyModelBinder(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider.BodyModelBinderProvider(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider.BodyModelBinderProvider(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider.BodyModelBinderProvider(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinder.ByteArrayModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.AddErrorIfBindingRequired(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CollectionModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CollectionModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CollectionModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, Microsoft.AspNetCore.Mvc.MvcOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CreateInstance(System.Type targetType) -> object +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.ElementBinder.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.ComplexTypeModelBinder(System.Collections.Generic.IDictionary propertyBinders, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.ComplexTypeModelBinder(System.Collections.Generic.IDictionary propertyBinders, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DecimalModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DecimalModelBinder.DecimalModelBinder(System.Globalization.NumberStyles supportedStyles, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.DictionaryModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder keyBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder valueBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.DictionaryModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder keyBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder valueBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.DictionaryModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder keyBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder valueBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, Microsoft.AspNetCore.Mvc.MvcOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder.DoubleModelBinder(System.Globalization.NumberStyles supportedStyles, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinder.EnumTypeModelBinder(bool suppressBindingUndefinedValueToEnumType, System.Type modelType, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinderProvider.EnumTypeModelBinderProvider(Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder.FloatModelBinder(System.Globalization.NumberStyles supportedStyles, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatingPointTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinder.FormCollectionModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinder.FormFileModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder.HeaderModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder.HeaderModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder innerModelBinder) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinder.KeyValuePairModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder keyBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder valueBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder.SimpleTypeModelBinder(System.Type type, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.BindingSourceValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CompositeValueProvider(System.Collections.Generic.IList valueProviders) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.Filter() -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.Filter(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.OriginalValueProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.OriginalValueProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProvider.ContainsPrefix(string prefix) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProvider.FormFileValueProvider(Microsoft.AspNetCore.Http.IFormFileCollection files) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.Culture.get -> System.Globalization.CultureInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.FormValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, Microsoft.AspNetCore.Http.IFormCollection values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.PrefixContainer.get -> Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +~Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.IBindingSourceValueProvider.Filter(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.ICollectionModelBinder.CanCreateInstance(System.Type targetType) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.IEnumerableValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.IKeyRewriterValueProvider.Filter() -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory.CreateBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProvider.JQueryFormValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, System.Collections.Generic.IDictionary values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProvider.JQueryQueryStringValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, System.Collections.Generic.IDictionary values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.Culture.get -> System.Globalization.CultureInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.Filter() -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.JQueryValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, System.Collections.Generic.IDictionary values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.PrefixContainer.get -> Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderModelName.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderModelName.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderType.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BindingSource.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.ModelBindingMessageProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.PropertyFilterProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.BindingMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.BindingMetadataProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.ParameterAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.PropertyAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.TypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.BindingSourceMetadataProvider(System.Type type, Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.CreateBindingMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BindingMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BindingMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ContainerMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.DefaultMetadataDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.DisplayMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.DisplayMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ModelAttributes.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.Properties.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata[] +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.Properties.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.PropertyGetter.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.PropertyGetter.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.PropertySetter.get -> System.Action +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.PropertySetter.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ValidationMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ValidationMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.DefaultModelBindingMessageProvider(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider originalProvider) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor(System.Func attemptedValueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetMissingBindRequiredValueAccessor(System.Func missingBindRequiredValueAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetMissingKeyOrValueAccessor(System.Func missingKeyOrValueAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetMissingRequestBodyRequiredValueAccessor(System.Func missingRequestBodyRequiredValueAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetNonPropertyAttemptedValueIsInvalidAccessor(System.Func nonPropertyAttemptedValueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetNonPropertyUnknownValueIsInvalidAccessor(System.Func nonPropertyUnknownValueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetNonPropertyValueMustBeANumberAccessor(System.Func nonPropertyValueMustBeANumberAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetUnknownValueIsInvalidAccessor(System.Func unknownValueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetValueIsInvalidAccessor(System.Func valueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetValueMustBeANumberAccessor(System.Func valueMustBeANumberAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetValueMustNotBeNullAccessor(System.Func valueMustNotBeNullAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Attributes.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BindingMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DefaultModelMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider provider, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider detailsProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails details) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DefaultModelMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider provider, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider detailsProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails details, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider modelBindingMessageProvider) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DisplayMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ValidationMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.DefaultModelMetadataProvider(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider detailsProvider) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.DefaultModelMetadataProvider(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider detailsProvider, Microsoft.Extensions.Options.IOptions optionsAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.DetailsProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.AdditionalValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DataTypeName.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DataTypeName.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Description.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Description.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayFormatString.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayFormatString.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayFormatStringProvider.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayFormatStringProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayName.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayName.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EditFormatString.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EditFormatString.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EditFormatStringProvider.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EditFormatStringProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EnumGroupedDisplayNamesAndValues.get -> System.Collections.Generic.IEnumerable> +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EnumGroupedDisplayNamesAndValues.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EnumNamesAndValues.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EnumNamesAndValues.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.NullDisplayText.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.NullDisplayText.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.NullDisplayTextProvider.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.NullDisplayTextProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Placeholder.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Placeholder.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.SimpleDisplayProperty.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.SimpleDisplayProperty.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.TemplateHint.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.TemplateHint.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.DisplayMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.DisplayMetadataProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.PropertyAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.TypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ExcludeBindingMetadataProvider.CreateBindingMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ExcludeBindingMetadataProvider.ExcludeBindingMetadataProvider(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IBindingMetadataProvider.CreateBindingMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IDisplayMetadataProvider.CreateDisplayMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IValidationMetadataProvider.CreateValidationMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.PropertyValidationFilter.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.PropertyValidationFilter.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.ValidatorMetadata.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.ParameterAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.PropertyAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.TypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.ValidationMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.ValidationMetadataProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.ParameterAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.PropertyAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.TypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory.CreateBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory.ModelBinderFactory(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.Extensions.Options.IOptions options, System.IServiceProvider serviceProvider) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.BindingInfo.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.CacheToken.get -> object +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.CacheToken.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.Metadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.ObjectModelValidator(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, System.Collections.Generic.IList validatorProviders) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.ParameterBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory modelBinderFactory, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator validator, Microsoft.Extensions.Options.IOptions mvcOptions, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer.ContainsPrefix(string prefix) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer.PrefixContainer(System.Collections.Generic.ICollection values) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.Culture.get -> System.Globalization.CultureInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.PrefixContainer.get -> Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +~Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.QueryStringValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, Microsoft.AspNetCore.Http.IQueryCollection values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.Culture.get -> System.Globalization.CultureInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.PrefixContainer.get -> Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.RouteValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, Microsoft.AspNetCore.Routing.RouteValueDictionary values) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.RouteValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, Microsoft.AspNetCore.Routing.RouteValueDictionary values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.CreateValidationMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.FullTypeName.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.SuppressChildValidationMetadataProvider(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.SuppressChildValidationMetadataProvider(string fullTypeName) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeException.UnsupportedContentTypeException(string message) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorCache.GetValidators(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidatorProvider validatorProvider) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider.CompositeClientModelValidatorProvider(System.Collections.Generic.IEnumerable providers) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider.CreateValidators(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider.ValidatorProviders.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeModelValidatorProvider.CompositeModelValidatorProvider(System.Collections.Generic.IList providers) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeModelValidatorProvider.CreateValidators(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeModelValidatorProvider.ValidatorProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IMetadataBasedModelValidatorProvider.HasValidators(System.Type modelType, System.Collections.Generic.IList validatorMetadata) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator.Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Cache.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Container.get -> object +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Container.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Context.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Key.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Key.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Metadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Model.get -> object +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Model.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager.StateManager(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor visitor, object newModel) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Strategy.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Strategy.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidationVisitor(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider validatorProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache validatorCache, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidatorProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache.GetValidators(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider validatorProvider) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelMetadataTypeAttribute.MetadataType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelMetadataTypeAttribute.ModelMetadataTypeAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.MvcOptions.CacheProfiles.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.MvcOptions.Conventions.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcOptions.Filters.get -> Microsoft.AspNetCore.Mvc.Filters.FilterCollection +~Microsoft.AspNetCore.Mvc.MvcOptions.FormatterMappings.get -> Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings +~Microsoft.AspNetCore.Mvc.MvcOptions.InputFormatters.get -> Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection +~Microsoft.AspNetCore.Mvc.MvcOptions.ModelBinderProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcOptions.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider +~Microsoft.AspNetCore.Mvc.MvcOptions.ModelMetadataDetailsProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcOptions.ModelValidatorProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcOptions.OutputFormatters.get -> Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection +~Microsoft.AspNetCore.Mvc.MvcOptions.ValueProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.NotFoundObjectResult.NotFoundObjectResult(object value) -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.ContentTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.ObjectResult.ContentTypes.set -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.DeclaredType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ObjectResult.DeclaredType.set -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.Formatters.get -> Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection +~Microsoft.AspNetCore.Mvc.ObjectResult.Formatters.set -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.ObjectResult(object value) -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.Value.get -> object +~Microsoft.AspNetCore.Mvc.ObjectResult.Value.set -> void +~Microsoft.AspNetCore.Mvc.OkObjectResult.OkObjectResult(object value) -> void +~Microsoft.AspNetCore.Mvc.PhysicalFileResult.FileName.get -> string +~Microsoft.AspNetCore.Mvc.PhysicalFileResult.FileName.set -> void +~Microsoft.AspNetCore.Mvc.PhysicalFileResult.PhysicalFileResult(string fileName, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.PhysicalFileResult.PhysicalFileResult(string fileName, string contentType) -> void +~Microsoft.AspNetCore.Mvc.ProblemDetails.Detail.get -> string +~Microsoft.AspNetCore.Mvc.ProblemDetails.Detail.set -> void +~Microsoft.AspNetCore.Mvc.ProblemDetails.Extensions.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ProblemDetails.Instance.get -> string +~Microsoft.AspNetCore.Mvc.ProblemDetails.Instance.set -> void +~Microsoft.AspNetCore.Mvc.ProblemDetails.Title.get -> string +~Microsoft.AspNetCore.Mvc.ProblemDetails.Title.set -> void +~Microsoft.AspNetCore.Mvc.ProblemDetails.Type.get -> string +~Microsoft.AspNetCore.Mvc.ProblemDetails.Type.set -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.ContentTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.ProducesAttribute.ContentTypes.set -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.ProducesAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.ProducesAttribute(string contentType, params string[] additionalContentTypes) -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.SetContentTypes(Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ProducesAttribute.Type.set -> void +~Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute.ProducesDefaultResponseTypeAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute.ProducesErrorResponseTypeAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.ProducesResponseTypeAttribute(System.Type type, int statusCode) -> void +~Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.Type.set -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.RedirectResult(string url) -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.RedirectResult(string url, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.RedirectResult(string url, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.Url.get -> string +~Microsoft.AspNetCore.Mvc.RedirectResult.Url.set -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RedirectResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.ActionName.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.ActionName.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, bool permanent, bool preserveMethod, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, bool permanent, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Host.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Host.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.PageName.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.PageName.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Protocol.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Protocol.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, bool permanent, bool preserveMethod, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, bool permanent, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, bool permanent, bool preserveMethod, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, bool permanent, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RouteName.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RouteName.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.CacheProfileName.get -> string +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.CacheProfileName.set -> void +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.GetCacheProfile(Microsoft.AspNetCore.Mvc.MvcOptions options) -> Microsoft.AspNetCore.Mvc.CacheProfile +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.VaryByHeader.get -> string +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.VaryByHeader.set -> void +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.VaryByQueryKeys.get -> string[] +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.VaryByQueryKeys.set -> void +~Microsoft.AspNetCore.Mvc.RouteAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.RouteAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.RouteAttribute.RouteAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.RouteAttribute.Template.get -> string +~Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.State.get -> object +~Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.State.set -> void +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.HttpMethodAttribute(System.Collections.Generic.IEnumerable httpMethods) -> void +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.HttpMethodAttribute(System.Collections.Generic.IEnumerable httpMethods, string template) -> void +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.HttpMethods.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Template.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IActionHttpMethodProvider.HttpMethods.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider.Name.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider.Template.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IRouteValueProvider.RouteKey.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IRouteValueProvider.RouteValue.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory.GetUrlHelper(Microsoft.AspNetCore.Mvc.ActionContext context) -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.Routing.KnownRouteValueConstraint.KnownRouteValueConstraint(Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider actionDescriptorCollectionProvider) -> void +~Microsoft.AspNetCore.Mvc.Routing.KnownRouteValueConstraint.Match(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.IRouter route, string routeKey, Microsoft.AspNetCore.Routing.RouteValueDictionary values, Microsoft.AspNetCore.Routing.RouteDirection routeDirection) -> bool +~Microsoft.AspNetCore.Mvc.Routing.RouteValueAttribute.RouteKey.get -> string +~Microsoft.AspNetCore.Mvc.Routing.RouteValueAttribute.RouteValue.get -> string +~Microsoft.AspNetCore.Mvc.Routing.RouteValueAttribute.RouteValueAttribute(string routeKey, string routeValue) -> void +~Microsoft.AspNetCore.Mvc.Routing.UrlHelper.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Routing.UrlHelper.Router.get -> Microsoft.AspNetCore.Routing.IRouter +~Microsoft.AspNetCore.Mvc.Routing.UrlHelper.UrlHelper(Microsoft.AspNetCore.Mvc.ActionContext actionContext) -> void +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.AmbientValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.GenerateUrl(string protocol, string host, string path) -> string +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.GenerateUrl(string protocol, string host, string virtualPath, string fragment) -> string +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.GetValuesDictionary(object values) -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.UrlHelperBase(Microsoft.AspNetCore.Mvc.ActionContext actionContext) -> void +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperFactory.GetUrlHelper(Microsoft.AspNetCore.Mvc.ActionContext context) -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.SerializableError.SerializableError(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.ServiceFilterAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.ServiceType.get -> System.Type +~Microsoft.AspNetCore.Mvc.SignInResult.AuthenticationScheme.get -> string +~Microsoft.AspNetCore.Mvc.SignInResult.AuthenticationScheme.set -> void +~Microsoft.AspNetCore.Mvc.SignInResult.Principal.get -> System.Security.Claims.ClaimsPrincipal +~Microsoft.AspNetCore.Mvc.SignInResult.Principal.set -> void +~Microsoft.AspNetCore.Mvc.SignInResult.Properties.get -> Microsoft.AspNetCore.Authentication.AuthenticationProperties +~Microsoft.AspNetCore.Mvc.SignInResult.Properties.set -> void +~Microsoft.AspNetCore.Mvc.SignInResult.SignInResult(System.Security.Claims.ClaimsPrincipal principal) -> void +~Microsoft.AspNetCore.Mvc.SignInResult.SignInResult(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.SignInResult.SignInResult(string authenticationScheme, System.Security.Claims.ClaimsPrincipal principal) -> void +~Microsoft.AspNetCore.Mvc.SignInResult.SignInResult(string authenticationScheme, System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.AuthenticationSchemes.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.SignOutResult.AuthenticationSchemes.set -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.Properties.get -> Microsoft.AspNetCore.Authentication.AuthenticationProperties +~Microsoft.AspNetCore.Mvc.SignOutResult.Properties.set -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(System.Collections.Generic.IList authenticationSchemes) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(System.Collections.Generic.IList authenticationSchemes, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(string authenticationScheme) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(string authenticationScheme, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.Arguments.get -> object[] +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.Arguments.set -> void +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.ImplementationType.get -> System.Type +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.TypeFilterAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult.UnauthorizedObjectResult(object value) -> void +~Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult.UnprocessableEntityObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult.UnprocessableEntityObjectResult(object error) -> void +~Microsoft.AspNetCore.Mvc.ValidationProblemDetails.Errors.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ValidationProblemDetails.ValidationProblemDetails(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ValidationProblemDetails.ValidationProblemDetails(System.Collections.Generic.IDictionary errors) -> void +~Microsoft.AspNetCore.Mvc.VirtualFileResult.FileName.get -> string +~Microsoft.AspNetCore.Mvc.VirtualFileResult.FileName.set -> void +~Microsoft.AspNetCore.Mvc.VirtualFileResult.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider +~Microsoft.AspNetCore.Mvc.VirtualFileResult.FileProvider.set -> void +~Microsoft.AspNetCore.Mvc.VirtualFileResult.VirtualFileResult(string fileName, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.VirtualFileResult.VirtualFileResult(string fileName, string contentType) -> void +~Microsoft.Extensions.DependencyInjection.IMvcBuilder.PartManager.get -> Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager +~Microsoft.Extensions.DependencyInjection.IMvcBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection +~Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder.PartManager.get -> Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager +~Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection +~abstract Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.IsValidForRequest(Microsoft.AspNetCore.Routing.RouteContext routeContext, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor action) -> bool +~abstract Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPart.Name.get -> string +~abstract Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory.GetApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~abstract Microsoft.AspNetCore.Mvc.Diagnostics.EventData.this[int index].get -> System.Collections.Generic.KeyValuePair +~abstract Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> System.Threading.Tasks.Task +~abstract Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~abstract Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~abstract Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollectionProvider.ActionDescriptors.get -> Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollectionProvider.GetChangeToken() -> Microsoft.Extensions.Primitives.IChangeToken +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions.DefaultValues.get -> System.Collections.Generic.IReadOnlyDictionary +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector.SelectFormatter(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context, System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection mediaTypes) -> Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory.CreateProblemDetails(Microsoft.AspNetCore.Http.HttpContext httpContext, int? statusCode = null, string title = null, string type = null, string detail = null, string instance = null) -> Microsoft.AspNetCore.Mvc.ProblemDetails +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory.CreateValidationProblemDetails(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelStateDictionary, int? statusCode = null, string title = null, string type = null, string detail = null, string instance = null) -> Microsoft.AspNetCore.Mvc.ValidationProblemDetails +~abstract Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.ContainsPrefix(string prefix) -> bool +~abstract Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~abstract Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.GetValidationVisitor(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider validatorProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache validatorCache, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState) -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor +~abstract Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.TransformAsync(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteValueDictionary values) -> System.Threading.Tasks.ValueTask +~abstract Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.Action(Microsoft.AspNetCore.Mvc.Routing.UrlActionContext actionContext) -> string +~abstract Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.RouteUrl(Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext routeContext) -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterAction" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterActionResult" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnAuthorization" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterControllerActionMethod" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnException" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeAction" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeActionResult" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnAuthorization" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeControllerActionMethod" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnException" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.EventData.EventNamespace = "Microsoft.AspNetCore.Mvc." -> string +~override Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.AcceptedResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.Name.get -> string +~override Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory.GetApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ApplicationParts.NullApplicationPartFactory.GetApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ChallengeResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ContentResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.DisplayName.get -> string +~override Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.DisplayName.set -> void +~override Microsoft.AspNetCore.Mvc.CreatedAtActionResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.CreatedResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.EmptyResult.ExecuteResult(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.FileContentResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.FileStreamResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ForbidResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality.ToString() -> string +~override Microsoft.AspNetCore.Mvc.Formatters.StringOutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.StringOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector.SelectFormatter(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context, System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter +~override Microsoft.AspNetCore.Mvc.JsonResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.LocalRedirectResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.CanCreateInstance(System.Type targetType) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.ConvertToCollectionType(System.Type targetType, System.Collections.Generic.IEnumerable collection) -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.CopyToModel(object target, System.Collections.Generic.IEnumerable sourceCollection) -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.CreateEmptyCollection(System.Type targetType) -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.CanCreateInstance(System.Type targetType) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.ConvertToCollectionType(System.Type targetType, System.Collections.Generic.IEnumerable> collection) -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.CreateEmptyCollection(System.Type targetType) -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinder.CheckModel(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult valueProviderResult, object model) -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.InsertItem(int index, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider item) -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.SetItem(int index, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider item) -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ActionContext.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.BinderModelName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.BinderModelName.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.BindingSource.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.EnterNestedScope(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata modelMetadata, string fieldName, string modelName, object model) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.FieldName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.FieldName.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.Model.get -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.Model.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelMetadata.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelName.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelState.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.PropertyFilter.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.PropertyFilter.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ValidationState.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ValueProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ValueProvider.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.ContainsPrefix(string prefix) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~override Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.ContainsPrefix(string prefix) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.AttemptedValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.MissingBindRequiredValueAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.MissingKeyOrValueAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.MissingRequestBodyRequiredValueAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.NonPropertyAttemptedValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.NonPropertyUnknownValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.NonPropertyValueMustBeANumberAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.UnknownValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.ValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.ValueMustBeANumberAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.ValueMustNotBeNullAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.AdditionalValues.get -> System.Collections.Generic.IReadOnlyDictionary +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BinderModelName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BinderType.get -> System.Type +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DataTypeName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Description.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DisplayFormatString.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DisplayName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.EditFormatString.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ElementMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.EnumGroupedDisplayNamesAndValues.get -> System.Collections.Generic.IEnumerable> +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.EnumNamesAndValues.get -> System.Collections.Generic.IReadOnlyDictionary +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.GetMetadataForProperties(System.Type modelType) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.GetMetadataForType(System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.NullDisplayText.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Placeholder.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Properties.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.PropertyGetter.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.PropertySetter.get -> System.Action +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.PropertyValidationFilter.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.SimpleDisplayProperty.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.TemplateHint.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo parameter) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo parameter, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForProperties(System.Type modelType) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForProperty(System.Reflection.PropertyInfo propertyInfo, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForType(System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.ContainsPrefix(string prefix) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~override Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.ContainsPrefix(string key) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~override Microsoft.AspNetCore.Mvc.ObjectResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.PhysicalFileResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RedirectResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RedirectToActionResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RedirectToPageResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RedirectToRouteResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Routing.UrlHelper.Action(Microsoft.AspNetCore.Mvc.Routing.UrlActionContext actionContext) -> string +~override Microsoft.AspNetCore.Mvc.Routing.UrlHelper.RouteUrl(Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext routeContext) -> string +~override Microsoft.AspNetCore.Mvc.SignInResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.SignOutResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.StatusCodeResult.ExecuteResult(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.VirtualFileResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override sealed Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override sealed Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~override sealed Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapAreaControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string name, string areaName, string pattern, object defaults = null, object constraints = null, object dataTokens = null) -> Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string name, string pattern, object defaults = null, object constraints = null, object dataTokens = null) -> Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapControllers(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints) -> Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapDefaultControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints) -> Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapDynamicControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern) -> void +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapDynamicControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, object state) -> void +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapFallbackToAreaController(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string action, string controller, string area) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapFallbackToAreaController(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, string action, string controller, string area) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapFallbackToController(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string action, string controller) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapFallbackToController(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, string action, string controller) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder +~static Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, System.Action configureRoutes) -> Microsoft.AspNetCore.Builder.IApplicationBuilder +~static Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvcWithDefaultRoute(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder +~static Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions.MapAreaRoute(this Microsoft.AspNetCore.Routing.IRouteBuilder routeBuilder, string name, string areaName, string template) -> Microsoft.AspNetCore.Routing.IRouteBuilder +~static Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions.MapAreaRoute(this Microsoft.AspNetCore.Routing.IRouteBuilder routeBuilder, string name, string areaName, string template, object defaults) -> Microsoft.AspNetCore.Routing.IRouteBuilder +~static Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions.MapAreaRoute(this Microsoft.AspNetCore.Routing.IRouteBuilder routeBuilder, string name, string areaName, string template, object defaults, object constraints) -> Microsoft.AspNetCore.Routing.IRouteBuilder +~static Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions.MapAreaRoute(this Microsoft.AspNetCore.Routing.IRouteBuilder routeBuilder, string name, string areaName, string template, object defaults, object constraints, object dataTokens) -> Microsoft.AspNetCore.Routing.IRouteBuilder +~static Microsoft.AspNetCore.Mvc.ActionResult.implicit operator Microsoft.AspNetCore.Mvc.ActionResult(Microsoft.AspNetCore.Mvc.ActionResult result) -> Microsoft.AspNetCore.Mvc.ActionResult +~static Microsoft.AspNetCore.Mvc.ActionResult.implicit operator Microsoft.AspNetCore.Mvc.ActionResult(TValue value) -> Microsoft.AspNetCore.Mvc.ActionResult +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.CombineAttributeRouteModel(Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel left, Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel right) -> Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.CombineTemplates(string prefix, string template) -> string +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.IsOverridePattern(string template) -> bool +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.ReplaceTokens(string template, System.Collections.Generic.IDictionary values) -> string +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.ReplaceTokens(string template, System.Collections.Generic.IDictionary values, Microsoft.AspNetCore.Routing.IOutboundParameterTransformer routeTokenTransformer) -> string +~static Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory.GetApplicationPartFactory(System.Reflection.Assembly assembly) -> Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory +~static Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory.GetDefaultApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~static Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory.Instance.get -> Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory +~static Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute.GetRelatedAssemblies(System.Reflection.Assembly assembly, bool throwOnError) -> System.Collections.Generic.IReadOnlyList +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Create(object model) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Delete(object id) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Edit(object id, object model) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Find(object id) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Get(object id) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Post(object model) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Put(object id, object model) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Update(object id, object model) -> void +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.CreateMediaTypeSegmentWithQuality(string mediaType, int start) -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.GetEncoding(Microsoft.Extensions.Primitives.StringSegment mediaType) -> System.Text.Encoding +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.GetEncoding(string mediaType) -> System.Text.Encoding +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.ReplaceEncoding(Microsoft.Extensions.Primitives.StringSegment mediaType, System.Text.Encoding encoding) -> string +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.ReplaceEncoding(string mediaType, System.Text.Encoding encoding) -> string +~static Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.CreateLogger(Microsoft.Extensions.Logging.ILoggerFactory factory) -> Microsoft.Extensions.Logging.ILogger +~static Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.WriteFileAsync(Microsoft.AspNetCore.Http.HttpContext context, System.IO.Stream fileStream, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IList factories) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(Microsoft.AspNetCore.Mvc.ControllerContext controllerContext) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.CreateBindingContext(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo bindingInfo, string modelName) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext +~static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.MetadataDetailsProviderExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.MetadataDetailsProviderExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForParameter(System.Reflection.ParameterInfo parameterInfo) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForParameter(System.Reflection.ParameterInfo parameterInfo, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForProperty(System.Type containerType, System.Reflection.PropertyInfo property, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForProperty(System.Type type, System.Reflection.PropertyInfo property) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForType(System.Type type) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProviderExtensions.GetMetadataForProperty(this Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider provider, System.Type containerType, string propertyName) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelNames.CreateIndexModelName(string parentName, int index) -> string +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelNames.CreateIndexModelName(string parentName, string index) -> string +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelNames.CreatePropertyModelName(string prefix, string propertyName) -> string +~static Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager.Recurse(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor visitor, string key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object model, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy strategy) -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager +~static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values, string protocol) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values, string protocol, string host) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values, string protocol, string host, string fragment) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action = null, string controller = null, object values = null, string protocol = null, string host = null, string fragment = null) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler, object values, string protocol) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler, object values, string protocol, string host) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler, object values, string protocol, string host, string fragment) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.PageLink(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName = null, string pageHandler = null, object values = null, string protocol = null, string host = null, string fragment = null) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName, object values, string protocol) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName, object values, string protocol, string host) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName, object values, string protocol, string host, string fragment) -> string +~static Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions.GetPathByAction(this Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string action = null, string controller = null, object values = null, Microsoft.AspNetCore.Http.PathString? pathBase = null, Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions.GetPathByAction(this Microsoft.AspNetCore.Routing.LinkGenerator generator, string action, string controller, object values = null, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions.GetUriByAction(this Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string action = null, string controller = null, object values = null, string scheme = null, Microsoft.AspNetCore.Http.HostString? host = null, Microsoft.AspNetCore.Http.PathString? pathBase = null, Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions.GetUriByAction(this Microsoft.AspNetCore.Routing.LinkGenerator generator, string action, string controller, object values, string scheme, Microsoft.AspNetCore.Http.HostString host, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions.GetPathByPage(this Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string page = null, string handler = null, object values = null, Microsoft.AspNetCore.Http.PathString? pathBase = null, Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions.GetPathByPage(this Microsoft.AspNetCore.Routing.LinkGenerator generator, string page, string handler = null, object values = null, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions.GetUriByPage(this Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string page = null, string handler = null, object values = null, string scheme = null, Microsoft.AspNetCore.Http.HostString? host = null, Microsoft.AspNetCore.Http.PathString? pathBase = null, Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions.GetUriByPage(this Microsoft.AspNetCore.Routing.LinkGenerator generator, string page, string handler, object values, string scheme, Microsoft.AspNetCore.Http.HostString host, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.Add(this System.Collections.Generic.IList conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IActionModelConvention actionModelConvention) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.Add(this System.Collections.Generic.IList conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IControllerModelConvention controllerModelConvention) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.Add(this System.Collections.Generic.IList conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelBaseConvention parameterModelConvention) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.Add(this System.Collections.Generic.IList conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelConvention parameterModelConvention) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddApplicationPart(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Reflection.Assembly assembly) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddControllersAsServices(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddFormatterMappings(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddJsonOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddMvcOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.ConfigureApiBehaviorOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.ConfigureApplicationPartManager(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.SetCompatibilityVersion(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.CompatibilityVersion version) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddApplicationPart(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Reflection.Assembly assembly) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddAuthorization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddAuthorization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddControllersAsServices(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddFormatterMappings(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddFormatterMappings(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddJsonOptions(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddMvcOptions(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.ConfigureApiBehaviorOptions(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.ConfigureApplicationPartManager(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.SetCompatibilityVersion(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.CompatibilityVersion version) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.UTF16EncodingLittleEndian -> System.Text.Encoding +~static readonly Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.UTF8EncodingWithoutBOM -> System.Text.Encoding +~virtual Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.Accept(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext context) -> bool +~virtual Microsoft.AspNetCore.Mvc.ActionResult.ExecuteResult(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.ActionResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.ApiVisibilityConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.ClientErrorResultFilterConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.ConsumesConstraintForFormFileParameterConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.InferParameterBindingInfoConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.InvalidModelStateFilterConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.OnAuthorizationAsync(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~virtual Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BindingSource.set -> void +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted() -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(System.Uri uri) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(System.Uri uri, object value) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(object value) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(string uri) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(string uri, object value) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, string controllerName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(object routeValues) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(object routeValues, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(string routeName) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(string routeName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.BadRequest() -> Microsoft.AspNetCore.Mvc.BadRequestResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.BadRequest(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.BadRequest(object error) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Challenge() -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Challenge(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Conflict() -> Microsoft.AspNetCore.Mvc.ConflictResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Conflict(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.ConflictObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Conflict(object error) -> Microsoft.AspNetCore.Mvc.ConflictObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Content(string content) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Content(string content, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Content(string content, string contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Content(string content, string contentType, System.Text.Encoding contentEncoding) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Created(System.Uri uri, object value) -> Microsoft.AspNetCore.Mvc.CreatedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Created(string uri, object value) -> Microsoft.AspNetCore.Mvc.CreatedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtAction(string actionName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtAction(string actionName, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtAction(string actionName, string controllerName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtRoute(object routeValues, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtRoute(string routeName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtRoute(string routeName, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, string fileDownloadName, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, string fileDownloadName, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Forbid() -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Forbid(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.LocalRedirect(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.LocalRedirectPermanent(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.LocalRedirectPermanentPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.LocalRedirectPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.NoContent() -> Microsoft.AspNetCore.Mvc.NoContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.NotFound() -> Microsoft.AspNetCore.Mvc.NotFoundResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.NotFound(object value) -> Microsoft.AspNetCore.Mvc.NotFoundObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Ok() -> Microsoft.AspNetCore.Mvc.OkResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Ok(object value) -> Microsoft.AspNetCore.Mvc.OkObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Problem(string detail = null, string instance = null, int? statusCode = null, string title = null, string type = null) -> Microsoft.AspNetCore.Mvc.ObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Redirect(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectPermanent(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectPermanentPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction() -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanentPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, string pageHandler, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanentPreserveMethod(string pageName, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePreserveMethod(string pageName, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanentPreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignIn(System.Security.Claims.ClaimsPrincipal principal) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignOut() -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignOut(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignOut(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignOut(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode(int statusCode) -> Microsoft.AspNetCore.Mvc.StatusCodeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode(int statusCode, object value) -> Microsoft.AspNetCore.Mvc.ObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(object model, System.Type modelType, string prefix) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryValidateModel(object model) -> bool +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryValidateModel(object model, string prefix) -> bool +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Unauthorized() -> Microsoft.AspNetCore.Mvc.UnauthorizedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Unauthorized(object value) -> Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.UnprocessableEntity() -> Microsoft.AspNetCore.Mvc.UnprocessableEntityResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.UnprocessableEntity(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.UnprocessableEntity(object error) -> Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem() -> Microsoft.AspNetCore.Mvc.ActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelStateDictionary) -> Microsoft.AspNetCore.Mvc.ActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem(Microsoft.AspNetCore.Mvc.ValidationProblemDetails descriptor) -> Microsoft.AspNetCore.Mvc.ActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem(string detail = null, string instance = null, int? statusCode = null, string title = null, string type = null, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelStateDictionary = null) -> Microsoft.AspNetCore.Mvc.ActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerContext.ValueProviderFactories.get -> System.Collections.Generic.IList +~virtual Microsoft.AspNetCore.Mvc.ControllerContext.ValueProviderFactories.set -> void +~virtual Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ActionName.get -> string +~virtual Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ActionName.set -> void +~virtual Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.IsController(System.Reflection.TypeInfo typeInfo) -> bool +~virtual Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator.Release(Microsoft.AspNetCore.Mvc.ControllerContext context, object controller) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.OnExceptionAsync(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.OnResultExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.GetFormat(Microsoft.AspNetCore.Mvc.ActionContext context) -> string +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.CanRead(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> bool +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.CanReadType(System.Type type) -> bool +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.GetDefaultValueForType(System.Type modelType) -> object +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.GetSupportedContentTypes(string contentType, System.Type objectType) -> System.Collections.Generic.IReadOnlyList +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.ReadAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context) -> bool +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.CanWriteType(System.Type type) -> bool +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.GetSupportedContentTypes(string contentType, System.Type objectType) -> System.Collections.Generic.IReadOnlyList +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.WriteResponseHeaders(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.SelectCharacterEncoding(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Text.Encoding +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions.PostConfigure(string name, TOptions options) -> void +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ContentResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileContentResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor.WriteFileAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileContentResult result, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.SetHeadersAndLog(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileResult result, long? fileLength, bool enableRangeProcessing, System.DateTimeOffset? lastModified = null, Microsoft.Net.Http.Headers.EntityTagHeaderValue etag = null) -> (Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength, bool serveBody) +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileStreamResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor.WriteFileAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileStreamResult result, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.LocalRedirectResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.LocalRedirectResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ObjectResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.PhysicalFileResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.GetFileInfo(string path) -> Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.GetFileStream(string path) -> System.IO.Stream +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.WriteFileAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.PhysicalFileResult result, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.RedirectResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.RedirectResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToActionResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.RedirectToActionResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToPageResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.RedirectToPageResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToRouteResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.RedirectToRouteResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.VirtualFileResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.GetFileStream(Microsoft.Extensions.FileProviders.IFileInfo fileInfo) -> System.IO.Stream +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.WriteFileAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.VirtualFileResult result, Microsoft.Extensions.FileProviders.IFileInfo fileInfo, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ModelBinderAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~virtual Microsoft.AspNetCore.Mvc.ModelBinderAttribute.BindingSource.set -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CanCreateInstance(System.Type targetType) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.ConvertToCollectionType(System.Type targetType, System.Collections.Generic.IEnumerable collection) -> object +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CopyToModel(object target, System.Collections.Generic.IEnumerable sourceCollection) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CreateEmptyCollection(System.Type targetType) -> object +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.BindProperty(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CanBindProperty(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata propertyMetadata) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> object +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.SetProperty(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext, string modelName, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata propertyMetadata, Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult result) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder.CheckModel(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult valueProviderResult, object model) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.Filter(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.ContainsPrefix(string prefix) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider.Prefix.get -> string +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider.PropertyFilter.get -> System.Func +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider.PropertyIncludeExpressions.get -> System.Collections.Generic.IEnumerable>> +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.CreateModelMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails entry) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.CreateParameterDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.CreatePropertyDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails[] +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.CreateTypeDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object container) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder modelBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor parameter, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object value) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder modelBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor parameter, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object value, object container) -> System.Threading.Tasks.ValueTask +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.GetValidationEntry(object model) -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.SuppressValidation(string key) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitChildren(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy strategy) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitComplexType(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy defaultStrategy) -> bool +~virtual Microsoft.AspNetCore.Mvc.ObjectResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.ProducesAttribute.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.ProducesAttribute.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.HandleNonHttpsRequest(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext filterContext) -> void +~virtual Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.OnAuthorization(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext filterContext) -> void +~virtual Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.FilterAsync(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteValueDictionary values, System.Collections.Generic.IReadOnlyList endpoints) -> System.Threading.Tasks.ValueTask> +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelper.GenerateUrl(string protocol, string host, Microsoft.AspNetCore.Routing.VirtualPathData pathData, string fragment) -> string +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelper.GetVirtualPathData(string routeName, Microsoft.AspNetCore.Routing.RouteValueDictionary values) -> Microsoft.AspNetCore.Routing.VirtualPathData +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.Content(string contentPath) -> string +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.IsLocalUrl(string url) -> bool +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.Link(string routeName, object values) -> string diff --git a/src/Mvc/Mvc.Core/src/Routing/ControllerLinkGeneratorExtensions.cs b/src/Mvc/Mvc.Core/src/Routing/ControllerLinkGeneratorExtensions.cs index d15eaef020..f0b83af2e6 100644 --- a/src/Mvc/Mvc.Core/src/Routing/ControllerLinkGeneratorExtensions.cs +++ b/src/Mvc/Mvc.Core/src/Routing/ControllerLinkGeneratorExtensions.cs @@ -1,10 +1,11 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc.Routing; -using System; namespace Microsoft.AspNetCore.Routing { @@ -36,6 +37,7 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null if a URI cannot be created. + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetPathByAction( this LinkGenerator generator, HttpContext httpContext, @@ -81,6 +83,7 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null if a URI cannot be created. + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetPathByAction( this LinkGenerator generator, string action, @@ -146,6 +149,7 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetUriByAction( this LinkGenerator generator, HttpContext httpContext, @@ -205,6 +209,7 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetUriByAction( this LinkGenerator generator, string action, @@ -254,4 +259,4 @@ namespace Microsoft.AspNetCore.Routing return httpContext?.Features.Get()?.RouteValues; } } -} \ No newline at end of file +} diff --git a/src/Mvc/Mvc.Core/src/Routing/PageLinkGeneratorExtensions.cs b/src/Mvc/Mvc.Core/src/Routing/PageLinkGeneratorExtensions.cs index f1725f2fe0..3d74e2b07a 100644 --- a/src/Mvc/Mvc.Core/src/Routing/PageLinkGeneratorExtensions.cs +++ b/src/Mvc/Mvc.Core/src/Routing/PageLinkGeneratorExtensions.cs @@ -1,7 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc.Routing; @@ -35,6 +36,7 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null if a URI cannot be created. + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetPathByPage( this LinkGenerator generator, HttpContext httpContext, @@ -84,6 +86,7 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null if a URI cannot be created. + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetPathByPage( this LinkGenerator generator, string page, @@ -143,6 +146,7 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetUriByPage( this LinkGenerator generator, HttpContext httpContext, @@ -202,6 +206,7 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetUriByPage( this LinkGenerator generator, string page, diff --git a/src/Mvc/Mvc.Cors/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Cors/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Cors/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Cors/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Cors/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..4abbb445f6 --- /dev/null +++ b/src/Mvc/Mvc.Cors/src/PublicAPI.Unshipped.txt @@ -0,0 +1,12 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter +Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.Order.get -> int +Microsoft.Extensions.DependencyInjection.MvcCorsMvcCoreBuilderExtensions +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.CorsAuthorizationFilter(Microsoft.AspNetCore.Cors.Infrastructure.ICorsService corsService, Microsoft.AspNetCore.Cors.Infrastructure.ICorsPolicyProvider policyProvider) -> void +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.CorsAuthorizationFilter(Microsoft.AspNetCore.Cors.Infrastructure.ICorsService corsService, Microsoft.AspNetCore.Cors.Infrastructure.ICorsPolicyProvider policyProvider, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.OnAuthorizationAsync(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.PolicyName.get -> string +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.PolicyName.set -> void +~static Microsoft.Extensions.DependencyInjection.MvcCorsMvcCoreBuilderExtensions.AddCors(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCorsMvcCoreBuilderExtensions.AddCors(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCorsMvcCoreBuilderExtensions.ConfigureCors(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder diff --git a/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..bc07acf903 --- /dev/null +++ b/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Unshipped.txt @@ -0,0 +1,38 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.DataAnnotations.IAttributeAdapter +Microsoft.AspNetCore.Mvc.DataAnnotations.IValidationAttributeAdapterProvider +Microsoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions +Microsoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions.MvcDataAnnotationsLocalizationOptions() -> void +Microsoft.AspNetCore.Mvc.DataAnnotations.RequiredAttributeAdapter +Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapterProvider +Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapterProvider.ValidationAttributeAdapterProvider() -> void +Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationProviderAttribute +Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationProviderAttribute.ValidationProviderAttribute() -> void +Microsoft.AspNetCore.Mvc.HiddenInputAttribute +Microsoft.AspNetCore.Mvc.HiddenInputAttribute.DisplayValue.get -> bool +Microsoft.AspNetCore.Mvc.HiddenInputAttribute.DisplayValue.set -> void +Microsoft.AspNetCore.Mvc.HiddenInputAttribute.HiddenInputAttribute() -> void +Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcCoreBuilderExtensions +~Microsoft.AspNetCore.Mvc.DataAnnotations.AttributeAdapterBase +~Microsoft.AspNetCore.Mvc.DataAnnotations.AttributeAdapterBase.AttributeAdapterBase(TAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> void +~Microsoft.AspNetCore.Mvc.DataAnnotations.IAttributeAdapter.GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase validationContext) -> string +~Microsoft.AspNetCore.Mvc.DataAnnotations.IValidationAttributeAdapterProvider.GetAttributeAdapter(System.ComponentModel.DataAnnotations.ValidationAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> Microsoft.AspNetCore.Mvc.DataAnnotations.IAttributeAdapter +~Microsoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions.DataAnnotationLocalizerProvider -> System.Func +~Microsoft.AspNetCore.Mvc.DataAnnotations.RequiredAttributeAdapter.RequiredAttributeAdapter(System.ComponentModel.DataAnnotations.RequiredAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> void +~Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter +~Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.Attribute.get -> TAttribute +~Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.ValidationAttributeAdapter(TAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> void +~Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapterProvider.GetAttributeAdapter(System.ComponentModel.DataAnnotations.ValidationAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> Microsoft.AspNetCore.Mvc.DataAnnotations.IAttributeAdapter +~abstract Microsoft.AspNetCore.Mvc.DataAnnotations.AttributeAdapterBase.GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase validationContext) -> string +~abstract Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.AddValidation(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> void +~abstract Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationProviderAttribute.GetValidationAttributes() -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.DataAnnotations.RequiredAttributeAdapter.AddValidation(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> void +~override Microsoft.AspNetCore.Mvc.DataAnnotations.RequiredAttributeAdapter.GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase validationContext) -> string +~static Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.MergeAttribute(System.Collections.Generic.IDictionary attributes, string key, string value) -> bool +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcBuilderExtensions.AddDataAnnotationsLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcBuilderExtensions.AddDataAnnotationsLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcCoreBuilderExtensions.AddDataAnnotations(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcCoreBuilderExtensions.AddDataAnnotationsLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcCoreBuilderExtensions.AddDataAnnotationsLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~virtual Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata modelMetadata, params object[] arguments) -> string diff --git a/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..e03057efc8 --- /dev/null +++ b/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Unshipped.txt @@ -0,0 +1,13 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.JsonResult (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +Microsoft.AspNetCore.Mvc.JsonResult.StatusCode.get -> int? (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +Microsoft.AspNetCore.Mvc.JsonResult.StatusCode.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.ContentType.get -> string (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.ContentType.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.JsonResult(object value) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.JsonResult(object value, object serializerSettings) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.SerializerSettings.get -> object (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.SerializerSettings.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.Value.get -> object (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.Value.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~override Microsoft.AspNetCore.Mvc.JsonResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) diff --git a/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..39ee932575 --- /dev/null +++ b/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Unshipped.txt @@ -0,0 +1,137 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable.DelegatingEnumerable() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.Current.get -> TWrapped +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProvider +Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProviderFactory +Microsoft.AspNetCore.Mvc.Formatters.Xml.IUnwrappable +Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProviderFactory +Microsoft.AspNetCore.Mvc.Formatters.Xml.MvcXmlOptions +Microsoft.AspNetCore.Mvc.Formatters.Xml.MvcXmlOptions.MvcXmlOptions() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper +Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.ProblemDetailsWrapper() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.SerializableErrorWrapper() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProvider +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProvider.SerializableErrorWrapperProvider() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProviderFactory +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProviderFactory.SerializableErrorWrapperProviderFactory() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper +Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper.ValidationProblemDetailsWrapper() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext +Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext.IsSerialization.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderFactoriesExtensions +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.MaxDepth.get -> int +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.MaxDepth.set -> void +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.XmlDataContractSerializerOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.MaxDepth.get -> int +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.MaxDepth.set -> void +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.XmlSerializerOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DataMemberRequiredBindingMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DataMemberRequiredBindingMetadataProvider.DataMemberRequiredBindingMetadataProvider() -> void +Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions +virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +~Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable.Add(object item) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable.DelegatingEnumerable(System.Collections.Generic.IEnumerable source, Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider elementWrapperProvider) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable.GetEnumerator() -> System.Collections.Generic.IEnumerator +~Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.DelegatingEnumerator(System.Collections.Generic.IEnumerator inner, Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider wrapperProvider) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProvider.EnumerableWrapperProvider(System.Type sourceEnumerableOfT, Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider elementWrapperProvider) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProvider.Wrap(object original) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProvider.WrappingType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProviderFactory.EnumerableWrapperProviderFactory(System.Collections.Generic.IEnumerable wrapperProviderFactories) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProviderFactory.GetProvider(Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext context) -> Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +~Microsoft.AspNetCore.Mvc.Formatters.Xml.IUnwrappable.Unwrap(System.Type declaredType) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider.Wrap(object original) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider.WrappingType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProviderFactory.GetProvider(Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext context) -> Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +~Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.GetSchema() -> System.Xml.Schema.XmlSchema +~Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.ProblemDetailsWrapper(Microsoft.AspNetCore.Mvc.ProblemDetails problemDetails) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.GetSchema() -> System.Xml.Schema.XmlSchema +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.ReadXml(System.Xml.XmlReader reader) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.SerializableError.get -> Microsoft.AspNetCore.Mvc.SerializableError +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.SerializableErrorWrapper(Microsoft.AspNetCore.Mvc.SerializableError error) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.Unwrap(System.Type declaredType) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.WriteXml(System.Xml.XmlWriter writer) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProvider.Wrap(object original) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProvider.WrappingType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProviderFactory.GetProvider(Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext context) -> Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +~Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper.ValidationProblemDetailsWrapper(Microsoft.AspNetCore.Mvc.ValidationProblemDetails problemDetails) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext.DeclaredType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext.WrapperProviderContext(System.Type declaredType, bool isSerialization) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.SerializerSettings.get -> System.Runtime.Serialization.DataContractSerializerSettings +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.SerializerSettings.set -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.WrapperProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.XmlDataContractSerializerInputFormatter(Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.XmlDictionaryReaderQuotas.get -> System.Xml.XmlDictionaryReaderQuotas +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.SerializerSettings.get -> System.Runtime.Serialization.DataContractSerializerSettings +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.SerializerSettings.set -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.WrapperProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.WriterSettings.get -> System.Xml.XmlWriterSettings +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.XmlDataContractSerializerOutputFormatter(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.XmlDataContractSerializerOutputFormatter(System.Xml.XmlWriterSettings writerSettings) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.XmlDataContractSerializerOutputFormatter(System.Xml.XmlWriterSettings writerSettings, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.WrapperProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.XmlDictionaryReaderQuotas.get -> System.Xml.XmlDictionaryReaderQuotas +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.XmlSerializerInputFormatter(Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.WrapperProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.WriterSettings.get -> System.Xml.XmlWriterSettings +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.XmlSerializerOutputFormatter(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.XmlSerializerOutputFormatter(System.Xml.XmlWriterSettings writerSettings) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.XmlSerializerOutputFormatter(System.Xml.XmlWriterSettings writerSettings, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DataMemberRequiredBindingMetadataProvider.CreateBindingMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext context) -> void +~override Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper.ReadValue(System.Xml.XmlReader reader, string name) -> void +~override Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper.WriteXml(System.Xml.XmlWriter writer) -> void +~override Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.CanReadType(System.Type type) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.CanWriteType(System.Type type) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.CanReadType(System.Type type) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CanWriteType(System.Type type) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderFactoriesExtensions.GetWrapperProvider(this System.Collections.Generic.IEnumerable wrapperProviderFactories, Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext wrapperProviderContext) -> Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlDataContractSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlDataContractSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlDataContractSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlDataContractSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlOptions(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.EmptyKey -> string +~virtual Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.ReadValue(System.Xml.XmlReader reader, string name) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.ReadXml(System.Xml.XmlReader reader) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.WriteXml(System.Xml.XmlWriter writer) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.CreateSerializer(System.Type type) -> System.Runtime.Serialization.DataContractSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.CreateXmlReader(System.IO.Stream readStream, System.Text.Encoding encoding) -> System.Xml.XmlReader +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.GetCachedSerializer(System.Type type) -> System.Runtime.Serialization.DataContractSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.GetSerializableType(System.Type declaredType) -> System.Type +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.CreateSerializer(System.Type type) -> System.Runtime.Serialization.DataContractSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.CreateXmlWriter(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.IO.TextWriter writer, System.Xml.XmlWriterSettings xmlWriterSettings) -> System.Xml.XmlWriter +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.CreateXmlWriter(System.IO.TextWriter writer, System.Xml.XmlWriterSettings xmlWriterSettings) -> System.Xml.XmlWriter +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.GetCachedSerializer(System.Type type) -> System.Runtime.Serialization.DataContractSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.GetSerializableType(System.Type type) -> System.Type +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.CreateSerializer(System.Type type) -> System.Xml.Serialization.XmlSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.CreateXmlReader(System.IO.Stream readStream, System.Text.Encoding encoding) -> System.Xml.XmlReader +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.CreateXmlReader(System.IO.Stream readStream, System.Text.Encoding encoding, System.Type type) -> System.Xml.XmlReader +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.GetCachedSerializer(System.Type type) -> System.Xml.Serialization.XmlSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.GetSerializableType(System.Type declaredType) -> System.Type +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CreateSerializer(System.Type type) -> System.Xml.Serialization.XmlSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CreateXmlWriter(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.IO.TextWriter writer, System.Xml.XmlWriterSettings xmlWriterSettings) -> System.Xml.XmlWriter +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CreateXmlWriter(System.IO.TextWriter writer, System.Xml.XmlWriterSettings xmlWriterSettings) -> System.Xml.XmlWriter +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.GetCachedSerializer(System.Type type) -> System.Xml.Serialization.XmlSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.GetSerializableType(System.Type type) -> System.Type +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.Serialize(System.Xml.Serialization.XmlSerializer xmlSerializer, System.Xml.XmlWriter xmlWriter, object value) -> void diff --git a/src/Mvc/Mvc.Localization/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Localization/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Localization/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Localization/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Localization/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..a6865a8160 --- /dev/null +++ b/src/Mvc/Mvc.Localization/src/PublicAPI.Unshipped.txt @@ -0,0 +1,78 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer +Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer +Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerExtensions +Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerFactory +Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory +Microsoft.AspNetCore.Mvc.Localization.IViewLocalizer +Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.IsResourceNotFound.get -> bool +Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer +Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions +~Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.HtmlLocalizer(Microsoft.Extensions.Localization.IStringLocalizer localizer) -> void +~Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.HtmlLocalizer(Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory factory) -> void +~Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerFactory.HtmlLocalizerFactory(Microsoft.Extensions.Localization.IStringLocalizerFactory localizerFactory) -> void +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.GetAllStrings(bool includeParentCultures) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.GetString(string name) -> Microsoft.Extensions.Localization.LocalizedString +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.GetString(string name, params object[] arguments) -> Microsoft.Extensions.Localization.LocalizedString +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.this[string name, params object[] arguments].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.this[string name].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory.Create(System.Type resourceSource) -> Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory.Create(string baseName, string location) -> Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.LocalizedHtmlString(string name, string value) -> void +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.LocalizedHtmlString(string name, string value, bool isResourceNotFound) -> void +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.LocalizedHtmlString(string name, string value, bool isResourceNotFound, params object[] arguments) -> void +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.Name.get -> string +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.Value.get -> string +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.GetAllStrings(bool includeParentCultures) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.GetString(string name) -> Microsoft.Extensions.Localization.LocalizedString +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.GetString(string name, params object[] values) -> Microsoft.Extensions.Localization.LocalizedString +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.ViewLocalizer(Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory localizerFactory, Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment) -> void +~static Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerExtensions.GetAllStrings(this Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer htmlLocalizer) -> System.Collections.Generic.IEnumerable +~static Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerExtensions.GetHtml(this Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer htmlLocalizer, string name) -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~static Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerExtensions.GetHtml(this Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer htmlLocalizer, string name, params object[] arguments) -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action localizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action localizationOptionsSetupAction, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action localizationOptionsSetupAction, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action localizationOptionsSetupAction, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action localizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action localizationOptionsSetupAction, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action localizationOptionsSetupAction, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action localizationOptionsSetupAction, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetAllStrings(bool includeParentCultures) -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetString(string name) -> Microsoft.Extensions.Localization.LocalizedString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetString(string name, params object[] arguments) -> Microsoft.Extensions.Localization.LocalizedString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.ToHtmlString(Microsoft.Extensions.Localization.LocalizedString result) -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.ToHtmlString(Microsoft.Extensions.Localization.LocalizedString result, object[] arguments) -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.this[string name, params object[] arguments].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.this[string name].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetAllStrings(bool includeParentCultures) -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetString(string name) -> Microsoft.Extensions.Localization.LocalizedString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetString(string name, params object[] arguments) -> Microsoft.Extensions.Localization.LocalizedString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.this[string name, params object[] arguments].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.this[string name].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerFactory.Create(System.Type resourceSource) -> Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerFactory.Create(string baseName, string location) -> Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +~virtual Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.this[string key, params object[] arguments].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.this[string key].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString diff --git a/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..3b907d641b --- /dev/null +++ b/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Unshipped.txt @@ -0,0 +1,54 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter +Microsoft.AspNetCore.Mvc.JsonPatchExtensions +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.AllowInputFormatterExceptionMessages.get -> bool +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.AllowInputFormatterExceptionMessages.set -> void +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.InputFormatterMemoryBufferThreshold.get -> int +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.InputFormatterMemoryBufferThreshold.set -> void +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.MvcNewtonsoftJsonOptions() -> void +Microsoft.AspNetCore.Mvc.NewtonsoftJson.JsonSerializerSettingsProvider +Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter +Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter.ProblemDetailsConverter() -> void +Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter +Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter.ValidationProblemDetailsConverter() -> void +Microsoft.AspNetCore.Mvc.Rendering.JsonHelperExtensions +Microsoft.Extensions.DependencyInjection.MvcNewtonsoftJsonOptionsExtensions +Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcCoreBuilderExtensions +override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.NewtonsoftJsonInputFormatter(Microsoft.Extensions.Logging.ILogger logger, Newtonsoft.Json.JsonSerializerSettings serializerSettings, System.Buffers.ArrayPool charPool, Microsoft.Extensions.ObjectPool.ObjectPoolProvider objectPoolProvider, Microsoft.AspNetCore.Mvc.MvcOptions options, Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions jsonOptions) -> void +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.SerializerSettings.get -> Newtonsoft.Json.JsonSerializerSettings +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.NewtonsoftJsonOutputFormatter(Newtonsoft.Json.JsonSerializerSettings serializerSettings, System.Buffers.ArrayPool charPool, Microsoft.AspNetCore.Mvc.MvcOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.SerializerSettings.get -> Newtonsoft.Json.JsonSerializerSettings +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter.NewtonsoftJsonPatchInputFormatter(Microsoft.Extensions.Logging.ILogger logger, Newtonsoft.Json.JsonSerializerSettings serializerSettings, System.Buffers.ArrayPool charPool, Microsoft.Extensions.ObjectPool.ObjectPoolProvider objectPoolProvider, Microsoft.AspNetCore.Mvc.MvcOptions options, Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions jsonOptions) -> void +~Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.SerializerSettings.get -> Newtonsoft.Json.JsonSerializerSettings +~override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter.CanRead(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter.CanConvert(System.Type objectType) -> bool +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter.ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) -> object +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter.WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) -> void +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter.CanConvert(System.Type objectType) -> bool +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter.ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) -> object +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter.WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) -> void +~static Microsoft.AspNetCore.Mvc.JsonPatchExtensions.ApplyTo(this Microsoft.AspNetCore.JsonPatch.JsonPatchDocument patchDoc, T objectToApplyTo, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~static Microsoft.AspNetCore.Mvc.JsonPatchExtensions.ApplyTo(this Microsoft.AspNetCore.JsonPatch.JsonPatchDocument patchDoc, T objectToApplyTo, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, string prefix) -> void +~static Microsoft.AspNetCore.Mvc.NewtonsoftJson.JsonSerializerSettingsProvider.CreateSerializerSettings() -> Newtonsoft.Json.JsonSerializerSettings +~static Microsoft.AspNetCore.Mvc.Rendering.JsonHelperExtensions.Serialize(this Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper jsonHelper, object value, Newtonsoft.Json.JsonSerializerSettings serializerSettings) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.Extensions.DependencyInjection.MvcNewtonsoftJsonOptionsExtensions.UseCamelCasing(this Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions options, bool processDictionaryKeys) -> Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions +~static Microsoft.Extensions.DependencyInjection.MvcNewtonsoftJsonOptionsExtensions.UseMemberCasing(this Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions options) -> Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions +~static Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcBuilderExtensions.AddNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcBuilderExtensions.AddNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcCoreBuilderExtensions.AddNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcCoreBuilderExtensions.AddNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.CreateJsonSerializer() -> Newtonsoft.Json.JsonSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.CreateJsonSerializer(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> Newtonsoft.Json.JsonSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.ReleaseJsonSerializer(Newtonsoft.Json.JsonSerializer serializer) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.CreateJsonSerializer() -> Newtonsoft.Json.JsonSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.CreateJsonSerializer(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> Newtonsoft.Json.JsonSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.CreateJsonWriter(System.IO.TextWriter writer) -> Newtonsoft.Json.JsonWriter diff --git a/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..8fa91b1af0 --- /dev/null +++ b/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Unshipped.txt @@ -0,0 +1,24 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPartExtensions +Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem +Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions +Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions.MvcRazorRuntimeCompilationOptions() -> void +Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcCoreBuilderExtensions +override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.Exists.get -> bool +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FileInfo.get -> Microsoft.Extensions.FileProviders.IFileInfo +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FileProviderRazorProjectItem(Microsoft.Extensions.FileProviders.IFileInfo fileInfo, string basePath, string filePath, string root) -> void +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FileProviderRazorProjectItem(Microsoft.Extensions.FileProviders.IFileInfo fileInfo, string basePath, string filePath, string root, string fileKind) -> void +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions.AdditionalReferencePaths.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions.FileProviders.get -> System.Collections.Generic.IList +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.BasePath.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FileKind.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FilePath.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.PhysicalPath.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.Read() -> System.IO.Stream +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.RelativePhysicalPath.get -> string +~static Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPartExtensions.GetReferencePaths(this Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart assemblyPart) -> System.Collections.Generic.IEnumerable +~static Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcBuilderExtensions.AddRazorRuntimeCompilation(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcBuilderExtensions.AddRazorRuntimeCompilation(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcCoreBuilderExtensions.AddRazorRuntimeCompilation(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcCoreBuilderExtensions.AddRazorRuntimeCompilation(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder diff --git a/src/Mvc/Mvc.Razor/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Razor/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Razor/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Razor/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Razor/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..a4f908eacd --- /dev/null +++ b/src/Mvc/Mvc.Razor/src/PublicAPI.Unshipped.txt @@ -0,0 +1,264 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyApplicationPartFactory +Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyApplicationPartFactory.CompiledRazorAssemblyApplicationPartFactory() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart +Microsoft.AspNetCore.Mvc.ApplicationParts.IRazorCompiledItemProvider +Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData +Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor +Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.CompiledViewDescriptor() -> void +Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompiler +Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompilerProvider +Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute +Microsoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeature +Microsoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeature.ViewsFeature() -> void +Microsoft.AspNetCore.Mvc.Razor.HelperResult +Microsoft.AspNetCore.Mvc.Razor.IRazorPage +Microsoft.AspNetCore.Mvc.Razor.IRazorPage.EnsureRenderedBodyOrSections() -> void +Microsoft.AspNetCore.Mvc.Razor.IRazorPage.IsLayoutBeingRendered.get -> bool +Microsoft.AspNetCore.Mvc.Razor.IRazorPage.IsLayoutBeingRendered.set -> void +Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator +Microsoft.AspNetCore.Mvc.Razor.IRazorPageFactoryProvider +Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine +Microsoft.AspNetCore.Mvc.Razor.ITagHelperActivator +Microsoft.AspNetCore.Mvc.Razor.ITagHelperFactory +Microsoft.AspNetCore.Mvc.Razor.IViewLocationExpander +Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider +Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider.TagHelperMemoryCacheProvider() -> void +Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute +Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute.RazorInjectAttribute() -> void +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander.LanguageViewLocationExpander() -> void +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander.LanguageViewLocationExpander(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> void +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.SubFolder = 0 -> Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix = 1 -> Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat +Microsoft.AspNetCore.Mvc.Razor.RazorPage +Microsoft.AspNetCore.Mvc.Razor.RazorPage.IgnoreBody() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPage.RazorPage() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPage +Microsoft.AspNetCore.Mvc.Razor.RazorPage.Model.get -> TModel +Microsoft.AspNetCore.Mvc.Razor.RazorPage.RazorPage() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BeginWriteTagHelperAttribute() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.IsLayoutBeingRendered.get -> bool +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.IsLayoutBeingRendered.set -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.RazorPageBase() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult +Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult.Success.get -> bool +Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +Microsoft.AspNetCore.Mvc.Razor.RazorView +Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine +Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions +Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.RazorViewEngineOptions() -> void +Microsoft.AspNetCore.Mvc.Razor.RenderAsyncDelegate +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.BodyTagHelper +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.HeadTagHelper +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentPropertyActivator +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeature +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeature.TagHelperFeature() -> void +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider.TagHelperFeatureProvider() -> void +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper +Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext +Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.IsMainPage.get -> bool +Microsoft.Extensions.DependencyInjection.MvcRazorMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions +abstract Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BeginContext(int position, int length, bool isLiteral) -> void +abstract Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndContext() -> void +abstract Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EnsureRenderedBodyOrSections() -> void +override Microsoft.AspNetCore.Mvc.Razor.RazorPage.BeginContext(int position, int length, bool isLiteral) -> void +override Microsoft.AspNetCore.Mvc.Razor.RazorPage.EndContext() -> void +override Microsoft.AspNetCore.Mvc.Razor.RazorPage.EnsureRenderedBodyOrSections() -> void +override Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.Order.get -> int +virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndWriteAttribute() -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart.Assembly.get -> System.Reflection.Assembly +~Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart.CompiledRazorAssemblyPart(System.Reflection.Assembly assembly) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.IRazorCompiledItemProvider.CompiledItems.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.AfterViewPageEventData(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Http.HttpContext httpContext) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.Page.get -> Microsoft.AspNetCore.Mvc.Razor.IRazorPage +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.BeforeViewPageEventData(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Http.HttpContext httpContext) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.Page.get -> Microsoft.AspNetCore.Mvc.Razor.IRazorPage +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.CompiledViewDescriptor(Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItem item) -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.CompiledViewDescriptor(Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItem item, Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute attribute) -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.ExpirationTokens.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.ExpirationTokens.set -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.Item.get -> Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItem +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.Item.set -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.RelativePath.get -> string +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.RelativePath.set -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.ViewAttribute.get -> Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.ViewAttribute.set -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompiler.CompileAsync(string relativePath) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompilerProvider.GetCompiler() -> Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompiler +~Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute.Path.get -> string +~Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute.RazorViewAttribute(string path, System.Type viewType) -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute.ViewType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeature.ViewDescriptors.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.HelperResult.HelperResult(System.Func asyncAction) -> void +~Microsoft.AspNetCore.Mvc.Razor.HelperResult.WriteAction.get -> System.Func +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.BodyContent.get -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.BodyContent.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.ExecuteAsync() -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.Layout.get -> string +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.Layout.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.Path.get -> string +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.Path.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.PreviousSectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.PreviousSectionWriters.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.SectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator.Activate(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPageFactoryProvider.CreateFactory(string relativePath) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult +~Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine.FindPage(Microsoft.AspNetCore.Mvc.ActionContext context, string pageName) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +~Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine.GetAbsolutePath(string executingFilePath, string pagePath) -> string +~Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine.GetPage(string executingFilePath, string pagePath) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +~Microsoft.AspNetCore.Mvc.Razor.ITagHelperActivator.Create(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> TTagHelper +~Microsoft.AspNetCore.Mvc.Razor.ITagHelperFactory.CreateTagHelper(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> TTagHelper +~Microsoft.AspNetCore.Mvc.Razor.ITagHelperInitializer +~Microsoft.AspNetCore.Mvc.Razor.ITagHelperInitializer.Initialize(TTagHelper helper, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.IViewLocationExpander.ExpandViewLocations(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context, System.Collections.Generic.IEnumerable viewLocations) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Razor.IViewLocationExpander.PopulateValues(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander.PopulateValues(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.Context.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.IgnoreSection(string sectionName) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.IsSectionDefined(string name) -> bool +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderSection(string name) -> Microsoft.AspNetCore.Html.HtmlString +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderSection(string name, bool required) -> Microsoft.AspNetCore.Html.HtmlString +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderSectionAsync(string name) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderSectionAsync(string name, bool required) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator.Activate(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator.RazorPageActivator(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory, Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper jsonHelper, System.Diagnostics.DiagnosticSource diagnosticSource, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider modelExpressionProvider) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.AddHtmlAttributeValue(string prefix, int prefixOffset, object value, int valueOffset, int valueLength, bool isLiteral) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BeginAddHtmlAttributeValues(Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext executionContext, string attributeName, int attributeValuesCount, Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle attributeValueStyle) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BodyContent.get -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BodyContent.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.CreateTagHelper() -> TTagHelper +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.DefineSection(string name, System.Func section) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.DiagnosticSource.get -> System.Diagnostics.DiagnosticSource +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.DiagnosticSource.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndAddHtmlAttributeValues(Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext executionContext) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndTagHelperWritingScope() -> Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContent +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndWriteTagHelperAttribute() -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.HtmlEncoder.get -> System.Text.Encodings.Web.HtmlEncoder +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.HtmlEncoder.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.InvalidTagHelperIndexerAssignment(string attributeName, string tagHelperTypeName, string propertyName) -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Layout.get -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Layout.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Path.get -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Path.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.PreviousSectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.PreviousSectionWriters.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.SectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.StartTagHelperWritingScope(System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.WriteAttributeValue(string prefix, int prefixOffset, object value, int valueOffset, int valueLength, bool isLiteral) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult.RazorPageFactory.get -> System.Func +~Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult.RazorPageFactoryResult(Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor viewDescriptor, System.Func razorPageFactory) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult.ViewDescriptor.get -> Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.Name.get -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.Page.get -> Microsoft.AspNetCore.Mvc.Razor.IRazorPage +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.RazorPageResult(string name, Microsoft.AspNetCore.Mvc.Razor.IRazorPage page) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.RazorPageResult(string name, System.Collections.Generic.IEnumerable searchedLocations) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.SearchedLocations.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Razor.RazorView.Path.get -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorView.RazorPage.get -> Microsoft.AspNetCore.Mvc.Razor.IRazorPage +~Microsoft.AspNetCore.Mvc.Razor.RazorView.RazorView(Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine viewEngine, Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator pageActivator, System.Collections.Generic.IReadOnlyList viewStartPages, Microsoft.AspNetCore.Mvc.Razor.IRazorPage razorPage, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Diagnostics.DiagnosticListener diagnosticListener) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorView.ViewStartPages.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.FindPage(Microsoft.AspNetCore.Mvc.ActionContext context, string pageName) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.FindView(Microsoft.AspNetCore.Mvc.ActionContext context, string viewName, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetAbsolutePath(string executingFilePath, string pagePath) -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetPage(string executingFilePath, string pagePath) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetView(string executingFilePath, string viewPath, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.RazorViewEngine(Microsoft.AspNetCore.Mvc.Razor.IRazorPageFactoryProvider pageFactory, Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator pageActivator, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.Extensions.Options.IOptions optionsAccessor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, System.Diagnostics.DiagnosticListener diagnosticListener) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.ViewLookupCache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.AreaPageViewLocationFormats.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.AreaViewLocationFormats.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.PageViewLocationFormats.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.ViewLocationExpanders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.ViewLocationFormats.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.TagHelperInitializer +~Microsoft.AspNetCore.Mvc.Razor.TagHelperInitializer.Initialize(TTagHelper helper, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelperInitializer.TagHelperInitializer(System.Action action) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.BodyTagHelper.BodyTagHelper(Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager manager, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.HeadTagHelper.HeadTagHelper(Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager manager, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager.Components.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentPropertyActivator.Activate(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context, Microsoft.AspNetCore.Razor.TagHelpers.ITagHelperComponent tagHelperComponent) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.PropertyActivator.get -> Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentPropertyActivator +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.PropertyActivator.set -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.TagHelperComponentTagHelper(Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager manager, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeature.TagHelpers.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider.PopulateFeature(System.Collections.Generic.IEnumerable parts, Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeature feature) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.HtmlEncoder.get -> System.Text.Encodings.Web.HtmlEncoder +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.ProcessUrlAttribute(string attributeName, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.TryResolveUrl(string url, out Microsoft.AspNetCore.Html.IHtmlContent resolvedUrl) -> bool +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.TryResolveUrl(string url, out string resolvedUrl) -> bool +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.UrlHelperFactory.get -> Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.UrlResolutionTagHelper(Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.AreaName.get -> string +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.PageName.get -> string +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.Values.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.Values.set -> void +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.ViewLocationExpanderContext(Microsoft.AspNetCore.Mvc.ActionContext actionContext, string viewName, string controllerName, string areaName, string pageName, bool isMainPage) -> void +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.ViewName.get -> string +~abstract Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.ExecuteAsync() -> System.Threading.Tasks.Task +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.EventName = "Microsoft.AspNetCore.Mvc.Razor.AfterViewPage" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.EventName = "Microsoft.AspNetCore.Mvc.Razor.BeforeViewPage" -> string +~override Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyApplicationPartFactory.GetApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart.Name.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RazorPage.DefineSection(string name, Microsoft.AspNetCore.Mvc.Razor.RenderAsyncDelegate section) -> void +~override Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.Init(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~override Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~static Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyApplicationPartFactory.GetDefaultApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~static Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetNormalizedRouteValue(Microsoft.AspNetCore.Mvc.ActionContext context, string key) -> string +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcBuilderExtensions.AddRazorOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcBuilderExtensions.AddTagHelpersAsServices(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcBuilderExtensions.InitializeTagHelper(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action initialize) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.AddTagHelpersAsServices(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.InitializeTagHelper(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action initialize) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.ViewExtension -> string +~virtual Microsoft.AspNetCore.Mvc.Razor.HelperResult.WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander.ExpandViewLocations(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context, System.Collections.Generic.IEnumerable viewLocations) -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderBody() -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BeginWriteAttribute(string name, string prefix, int prefixOffset, string suffix, int suffixOffset, int attributeValuesCount) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.DefineSection(string name, Microsoft.AspNetCore.Mvc.Razor.RenderAsyncDelegate section) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.FlushAsync() -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Href(string contentPath) -> string +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Output.get -> System.IO.TextWriter +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.PopWriter() -> System.IO.TextWriter +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.PushWriter(System.IO.TextWriter writer) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.SetAntiforgeryCookieAndHeader() -> Microsoft.AspNetCore.Html.HtmlString +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.User.get -> System.Security.Claims.ClaimsPrincipal +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.ViewContext.set -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Write(object value) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Write(string value) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.WriteLiteral(object value) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.WriteLiteral(string value) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider.IncludePart(Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPart part) -> bool +~virtual Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider.IncludeType(System.Reflection.TypeInfo type) -> bool diff --git a/src/Mvc/Mvc.RazorPages/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.RazorPages/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.RazorPages/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.RazorPages/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.RazorPages/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..77ee76129d --- /dev/null +++ b/src/Mvc/Mvc.RazorPages/src/PublicAPI.Unshipped.txt @@ -0,0 +1,638 @@ +#nullable enable +Microsoft.AspNetCore.Builder.PageActionEndpointConventionBuilder +Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelProvider +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageHandlerModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelProvider +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext +Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.PageConventionCollection() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteMetadata +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext.PageRouteModelProviderContext() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention +Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData +Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +Microsoft.AspNetCore.Mvc.Filters.IPageFilter +Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext +Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext +Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutionDelegate +Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.CompiledPageActionDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.IPageActivatorProvider +Microsoft.AspNetCore.Mvc.RazorPages.IPageFactoryProvider +Microsoft.AspNetCore.Mvc.RazorPages.IPageModelActivatorProvider +Microsoft.AspNetCore.Mvc.RazorPages.IPageModelFactoryProvider +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.HandlerMethodDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerParameterDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerParameterDescriptor.HandlerParameterDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageHandlerMethodSelector +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageLoader +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.Order.set -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageBoundPropertyDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageBoundPropertyDescriptor.PageBoundPropertyDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageLoader +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageLoader.PageLoader() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageModelAttribute +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageModelAttribute.PageModelAttribute() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageResultExecutor +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageViewLocationExpander +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageViewLocationExpander.PageViewLocationExpander() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.EnsureRenderedBodyOrSections() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.IsLayoutBeingRendered.get -> bool +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.IsLayoutBeingRendered.set -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAttribute +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ServiceBasedPageModelActivatorProvider +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ServiceBasedPageModelActivatorProvider.ServiceBasedPageModelActivatorProvider() -> void +Microsoft.AspNetCore.Mvc.RazorPages.NonHandlerAttribute +Microsoft.AspNetCore.Mvc.RazorPages.NonHandlerAttribute.NonHandlerAttribute() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Page +Microsoft.AspNetCore.Mvc.RazorPages.Page.Page() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.PageActionDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageBase +Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PageBase() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageContext +Microsoft.AspNetCore.Mvc.RazorPages.PageContext.PageContext() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageContextAttribute +Microsoft.AspNetCore.Mvc.RazorPages.PageContextAttribute.PageContextAttribute() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageModel +Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PageModel() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageResult +Microsoft.AspNetCore.Mvc.RazorPages.PageResult.PageResult() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.RazorPages.PageResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions +Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.RazorPagesOptions() -> void +Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcCoreBuilderExtensions +Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions +override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.BeginContext(int position, int length, bool isLiteral) -> void +override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.EndContext() -> void +override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.EnsureRenderedBodyOrSections() -> void +virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Canceled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Canceled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ExceptionHandled.set -> void +~Microsoft.AspNetCore.Builder.PageActionEndpointConventionBuilder.Add(System.Action convention) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel model) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider.CreateHandlerModel(System.Reflection.MethodInfo method) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider.CreateParameterModel(System.Reflection.ParameterInfo parameter) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider.CreatePropertyModel(System.Reflection.PropertyInfo property) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider.IsHandler(System.Reflection.MethodInfo methodInfo) -> bool +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageHandlerModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel model) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel model) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.AreaName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.DeclaredModelType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.EndpointMetadata.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.HandlerMethods.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.HandlerProperties.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.HandlerType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.HandlerTypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.ModelType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.ModelType.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageApplicationModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageApplicationModel(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor, System.Reflection.TypeInfo declaredModelType, System.Reflection.TypeInfo handlerType, System.Collections.Generic.IReadOnlyList handlerAttributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageApplicationModel(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor, System.Reflection.TypeInfo handlerType, System.Collections.Generic.IReadOnlyList handlerAttributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageType.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.RelativePath.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.RouteTemplate.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.ViewEnginePath.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.PageApplicationModel.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.PageApplicationModel.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.PageApplicationModelProviderContext(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor descriptor, System.Reflection.TypeInfo pageTypeInfo) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.PageType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddAreaFolderApplicationModelConvention(string areaName, string folderPath, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddAreaFolderRouteModelConvention(string areaName, string folderPath, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddAreaPageApplicationModelConvention(string areaName, string pageName, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddAreaPageRouteModelConvention(string areaName, string pageName, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddFolderApplicationModelConvention(string folderPath, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddFolderRouteModelConvention(string folderPath, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddPageApplicationModelConvention(string pageName, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddPageRouteModelConvention(string pageName, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.PageConventionCollection(System.Collections.Generic.IList conventions) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.RemoveType(System.Type pageConventionType) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.RemoveType() -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.HandlerName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.HandlerName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.HttpMethod.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.HttpMethod.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.MethodInfo.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Name.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Name.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Page.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Page.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.PageHandlerModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.PageHandlerModel(System.Reflection.MethodInfo handlerMethod, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Parameters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.Handler.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.Handler.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.PageParameterModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.PageParameterModel(System.Reflection.ParameterInfo parameterInfo, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.ParameterName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.ParameterName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.Page.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.Page.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PagePropertyModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PagePropertyModel(System.Reflection.PropertyInfo propertyInfo, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PropertyName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PropertyName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteMetadata.PageRoute.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteMetadata.PageRouteMetadata(string pageRoute, string routeTemplate) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteMetadata.RouteTemplate.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.AreaName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.PageRouteModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.PageRouteModel(string relativePath, string viewEnginePath) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.PageRouteModel(string relativePath, string viewEnginePath, string areaName) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.RelativePath.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.RouteParameterTransformer.get -> Microsoft.AspNetCore.Routing.IOutboundParameterTransformer +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.RouteParameterTransformer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.Selectors.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.ViewEnginePath.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext.RouteModels.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel model) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention.PageRouteTransformerConvention(Microsoft.AspNetCore.Routing.IOutboundParameterTransformer parameterTransformer) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.AfterHandlerMethodEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IReadOnlyDictionary arguments, Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor handlerMethodDescriptor, object instance, Microsoft.AspNetCore.Mvc.IActionResult result) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.Arguments.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.HandlerMethodDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.Instance.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.AfterPageFilterOnPageHandlerExecutedEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext handlerExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.HandlerExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.AfterPageFilterOnPageHandlerExecutingEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext handlerExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.HandlerExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.AfterPageFilterOnPageHandlerExecutionEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext handlerExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.HandlerExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.AfterPageFilterOnPageHandlerSelectedEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext handlerSelectedContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.HandlerSelectedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.AfterPageFilterOnPageHandlerSelectionEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext handlerSelectedContext, Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.HandlerSelectedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.Arguments.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.BeforeHandlerMethodEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IReadOnlyDictionary arguments, Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor handlerMethodDescriptor, object instance) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.HandlerMethodDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.Instance.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.BeforePageFilterOnPageHandlerExecutedEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext handlerExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.HandlerExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.BeforePageFilterOnPageHandlerExecutingEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext handlerExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.HandlerExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.BeforePageFilterOnPageHandlerExecutionEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext handlerExecutionContext, Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.HandlerExecutionContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.BeforePageFilterOnPageHandlerSelectedEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext handlerSelectedContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.HandlerSelectedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.BeforePageFilterOnPageHandlerSelectionEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext handlerSelectedContext, Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.HandlerSelectedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +~Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter.OnPageHandlerExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutionDelegate next) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter.OnPageHandlerSelectionAsync(Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Filters.IPageFilter.OnPageHandlerExecuted(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.Filters.IPageFilter.OnPageHandlerExecuting(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.Filters.IPageFilter.OnPageHandlerSelected(Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext context) -> void +~Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.PageHandlerExecutedContext(Microsoft.AspNetCore.Mvc.RazorPages.PageContext pageContext, System.Collections.Generic.IList filters, Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor handlerMethod, object handlerInstance) -> void +~Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.PageHandlerExecutingContext(Microsoft.AspNetCore.Mvc.RazorPages.PageContext pageContext, System.Collections.Generic.IList filters, Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor handlerMethod, System.Collections.Generic.IDictionary handlerArguments, object handlerInstance) -> void +~Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.PageHandlerSelectedContext(Microsoft.AspNetCore.Mvc.RazorPages.PageContext pageContext, System.Collections.Generic.IList filters, object handlerInstance) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.CompiledPageActionDescriptor(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.DeclaredModelTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.DeclaredModelTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.Endpoint.get -> Microsoft.AspNetCore.Http.Endpoint +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.Endpoint.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.HandlerMethods.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.HandlerMethods.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.HandlerTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.HandlerTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.ModelTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.ModelTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.PageTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.PageTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.IPageActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.IPageActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.IPageFactoryProvider.CreatePageDisposer(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.IPageFactoryProvider.CreatePageFactory(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.IPageModelActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.IPageModelActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.IPageModelFactoryProvider.CreateModelDisposer(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.IPageModelFactoryProvider.CreateModelFactory(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.HttpMethod.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.HttpMethod.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.MethodInfo.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.MethodInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.Name.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.Name.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.Parameters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.Parameters.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerParameterDescriptor.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerParameterDescriptor.ParameterInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageHandlerMethodSelector.Select(Microsoft.AspNetCore.Mvc.RazorPages.PageContext context) -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageLoader.Load(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor) -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.BuildModel() -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.PageActionDescriptorProvider(System.Collections.Generic.IEnumerable pageRouteModelProviders, Microsoft.Extensions.Options.IOptions mvcOptionsAccessor, Microsoft.Extensions.Options.IOptions pagesOptionsAccessor) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageBoundPropertyDescriptor.Property.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageBoundPropertyDescriptor.Property.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageResultExecutor.PageResultExecutor(Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine compositeViewEngine, Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine razorViewEngine, Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator razorPageActivator, System.Diagnostics.DiagnosticListener diagnosticListener, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageViewLocationExpander.ExpandViewLocations(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context, System.Collections.Generic.IEnumerable viewLocations) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageViewLocationExpander.PopulateValues(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.BodyContent.get -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.BodyContent.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.ExecuteAsync() -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.Layout.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.Layout.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.Path.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.Path.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.PreviousSectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.PreviousSectionWriters.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.RazorPageAdapter(Microsoft.AspNetCore.Mvc.Razor.RazorPageBase page, System.Type modelType) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.SectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAttribute.RazorPageAttribute(string path, System.Type viewType, string routeTemplate) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAttribute.RouteTemplate.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ServiceBasedPageModelActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ServiceBasedPageModelActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.AreaName.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.AreaName.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.PageActionDescriptor(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor other) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.RelativePath.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.RelativePath.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.ViewEnginePath.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.ViewEnginePath.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.MetadataProvider.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PageContext.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageContext +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PageContext.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Request.get -> Microsoft.AspNetCore.Http.HttpRequest +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Response.get -> Microsoft.AspNetCore.Http.HttpResponse +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(object model, System.Type modelType, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageContext.PageContext(Microsoft.AspNetCore.Mvc.ActionContext actionContext) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.MetadataProvider.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PageContext.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageContext +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PageContext.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Redirect(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Request.get -> Microsoft.AspNetCore.Http.HttpRequest +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Response.get -> Microsoft.AspNetCore.Http.HttpResponse +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TempData.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(object model, System.Type modelType, string name) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(object model, System.Type modelType, string name, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Url.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Url.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.User.get -> System.Security.Claims.ClaimsPrincipal +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.Model.get -> object +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.Page.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageBase +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.Page.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.Conventions.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.RootDirectory.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.RootDirectory.set -> void +~abstract Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageLoader.LoadAsync(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor) -> System.Threading.Tasks.Task +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterHandlerMethod" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerSelected" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerSelection" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeHandlerMethod" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerSelected" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerSelection" -> string +~override Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.DisplayName.get -> string +~override Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.DisplayName.set -> void +~override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewContext.set -> void +~override Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapDynamicPageRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern) -> void +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapDynamicPageRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, object state) -> void +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapFallbackToAreaPage(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string page, string area) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapFallbackToAreaPage(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, string page, string area) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapFallbackToPage(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string page) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapFallbackToPage(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, string page) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapRazorPages(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints) -> Microsoft.AspNetCore.Builder.PageActionEndpointConventionBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcBuilderExtensions.AddRazorPagesOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcBuilderExtensions.WithRazorPagesAtContentRoot(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcBuilderExtensions.WithRazorPagesRoot(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, string rootDirectory) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcCoreBuilderExtensions.AddRazorPages(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcCoreBuilderExtensions.AddRazorPages(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcCoreBuilderExtensions.WithRazorPagesRoot(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, string rootDirectory) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.Add(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelBaseConvention convention) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AddAreaPageRoute(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string pageName, string route) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AddPageRoute(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string pageName, string route) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AllowAnonymousToAreaFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string folderPath) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AllowAnonymousToAreaPage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string pageName) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AllowAnonymousToFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string folderPath) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AllowAnonymousToPage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string pageName) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeAreaFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string folderPath) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeAreaFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string folderPath, string policy) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeAreaPage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string pageName) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeAreaPage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string pageName, string policy) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string folderPath) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string folderPath, string policy) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizePage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string pageName) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizePage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string pageName, string policy) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.ConfigureFilter(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.ConfigureFilter(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, System.Func factory) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Exception.get -> System.Exception +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Exception.set -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ExceptionDispatchInfo.set -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.HandlerInstance.get -> object +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.HandlerMethod.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Result.set -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.HandlerArguments.get -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.HandlerInstance.get -> object +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.HandlerMethod.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.Result.set -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.HandlerInstance.get -> object +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.HandlerMethod.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.HandlerMethod.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.RazorPages.PageContext pageContext, Microsoft.AspNetCore.Mvc.RazorPages.PageResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.BadRequest() -> Microsoft.AspNetCore.Mvc.BadRequestResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.BadRequest(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.BadRequest(object error) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Challenge() -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Challenge(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Content(string content) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Content(string content, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Content(string content, string contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Content(string content, string contentType, System.Text.Encoding contentEncoding) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(System.IO.Stream fileStream, string contentType) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(byte[] fileContents, string contentType) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(byte[] fileContents, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(string virtualPath, string contentType) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(string virtualPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Forbid() -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Forbid(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.LocalRedirect(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.LocalRedirectPermanent(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.LocalRedirectPermanentPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.LocalRedirectPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.NotFound() -> Microsoft.AspNetCore.Mvc.NotFoundResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.NotFound(object value) -> Microsoft.AspNetCore.Mvc.NotFoundObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Page() -> Microsoft.AspNetCore.Mvc.RazorPages.PageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Partial(string viewName) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Partial(string viewName, object model) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PhysicalFile(string physicalPath, string contentType) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Redirect(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectPermanent(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectPermanentPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanentPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage() -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanentPreserveMethod(string pageName = null, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePreserveMethod(string pageName = null, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanentPreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.SignOut(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.SignOut(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.StatusCode(int statusCode) -> Microsoft.AspNetCore.Mvc.StatusCodeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.StatusCode(int statusCode, object value) -> Microsoft.AspNetCore.Mvc.ObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(object model, System.Type modelType, string prefix) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryValidateModel(object model) -> bool +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryValidateModel(object model, string prefix) -> bool +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Unauthorized() -> Microsoft.AspNetCore.Mvc.UnauthorizedResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewComponent(System.Type componentType) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewComponent(System.Type componentType, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewComponent(string componentName, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ActionDescriptor.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ValueProviderFactories.get -> System.Collections.Generic.IList +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ValueProviderFactories.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ViewData.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ViewStartFactories.get -> System.Collections.Generic.IList> +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ViewStartFactories.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.BadRequest() -> Microsoft.AspNetCore.Mvc.BadRequestResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.BadRequest(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.BadRequest(object error) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Challenge() -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Challenge(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Content(string content) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Content(string content, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Content(string content, string contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Content(string content, string contentType, System.Text.Encoding contentEncoding) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(System.IO.Stream fileStream, string contentType) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(System.IO.Stream fileStream, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(byte[] fileContents, string contentType) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(byte[] fileContents, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(string virtualPath, string contentType) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(string virtualPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Forbid() -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Forbid(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.LocalRedirect(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.LocalRedirectPermanent(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.LocalRedirectPermanentPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.LocalRedirectPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.NotFound() -> Microsoft.AspNetCore.Mvc.NotFoundResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.NotFound(object value) -> Microsoft.AspNetCore.Mvc.NotFoundObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerExecuted(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerExecuting(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerSelected(Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerSelectionAsync(Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Page() -> Microsoft.AspNetCore.Mvc.RazorPages.PageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Partial(string viewName) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Partial(string viewName, object model) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PhysicalFile(string physicalPath, string contentType) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PhysicalFile(string physicalPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectPermanent(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectPermanentPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanentPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage() -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, string pageHandler, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanentPreserveMethod(string pageName = null, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePreserveMethod(string pageName = null, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanentPreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.SignIn(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.SignIn(System.Security.Claims.ClaimsPrincipal principal, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.SignOut(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.SignOut(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.StatusCode(int statusCode) -> Microsoft.AspNetCore.Mvc.StatusCodeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.StatusCode(int statusCode, object value) -> Microsoft.AspNetCore.Mvc.ObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryValidateModel(object model) -> bool +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryValidateModel(object model, string name) -> bool +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Unauthorized() -> Microsoft.AspNetCore.Mvc.UnauthorizedResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewComponent(System.Type componentType) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewComponent(System.Type componentType, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewComponent(string componentName, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult diff --git a/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..a8b3400bdf --- /dev/null +++ b/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Unshipped.txt @@ -0,0 +1,373 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary.All = 2 -> Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary.ModelOnly = 1 -> Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary.None = 0 -> Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormatter +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormatter.DistributedCacheTagHelperFormatter() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext.DistributedCacheTagHelperFormattingContext() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperService +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperStorage +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperFormatter +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperService +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperStorage +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.Priority.get -> Microsoft.Extensions.Caching.Memory.CacheItemPriority? +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.Priority.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.Enabled.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.Enabled.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresAfter.get -> System.TimeSpan? +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresAfter.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresOn.get -> System.DateTimeOffset? +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresOn.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresSliding.get -> System.TimeSpan? +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresSliding.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByCulture.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByCulture.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByUser.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByUser.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperMemoryCacheFactory +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperOptions +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperOptions.CacheTagHelperOptions() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperOptions.SizeLimit.get -> long +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperOptions.SizeLimit.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ComponentTagHelper() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.RenderMode.get -> Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.RenderMode.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Antiforgery.get -> bool? +Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Antiforgery.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder +Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.RequestPathBase.get -> Microsoft.AspNetCore.Http.PathString +Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.AppendVersion.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.AppendVersion.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.AppendVersion.get -> bool? +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.AppendVersion.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.SuppressFallbackIntegrity.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.SuppressFallbackIntegrity.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Optional.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Optional.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.RenderAtEndOfFormTagHelper() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.AppendVersion.get -> bool? +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.AppendVersion.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SuppressFallbackIntegrity.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SuppressFallbackIntegrity.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions +Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ValidationSummary.get -> Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ValidationSummary.set -> void +Microsoft.Extensions.DependencyInjection.TagHelperServicesExtensions +override Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.Order.get -> int +static readonly Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.DefaultExpiration -> System.TimeSpan +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Action.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Action.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.AnchorTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Area.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Area.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Controller.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Controller.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Host.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Host.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Page.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Page.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Protocol.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Protocol.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Route.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Route.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.CacheTagKey(Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper tagHelper, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.CacheTagKey(Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper tagHelper) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.Equals(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey other) -> bool +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.GenerateHashedKey() -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.GenerateKey() -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormatter.DeserializeAsync(byte[] value) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormatter.SerializeAsync(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext.Html.get -> Microsoft.AspNetCore.Html.HtmlString +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext.Html.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperService.DistributedCacheTagHelperService(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperStorage storage, Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperFormatter formatter, System.Text.Encodings.Web.HtmlEncoder HtmlEncoder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperService.ProcessContentAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output, Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey key, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperStorage.DistributedCacheTagHelperStorage(Microsoft.Extensions.Caching.Distributed.IDistributedCache distributedCache) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperStorage.GetAsync(string key) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperStorage.SetAsync(string key, byte[] value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperFormatter.DeserializeAsync(byte[] value) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperFormatter.SerializeAsync(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperService.ProcessContentAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output, Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey key, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperStorage.GetAsync(string key) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperStorage.SetAsync(string key, byte[] value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.CacheTagHelper(Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperMemoryCacheFactory factory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.MemoryCache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.CacheTagHelperBase(System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.HtmlEncoder.get -> System.Text.Encodings.Web.HtmlEncoder +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryBy.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryBy.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByCookie.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByCookie.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByHeader.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByHeader.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByQuery.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByQuery.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByRoute.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByRoute.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperMemoryCacheFactory.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperMemoryCacheFactory.CacheTagHelperMemoryCacheFactory(Microsoft.Extensions.Options.IOptions options) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ComponentType.get -> System.Type +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ComponentType.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.Parameters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.Parameters.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.DistributedCacheTagHelper(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperService distributedCacheService, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.MemoryCache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.EnvironmentTagHelper(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Exclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Exclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.HostingEnvironment.get -> Microsoft.AspNetCore.Hosting.IWebHostEnvironment +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Include.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Include.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Names.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Names.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Action.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Action.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Area.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Area.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Controller.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Controller.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.FormActionTagHelper(Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Page.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Page.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Route.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Route.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.UrlHelperFactory.get -> Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Action.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Action.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Area.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Area.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Controller.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Controller.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.FormTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Method.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Method.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Page.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Page.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Route.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Route.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider +~Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.GlobbingUrlBuilder(Microsoft.Extensions.FileProviders.IFileProvider fileProvider, Microsoft.Extensions.Caching.Memory.IMemoryCache cache, Microsoft.AspNetCore.Http.PathString requestPathBase) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.HostingEnvironment.get -> Microsoft.AspNetCore.Hosting.IWebHostEnvironment +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.ImageTagHelper(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider cacheProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider fileVersionProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.ImageTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider fileVersionProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Src.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Src.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Format.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Format.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.GetInputType(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, out string inputTypeHint) -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.InputTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.InputTypeName.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.InputTypeName.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Value.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Value.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.LabelTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHref.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHref.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefExclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefExclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefInclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefInclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestClass.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestClass.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestProperty.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestProperty.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestValue.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestValue.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.GlobbingUrlBuilder.get -> Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.GlobbingUrlBuilder.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HostingEnvironment.get -> Microsoft.AspNetCore.Hosting.IWebHostEnvironment +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Href.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Href.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefExclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefExclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefInclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefInclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.JavaScriptEncoder.get -> System.Text.Encodings.Web.JavaScriptEncoder +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.LinkTagHelper(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider cacheProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider fileVersionProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Text.Encodings.Web.JavaScriptEncoder javaScriptEncoder, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.OptionTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Value.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Value.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.FallbackName.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.FallbackName.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Model.get -> object +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Model.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.PartialTagHelper(Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope viewBufferScope) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrc.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrc.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcExclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcExclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcInclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcInclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackTestExpression.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackTestExpression.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.GlobbingUrlBuilder.get -> Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.GlobbingUrlBuilder.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.HostingEnvironment.get -> Microsoft.AspNetCore.Hosting.IWebHostEnvironment +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.JavaScriptEncoder.get -> System.Text.Encodings.Web.JavaScriptEncoder +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.ScriptTagHelper(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider cacheProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider fileVersionProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Text.Encodings.Web.JavaScriptEncoder javaScriptEncoder, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Src.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Src.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcExclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcExclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcInclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcInclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Items.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Items.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.SelectTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.TextAreaTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.ValidationMessageTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ValidationSummaryTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ViewContext.set -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.Equals(object obj) -> bool +~override Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.Init(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Init(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.AddClass(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, string classValue, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.CopyHtmlAttribute(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, string attributeName, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.MergeAttributes(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.RemoveClass(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, string classValue, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.RemoveRange(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, System.Collections.Generic.IEnumerable attributes) -> void +~static Microsoft.Extensions.DependencyInjection.TagHelperServicesExtensions.AddCacheTagHelper(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.TagHelperServicesExtensions.AddCacheTagHelperLimits(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.TagHelperServicesExtensions.AddCacheTagHelperLimits(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.CacheKeyPrefix -> string +~static readonly Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.CacheKeyPrefix -> string +~virtual Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.BuildUrlList(string staticUrl, string includePattern, string excludePattern) -> System.Collections.Generic.IReadOnlyList diff --git a/src/Mvc/Mvc.Testing/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Testing/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Testing/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Testing/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Testing/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..25fc98d166 --- /dev/null +++ b/src/Mvc/Mvc.Testing/src/PublicAPI.Unshipped.txt @@ -0,0 +1,48 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler +Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.CookieContainerHandler() -> void +Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler +Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.MaxRedirects.get -> int +Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.RedirectHandler() -> void +Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.RedirectHandler(int maxRedirects) -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Dispose() -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.WebApplicationFactory() -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.~WebApplicationFactory() -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.AllowAutoRedirect.get -> bool +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.AllowAutoRedirect.set -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.HandleCookies.get -> bool +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.HandleCookies.set -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.MaxAutomaticRedirections.get -> int +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.MaxAutomaticRedirections.set -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.WebApplicationFactoryClientOptions() -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.Priority.get -> int +virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Dispose(bool disposing) -> void +~Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.Container.get -> System.Net.CookieContainer +~Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.CookieContainerHandler(System.Net.CookieContainer cookieContainer) -> void +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.ClientOptions.get -> Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateClient() -> System.Net.Http.HttpClient +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateClient(Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions options) -> System.Net.Http.HttpClient +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateDefaultClient(System.Uri baseAddress, params System.Net.Http.DelegatingHandler[] handlers) -> System.Net.Http.HttpClient +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateDefaultClient(params System.Net.Http.DelegatingHandler[] handlers) -> System.Net.Http.HttpClient +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Factories.get -> System.Collections.Generic.IReadOnlyList> +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Server.get -> Microsoft.AspNetCore.TestHost.TestServer +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.WithWebHostBuilder(System.Action configuration) -> Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.BaseAddress.get -> System.Uri +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.BaseAddress.set -> void +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.ContentRootPath.get -> string +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.ContentRootTest.get -> string +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.Key.get -> string +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.WebApplicationFactoryContentRootAttribute(string key, string contentRootPath, string contentRootTest, string priority) -> void +~override Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.ConfigureClient(System.Net.Http.HttpClient client) -> void +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.ConfigureWebHost(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) -> void +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateHost(Microsoft.Extensions.Hosting.IHostBuilder builder) -> Microsoft.Extensions.Hosting.IHost +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateHostBuilder() -> Microsoft.Extensions.Hosting.IHostBuilder +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateServer(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) -> Microsoft.AspNetCore.TestHost.TestServer +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateWebHostBuilder() -> Microsoft.AspNetCore.Hosting.IWebHostBuilder +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.GetTestAssemblies() -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Services.get -> System.IServiceProvider diff --git a/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..4b6567f9ce --- /dev/null +++ b/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Unshipped.txt @@ -0,0 +1,1160 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.AutoValidateAntiforgeryTokenAttribute() -> void +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Controller +Microsoft.AspNetCore.Mvc.Controller.Controller() -> void +Microsoft.AspNetCore.Mvc.Controller.Dispose() -> void +Microsoft.AspNetCore.Mvc.Controller.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions +Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.CookieTempDataProviderOptions() -> void +Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.IsMainPage.get -> bool +Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.IsMainPage.get -> bool +Microsoft.AspNetCore.Mvc.IViewComponentHelper +Microsoft.AspNetCore.Mvc.IViewComponentResult +Microsoft.AspNetCore.Mvc.IgnoreAntiforgeryTokenAttribute +Microsoft.AspNetCore.Mvc.IgnoreAntiforgeryTokenAttribute.IgnoreAntiforgeryTokenAttribute() -> void +Microsoft.AspNetCore.Mvc.IgnoreAntiforgeryTokenAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.IgnoreAntiforgeryTokenAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions +Microsoft.AspNetCore.Mvc.MvcViewOptions +Microsoft.AspNetCore.Mvc.MvcViewOptions.MvcViewOptions() -> void +Microsoft.AspNetCore.Mvc.PageRemoteAttribute +Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageRemoteAttribute() -> void +Microsoft.AspNetCore.Mvc.PartialViewResult +Microsoft.AspNetCore.Mvc.PartialViewResult.PartialViewResult() -> void +Microsoft.AspNetCore.Mvc.PartialViewResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.PartialViewResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.RemoteAttribute +Microsoft.AspNetCore.Mvc.RemoteAttribute.RemoteAttribute() -> void +Microsoft.AspNetCore.Mvc.RemoteAttributeBase +Microsoft.AspNetCore.Mvc.RemoteAttributeBase.RemoteAttributeBase() -> void +Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode.EndOfForm = 2 -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode.Inline = 1 -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode.None = 0 -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.FormMethod +Microsoft.AspNetCore.Mvc.Rendering.FormMethod.Get = 0 -> Microsoft.AspNetCore.Mvc.Rendering.FormMethod +Microsoft.AspNetCore.Mvc.Rendering.FormMethod.Post = 1 -> Microsoft.AspNetCore.Mvc.Rendering.FormMethod +Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode.CurrentCulture = 1 -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode.Rfc3339 = 0 -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperComponentExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayNameExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperNameExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.EndForm() -> void +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Html5DateRenderingMode.get -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Html5DateRenderingMode.set -> void +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper +Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper +Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList +Microsoft.AspNetCore.Mvc.Rendering.MvcForm +Microsoft.AspNetCore.Mvc.Rendering.MvcForm.Dispose() -> void +Microsoft.AspNetCore.Mvc.Rendering.MvcForm.EndForm() -> void +Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.Rendering.RenderMode.Server = 2 -> Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.Rendering.RenderMode.ServerPrerendered = 3 -> Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.Rendering.RenderMode.Static = 1 -> Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.Rendering.SelectList +Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup +Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.Disabled.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.Disabled.set -> void +Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.SelectListGroup() -> void +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Disabled.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Disabled.set -> void +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.SelectListItem() -> void +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Selected.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Selected.set -> void +Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.HasInnerHtml.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagRenderMode.get -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagRenderMode.set -> void +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.EndTag = 2 -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.Normal = 0 -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.SelfClosing = 3 -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.StartTag = 1 -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions +Microsoft.AspNetCore.Mvc.Rendering.ViewContext +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.CheckBoxHiddenInputRenderMode.get -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.CheckBoxHiddenInputRenderMode.set -> void +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ClientValidationEnabled.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ClientValidationEnabled.set -> void +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.Html5DateRenderingMode.get -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.Html5DateRenderingMode.set -> void +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewContext() -> void +Microsoft.AspNetCore.Mvc.SkipStatusCodePagesAttribute +Microsoft.AspNetCore.Mvc.SkipStatusCodePagesAttribute.SkipStatusCodePagesAttribute() -> void +Microsoft.AspNetCore.Mvc.TempDataAttribute +Microsoft.AspNetCore.Mvc.TempDataAttribute.TempDataAttribute() -> void +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.ValidateAntiForgeryTokenAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewComponent +Microsoft.AspNetCore.Mvc.ViewComponent.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.ViewComponent.ViewComponent() -> void +Microsoft.AspNetCore.Mvc.ViewComponentAttribute +Microsoft.AspNetCore.Mvc.ViewComponentAttribute.ViewComponentAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewComponentResult +Microsoft.AspNetCore.Mvc.ViewComponentResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.ViewComponentResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentResult() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorCollectionProvider +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorProvider +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentFactory +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentSelector +Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentActivator +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorCollectionProvider +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorProvider +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentFactory +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvoker +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvokerFactory +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentSelector +Microsoft.AspNetCore.Mvc.ViewComponents.ServiceBasedViewComponentActivator +Microsoft.AspNetCore.Mvc.ViewComponents.ServiceBasedViewComponentActivator.ServiceBasedViewComponentActivator() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewComponentContext() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContextAttribute +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContextAttribute.ViewComponentContextAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.ViewComponentDescriptor() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection.Version.get -> int +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeature +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeature.ViewComponentFeature() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeatureProvider +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeatureProvider.ViewComponentFeatureProvider() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewViewComponentResult() -> void +Microsoft.AspNetCore.Mvc.ViewDataAttribute +Microsoft.AspNetCore.Mvc.ViewDataAttribute.ViewDataAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine +Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine +Microsoft.AspNetCore.Mvc.ViewEngines.IView +Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.Success.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.AntiforgeryExtensions +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.AttributeDictionary() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.IsReadOnly.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope +Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue +Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator +Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AllowRenderingMaxLengthAttribute.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGeneratorExtensions +Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultValidationHtmlAttributeProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.CanRenderAtEndOfForm.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.CanRenderAtEndOfForm.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.FormContext() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.HasAntiforgeryToken.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.HasAntiforgeryToken.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.HasEndOfFormContent.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.HasFormData.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.EndForm() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Html5DateRenderingMode.get -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Html5DateRenderingMode.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.CheckBoxHiddenInputRenderMode.get -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.CheckBoxHiddenInputRenderMode.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ClientValidationEnabled.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ClientValidationEnabled.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.Html5DateRenderingMode.get -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.Html5DateRenderingMode.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.HtmlHelperOptions() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.IAntiforgeryPolicy +Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Keep() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Load() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Save() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.IViewContextAware +Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer +Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer.TempDataSerializer() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.CheckBox = 0 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.Hidden = 1 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.Password = 2 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.Radio = 3 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.Text = 4 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorerExtensions +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelMetadataProviderExtensions +Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.SaveTempDataAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.SessionStateTempDataProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.StringHtmlContent +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Keep() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Load() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Save() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionaryFactory +Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo +Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.TemplateDepth.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.TemplateInfo() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TryGetValueDelegate +Microsoft.AspNetCore.Mvc.ViewFeatures.TryGetValueProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider.ValidationHtmlAttributeProvider() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewComponentResultExecutor +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContextAttribute +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContextAttribute.ViewContextAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.IsReadOnly.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Model.get -> TModel +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Model.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryAttribute +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryAttribute.ViewDataDictionaryAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryControllerPropertyActivator +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataEvaluator +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor +Microsoft.AspNetCore.Mvc.ViewResult +Microsoft.AspNetCore.Mvc.ViewResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.ViewResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.ViewResult.ViewResult() -> void +Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions +virtual Microsoft.AspNetCore.Mvc.Controller.Dispose(bool disposing) -> void +virtual Microsoft.AspNetCore.Mvc.Rendering.MvcForm.GenerateEndForm() -> void +~Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Controller.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.Controller.TempData.set -> void +~Microsoft.AspNetCore.Mvc.Controller.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Controller.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.Cookie.get -> Microsoft.AspNetCore.Http.CookieBuilder +~Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.Cookie.set -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.AfterViewComponentEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext viewComponentContext, Microsoft.AspNetCore.Mvc.IViewComponentResult viewComponentResult, object viewComponent) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.ViewComponent.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.ViewComponentResult.get -> Microsoft.AspNetCore.Mvc.IViewComponentResult +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData.AfterViewEventData(Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.BeforeViewComponentEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext viewComponentContext, object viewComponent) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.ViewComponent.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData.BeforeViewEventData(Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.ViewComponentAfterViewExecuteEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext viewComponentContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.ViewComponentBeforeViewExecuteEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext viewComponentContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.Result.get -> Microsoft.AspNetCore.Mvc.ActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.ViewFoundEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, bool isMainPage, Microsoft.AspNetCore.Mvc.ActionResult result, string viewName, Microsoft.AspNetCore.Mvc.ViewEngines.IView view) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.Result.get -> Microsoft.AspNetCore.Mvc.ActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.SearchedLocations.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.ViewNotFoundEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, bool isMainPage, Microsoft.AspNetCore.Mvc.ActionResult result, string viewName, System.Collections.Generic.IEnumerable searchedLocations) -> void +~Microsoft.AspNetCore.Mvc.IViewComponentHelper.InvokeAsync(System.Type componentType, object arguments) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.IViewComponentHelper.InvokeAsync(string name, object arguments) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.IViewComponentResult.Execute(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> void +~Microsoft.AspNetCore.Mvc.IViewComponentResult.ExecuteAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.MvcViewOptions.ClientModelValidatorProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcViewOptions.HtmlHelperOptions.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions +~Microsoft.AspNetCore.Mvc.MvcViewOptions.HtmlHelperOptions.set -> void +~Microsoft.AspNetCore.Mvc.MvcViewOptions.ViewEngines.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageName.get -> string +~Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageName.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.PartialViewResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.Model.get -> object +~Microsoft.AspNetCore.Mvc.PartialViewResult.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.PartialViewResult.TempData.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewEngine.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewName.set -> void +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RemoteAttribute(string action, string controller) -> void +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RemoteAttribute(string action, string controller, string areaName) -> void +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RemoteAttribute(string routeName) -> void +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RouteName.get -> string +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RouteName.set -> void +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.AdditionalFields.get -> string +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.AdditionalFields.set -> void +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.FormatAdditionalFieldsForClientValidation(string property) -> string +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.HttpMethod.get -> string +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.HttpMethod.set -> void +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.RouteData.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ActionLink(string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.AntiForgeryToken() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.BeginForm(string actionName, string controllerName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.BeginRouteForm(string routeName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.CheckBox(string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Display(string expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayName(string expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayText(string expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DropDownList(string expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Editor(string expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.FormatValue(object value, string format) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.GenerateIdFromName(string fullName) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.GetEnumSelectList(System.Type enumType) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.GetEnumSelectList() -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Hidden(string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Id(string expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Label(string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ListBox(string expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Name(string expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.PartialAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Password(string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.RadioButton(string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Raw(object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Raw(string value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.RenderPartialAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.RouteLink(string linkText, string routeName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TextArea(string expression, string value, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TextBox(string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.UrlEncoder.get -> System.Text.Encodings.Web.UrlEncoder +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ValidationMessage(string expression, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ValidationSummary(bool excludePropertyErrors, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Value(string expression, string format) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.CheckBoxFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayFor(System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayNameFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayNameForInnerType(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayTextFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DropDownListFor(System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.EditorFor(System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.HiddenFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.IdFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.LabelFor(System.Linq.Expressions.Expression> expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ListBoxFor(System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.NameFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.PasswordFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.RadioButtonFor(System.Linq.Expressions.Expression> expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Raw(object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Raw(string value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TextAreaFor(System.Linq.Expressions.Expression> expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TextBoxFor(System.Linq.Expressions.Expression> expression, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ValidationMessageFor(System.Linq.Expressions.Expression> expression, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ValueFor(System.Linq.Expressions.Expression> expression, string format) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper.Serialize(object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.DataGroupField.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.DataTextField.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.DataValueField.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.Items.get -> System.Collections.IEnumerable +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items, System.Collections.IEnumerable selectedValues) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField, System.Collections.IEnumerable selectedValues) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField, System.Collections.IEnumerable selectedValues, string dataGroupField) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.SelectedValues.get -> System.Collections.IEnumerable +~Microsoft.AspNetCore.Mvc.Rendering.MvcForm.MvcForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items, object selectedValue) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField, object selectedValue) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField, object selectedValue, string dataGroupField) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectedValue.get -> object +~Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.Name.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.Name.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Group.get -> Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Group.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.SelectListItem(string text, string value) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.SelectListItem(string text, string value, bool selected) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.SelectListItem(string text, string value, bool selected, bool disabled) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Text.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Text.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Value.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Value.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.AddCssClass(string value) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.Attributes.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.GenerateId(string name, string invalidCharReplacement) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.InnerHtml.get -> Microsoft.AspNetCore.Html.IHtmlContentBuilder +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.MergeAttribute(string key, string value) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.MergeAttribute(string key, string value, bool replaceExisting) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.MergeAttributes(System.Collections.Generic.IDictionary attributes) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.MergeAttributes(System.Collections.Generic.IDictionary attributes, bool replaceExisting) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.RenderBody() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.RenderEndTag() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.RenderSelfClosingTag() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.RenderStartTag() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagBuilder(Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagBuilder(string tagName) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagName.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ExecutingFilePath.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ExecutingFilePath.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.GetFormContextForClientValidation() -> Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.TempData.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ValidationMessageElement.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ValidationMessageElement.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ValidationSummaryMessageElement.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ValidationSummaryMessageElement.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.View.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewContext(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary tempData, System.IO.TextWriter writer, Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions htmlHelperOptions) -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewContext(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, System.IO.TextWriter writer) -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.Writer.get -> System.IO.TextWriter +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.Writer.set -> void +~Microsoft.AspNetCore.Mvc.SkipStatusCodePagesAttribute.OnResourceExecuted(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.SkipStatusCodePagesAttribute.OnResourceExecuting(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.TempDataAttribute.Key.get -> string +~Microsoft.AspNetCore.Mvc.TempDataAttribute.Key.set -> void +~Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ViewComponent.Content(string content) -> Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.ViewComponent.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.ViewComponent.Request.get -> Microsoft.AspNetCore.Http.HttpRequest +~Microsoft.AspNetCore.Mvc.ViewComponent.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.ViewComponent.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponent.Url.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.ViewComponent.Url.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponent.User.get -> System.Security.Principal.IPrincipal +~Microsoft.AspNetCore.Mvc.ViewComponent.UserClaimsPrincipal.get -> System.Security.Claims.ClaimsPrincipal +~Microsoft.AspNetCore.Mvc.ViewComponent.View() -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.View(string viewName) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.View(TModel model) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.View(string viewName, TModel model) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewComponentContext.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewEngine.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponentAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.Arguments.get -> object +~Microsoft.AspNetCore.Mvc.ViewComponentResult.Arguments.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewComponentResult.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponentResult.TempData.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentName.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentType.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult.Content.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult.ContentViewComponentResult(string content) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult.Execute(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult.ExecuteAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorCollectionProvider.DefaultViewComponentDescriptorCollectionProvider(Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorProvider descriptorProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorCollectionProvider.ViewComponents.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorProvider.DefaultViewComponentDescriptorProvider(Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager partManager) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentFactory.CreateViewComponent(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> object +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentFactory.DefaultViewComponentFactory(Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentActivator activator) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentFactory.ReleaseViewComponent(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context, object component) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.DefaultViewComponentHelper(Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorCollectionProvider descriptorProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentSelector selector, Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvokerFactory invokerFactory, Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope viewBufferScope) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.InvokeAsync(System.Type componentType, object arguments) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.InvokeAsync(string name, object arguments) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentSelector.DefaultViewComponentSelector(Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorCollectionProvider descriptorProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentSelector.SelectComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor +~Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult.EncodedContent.get -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult.Execute(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult.ExecuteAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult.HtmlContentViewComponentResult(Microsoft.AspNetCore.Html.IHtmlContent encodedContent) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentActivator.Create(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> object +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentActivator.Release(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context, object viewComponent) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorCollectionProvider.ViewComponents.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorProvider.GetViewComponents() -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentFactory.CreateViewComponent(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> object +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentFactory.ReleaseViewComponent(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context, object component) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvoker.InvokeAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvokerFactory.CreateInstance(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvoker +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentSelector.SelectComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor +~Microsoft.AspNetCore.Mvc.ViewComponents.ServiceBasedViewComponentActivator.Create(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> object +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.Arguments.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.Arguments.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.HtmlEncoder.get -> System.Text.Encodings.Web.HtmlEncoder +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.HtmlEncoder.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewComponentContext(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor viewComponentDescriptor, System.Collections.Generic.IDictionary arguments, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, System.IO.TextWriter writer) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewComponentDescriptor.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewComponentDescriptor.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.Writer.get -> System.IO.TextWriter +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.DisplayName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.DisplayName.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.FullName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.FullName.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.Id.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.Id.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.MethodInfo.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.MethodInfo.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.Parameters.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.Parameters.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.ShortName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.ShortName.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.TypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.TypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection.Items.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection.ViewComponentDescriptorCollection(System.Collections.Generic.IEnumerable items, int version) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeature.ViewComponents.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeatureProvider.PopulateFeature(System.Collections.Generic.IEnumerable parts, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeature feature) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.Execute(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ExecuteAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.TempData.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewEngine.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewName.set -> void +~Microsoft.AspNetCore.Mvc.ViewDataAttribute.Key.get -> string +~Microsoft.AspNetCore.Mvc.ViewDataAttribute.Key.set -> void +~Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.CompositeViewEngine(Microsoft.Extensions.Options.IOptions optionsAccessor) -> void +~Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.FindView(Microsoft.AspNetCore.Mvc.ActionContext context, string viewName, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.GetView(string executingFilePath, string viewPath, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.ViewEngines.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine.ViewEngines.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ViewEngines.IView.Path.get -> string +~Microsoft.AspNetCore.Mvc.ViewEngines.IView.RenderAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine.FindView(Microsoft.AspNetCore.Mvc.ActionContext context, string viewName, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine.GetView(string executingFilePath, string viewPath, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(System.Collections.Generic.IEnumerable originalLocations) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.SearchedLocations.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Add(System.Collections.Generic.KeyValuePair item) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Add(string key, string value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Contains(System.Collections.Generic.KeyValuePair item) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.ContainsKey(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.CopyTo(System.Collections.Generic.KeyValuePair[] array, int arrayIndex) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.Current.get -> System.Collections.Generic.KeyValuePair +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.Enumerator(Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary attributes) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Keys.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Remove(System.Collections.Generic.KeyValuePair item) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Remove(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.TryGetValue(string key, out string value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Values.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.this[string key].get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.this[string key].set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope.CreateWriter(System.IO.TextWriter writer) -> System.IO.TextWriter +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope.GetPage(int pageSize) -> Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue[] +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope.ReturnSegment(Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue[] segment) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue.Value.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue.ViewBufferValue(Microsoft.AspNetCore.Html.IHtmlContent content) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue.ViewBufferValue(string value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.CookieTempDataProvider(Microsoft.AspNetCore.DataProtection.IDataProtectionProvider dataProtectionProvider, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions options, Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer tempDataSerializer) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.LoadTempData(Microsoft.AspNetCore.Http.HttpContext context) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.SaveTempData(Microsoft.AspNetCore.Http.HttpContext context, System.Collections.Generic.IDictionary values) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.DefaultHtmlGenerator(Microsoft.AspNetCore.Antiforgery.IAntiforgery antiforgery, Microsoft.Extensions.Options.IOptions optionsAccessor, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider validationAttributeProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.FormatValue(object value, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateGroupsAndOptions(string optionLabel, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateRouteForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string routeName, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateSelect(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string optionLabel, string expression, System.Collections.Generic.IEnumerable selectList, bool allowMultiple, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultValidationHtmlAttributeProvider.DefaultValidationHtmlAttributeProvider(Microsoft.Extensions.Options.IOptions optionsAccessor, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorCache clientValidatorCache) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.EndOfFormContent.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.FormData.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.RenderedField(string fieldName) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.RenderedField(string fieldName, bool value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ActionLink(string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.AntiForgeryToken() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.BeginForm(string actionName, string controllerName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.BeginRouteForm(string routeName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.CheckBox(string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Display(string expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayName(string expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayText(string expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DropDownList(string expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Editor(string expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.FormatValue(object value, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateDropDown(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateIdFromName(string fullName) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateListBox(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetEnumSelectList(System.Type enumType) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetEnumSelectList() -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Hidden(string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.HtmlHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator htmlGenerator, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope bufferScope, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Text.Encodings.Web.UrlEncoder urlEncoder) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Id(string expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Label(string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ListBox(string expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Name(string expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.PartialAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Password(string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RadioButton(string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Raw(object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Raw(string value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RenderPartialAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RouteLink(string linkText, string routeName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TextArea(string expression, string value, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TextBox(string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.UrlEncoder.get -> System.Text.Encodings.Web.UrlEncoder +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationMessage(string expression, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationSummary(bool excludePropertyErrors, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Value(string expression, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.CheckBoxFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayFor(System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayNameFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayNameForInnerType(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayTextFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DropDownListFor(System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.EditorFor(System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetExpressionName(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetModelExplorer(System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.HiddenFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.HtmlHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator htmlGenerator, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope bufferScope, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Text.Encodings.Web.UrlEncoder urlEncoder, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider modelExpressionProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.IdFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.LabelFor(System.Linq.Expressions.Expression> expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ListBoxFor(System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.NameFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.PasswordFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RadioButtonFor(System.Linq.Expressions.Expression> expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TextAreaFor(System.Linq.Expressions.Expression> expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TextBoxFor(System.Linq.Expressions.Expression> expression, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationMessageFor(System.Linq.Expressions.Expression> expression, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValueFor(System.Linq.Expressions.Expression> expression, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.IdAttributeDotReplacement.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ValidationMessageElement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ValidationMessageElement.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ValidationSummaryMessageElement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ValidationSummaryMessageElement.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider.AddFileVersionToPath(Microsoft.AspNetCore.Http.PathString requestPathBase, string path) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.FormatValue(object value, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateActionLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateAntiforgery(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateCheckBox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string actionName, string controllerName, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateGroupsAndOptions(string optionLabel, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateHidden(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool useViewData, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateHiddenForCheckbox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateLabel(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GeneratePageForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string pageName, string pageHandler, object routeValues, string fragment, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GeneratePageLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string pageName, string pageHandler, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GeneratePassword(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateRadioButton(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateRouteForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string routeName, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateRouteLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string routeName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateSelect(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string optionLabel, string expression, System.Collections.Generic.IEnumerable selectList, System.Collections.Generic.ICollection currentValues, bool allowMultiple, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateSelect(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string optionLabel, string expression, System.Collections.Generic.IEnumerable selectList, bool allowMultiple, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateTextArea(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateTextBox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateValidationMessage(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string message, string tag, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateValidationSummary(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, bool excludePropertyErrors, string message, string headerTag, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GetCurrentValues(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool allowMultiple) -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider.CreateModelExpression(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Keep(string key) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Peek(string key) -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory.GetTempData(Microsoft.AspNetCore.Http.HttpContext context) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider.LoadTempData(Microsoft.AspNetCore.Http.HttpContext context) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider.SaveTempData(Microsoft.AspNetCore.Http.HttpContext context, System.Collections.Generic.IDictionary values) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.IViewContextAware.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.Container.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForExpression(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, System.Func modelAccessor) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForExpression(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForExpression(System.Type modelType, System.Func modelAccessor) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForExpression(System.Type modelType, object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForModel(object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForProperty(string name) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForProperty(string name, System.Func modelAccessor) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForProperty(string name, object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.ModelExplorer(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object model) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.ModelExplorer(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer container, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, System.Func modelAccessor) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.ModelExplorer(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer container, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object model) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.ModelType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.Properties.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.ModelExplorer.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.ModelExpression(string name, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.Name.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.CreateModelExpression(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.CreateModelExpression(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, string expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.GetExpressionText(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.ModelExpressionProvider(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.PartialViewResultExecutor(Microsoft.Extensions.Options.IOptions viewOptions, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataFactory, System.Diagnostics.DiagnosticListener diagnosticListener, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ViewFeatures.SessionStateTempDataProvider.SessionStateTempDataProvider(Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer tempDataSerializer) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.StringHtmlContent.StringHtmlContent(string input) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.StringHtmlContent.WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Add(string key, object value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.ContainsKey(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.ContainsValue(object value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.GetEnumerator() -> System.Collections.Generic.IEnumerator> +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Keep(string key) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Keys.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Peek(string key) -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Remove(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.TempDataDictionary(Microsoft.AspNetCore.Http.HttpContext context, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider provider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.TryGetValue(string key, out object value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Values.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.this[string key].get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.this[string key].set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionaryFactory.GetTempData(Microsoft.AspNetCore.Http.HttpContext context) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionaryFactory.TempDataDictionaryFactory(Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider provider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.AddVisited(object value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.FormattedModelValue.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.FormattedModelValue.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.GetFullHtmlFieldName(string partialFieldName) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.HtmlFieldPrefix.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.HtmlFieldPrefix.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.TemplateInfo(Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo original) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.Visited(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewComponentResultExecutor.ViewComponentResultExecutor(Microsoft.Extensions.Options.IOptions mvcHelperOptions, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataDictionaryFactory) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewComponentResultExecutor.ViewComponentResultExecutor(Microsoft.Extensions.Options.IOptions mvcHelperOptions, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataDictionaryFactory, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Add(System.Collections.Generic.KeyValuePair item) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Add(string key, object value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Contains(System.Collections.Generic.KeyValuePair item) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ContainsKey(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.CopyTo(System.Collections.Generic.KeyValuePair[] array, int arrayIndex) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Eval(string expression) -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Eval(string expression, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.GetViewDataInfo(string expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Keys.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Model.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ModelExplorer.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ModelExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Remove(System.Collections.Generic.KeyValuePair item) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Remove(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.TemplateInfo.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.TryGetValue(string key, out object value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Values.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Type declaredModelType) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, System.Type declaredModelType) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source, System.Type declaredModelType) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source, object model, System.Type declaredModelType) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.this[string index].get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.this[string index].set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source, object model) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryControllerPropertyActivator.Activate(Microsoft.AspNetCore.Mvc.ControllerContext actionContext, object controller) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryControllerPropertyActivator.GetActivatorDelegate(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor actionDescriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryControllerPropertyActivator.ViewDataDictionaryControllerPropertyActivator(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.Container.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.Value.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.Value.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.ViewDataInfo(object container, System.Reflection.PropertyInfo propertyInfo) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.ViewDataInfo(object container, System.Reflection.PropertyInfo propertyInfo, System.Func valueAccessor) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.ViewDataInfo(object container, object value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.DiagnosticListener.get -> System.Diagnostics.DiagnosticListener +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string contentType, int? statusCode) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ModelMetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.TempDataFactory.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ViewExecutor(Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, System.Diagnostics.DiagnosticListener diagnosticListener) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ViewExecutor(Microsoft.Extensions.Options.IOptions viewOptions, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataFactory, System.Diagnostics.DiagnosticListener diagnosticListener, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ViewOptions.get -> Microsoft.AspNetCore.Mvc.MvcViewOptions +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.WriterFactory.get -> Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ViewResult result) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ViewResultExecutor(Microsoft.Extensions.Options.IOptions viewOptions, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataFactory, System.Diagnostics.DiagnosticListener diagnosticListener, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.ViewResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.ViewResult.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewResult.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewResult.TempData.set -> void +~Microsoft.AspNetCore.Mvc.ViewResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.ViewResult.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +~Microsoft.AspNetCore.Mvc.ViewResult.ViewEngine.set -> void +~Microsoft.AspNetCore.Mvc.ViewResult.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.ViewResult.ViewName.set -> void +~abstract Microsoft.AspNetCore.Mvc.RemoteAttributeBase.GetUrl(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> string +~abstract Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer.Deserialize(byte[] unprotectedData) -> System.Collections.Generic.IDictionary +~abstract Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer.Serialize(System.Collections.Generic.IDictionary values) -> byte[] +~abstract Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider.AddValidationAttributes(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, System.Collections.Generic.IDictionary attributes) -> void +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterViewComponent" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterView" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeViewComponent" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeView" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.EventName = "Microsoft.AspNetCore.Mvc.ViewComponentAfterViewExecute" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.EventName = "Microsoft.AspNetCore.Mvc.ViewComponentBeforeViewExecute" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.EventName = "Microsoft.AspNetCore.Mvc.ViewFound" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.EventName = "Microsoft.AspNetCore.Mvc.ViewNotFound" -> string +~override Microsoft.AspNetCore.Mvc.PageRemoteAttribute.GetUrl(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> string +~override Microsoft.AspNetCore.Mvc.PartialViewResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RemoteAttribute.GetUrl(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> string +~override Microsoft.AspNetCore.Mvc.RemoteAttributeBase.FormatErrorMessage(string name) -> string +~override Microsoft.AspNetCore.Mvc.RemoteAttributeBase.IsValid(object value) -> bool +~override Microsoft.AspNetCore.Mvc.ViewComponentResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultValidationHtmlAttributeProvider.AddValidationAttributes(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, System.Collections.Generic.IDictionary attributes) -> void +~override Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~override Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.AddModelError(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression, System.Exception exception, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.AddModelError(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression, string errorMessage) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.Remove(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression) -> bool +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.RemoveAll(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.TryAddModelException(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression, System.Exception exception) -> void +~static Microsoft.AspNetCore.Mvc.RemoteAttributeBase.FormatPropertyForClientValidation(string property) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperComponentExtensions.RenderComponentAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Type componentType, Microsoft.AspNetCore.Mvc.Rendering.RenderMode renderMode, object parameters) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperComponentExtensions.RenderComponentAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.RenderMode renderMode) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperComponentExtensions.RenderComponentAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.RenderMode renderMode, object parameters) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayNameExtensions.DisplayNameFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper> htmlHelper, System.Linq.Expressions.Expression> expression) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayNameExtensions.DisplayNameForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool? antiforgery) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object routeValues) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object routeValues) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object routeValues, bool? antiforgery) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, bool? antiforgery) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.CheckBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.CheckBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, bool isChecked) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.CheckBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.CheckBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.Hidden(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.Hidden(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.HiddenFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.Password(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.Password(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.PasswordFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.RadioButton(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.RadioButton(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value, bool isChecked) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.RadioButton(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.RadioButtonFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextArea(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextArea(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextArea(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextArea(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextAreaFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextAreaFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value, string format) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string format) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.Label(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.Label(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string labelText) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string labelText) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string labelText) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, object routeValues) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, string controllerName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, object routeValues) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, string routeName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, string routeName, object routeValues) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, string routeName, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperNameExtensions.IdForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperNameExtensions.NameForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.Partial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.Partial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.Partial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.Partial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.PartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.PartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.PartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName) -> void +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> void +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model) -> void +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> void +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, System.Collections.Generic.IEnumerable selectList, string optionLabel) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string optionLabel) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownListFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownListFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownListFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, string optionLabel) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.ListBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.ListBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.ListBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string message) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string message, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string message, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessageFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessageFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string message) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessageFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string message, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessageFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string message, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool excludePropertyErrors) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool excludePropertyErrors, string message) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool excludePropertyErrors, string message, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool excludePropertyErrors, string message, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string message) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string message, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string message, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions.Value(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions.ValueFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions.ValueForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions.ValueForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string format) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.CreateSanitizedId(string name, string invalidCharReplacement) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(this Microsoft.AspNetCore.Mvc.IViewComponentHelper helper, System.Type componentType) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(this Microsoft.AspNetCore.Mvc.IViewComponentHelper helper, string name) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(this Microsoft.AspNetCore.Mvc.IViewComponentHelper helper) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(this Microsoft.AspNetCore.Mvc.IViewComponentHelper helper, object arguments) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions.GetComponentFullName(System.Reflection.TypeInfo componentType) -> string +~static Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions.GetComponentName(System.Reflection.TypeInfo componentType) -> string +~static Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions.IsComponent(System.Reflection.TypeInfo typeInfo) -> bool +~static Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.Found(string viewName, Microsoft.AspNetCore.Mvc.ViewEngines.IView view) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~static Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.NotFound(string viewName, System.Collections.Generic.IEnumerable searchedLocations) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~static Microsoft.AspNetCore.Mvc.ViewFeatures.AntiforgeryExtensions.GetHtml(this Microsoft.AspNetCore.Antiforgery.IAntiforgery antiforgery, Microsoft.AspNetCore.Http.HttpContext httpContext) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGeneratorExtensions.GenerateForm(this Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string actionName, string controllerName, string fragment, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~static Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGeneratorExtensions.GenerateRouteForm(this Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string routeName, object routeValues, string fragment, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~static Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.AnonymousObjectToHtmlAttributes(object htmlAttributes) -> System.Collections.Generic.IDictionary +~static Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetFormMethodString(Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> string +~static Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ObjectToDictionary(object value) -> System.Collections.Generic.IDictionary +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorerExtensions.GetSimpleDisplayText(this Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer) -> string +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ModelMetadataProviderExtensions.GetModelExplorerForType(this Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider provider, System.Type modelType, object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~static Microsoft.AspNetCore.Mvc.ViewFeatures.TryGetValueProvider.CreateInstance(System.Type targetType) -> Microsoft.AspNetCore.Mvc.ViewFeatures.TryGetValueDelegate +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.FormatValue(object value, string format) -> string +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataEvaluator.Eval(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, string expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataEvaluator.Eval(object indexableObject, string expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddCookieTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddCookieTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddSessionStateTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddViewComponentsAsServices(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddViewOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.AddCookieTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.AddCookieTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.ConfigureViews(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions.ViewComponentSuffix -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.CookieName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationInputCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationInputValidCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationMessageCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationMessageValidCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationSummaryCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationSummaryValidCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.DefaultContentType -> string +~virtual Microsoft.AspNetCore.Mvc.Controller.Json(object data) -> Microsoft.AspNetCore.Mvc.JsonResult +~virtual Microsoft.AspNetCore.Mvc.Controller.Json(object data, object serializerSettings) -> Microsoft.AspNetCore.Mvc.JsonResult +~virtual Microsoft.AspNetCore.Mvc.Controller.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Controller.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Controller.OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Controller.PartialView() -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.PartialView(object model) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.PartialView(string viewName) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.PartialView(string viewName, object model) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.View() -> Microsoft.AspNetCore.Mvc.ViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.View(object model) -> Microsoft.AspNetCore.Mvc.ViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.View(string viewName) -> Microsoft.AspNetCore.Mvc.ViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.View(string viewName, object model) -> Microsoft.AspNetCore.Mvc.ViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.ViewComponent(System.Type componentType) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.Controller.ViewComponent(System.Type componentType, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.Controller.ViewComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.Controller.ViewComponent(string componentName, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RemoteAttributeBase.AddValidation(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetEnumerator() -> System.Collections.Generic.IEnumerator +~virtual Microsoft.AspNetCore.Mvc.Rendering.ViewContext.FormContext.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext +~virtual Microsoft.AspNetCore.Mvc.Rendering.ViewContext.FormContext.set -> void +~virtual Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorProvider.GetCandidateTypes() -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorProvider.GetViewComponents() -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.ViewComponents.ServiceBasedViewComponentActivator.Release(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context, object viewComponent) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AddMaxLengthAttribute(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AddPlaceholderAttribute(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AddValidationAttributes(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateActionLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateAntiforgery(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateCheckBox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string actionName, string controllerName, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateFormCore(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string action, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateHidden(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool useViewData, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateHiddenForCheckbox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateInput(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.InputType inputType, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool useViewData, bool isChecked, bool setId, bool isExplicitValue, string format, System.Collections.Generic.IDictionary htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateLabel(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateLink(string linkText, string url, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GeneratePageForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string pageName, string pageHandler, object routeValues, string fragment, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GeneratePageLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string pageName, string pageHandler, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GeneratePassword(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateRadioButton(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateRouteLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string routeName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateSelect(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string optionLabel, string expression, System.Collections.Generic.IEnumerable selectList, System.Collections.Generic.ICollection currentValues, bool allowMultiple, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateTextArea(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateTextBox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateValidationMessage(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string message, string tag, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateValidationSummary(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, bool excludePropertyErrors, string message, string headerTag, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GetCurrentValues(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool allowMultiple) -> System.Collections.Generic.ICollection +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.CreateForm() -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateCheckBox(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateDisplay(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string htmlFieldName, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateDisplayName(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateDisplayText(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateEditor(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string htmlFieldName, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateForm(string actionName, string controllerName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateHidden(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool useViewData, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateId(string expression) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateLabel(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateName(string expression) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GeneratePassword(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateRadioButton(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateRouteForm(string routeName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateTextArea(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateTextBox(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateValidationMessage(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string message, string tag, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateValidationSummary(bool excludePropertyErrors, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateValue(string expression, object value, string format, bool useViewData) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetEnumSelectList(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata) -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RenderPartialCoreAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, System.IO.TextWriter writer) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer.CanSerializeType(System.Type type) -> bool +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.PartialViewResult viewResult) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.PartialViewResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.FindView(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.PartialViewResult viewResult) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.SessionStateTempDataProvider.LoadTempData(Microsoft.AspNetCore.Http.HttpContext context) -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.SessionStateTempDataProvider.SaveTempData(Microsoft.AspNetCore.Http.HttpContext context, System.Collections.Generic.IDictionary values) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider.AddAndTrackValidationAttributes(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, System.Collections.Generic.IDictionary attributes) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ViewComponentResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ViewComponentResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.SetModel(object value) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary tempData, string contentType, int? statusCode) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.FindView(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewResult viewResult) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult diff --git a/src/Mvc/Mvc/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..210451dad3 --- /dev/null +++ b/src/Mvc/Mvc/src/PublicAPI.Unshipped.txt @@ -0,0 +1,10 @@ +#nullable enable +Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllers(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllers(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllersWithViews(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllersWithViews(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddRazorPages(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddRazorPages(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder From 990e639c08e041e9d55f400888ac8de512323bb8 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Fri, 24 Jul 2020 23:51:13 +0430 Subject: [PATCH 057/106] [MusicStore] Move to GenericHost (#24284) --- src/MusicStore/samples/MusicStore/Program.cs | 98 +++++++++++--------- 1 file changed, 52 insertions(+), 46 deletions(-) diff --git a/src/MusicStore/samples/MusicStore/Program.cs b/src/MusicStore/samples/MusicStore/Program.cs index ca81340f1f..6a5993d459 100644 --- a/src/MusicStore/samples/MusicStore/Program.cs +++ b/src/MusicStore/samples/MusicStore/Program.cs @@ -1,72 +1,78 @@ using System; using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.HttpSys; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace MusicStore { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { var config = new ConfigurationBuilder() .AddCommandLine(args) .AddEnvironmentVariables(prefix: "ASPNETCORE_") .Build(); - var builder = new WebHostBuilder() - .UseConfiguration(config) - .UseIISIntegration() - .UseStartup("MusicStore") + var builder = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseConfiguration(config) + .UseIISIntegration() + .UseStartup("MusicStore"); + + var environment = webHostBuilder.GetSetting("environment") ?? + Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + + if (string.Equals(webHostBuilder.GetSetting("server"), "Microsoft.AspNetCore.Server.HttpSys", System.StringComparison.Ordinal)) + { + if (string.Equals(environment, "NtlmAuthentication", System.StringComparison.Ordinal)) + { + // Set up NTLM authentication for WebListener like below. + // For IIS and IISExpress: Use inetmgr to setup NTLM authentication on the application vDir or + // modify the applicationHost.config to enable NTLM. + webHostBuilder.UseHttpSys(options => + { + options.Authentication.Schemes = AuthenticationSchemes.NTLM; + options.Authentication.AllowAnonymous = false; + }); + } + else + { + webHostBuilder.UseHttpSys(); + } + } + else + { + webHostBuilder.UseKestrel(); + } + + // In Proc + webHostBuilder.UseIIS(); + + webHostBuilder.ConfigureLogging(factory => + { + factory.AddConsole(); + + var logLevel = string.Equals(environment, "Development", StringComparison.Ordinal) ? LogLevel.Information : LogLevel.Warning; + factory.SetMinimumLevel(logLevel); + + // Turn off Info logging for EF commands + factory.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Warning); + }); + }) .UseDefaultServiceProvider((context, options) => { options.ValidateScopes = true; }); - var environment = builder.GetSetting("environment") ?? - Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - - if (string.Equals(builder.GetSetting("server"), "Microsoft.AspNetCore.Server.HttpSys", System.StringComparison.Ordinal)) - { - if (string.Equals(environment, "NtlmAuthentication", System.StringComparison.Ordinal)) - { - // Set up NTLM authentication for WebListener like below. - // For IIS and IISExpress: Use inetmgr to setup NTLM authentication on the application vDir or - // modify the applicationHost.config to enable NTLM. - builder.UseHttpSys(options => - { - options.Authentication.Schemes = AuthenticationSchemes.NTLM; - options.Authentication.AllowAnonymous = false; - }); - } - else - { - builder.UseHttpSys(); - } - } - else - { - builder.UseKestrel(); - } - - // In Proc - builder.UseIIS(); - - builder.ConfigureLogging(factory => - { - factory.AddConsole(); - - var logLevel = string.Equals(environment, "Development", StringComparison.Ordinal) ? LogLevel.Information : LogLevel.Warning; - factory.SetMinimumLevel(logLevel); - - // Turn off Info logging for EF commands - factory.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Warning); - }); - var host = builder.Build(); - host.Run(); + return host.RunAsync(); } } } From 8b0f46c357149cb203f7ead13abe921389b34beb Mon Sep 17 00:00:00 2001 From: Youssef Victor <31348972+Youssef1313@users.noreply.github.com> Date: Fri, 24 Jul 2020 22:54:58 +0200 Subject: [PATCH 058/106] Use Compount Assignment to respect IDE0054 (#24202) * Use Compount Assignment to respect IDE0054 --- .../UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs | 4 ++-- .../UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs index 8b21750186..c052f1ec01 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal ModelState.AddModelError(string.Empty, ErrorMessage); } - returnUrl = returnUrl ?? Url.Content("~/"); + returnUrl ??= Url.Content("~/"); // Clear the existing external cookie to ensure a clean login process await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); @@ -121,7 +121,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal public override async Task OnPostAsync(string returnUrl = null) { - returnUrl = returnUrl ?? Url.Content("~/"); + returnUrl ??= Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs index 8e2a7e2faf..1276e61969 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs @@ -126,7 +126,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal public override async Task OnPostAsync(string returnUrl = null) { - returnUrl = returnUrl ?? Url.Content("~/"); + returnUrl ??= Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { From b094ecddf0b87adb10725628fdce463a278a6c9e Mon Sep 17 00:00:00 2001 From: Tanay Parikh Date: Fri, 24 Jul 2020 17:44:58 -0700 Subject: [PATCH 059/106] Create PublicAPI.Unshipped.txt (#24299) * Updated PublicAPI.Unshipped * Improve record type detection Support both forms of Clone methods to detect record types Co-authored-by: Pranav K --- .../ActionConstraintProviderContext.cs | 2 +- .../Mvc.Abstractions/src/PublicAPI.Unshipped.txt | 7 +++++++ .../Metadata/DefaultBindingMetadataProvider.cs | 3 ++- src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt | 15 +++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Mvc/Mvc.Abstractions/src/ActionConstraints/ActionConstraintProviderContext.cs b/src/Mvc/Mvc.Abstractions/src/ActionConstraints/ActionConstraintProviderContext.cs index d740257203..7d23cd50f5 100644 --- a/src/Mvc/Mvc.Abstractions/src/ActionConstraints/ActionConstraintProviderContext.cs +++ b/src/Mvc/Mvc.Abstractions/src/ActionConstraints/ActionConstraintProviderContext.cs @@ -59,4 +59,4 @@ namespace Microsoft.AspNetCore.Mvc.ActionConstraints /// public IList Results { get; } } -} \ No newline at end of file +} diff --git a/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt index af5b4f50c8..af32a8728d 100644 --- a/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt +++ b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt @@ -355,6 +355,7 @@ Microsoft.AspNetCore.Mvc.ModelBinding.IValueProviderFactory.CreateValueProviderA Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ModelBindingMessageProvider() -> void Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ConstructorInfo.get -> System.Reflection.ConstructorInfo? Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ContainerType.get -> System.Type? Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity other) -> bool Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.MetadataKind.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind @@ -363,6 +364,7 @@ Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.Name.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ParameterInfo.get -> System.Reflection.ParameterInfo? Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.PropertyInfo.get -> System.Reflection.PropertyInfo? Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Constructor = 3 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Parameter = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Property = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Type = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind @@ -733,6 +735,7 @@ static Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.GetBindingInfo(System.C static Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.operator !=(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s1, Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s2) -> bool static Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.operator ==(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s1, Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s2) -> bool static Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource.Create(System.Collections.Generic.IEnumerable! bindingSources, string! displayName) -> Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource! +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForConstructor(System.Reflection.ConstructorInfo! constructor, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForParameter(System.Reflection.ParameterInfo! parameter) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForParameter(System.Reflection.ParameterInfo! parameter, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForProperty(System.Reflection.PropertyInfo! propertyInfo, System.Type! modelType, System.Type! containerType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity @@ -843,10 +846,14 @@ virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.CreateB virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.Services.get -> System.IServiceProvider! virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelType.get -> System.Type! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BoundConstructor.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BoundConstructorInvoker.get -> System.Func? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BoundConstructorParameters.get -> System.Collections.Generic.IReadOnlyList? virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetMetadataForProperties(System.Type! modelType) -> System.Collections.Generic.IEnumerable! virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetMetadataForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HasValidators.get -> bool? virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyValidationFilter.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForConstructor(System.Reflection.ConstructorInfo! constructor, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo! parameter, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForProperty(System.Reflection.PropertyInfo! propertyInfo, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! diff --git a/src/Mvc/Mvc.Core/src/ModelBinding/Metadata/DefaultBindingMetadataProvider.cs b/src/Mvc/Mvc.Core/src/ModelBinding/Metadata/DefaultBindingMetadataProvider.cs index eea47efcd6..e5b7c54df0 100644 --- a/src/Mvc/Mvc.Core/src/ModelBinding/Metadata/DefaultBindingMetadataProvider.cs +++ b/src/Mvc/Mvc.Core/src/ModelBinding/Metadata/DefaultBindingMetadataProvider.cs @@ -143,7 +143,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata static bool IsRecordType(Type type) { // Based on the state of the art as described in https://github.com/dotnet/roslyn/issues/45777 - var cloneMethod = type.GetMethod("<>Clone", BindingFlags.Public | BindingFlags.Instance); + var cloneMethod = type.GetMethod("$", BindingFlags.Public | BindingFlags.Instance) ?? + type.GetMethod("<>Clone", BindingFlags.Public | BindingFlags.Instance); return cloneMethod != null && cloneMethod.ReturnType == type; } } diff --git a/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt index 04d15cb58d..b122b73175 100644 --- a/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt +++ b/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt @@ -457,6 +457,9 @@ Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinderProvid Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider.CollectionModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinderProvider.ComplexObjectModelBinderProvider() -> void Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider.ComplexTypeModelBinderProvider() -> void @@ -1455,6 +1458,8 @@ virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit ~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.ElementBinder.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder ~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.Logger.get -> Microsoft.Extensions.Logging.ILogger ~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder ~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task ~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.ComplexTypeModelBinder(System.Collections.Generic.IDictionary propertyBinders, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void ~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.ComplexTypeModelBinder(System.Collections.Generic.IDictionary propertyBinders, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void @@ -1527,6 +1532,8 @@ virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderType.set -> void ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BindingSource.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BoundConstructor.get -> System.Reflection.ConstructorInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BoundConstructor.set -> void ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.ModelBindingMessageProvider.set -> void ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider @@ -1543,6 +1550,10 @@ virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.Type.get -> System.Type ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BindingMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BindingMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BoundConstructorInvoker.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BoundConstructorInvoker.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BoundConstructorParameters.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata[] +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BoundConstructorParameters.set -> void ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ContainerMetadata.set -> void ~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.DefaultMetadataDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void @@ -2017,6 +2028,9 @@ virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BinderModelName.get -> string ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BinderType.get -> System.Type ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BoundConstructor.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BoundConstructorInvoker.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BoundConstructorParameters.get -> System.Collections.Generic.IReadOnlyList ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DataTypeName.get -> string ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Description.get -> string @@ -2039,6 +2053,7 @@ virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.SimpleDisplayProperty.get -> string ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.TemplateHint.get -> string ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForConstructor(System.Reflection.ConstructorInfo constructorInfo, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo parameter) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo parameter, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata ~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForProperties(System.Type modelType) -> System.Collections.Generic.IEnumerable From 64b5ea9393119321205c11320dc050ff0ea06dfd Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Sat, 25 Jul 2020 09:33:10 +0430 Subject: [PATCH 060/106] [HttpSys] Move to GenericHost (#24285) --- .../HttpSys/samples/HotAddSample/Startup.cs | 16 +++++++++---- .../HttpSys/test/FunctionalTests/Utilities.cs | 23 +++++++++++-------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/Servers/HttpSys/samples/HotAddSample/Startup.cs b/src/Servers/HttpSys/samples/HotAddSample/Startup.cs index 58975d6aa6..a0efd408f1 100644 --- a/src/Servers/HttpSys/samples/HotAddSample/Startup.cs +++ b/src/Servers/HttpSys/samples/HotAddSample/Startup.cs @@ -1,9 +1,11 @@ using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.HttpSys; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace HotAddSample @@ -96,15 +98,19 @@ namespace HotAddSample }); } - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseStartup() + .UseHttpSys(); + }) .ConfigureLogging(factory => factory.AddConsole()) - .UseStartup() - .UseHttpSys() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs b/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs index a347ce427f..4aa56ccabf 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs @@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -66,7 +67,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys }, app); } - internal static IWebHost CreateDynamicHost(AuthenticationSchemes authType, bool allowAnonymous, out string root, RequestDelegate app) + internal static IHost CreateDynamicHost(AuthenticationSchemes authType, bool allowAnonymous, out string root, RequestDelegate app) { return CreateDynamicHost(string.Empty, out root, out var baseAddress, options => { @@ -75,22 +76,26 @@ namespace Microsoft.AspNetCore.Server.HttpSys }, app); } - internal static IWebHost CreateDynamicHost(out string baseAddress, Action configureOptions, RequestDelegate app) + internal static IHost CreateDynamicHost(out string baseAddress, Action configureOptions, RequestDelegate app) { return CreateDynamicHost(string.Empty, out var root, out baseAddress, configureOptions, app); } - internal static IWebHost CreateDynamicHost(string basePath, out string root, out string baseAddress, Action configureOptions, RequestDelegate app) + internal static IHost CreateDynamicHost(string basePath, out string root, out string baseAddress, Action configureOptions, RequestDelegate app) { var prefix = UrlPrefix.Create("http", "localhost", "0", basePath); - var builder = new WebHostBuilder() - .UseHttpSys(options => + var builder = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - options.UrlPrefixes.Add(prefix); - configureOptions(options); - }) - .Configure(appBuilder => appBuilder.Run(app)); + webHostBuilder + .UseHttpSys(options => + { + options.UrlPrefixes.Add(prefix); + configureOptions(options); + }) + .Configure(appBuilder => appBuilder.Run(app)); + }); var host = builder.Build(); From f26942805dba614e6c9e2d7aa7da8fe3edaff827 Mon Sep 17 00:00:00 2001 From: Pranav K Date: Sat, 25 Jul 2020 07:34:05 -0700 Subject: [PATCH 061/106] Turn on nullability for Routing (#24238) * Turn on nullability for Routing We previously only had annotations enabled which resulted in incorrect nullability. This change enables nullability. Fixes https://github.com/dotnet/aspnetcore/issues/24042 --- .../Http.Abstractions/src/Routing/Endpoint.cs | 6 +- .../src/IRouteConstraint.cs | 2 +- src/Http/Routing/src/ArrayBuilder.cs | 1 + ...ointRoutingApplicationBuilderExtensions.cs | 2 +- .../src/CompositeEndpointDataSource.cs | 12 ++-- .../src/Constraints/BoolRouteConstraint.cs | 6 +- .../Constraints/CompositeRouteConstraint.cs | 6 +- .../Constraints/DateTimeRouteConstraint.cs | 6 +- .../src/Constraints/DecimalRouteConstraint.cs | 6 +- .../src/Constraints/DoubleRouteConstraint.cs | 6 +- .../Constraints/FileNameRouteConstraint.cs | 4 +- .../src/Constraints/FloatRouteConstraint.cs | 6 +- .../src/Constraints/GuidRouteConstraint.cs | 6 +- .../Constraints/HttpMethodRouteConstraint.cs | 4 +- .../src/Constraints/IntRouteConstraint.cs | 6 +- .../src/Constraints/LengthRouteConstraint.cs | 8 +-- .../src/Constraints/LongRouteConstraint.cs | 6 +- .../Constraints/MaxLengthRouteConstraint.cs | 8 +-- .../src/Constraints/MaxRouteConstraint.cs | 6 +- .../Constraints/MinLengthRouteConstraint.cs | 8 +-- .../src/Constraints/MinRouteConstraint.cs | 6 +- .../Constraints/NonFileNameRouteConstraint.cs | 4 +- .../src/Constraints/NullRouteConstraint.cs | 4 +- .../Constraints/OptionalRouteConstraint.cs | 6 +- .../src/Constraints/RangeRouteConstraint.cs | 6 +- .../src/Constraints/RegexRouteConstraint.cs | 6 +- .../Constraints/RequiredRouteConstraint.cs | 6 +- .../src/Constraints/StringRouteConstraint.cs | 8 +-- .../Routing/src/DataSourceDependentCache.cs | 2 + .../src/DecisionTree/DecisionCriterion.cs | 4 +- .../src/DecisionTree/DecisionTreeNode.cs | 4 +- .../src/DecisionTree/ItemDescriptor.cs | 4 +- src/Http/Routing/src/DefaultLinkGenerator.cs | 2 +- src/Http/Routing/src/DefaultLinkParser.cs | 6 +- .../src/DefaultParameterPolicyFactory.cs | 4 +- src/Http/Routing/src/EndpointMiddleware.cs | 1 + .../Routing/src/EndpointNameAddressScheme.cs | 2 +- .../Routing/src/EndpointRoutingMiddleware.cs | 3 +- .../Routing/src/InlineRouteParameterParser.cs | 2 +- ...kGeneratorEndpointNameAddressExtensions.cs | 28 ++++---- ...nkGeneratorRouteValuesAddressExtensions.cs | 38 +++++------ src/Http/Routing/src/LinkParser.cs | 2 +- ...LinkParserEndpointNameAddressExtensions.cs | 2 +- .../RouteConstraintMatcherExtensions.cs | 2 +- .../RouterMiddlewareLoggerExtensions.cs | 2 +- .../src/Logging/TreeRouterLoggerExtensions.cs | 2 +- .../src/MapRouteRouteBuilderExtensions.cs | 2 +- src/Http/Routing/src/Matching/CandidateSet.cs | 13 ++-- .../Routing/src/Matching/CandidateState.cs | 6 +- .../Matching/DataSourceDependentMatcher.cs | 4 +- .../src/Matching/DefaultEndpointSelector.cs | 8 +-- src/Http/Routing/src/Matching/DfaMatcher.cs | 13 ++-- .../Routing/src/Matching/DfaMatcherBuilder.cs | 2 + src/Http/Routing/src/Matching/DfaNode.cs | 4 +- .../Routing/src/Matching/EndpointComparer.cs | 8 +-- .../Routing/src/Matching/HostMatcherPolicy.cs | 14 ++-- .../src/Matching/HttpMethodMatcherPolicy.cs | 26 +++---- .../Routing/src/Matching/ILEmitTrieFactory.cs | 4 +- .../src/Matching/ILEmitTrieJumpTable.cs | 4 +- src/Http/Routing/src/Matching/PathSegment.cs | 4 +- .../src/Microsoft.AspNetCore.Routing.csproj | 2 +- src/Http/Routing/src/NullRouter.cs | 4 +- .../Routing/src/ParameterPolicyActivator.cs | 3 +- .../Routing/src/ParameterPolicyFactory.cs | 4 +- src/Http/Routing/src/PathTokenizer.cs | 2 + .../DefaultRoutePatternTransformer.cs | 2 + .../src/Patterns/RouteParameterParser.cs | 2 +- src/Http/Routing/src/Patterns/RoutePattern.cs | 16 ++--- .../src/Patterns/RoutePatternException.cs | 4 +- .../src/Patterns/RoutePatternFactory.cs | 68 +++++++++---------- .../src/Patterns/RoutePatternMatcher.cs | 2 + .../src/Patterns/RoutePatternParameterPart.cs | 8 +-- .../RoutePatternParameterPolicyReference.cs | 10 +-- .../src/Patterns/RoutePatternParser.cs | 2 + .../src/Patterns/RoutePatternTransformer.cs | 4 +- .../RequestDelegateRouteBuilderExtensions.cs | 2 +- src/Http/Routing/src/Route.cs | 4 +- src/Http/Routing/src/RouteBase.cs | 16 ++--- .../Routing/src/RouteConstraintMatcher.cs | 2 +- src/Http/Routing/src/RouteEndpoint.cs | 6 +- ...dpointModel.cs => RouteEndpointBuilder.cs} | 6 ++ src/Http/Routing/src/RouteOptions.cs | 2 +- .../Routing/src/RouteValueEqualityComparer.cs | 6 +- .../Routing/src/RouteValuesAddressScheme.cs | 6 +- .../Routing/src/Template/InlineConstraint.cs | 4 +- .../Routing/src/Template/RouteTemplate.cs | 2 +- .../Routing/src/Template/TemplateBinder.cs | 2 - .../Routing/src/Template/TemplateMatcher.cs | 2 +- src/Http/Routing/src/Template/TemplatePart.cs | 23 ++++--- .../src/Template/TemplateValuesResult.cs | 6 +- src/Http/Routing/src/Tree/InboundMatch.cs | 4 +- .../Routing/src/Tree/InboundRouteEntry.cs | 2 + .../src/Tree/LinkGenerationDecisionTree.cs | 2 + src/Http/Routing/src/Tree/OutboundMatch.cs | 4 +- .../Routing/src/Tree/OutboundRouteEntry.cs | 4 +- src/Http/Routing/src/Tree/TreeEnumerator.cs | 2 + src/Http/Routing/src/Tree/TreeRouteBuilder.cs | 2 + src/Http/Routing/src/Tree/TreeRouter.cs | 2 + src/Http/Routing/src/Tree/UrlMatchingNode.cs | 2 + src/Http/Routing/src/Tree/UrlMatchingTree.cs | 2 +- 100 files changed, 344 insertions(+), 287 deletions(-) rename src/Http/Routing/src/{RouteEndpointModel.cs => RouteEndpointBuilder.cs} (82%) diff --git a/src/Http/Http.Abstractions/src/Routing/Endpoint.cs b/src/Http/Http.Abstractions/src/Routing/Endpoint.cs index 4733177674..1f795f74ad 100644 --- a/src/Http/Http.Abstractions/src/Routing/Endpoint.cs +++ b/src/Http/Http.Abstractions/src/Routing/Endpoint.cs @@ -20,8 +20,8 @@ namespace Microsoft.AspNetCore.Http /// public Endpoint( RequestDelegate requestDelegate, - EndpointMetadataCollection metadata, - string displayName) + EndpointMetadataCollection? metadata, + string? displayName) { // All are allowed to be null RequestDelegate = requestDelegate; @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Http /// /// Gets the informational display name of this endpoint. /// - public string DisplayName { get; } + public string? DisplayName { get; } /// /// Gets the collection of metadata associated with this endpoint. diff --git a/src/Http/Routing.Abstractions/src/IRouteConstraint.cs b/src/Http/Routing.Abstractions/src/IRouteConstraint.cs index 076706dcd9..37ea18c672 100644 --- a/src/Http/Routing.Abstractions/src/IRouteConstraint.cs +++ b/src/Http/Routing.Abstractions/src/IRouteConstraint.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Routing /// true if the URL parameter contains a valid value; otherwise, false. bool Match( HttpContext? httpContext, - IRouter route, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection); diff --git a/src/Http/Routing/src/ArrayBuilder.cs b/src/Http/Routing/src/ArrayBuilder.cs index ff20c2e64d..ede0f990b6 100644 --- a/src/Http/Routing/src/ArrayBuilder.cs +++ b/src/Http/Routing/src/ArrayBuilder.cs @@ -6,6 +6,7 @@ // // See https://github.com/dotnet/corefx/blob/143df51926f2ad397fef9c9ca7ede88e2721e801/src/Common/src/System/Collections/Generic/ArrayBuilder.cs +#nullable disable using System; using System.Diagnostics; diff --git a/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs b/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs index d1d3617210..dbc3432107 100644 --- a/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs +++ b/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs @@ -128,7 +128,7 @@ namespace Microsoft.AspNetCore.Builder } // If someone messes with this, just let it crash. - endpointRouteBuilder = (DefaultEndpointRouteBuilder)obj; + endpointRouteBuilder = (DefaultEndpointRouteBuilder)obj!; // This check handles the case where Map or something else that forks the pipeline is called between the two // routing middleware. diff --git a/src/Http/Routing/src/CompositeEndpointDataSource.cs b/src/Http/Routing/src/CompositeEndpointDataSource.cs index 008ad09a9c..9d0a97c832 100644 --- a/src/Http/Routing/src/CompositeEndpointDataSource.cs +++ b/src/Http/Routing/src/CompositeEndpointDataSource.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading; @@ -21,8 +22,8 @@ namespace Microsoft.AspNetCore.Routing public sealed class CompositeEndpointDataSource : EndpointDataSource { private readonly object _lock; - private readonly ICollection _dataSources; - private IReadOnlyList _endpoints; + private readonly ICollection _dataSources = default!; + private IReadOnlyList _endpoints = default!; private IChangeToken _consumerChangeToken; private CancellationTokenSource _cts; @@ -49,7 +50,7 @@ namespace Microsoft.AspNetCore.Routing } } - private void OnDataSourcesChanged(object sender, NotifyCollectionChangedEventArgs e) + private void OnDataSourcesChanged(object? sender, NotifyCollectionChangedEventArgs e) { lock (_lock) { @@ -140,6 +141,7 @@ namespace Microsoft.AspNetCore.Routing } } + [MemberNotNull(nameof(_cts), nameof(_consumerChangeToken))] private void CreateChangeToken() { _cts = new CancellationTokenSource(); @@ -198,7 +200,7 @@ namespace Microsoft.AspNetCore.Routing } return sb.ToString(); - IEnumerable FormatValues(IEnumerable> values) + IEnumerable FormatValues(IEnumerable> values) { return values.Select( kvp => diff --git a/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs b/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs index d19000f9de..26a37c2e80 100644 --- a/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs b/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs index 468699ce8a..023a32eae8 100644 --- a/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs @@ -33,8 +33,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -60,4 +60,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return true; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs b/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs index a912a84f52..2d7fdd1bc2 100644 --- a/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs @@ -20,8 +20,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -50,4 +50,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs b/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs index 9fcc80a9f1..b08d13d515 100644 --- a/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs b/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs index 405e46cb0d..e3c351d3e8 100644 --- a/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -48,4 +48,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs b/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs index 50d85eb86f..0051ef3fb1 100644 --- a/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs @@ -85,8 +85,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) diff --git a/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs b/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs index fbdd3c87d6..5108da1bcb 100644 --- a/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -48,4 +48,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs b/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs index b87069df98..101621c068 100644 --- a/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs @@ -16,8 +16,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -46,4 +46,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs b/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs index ea20e81419..b2ad0eff33 100644 --- a/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs @@ -35,8 +35,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public virtual bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) diff --git a/src/Http/Routing/src/Constraints/IntRouteConstraint.cs b/src/Http/Routing/src/Constraints/IntRouteConstraint.cs index 34ff02331e..6190180858 100644 --- a/src/Http/Routing/src/Constraints/IntRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/IntRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs index 8964f2549e..52fecb9d42 100644 --- a/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs @@ -71,8 +71,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -89,7 +89,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var value) && value != null) { - var valueString = Convert.ToString(value, CultureInfo.InvariantCulture); + var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!; var length = valueString.Length; return length >= MinLength && length <= MaxLength; } @@ -97,4 +97,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/LongRouteConstraint.cs b/src/Http/Routing/src/Constraints/LongRouteConstraint.cs index 8ed5cccc46..493be38eb1 100644 --- a/src/Http/Routing/src/Constraints/LongRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/LongRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs index 4005a041aa..470f9110d8 100644 --- a/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs @@ -34,8 +34,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -52,11 +52,11 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var value) && value != null) { - var valueString = Convert.ToString(value, CultureInfo.InvariantCulture); + var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!; return valueString.Length <= MaxLength; } return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs b/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs index dab22f5075..c7d5e91dfe 100644 --- a/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs @@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -56,4 +56,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs index c58bd0b30d..9c7b54704b 100644 --- a/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs @@ -34,8 +34,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -52,11 +52,11 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var value) && value != null) { - var valueString = Convert.ToString(value, CultureInfo.InvariantCulture); + var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!; return valueString.Length >= MinLength; } return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/MinRouteConstraint.cs b/src/Http/Routing/src/Constraints/MinRouteConstraint.cs index 450ed46fbf..ef504f446d 100644 --- a/src/Http/Routing/src/Constraints/MinRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/MinRouteConstraint.cs @@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -56,4 +56,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs b/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs index c6867b6e05..9d58423b9a 100644 --- a/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs @@ -81,8 +81,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) diff --git a/src/Http/Routing/src/Constraints/NullRouteConstraint.cs b/src/Http/Routing/src/Constraints/NullRouteConstraint.cs index f61e740419..7accfcb166 100644 --- a/src/Http/Routing/src/Constraints/NullRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/NullRouteConstraint.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Http; @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints { } - public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) + public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) { return true; } diff --git a/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs b/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs index 6b7cf8a1a5..f66bdd67de 100644 --- a/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs @@ -24,8 +24,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints public IRouteConstraint InnerConstraint { get; } public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -52,4 +52,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return true; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs b/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs index 34c946fa66..3e7dde78cb 100644 --- a/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs @@ -42,8 +42,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -70,4 +70,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs b/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs index 9269de51a3..4d17f5d7ea 100644 --- a/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs @@ -38,8 +38,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints public Regex Constraint { get; private set; } public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var routeValue) && routeValue != null) { - var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture); + var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture)!; return Constraint.IsMatch(parameterValueString); } diff --git a/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs b/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs index e33e1e23a6..71b594a07b 100644 --- a/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs @@ -18,8 +18,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/StringRouteConstraint.cs b/src/Http/Routing/src/Constraints/StringRouteConstraint.cs index fb6a3568c3..737cf22812 100644 --- a/src/Http/Routing/src/Constraints/StringRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/StringRouteConstraint.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints } /// - public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) + public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) { if (routeKey == null) { @@ -44,7 +44,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var routeValue) && routeValue != null) { - var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture); + var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture)!; return parameterValueString.Equals(_value, StringComparison.OrdinalIgnoreCase); } @@ -52,4 +52,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/DataSourceDependentCache.cs b/src/Http/Routing/src/DataSourceDependentCache.cs index f31807e171..53b8572694 100644 --- a/src/Http/Routing/src/DataSourceDependentCache.cs +++ b/src/Http/Routing/src/DataSourceDependentCache.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Threading; diff --git a/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs b/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs index efc9c742d2..ce8ec11498 100644 --- a/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs +++ b/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; namespace Microsoft.AspNetCore.Routing.DecisionTree @@ -11,4 +13,4 @@ namespace Microsoft.AspNetCore.Routing.DecisionTree public Dictionary> Branches { get; set; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/DecisionTree/DecisionTreeNode.cs b/src/Http/Routing/src/DecisionTree/DecisionTreeNode.cs index 1be3064c62..df28097786 100644 --- a/src/Http/Routing/src/DecisionTree/DecisionTreeNode.cs +++ b/src/Http/Routing/src/DecisionTree/DecisionTreeNode.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; namespace Microsoft.AspNetCore.Routing.DecisionTree @@ -17,4 +19,4 @@ namespace Microsoft.AspNetCore.Routing.DecisionTree // matching the input data. public IList> Criteria { get; set; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/DecisionTree/ItemDescriptor.cs b/src/Http/Routing/src/DecisionTree/ItemDescriptor.cs index 84a6279c27..e5146f98c4 100644 --- a/src/Http/Routing/src/DecisionTree/ItemDescriptor.cs +++ b/src/Http/Routing/src/DecisionTree/ItemDescriptor.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; namespace Microsoft.AspNetCore.Routing.DecisionTree @@ -13,4 +15,4 @@ namespace Microsoft.AspNetCore.Routing.DecisionTree public TItem Item { get; set; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/DefaultLinkGenerator.cs b/src/Http/Routing/src/DefaultLinkGenerator.cs index 2dda332858..e080aaec50 100644 --- a/src/Http/Routing/src/DefaultLinkGenerator.cs +++ b/src/Http/Routing/src/DefaultLinkGenerator.cs @@ -325,7 +325,7 @@ namespace Microsoft.AspNetCore.Routing } // Also called from DefaultLinkGenerationTemplate - public static RouteValueDictionary? GetAmbientValues(HttpContext httpContext) + public static RouteValueDictionary? GetAmbientValues(HttpContext? httpContext) { return httpContext?.Features.Get()?.RouteValues; } diff --git a/src/Http/Routing/src/DefaultLinkParser.cs b/src/Http/Routing/src/DefaultLinkParser.cs index 8c922e2668..07aaacbb03 100644 --- a/src/Http/Routing/src/DefaultLinkParser.cs +++ b/src/Http/Routing/src/DefaultLinkParser.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; @@ -46,7 +47,7 @@ namespace Microsoft.AspNetCore.Routing _createMatcher = CreateRoutePatternMatcher; } - public override RouteValueDictionary ParsePathByAddress(TAddress address, PathString path) + public override RouteValueDictionary? ParsePathByAddress(TAddress address, PathString path) { var endpoints = GetEndpoints(address); if (endpoints.Count == 0) @@ -117,7 +118,7 @@ namespace Microsoft.AspNetCore.Routing internal MatcherState GetMatcherState(RouteEndpoint endpoint) => _matcherCache.EnsureInitialized().GetOrAdd(endpoint, _createMatcher); // Internal for testing - internal bool TryParse(RouteEndpoint endpoint, PathString path, out RouteValueDictionary values) + internal bool TryParse(RouteEndpoint endpoint, PathString path, [NotNullWhen(true)] out RouteValueDictionary? values) { var (matcher, constraints) = GetMatcherState(endpoint); @@ -168,6 +169,7 @@ namespace Microsoft.AspNetCore.Routing } } +#nullable disable private static class Log { public static class EventIds diff --git a/src/Http/Routing/src/DefaultParameterPolicyFactory.cs b/src/Http/Routing/src/DefaultParameterPolicyFactory.cs index 1982d75518..059c4bb31c 100644 --- a/src/Http/Routing/src/DefaultParameterPolicyFactory.cs +++ b/src/Http/Routing/src/DefaultParameterPolicyFactory.cs @@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Routing _serviceProvider = serviceProvider; } - public override IParameterPolicy Create(RoutePatternParameterPart parameter, IParameterPolicy parameterPolicy) + public override IParameterPolicy Create(RoutePatternParameterPart? parameter, IParameterPolicy parameterPolicy) { if (parameterPolicy == null) { @@ -36,7 +36,7 @@ namespace Microsoft.AspNetCore.Routing return parameterPolicy; } - public override IParameterPolicy Create(RoutePatternParameterPart parameter, string inlineText) + public override IParameterPolicy Create(RoutePatternParameterPart? parameter, string inlineText) { if (inlineText == null) { diff --git a/src/Http/Routing/src/EndpointMiddleware.cs b/src/Http/Routing/src/EndpointMiddleware.cs index 0e11e560b7..f5c2b0912f 100644 --- a/src/Http/Routing/src/EndpointMiddleware.cs +++ b/src/Http/Routing/src/EndpointMiddleware.cs @@ -101,6 +101,7 @@ namespace Microsoft.AspNetCore.Routing "Configure your application startup by adding app.UseCors() inside the call to Configure(..) in the application startup code. The call to app.UseCors() must appear between app.UseRouting() and app.UseEndpoints(...)."); } +#nullable disable private static class Log { private static readonly Action _executingEndpoint = LoggerMessage.Define( diff --git a/src/Http/Routing/src/EndpointNameAddressScheme.cs b/src/Http/Routing/src/EndpointNameAddressScheme.cs index 9d2753cf52..24799d2d39 100644 --- a/src/Http/Routing/src/EndpointNameAddressScheme.cs +++ b/src/Http/Routing/src/EndpointNameAddressScheme.cs @@ -92,7 +92,7 @@ namespace Microsoft.AspNetCore.Routing throw new InvalidOperationException(builder.ToString()); - string GetEndpointName(Endpoint endpoint) + string? GetEndpointName(Endpoint endpoint) { if (endpoint.Metadata.GetMetadata()?.SuppressLinkGeneration == true) { diff --git a/src/Http/Routing/src/EndpointRoutingMiddleware.cs b/src/Http/Routing/src/EndpointRoutingMiddleware.cs index 482e86bb6d..82c841941c 100644 --- a/src/Http/Routing/src/EndpointRoutingMiddleware.cs +++ b/src/Http/Routing/src/EndpointRoutingMiddleware.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Routing private readonly DiagnosticListener _diagnosticListener; private readonly RequestDelegate _next; - private Task _initializationTask; + private Task? _initializationTask; public EndpointRoutingMiddleware( MatcherFactory matcherFactory, @@ -165,6 +165,7 @@ namespace Microsoft.AspNetCore.Routing } } +#nullable disable private static class Log { private static readonly Action _matchSuccess = LoggerMessage.Define( diff --git a/src/Http/Routing/src/InlineRouteParameterParser.cs b/src/Http/Routing/src/InlineRouteParameterParser.cs index 33c70558f2..49dd434d37 100644 --- a/src/Http/Routing/src/InlineRouteParameterParser.cs +++ b/src/Http/Routing/src/InlineRouteParameterParser.cs @@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Routing var parseResults = ParseConstraints(routeParameter, currentIndex, endIndex); currentIndex = parseResults.CurrentIndex; - string defaultValue = null; + string? defaultValue = null; if (currentIndex <= endIndex && routeParameter[currentIndex] == '=') { diff --git a/src/Http/Routing/src/LinkGeneratorEndpointNameAddressExtensions.cs b/src/Http/Routing/src/LinkGeneratorEndpointNameAddressExtensions.cs index dd0e462c20..bc6ca2fc24 100644 --- a/src/Http/Routing/src/LinkGeneratorEndpointNameAddressExtensions.cs +++ b/src/Http/Routing/src/LinkGeneratorEndpointNameAddressExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Http; @@ -27,14 +27,14 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null. - public static string GetPathByName( + public static string? GetPathByName( this LinkGenerator generator, HttpContext httpContext, string endpointName, - object values, + object? values, PathString? pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -74,13 +74,13 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null. - public static string GetPathByName( + public static string? GetPathByName( this LinkGenerator generator, string endpointName, - object values, + object? values, PathString pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -126,16 +126,16 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// - public static string GetUriByName( + public static string? GetUriByName( this LinkGenerator generator, HttpContext httpContext, string endpointName, - object values, - string scheme = default, + object? values, + string? scheme = default, HostString? host = default, PathString? pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -190,15 +190,15 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// - public static string GetUriByName( + public static string? GetUriByName( this LinkGenerator generator, string endpointName, - object values, + object? values, string scheme, HostString host, PathString pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { diff --git a/src/Http/Routing/src/LinkGeneratorRouteValuesAddressExtensions.cs b/src/Http/Routing/src/LinkGeneratorRouteValuesAddressExtensions.cs index f683b4d3ca..ddf4bb9e91 100644 --- a/src/Http/Routing/src/LinkGeneratorRouteValuesAddressExtensions.cs +++ b/src/Http/Routing/src/LinkGeneratorRouteValuesAddressExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Http; @@ -27,14 +27,14 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null. - public static string GetPathByRouteValues( + public static string? GetPathByRouteValues( this LinkGenerator generator, HttpContext httpContext, - string routeName, - object values, + string? routeName, + object? values, PathString? pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -70,13 +70,13 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null. - public static string GetPathByRouteValues( + public static string? GetPathByRouteValues( this LinkGenerator generator, - string routeName, - object values, + string? routeName, + object? values, PathString pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -118,16 +118,16 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// - public static string GetUriByRouteValues( + public static string? GetUriByRouteValues( this LinkGenerator generator, HttpContext httpContext, - string routeName, - object values, - string scheme = default, + string? routeName, + object? values, + string? scheme = default, HostString? host = default, PathString? pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -178,15 +178,15 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// - public static string GetUriByRouteValues( + public static string? GetUriByRouteValues( this LinkGenerator generator, - string routeName, - object values, + string? routeName, + object? values, string scheme, HostString host, PathString pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -197,7 +197,7 @@ namespace Microsoft.AspNetCore.Routing return generator.GetUriByAddress(address, address.ExplicitValues, scheme, host, pathBase, fragment, options); } - private static RouteValuesAddress CreateAddress(HttpContext httpContext, string routeName, object values) + private static RouteValuesAddress CreateAddress(HttpContext? httpContext, string? routeName, object? values) { return new RouteValuesAddress() { diff --git a/src/Http/Routing/src/LinkParser.cs b/src/Http/Routing/src/LinkParser.cs index b5135b3f01..88ed8c8131 100644 --- a/src/Http/Routing/src/LinkParser.cs +++ b/src/Http/Routing/src/LinkParser.cs @@ -32,6 +32,6 @@ namespace Microsoft.AspNetCore.Routing /// of the route patterns match the provided URI path. /// /// - public abstract RouteValueDictionary ParsePathByAddress(TAddress address, PathString path); + public abstract RouteValueDictionary? ParsePathByAddress(TAddress address, PathString path); } } diff --git a/src/Http/Routing/src/LinkParserEndpointNameAddressExtensions.cs b/src/Http/Routing/src/LinkParserEndpointNameAddressExtensions.cs index 904dc0b885..2217a8eb45 100644 --- a/src/Http/Routing/src/LinkParserEndpointNameAddressExtensions.cs +++ b/src/Http/Routing/src/LinkParserEndpointNameAddressExtensions.cs @@ -33,7 +33,7 @@ namespace Microsoft.AspNetCore.Routing /// of the route patterns match the provided URI path. /// /// - public static RouteValueDictionary ParsePathByEndpointName( + public static RouteValueDictionary? ParsePathByEndpointName( this LinkParser parser, string endpointName, PathString path) diff --git a/src/Http/Routing/src/Logging/RouteConstraintMatcherExtensions.cs b/src/Http/Routing/src/Logging/RouteConstraintMatcherExtensions.cs index afa7337e75..9415831bdc 100644 --- a/src/Http/Routing/src/Logging/RouteConstraintMatcherExtensions.cs +++ b/src/Http/Routing/src/Logging/RouteConstraintMatcherExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Routing.Logging { internal static class RouteConstraintMatcherExtensions { - private static readonly Action _constraintNotMatched; + private static readonly Action _constraintNotMatched; static RouteConstraintMatcherExtensions() { diff --git a/src/Http/Routing/src/Logging/RouterMiddlewareLoggerExtensions.cs b/src/Http/Routing/src/Logging/RouterMiddlewareLoggerExtensions.cs index cdbd644775..76f569c150 100644 --- a/src/Http/Routing/src/Logging/RouterMiddlewareLoggerExtensions.cs +++ b/src/Http/Routing/src/Logging/RouterMiddlewareLoggerExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Routing.Logging { internal static class RouterMiddlewareLoggerExtensions { - private static readonly Action _requestNotMatched; + private static readonly Action _requestNotMatched; static RouterMiddlewareLoggerExtensions() { diff --git a/src/Http/Routing/src/Logging/TreeRouterLoggerExtensions.cs b/src/Http/Routing/src/Logging/TreeRouterLoggerExtensions.cs index e6733263f9..bcb0f343a7 100644 --- a/src/Http/Routing/src/Logging/TreeRouterLoggerExtensions.cs +++ b/src/Http/Routing/src/Logging/TreeRouterLoggerExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Routing.Logging { internal static class TreeRouterLoggerExtensions { - private static readonly Action _requestMatchedRoute; + private static readonly Action _requestMatchedRoute; static TreeRouterLoggerExtensions() { diff --git a/src/Http/Routing/src/MapRouteRouteBuilderExtensions.cs b/src/Http/Routing/src/MapRouteRouteBuilderExtensions.cs index 23f4536b9b..56f91c4050 100644 --- a/src/Http/Routing/src/MapRouteRouteBuilderExtensions.cs +++ b/src/Http/Routing/src/MapRouteRouteBuilderExtensions.cs @@ -154,7 +154,7 @@ namespace Microsoft.AspNetCore.Builder return routeConstraint; } - var parameterPolicy = _parameterPolicyFactory.Create(null, inlineConstraint); + var parameterPolicy = _parameterPolicyFactory.Create(null!, inlineConstraint); if (parameterPolicy != null) { // Logic inside Route will skip adding NullRouteConstraint diff --git a/src/Http/Routing/src/Matching/CandidateSet.cs b/src/Http/Routing/src/Matching/CandidateSet.cs index f90183897d..0d07dc5940 100644 --- a/src/Http/Routing/src/Matching/CandidateSet.cs +++ b/src/Http/Routing/src/Matching/CandidateSet.cs @@ -7,6 +7,7 @@ using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; using Microsoft.AspNetCore.Http; @@ -176,15 +177,17 @@ namespace Microsoft.AspNetCore.Routing.Matching /// The to replace the original at /// the . /// - public void ReplaceEndpoint(int index, Endpoint endpoint, RouteValueDictionary values) + public void ReplaceEndpoint(int index, Endpoint? endpoint, RouteValueDictionary? values) { // Friendliness for inlining if ((uint)index >= Count) { ThrowIndexArgumentOutOfRangeException(); } - - Candidates[index] = new CandidateState(endpoint, values, Candidates[index].Score); + + // CandidateState allows a null-valued endpoint. However a validate candidate should never have a null endpoint + // We'll make lives easier for matcher policies by declaring it as non-null. + Candidates[index] = new CandidateState(endpoint!, values, Candidates[index].Score); if (endpoint == null) { @@ -354,7 +357,7 @@ namespace Microsoft.AspNetCore.Routing.Matching { if (GetOriginalScore(i) == score) { - duplicates.Add(candidates[i].Endpoint); + duplicates.Add(candidates[i].Endpoint!); } } @@ -366,11 +369,13 @@ namespace Microsoft.AspNetCore.Routing.Matching } } + [DoesNotReturn] private static void ThrowIndexArgumentOutOfRangeException() { throw new ArgumentOutOfRangeException("index"); } + [DoesNotReturn] private static void ThrowArgumentNullException(string parameter) { throw new ArgumentNullException(parameter); diff --git a/src/Http/Routing/src/Matching/CandidateState.cs b/src/Http/Routing/src/Matching/CandidateState.cs index 5b198beb8e..14b8591c68 100644 --- a/src/Http/Routing/src/Matching/CandidateState.cs +++ b/src/Http/Routing/src/Matching/CandidateState.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Http; @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Routing.Matching Values = null; } - internal CandidateState(Endpoint endpoint, RouteValueDictionary values, int score) + internal CandidateState(Endpoint endpoint, RouteValueDictionary? values, int score) { Endpoint = endpoint; Values = values; @@ -50,6 +50,6 @@ namespace Microsoft.AspNetCore.Routing.Matching /// Gets associated with the /// and the current request. /// - public RouteValueDictionary Values { get; internal set; } + public RouteValueDictionary? Values { get; internal set; } } } diff --git a/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs b/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs index c757b1646e..bf6c02102e 100644 --- a/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs +++ b/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs @@ -57,10 +57,10 @@ namespace Microsoft.AspNetCore.Routing.Matching public sealed class Lifetime : IDisposable { private readonly object _lock = new object(); - private DataSourceDependentCache _cache; + private DataSourceDependentCache? _cache; private bool _disposed; - public DataSourceDependentCache Cache + public DataSourceDependentCache? Cache { get => _cache; set diff --git a/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs b/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs index cc455d4eb7..31c863a5a9 100644 --- a/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs +++ b/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs @@ -47,7 +47,7 @@ namespace Microsoft.AspNetCore.Routing.Matching if (CandidateSet.IsValidCandidate(ref state)) { httpContext.SetEndpoint(state.Endpoint); - httpContext.Request.RouteValues = state.Values; + httpContext.Request.RouteValues = state.Values!; } break; @@ -67,8 +67,8 @@ namespace Microsoft.AspNetCore.Routing.Matching HttpContext httpContext, CandidateState[] candidateState) { - Endpoint endpoint = null; - RouteValueDictionary values = null; + Endpoint? endpoint = null; + RouteValueDictionary? values = null; int? foundScore = null; for (var i = 0; i < candidateState.Length; i++) { @@ -110,7 +110,7 @@ namespace Microsoft.AspNetCore.Routing.Matching if (endpoint != null) { httpContext.SetEndpoint(endpoint); - httpContext.Request.RouteValues = values; + httpContext.Request.RouteValues = values!; } } diff --git a/src/Http/Routing/src/Matching/DfaMatcher.cs b/src/Http/Routing/src/Matching/DfaMatcher.cs index d79f13e2ab..e40e21e252 100644 --- a/src/Http/Routing/src/Matching/DfaMatcher.cs +++ b/src/Http/Routing/src/Matching/DfaMatcher.cs @@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Routing.Matching // The sequence of actions we take is optimized to avoid doing expensive work // like creating substrings, creating route value dictionaries, and calling // into policies like versioning. - var path = httpContext.Request.Path.Value; + var path = httpContext.Request.Path.Value!; // First tokenize the path into series of segments. Span buffer = stackalloc PathSegment[_maxSegmentCount]; @@ -119,7 +119,7 @@ namespace Microsoft.AspNetCore.Routing.Matching // We want to create a new array for the route values based on Slots // as a prototype. var prototype = candidate.Slots; - var slots = new KeyValuePair[prototype.Length]; + var slots = new KeyValuePair[prototype.Length]; if ((flags & Candidate.CandidateFlags.HasDefaults) != 0) { @@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Routing.Matching } private void ProcessCaptures( - KeyValuePair[] slots, + KeyValuePair[] slots, (string parameterName, int segmentIndex, int slotIndex)[] captures, string path, ReadOnlySpan segments) @@ -235,7 +235,7 @@ namespace Microsoft.AspNetCore.Routing.Matching var segment = segments[segmentIndex]; if (parameterName != null && segment.Length > 0) { - slots[slotIndex] = new KeyValuePair( + slots[slotIndex] = new KeyValuePair( parameterName, path.Substring(segment.Start, segment.Length)); } @@ -244,7 +244,7 @@ namespace Microsoft.AspNetCore.Routing.Matching } private void ProcessCatchAll( - KeyValuePair[] slots, + KeyValuePair[] slots, in (string parameterName, int segmentIndex, int slotIndex) catchAll, string path, ReadOnlySpan segments) @@ -255,7 +255,7 @@ namespace Microsoft.AspNetCore.Routing.Matching if ((uint)segmentIndex < (uint)segments.Length) { var segment = segments[segmentIndex]; - slots[catchAll.slotIndex] = new KeyValuePair( + slots[catchAll.slotIndex] = new KeyValuePair( catchAll.parameterName, path.Substring(segment.Start)); } @@ -333,6 +333,7 @@ namespace Microsoft.AspNetCore.Routing.Matching public static readonly EventId CandidateValid = new EventId(1005, "CandiateValid"); } +#nullable disable private static class Logger { private static readonly Action _candidatesNotFound = LoggerMessage.Define( diff --git a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs index 2782f8a3ae..c10c34d12b 100644 --- a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs +++ b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Http/Routing/src/Matching/DfaNode.cs b/src/Http/Routing/src/Matching/DfaNode.cs index 602a48a0e2..b0ba4b9887 100644 --- a/src/Http/Routing/src/Matching/DfaNode.cs +++ b/src/Http/Routing/src/Matching/DfaNode.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Matching/EndpointComparer.cs b/src/Http/Routing/src/Matching/EndpointComparer.cs index 7df5de8ea4..b76802f2e6 100644 --- a/src/Http/Routing/src/Matching/EndpointComparer.cs +++ b/src/Http/Routing/src/Matching/EndpointComparer.cs @@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Routing.Matching } } - public int Compare(Endpoint x, Endpoint y) + public int Compare(Endpoint? x, Endpoint? y) { // We don't expose this publicly, and we should never call it on // a null endpoint. @@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Routing.Matching return 0; } - public bool Equals(Endpoint x, Endpoint y) + public bool Equals(Endpoint? x, Endpoint? y) { // We don't expose this publicly, and we should never call it on // a null endpoint. @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Routing.Matching { public static readonly IComparer Instance = new OrderComparer(); - public int Compare(Endpoint x, Endpoint y) + public int Compare(Endpoint? x, Endpoint? y) { var routeEndpointX = x as RouteEndpoint; var routeEndpointY = y as RouteEndpoint; @@ -136,7 +136,7 @@ namespace Microsoft.AspNetCore.Routing.Matching { public static readonly IComparer Instance = new PrecedenceComparer(); - public int Compare(Endpoint x, Endpoint y) + public int Compare(Endpoint? x, Endpoint? y) { var routeEndpointX = x as RouteEndpoint; var routeEndpointY = y as RouteEndpoint; diff --git a/src/Http/Routing/src/Matching/HostMatcherPolicy.cs b/src/Http/Routing/src/Matching/HostMatcherPolicy.cs index be6f5bbf84..d0f29612e4 100644 --- a/src/Http/Routing/src/Matching/HostMatcherPolicy.cs +++ b/src/Http/Routing/src/Matching/HostMatcherPolicy.cs @@ -342,7 +342,7 @@ namespace Microsoft.AspNetCore.Routing.Matching private class HostMetadataEndpointComparer : EndpointMetadataComparer { - protected override int CompareMetadata(IHostMetadata x, IHostMetadata y) + protected override int CompareMetadata(IHostMetadata? x, IHostMetadata? y) { // Ignore the metadata if it has an empty list of hosts. return base.CompareMetadata( @@ -391,9 +391,9 @@ namespace Microsoft.AspNetCore.Routing.Matching public readonly int? Port; public readonly string Host; - private readonly string _wildcardEndsWith; + private readonly string? _wildcardEndsWith; - public EdgeKey(string host, int? port) + public EdgeKey(string? host, int? port) { Host = host ?? WildcardHost; Port = port; @@ -421,9 +421,9 @@ namespace Microsoft.AspNetCore.Routing.Matching return Comparer.Default.Compare(Port, other.Port); } - public int CompareTo(object obj) + public int CompareTo(object? obj) { - return CompareTo((EdgeKey)obj); + return CompareTo((EdgeKey)obj!); } public bool Equals(EdgeKey other) @@ -437,7 +437,7 @@ namespace Microsoft.AspNetCore.Routing.Matching { if (HasHostWildcard) { - return host.EndsWith(_wildcardEndsWith, StringComparison.OrdinalIgnoreCase); + return host.EndsWith(_wildcardEndsWith!, StringComparison.OrdinalIgnoreCase); } else { @@ -454,7 +454,7 @@ namespace Microsoft.AspNetCore.Routing.Matching return (Host?.GetHashCode() ?? 0) ^ (Port?.GetHashCode() ?? 0); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (obj is EdgeKey key) { diff --git a/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs b/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs index 2dfdefcf02..039d889fed 100644 --- a/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs +++ b/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Routing.Matching // We want to return a 405 iff we eliminated ALL of the currently valid endpoints due to HTTP method // mismatch. bool? needs405Endpoint = null; - HashSet methods = null; + HashSet? methods = null; for (var i = 0; i < candidates.Count; i++) { @@ -168,8 +168,8 @@ namespace Microsoft.AspNetCore.Routing.Matching if (needs405Endpoint == true) { // We saw some endpoints coming in, and we eliminated them all. - httpContext.SetEndpoint(CreateRejectionEndpoint(methods.OrderBy(m => m, StringComparer.OrdinalIgnoreCase))); - httpContext.Request.RouteValues = null; + httpContext.SetEndpoint(CreateRejectionEndpoint(methods!.OrderBy(m => m, StringComparer.OrdinalIgnoreCase))); + httpContext.Request.RouteValues = null!; } return Task.CompletedTask; @@ -329,8 +329,8 @@ namespace Microsoft.AspNetCore.Routing.Matching /// public PolicyJumpTable BuildJumpTable(int exitDestination, IReadOnlyList edges) { - Dictionary destinations = null; - Dictionary corsPreflightDestinations = null; + Dictionary? destinations = null; + Dictionary? corsPreflightDestinations = null; for (var i = 0; i < edges.Count; i++) { // We create this data, so it's safe to cast it. @@ -421,17 +421,17 @@ namespace Microsoft.AspNetCore.Routing.Matching private class HttpMethodPolicyJumpTable : PolicyJumpTable { private readonly int _exitDestination; - private readonly Dictionary _destinations; + private readonly Dictionary? _destinations; private readonly int _corsPreflightExitDestination; - private readonly Dictionary _corsPreflightDestinations; + private readonly Dictionary? _corsPreflightDestinations; private readonly bool _supportsCorsPreflight; public HttpMethodPolicyJumpTable( int exitDestination, - Dictionary destinations, + Dictionary? destinations, int corsPreflightExitDestination, - Dictionary corsPreflightDestinations) + Dictionary? corsPreflightDestinations) { _exitDestination = exitDestination; _destinations = destinations; @@ -466,7 +466,7 @@ namespace Microsoft.AspNetCore.Routing.Matching private class HttpMethodMetadataEndpointComparer : EndpointMetadataComparer { - protected override int CompareMetadata(IHttpMethodMetadata x, IHttpMethodMetadata y) + protected override int CompareMetadata(IHttpMethodMetadata? x, IHttpMethodMetadata? y) { // Ignore the metadata if it has an empty list of HTTP methods. return base.CompareMetadata( @@ -501,9 +501,9 @@ namespace Microsoft.AspNetCore.Routing.Matching return IsCorsPreflightRequest.CompareTo(other.IsCorsPreflightRequest); } - public int CompareTo(object obj) + public int CompareTo(object? obj) { - return CompareTo((EdgeKey)obj); + return CompareTo((EdgeKey)obj!); } public bool Equals(EdgeKey other) @@ -513,7 +513,7 @@ namespace Microsoft.AspNetCore.Routing.Matching HttpMethods.Equals(HttpMethod, other.HttpMethod); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { var other = obj as EdgeKey?; return other == null ? false : Equals(other.Value); diff --git a/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs b/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs index 3cb240c2fa..18a60c4e0d 100644 --- a/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs +++ b/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using System; using System.Diagnostics; using System.Linq; diff --git a/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs b/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs index e59f283435..18bdd2bc35 100644 --- a/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs +++ b/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/src/Http/Routing/src/Matching/PathSegment.cs b/src/Http/Routing/src/Matching/PathSegment.cs index a5f570f8b5..fd8d8a9223 100644 --- a/src/Http/Routing/src/Matching/PathSegment.cs +++ b/src/Http/Routing/src/Matching/PathSegment.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Routing.Matching Length = length; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { return obj is PathSegment segment ? Equals(segment) : false; } diff --git a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj index 1937aae7f6..9ff3925225 100644 --- a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj +++ b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj @@ -12,7 +12,7 @@ Microsoft.AspNetCore.Routing.RouteCollection aspnetcore;routing true false - annotations + enable diff --git a/src/Http/Routing/src/NullRouter.cs b/src/Http/Routing/src/NullRouter.cs index 9fd1908942..2823067b5e 100644 --- a/src/Http/Routing/src/NullRouter.cs +++ b/src/Http/Routing/src/NullRouter.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System.Threading.Tasks; @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Routing { } - public VirtualPathData GetVirtualPath(VirtualPathContext context) + public VirtualPathData? GetVirtualPath(VirtualPathContext context) { return null; } diff --git a/src/Http/Routing/src/ParameterPolicyActivator.cs b/src/Http/Routing/src/ParameterPolicyActivator.cs index b83c5c186b..81da4d49e9 100644 --- a/src/Http/Routing/src/ParameterPolicyActivator.cs +++ b/src/Http/Routing/src/ParameterPolicyActivator.cs @@ -1,12 +1,13 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Reflection; -using System.Text; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.Routing diff --git a/src/Http/Routing/src/ParameterPolicyFactory.cs b/src/Http/Routing/src/ParameterPolicyFactory.cs index 2d8e665b47..95212e1263 100644 --- a/src/Http/Routing/src/ParameterPolicyFactory.cs +++ b/src/Http/Routing/src/ParameterPolicyFactory.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Routing /// The parameter the parameter policy is being created for. /// An existing parameter policy. /// The for the parameter. - public abstract IParameterPolicy Create(RoutePatternParameterPart parameter, IParameterPolicy parameterPolicy); + public abstract IParameterPolicy Create(RoutePatternParameterPart? parameter, IParameterPolicy parameterPolicy); /// /// Creates a parameter policy. @@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Routing /// The parameter the parameter policy is being created for. /// The reference to resolve. /// The for the parameter. - public IParameterPolicy Create(RoutePatternParameterPart parameter, RoutePatternParameterPolicyReference reference) + public IParameterPolicy Create(RoutePatternParameterPart? parameter, RoutePatternParameterPolicyReference reference) { if (reference == null) { diff --git a/src/Http/Routing/src/PathTokenizer.cs b/src/Http/Routing/src/PathTokenizer.cs index 307dfb1159..79f971e497 100644 --- a/src/Http/Routing/src/PathTokenizer.cs +++ b/src/Http/Routing/src/PathTokenizer.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections; using System.Collections.Generic; diff --git a/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs b/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs index 39adf3a4d0..c79946c728 100644 --- a/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs +++ b/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; diff --git a/src/Http/Routing/src/Patterns/RouteParameterParser.cs b/src/Http/Routing/src/Patterns/RouteParameterParser.cs index 07c8d91bb9..072ab0d8fc 100644 --- a/src/Http/Routing/src/Patterns/RouteParameterParser.cs +++ b/src/Http/Routing/src/Patterns/RouteParameterParser.cs @@ -78,7 +78,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns var parseResults = ParseConstraints(parameter, currentIndex, endIndex); currentIndex = parseResults.CurrentIndex; - string defaultValue = null; + string? defaultValue = null; if (currentIndex <= endIndex && parameter[currentIndex] == '=') { diff --git a/src/Http/Routing/src/Patterns/RoutePattern.cs b/src/Http/Routing/src/Patterns/RoutePattern.cs index 4cd881c8e2..055a062669 100644 --- a/src/Http/Routing/src/Patterns/RoutePattern.cs +++ b/src/Http/Routing/src/Patterns/RoutePattern.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// public static readonly object RequiredValueAny = new RequiredValueAnySentinal(); - internal static bool IsRequiredValueAny(object value) + internal static bool IsRequiredValueAny(object? value) { return object.ReferenceEquals(RequiredValueAny, value); } @@ -35,10 +35,10 @@ namespace Microsoft.AspNetCore.Routing.Patterns private const string SeparatorString = "/"; internal RoutePattern( - string rawText, - IReadOnlyDictionary defaults, + string? rawText, + IReadOnlyDictionary defaults, IReadOnlyDictionary> parameterPolicies, - IReadOnlyDictionary requiredValues, + IReadOnlyDictionary requiredValues, IReadOnlyList parameters, IReadOnlyList pathSegments) { @@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// Gets the set of default values for the route pattern. /// The keys of are the route parameter names. /// - public IReadOnlyDictionary Defaults { get; } + public IReadOnlyDictionary Defaults { get; } /// /// Gets the set of parameter policy references for the route pattern. @@ -92,7 +92,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// /// - public IReadOnlyDictionary RequiredValues { get; } + public IReadOnlyDictionary RequiredValues { get; } /// /// Gets the precedence value of the route pattern for URL matching. @@ -115,7 +115,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// Gets the raw text supplied when parsing the route pattern. May be null. /// - public string RawText { get; } + public string? RawText { get; } /// /// Gets the list of route parameters. @@ -132,7 +132,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// The name of the parameter to match. /// The matching parameter or null if no parameter matches the given name. - public RoutePatternParameterPart GetParameter(string name) + public RoutePatternParameterPart? GetParameter(string name) { if (name == null) { diff --git a/src/Http/Routing/src/Patterns/RoutePatternException.cs b/src/Http/Routing/src/Patterns/RoutePatternException.cs index 7b21ac0ac5..c7c95f068c 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternException.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternException.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns private RoutePatternException(SerializationInfo info, StreamingContext context) : base(info, context) { - Pattern = (string)info.GetValue(nameof(Pattern), typeof(string)); + Pattern = (string)info.GetValue(nameof(Pattern), typeof(string))!; } /// diff --git a/src/Http/Routing/src/Patterns/RoutePatternFactory.cs b/src/Http/Routing/src/Patterns/RoutePatternFactory.cs index 91c8ae8b38..8832e94e59 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternFactory.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternFactory.cs @@ -17,8 +17,8 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// public static class RoutePatternFactory { - private static readonly IReadOnlyDictionary EmptyDictionary = - new ReadOnlyDictionary(new Dictionary()); + private static readonly IReadOnlyDictionary EmptyDictionary = + new ReadOnlyDictionary(new Dictionary()); private static readonly IReadOnlyDictionary> EmptyPoliciesDictionary = new ReadOnlyDictionary>(new Dictionary>()); @@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// Multiple policies can be specified for a key by providing a collection as the value. /// /// The . - public static RoutePattern Parse(string pattern, object defaults, object parameterPolicies) + public static RoutePattern Parse(string pattern, object? defaults, object? parameterPolicies) { if (pattern == null) { @@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// Route values that can be substituted for parameters in the route pattern. See remarks on . /// /// The . - public static RoutePattern Parse(string pattern, object defaults, object parameterPolicies, object requiredValues) + public static RoutePattern Parse(string pattern, object? defaults, object? parameterPolicies, object? requiredValues) { if (pattern == null) { @@ -118,7 +118,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The raw text to associate with the route pattern. May be null. /// The collection of segments. /// The . - public static RoutePattern Pattern(string rawText, IEnumerable segments) + public static RoutePattern Pattern(string? rawText, IEnumerable segments) { if (segments == null) { @@ -146,8 +146,8 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The collection of segments. /// The . public static RoutePattern Pattern( - object defaults, - object parameterPolicies, + object? defaults, + object? parameterPolicies, IEnumerable segments) { if (segments == null) @@ -177,9 +177,9 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The collection of segments. /// The . public static RoutePattern Pattern( - string rawText, - object defaults, - object parameterPolicies, + string? rawText, + object? defaults, + object? parameterPolicies, IEnumerable segments) { if (segments == null) @@ -239,8 +239,8 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The collection of segments. /// The . public static RoutePattern Pattern( - object defaults, - object parameterPolicies, + object? defaults, + object? parameterPolicies, params RoutePatternPathSegment[] segments) { if (segments == null) @@ -270,9 +270,9 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The collection of segments. /// The . public static RoutePattern Pattern( - string rawText, - object defaults, - object parameterPolicies, + string? rawText, + object? defaults, + object? parameterPolicies, params RoutePatternPathSegment[] segments) { if (segments == null) @@ -284,10 +284,10 @@ namespace Microsoft.AspNetCore.Routing.Patterns } private static RoutePattern PatternCore( - string rawText, - RouteValueDictionary defaults, - RouteValueDictionary parameterPolicies, - RouteValueDictionary requiredValues, + string? rawText, + RouteValueDictionary? defaults, + RouteValueDictionary? parameterPolicies, + RouteValueDictionary? requiredValues, IEnumerable segments) { // We want to merge the segment data with the 'out of line' defaults and parameter policies. @@ -301,10 +301,10 @@ namespace Microsoft.AspNetCore.Routing.Patterns // It's important that these two views of the data are consistent. We don't want // values specified out of line to have a different behavior. - Dictionary updatedDefaults = null; + Dictionary? updatedDefaults = null; if (defaults != null && defaults.Count > 0) { - updatedDefaults = new Dictionary(defaults.Count, StringComparer.OrdinalIgnoreCase); + updatedDefaults = new Dictionary(defaults.Count, StringComparer.OrdinalIgnoreCase); foreach (var kvp in defaults) { @@ -312,7 +312,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns } } - Dictionary> updatedParameterPolicies = null; + Dictionary>? updatedParameterPolicies = null; if (parameterPolicies != null && parameterPolicies.Count > 0) { updatedParameterPolicies = new Dictionary>(parameterPolicies.Count, StringComparer.OrdinalIgnoreCase); @@ -349,7 +349,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns } } - List parameters = null; + List? parameters = null; var updatedSegments = segments.ToArray(); for (var i = 0; i < updatedSegments.Length; i++) { @@ -420,12 +420,12 @@ namespace Microsoft.AspNetCore.Routing.Patterns ? updatedParameterPolicies.ToDictionary(kvp => kvp.Key, kvp => (IReadOnlyList)kvp.Value.ToArray()) : EmptyPoliciesDictionary, requiredValues ?? EmptyDictionary, - (IReadOnlyList)parameters ?? Array.Empty(), + (IReadOnlyList?)parameters ?? Array.Empty(), updatedSegments); RoutePatternPathSegment VisitSegment(RoutePatternPathSegment segment) { - RoutePatternPart[] updatedParts = null; + RoutePatternPart[]? updatedParts = null; for (var i = 0; i < segment.Parts.Count; i++) { var part = segment.Parts[i]; @@ -482,13 +482,13 @@ namespace Microsoft.AspNetCore.Routing.Patterns { if (updatedDefaults == null) { - updatedDefaults = new Dictionary(StringComparer.OrdinalIgnoreCase); + updatedDefaults = new Dictionary(StringComparer.OrdinalIgnoreCase); } updatedDefaults[parameter.Name] = parameter.Default; } - List parameterConstraints = null; + List? parameterConstraints = null; if ((updatedParameterPolicies == null || !updatedParameterPolicies.TryGetValue(parameter.Name, out parameterConstraints)) && parameter.ParameterPolicies.Count > 0) { @@ -503,7 +503,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns if (parameter.ParameterPolicies.Count > 0) { - parameterConstraints.AddRange(parameter.ParameterPolicies); + parameterConstraints!.AddRange(parameter.ParameterPolicies); } if (Equals(parameter.Default, @default) @@ -667,7 +667,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The . public static RoutePatternParameterPart ParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind) { if (string.IsNullOrEmpty(parameterName)) @@ -703,7 +703,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The . public static RoutePatternParameterPart ParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, IEnumerable parameterPolicies) { @@ -745,7 +745,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The . public static RoutePatternParameterPart ParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, params RoutePatternParameterPolicyReference[] parameterPolicies) { @@ -778,7 +778,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns private static RoutePatternParameterPart ParameterPartCore( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies) { @@ -787,7 +787,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns private static RoutePatternParameterPart ParameterPartCore( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies, bool encodeSlashes) @@ -906,7 +906,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns return new RoutePatternParameterPolicyReference(parameterPolicy); } - private static RouteValueDictionary Wrap(object values) + private static RouteValueDictionary? Wrap(object? values) { return values == null ? null : new RouteValueDictionary(values); } diff --git a/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs b/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs index 15bc489a64..f82d860e83 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Diagnostics; using Microsoft.AspNetCore.Http; diff --git a/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs b/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs index 2b5f408268..30cb7db2da 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System.Collections.Generic; @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns { internal RoutePatternParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies) : this(parameterName, @default, parameterKind, parameterPolicies, encodeSlashes: true) @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns internal RoutePatternParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies, bool encodeSlashes) @@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// Gets the default value of this route parameter. May be null. /// - public object Default { get; } + public object? Default { get; } /// /// Returns true if this part is a catch-all parameter. diff --git a/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs b/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs index 65f58087c1..3fb95983f4 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System.Diagnostics; @@ -26,16 +26,16 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// Gets the constraint text. /// - public string Content { get; } + public string? Content { get; } /// /// Gets a pre-existing that was used to construct this reference. /// - public IParameterPolicy ParameterPolicy { get; } + public IParameterPolicy? ParameterPolicy { get; } - private string DebuggerToString() + private string? DebuggerToString() { return Content; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Patterns/RoutePatternParser.cs b/src/Http/Routing/src/Patterns/RoutePatternParser.cs index 990d1854fc..8b8f181f52 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternParser.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternParser.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs b/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs index bea4c610fc..b16ab4cb0e 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. namespace Microsoft.AspNetCore.Routing.Patterns @@ -30,6 +30,6 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// return null if any required value cannot be substituted. /// /// - public abstract RoutePattern SubstituteRequiredValues(RoutePattern original, object requiredValues); + public abstract RoutePattern? SubstituteRequiredValues(RoutePattern original, object requiredValues); } } diff --git a/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs b/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs index f376683c4d..8a9e228e46 100644 --- a/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs +++ b/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs @@ -259,7 +259,7 @@ namespace Microsoft.AspNetCore.Routing new RouteHandler(handler), template, defaults: null, - constraints: new RouteValueDictionary(new { httpMethod = new HttpMethodRouteConstraint(verb) }), + constraints: new RouteValueDictionary(new { httpMethod = new HttpMethodRouteConstraint(verb) })!, dataTokens: null, inlineConstraintResolver: GetConstraintResolver(builder)); diff --git a/src/Http/Routing/src/Route.cs b/src/Http/Routing/src/Route.cs index 0a6afd3b26..555c328127 100644 --- a/src/Http/Routing/src/Route.cs +++ b/src/Http/Routing/src/Route.cs @@ -1,8 +1,6 @@ // 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. -#nullable enable - using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -62,7 +60,7 @@ namespace Microsoft.AspNetCore.Routing _target = target; } - public string RouteTemplate => ParsedTemplate.TemplateText; + public string? RouteTemplate => ParsedTemplate.TemplateText; protected override Task OnRouteMatched(RouteContext context) { diff --git a/src/Http/Routing/src/RouteBase.cs b/src/Http/Routing/src/RouteBase.cs index 2ba62fbcab..5c9db8f026 100644 --- a/src/Http/Routing/src/RouteBase.cs +++ b/src/Http/Routing/src/RouteBase.cs @@ -1,8 +1,6 @@ // 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. -#nullable enable - using System; using System.Collections.Generic; using System.Diagnostics; @@ -110,7 +108,7 @@ namespace Microsoft.AspNetCore.Routing { return Task.CompletedTask; } - _logger.RequestMatchedRoute(Name!, ParsedTemplate.TemplateText); + _logger.RequestMatchedRoute(Name!, ParsedTemplate.TemplateText!); return OnRouteMatched(context); } @@ -175,7 +173,7 @@ namespace Microsoft.AspNetCore.Routing RouteTemplate parsedTemplate, IDictionary? constraints) { - var constraintBuilder = new RouteConstraintBuilder(inlineConstraintResolver, parsedTemplate.TemplateText); + var constraintBuilder = new RouteConstraintBuilder(inlineConstraintResolver, parsedTemplate.TemplateText!); if (constraints != null) { @@ -189,12 +187,12 @@ namespace Microsoft.AspNetCore.Routing { if (parameter.IsOptional) { - constraintBuilder.SetOptional(parameter.Name); + constraintBuilder.SetOptional(parameter.Name!); } foreach (var inlineConstraint in parameter.InlineConstraints) { - constraintBuilder.AddResolvedConstraint(parameter.Name, inlineConstraint.Constraint); + constraintBuilder.AddResolvedConstraint(parameter.Name!, inlineConstraint.Constraint); } } @@ -219,7 +217,7 @@ namespace Microsoft.AspNetCore.Routing parameter.Name)); } #else - if (result.ContainsKey(parameter.Name)) + if (result.ContainsKey(parameter.Name!)) { throw new InvalidOperationException( Resources.FormatTemplateRoute_CannotHaveDefaultValueSpecifiedInlineAndExplicitly( @@ -227,7 +225,7 @@ namespace Microsoft.AspNetCore.Routing } else { - result.Add(parameter.Name, parameter.DefaultValue); + result.Add(parameter.Name!, parameter.DefaultValue); } #endif } @@ -300,7 +298,7 @@ namespace Microsoft.AspNetCore.Routing public override string ToString() { - return ParsedTemplate.TemplateText; + return ParsedTemplate.TemplateText!; } } } diff --git a/src/Http/Routing/src/RouteConstraintMatcher.cs b/src/Http/Routing/src/RouteConstraintMatcher.cs index 26728e817a..268e4110cc 100644 --- a/src/Http/Routing/src/RouteConstraintMatcher.cs +++ b/src/Http/Routing/src/RouteConstraintMatcher.cs @@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Routing { routeValues.TryGetValue(kvp.Key, out var routeValue); - logger.ConstraintNotMatched(routeValue, kvp.Key, kvp.Value); + logger.ConstraintNotMatched(routeValue!, kvp.Key, kvp.Value); } return false; diff --git a/src/Http/Routing/src/RouteEndpoint.cs b/src/Http/Routing/src/RouteEndpoint.cs index a6750a2ef6..db4f9d4d2b 100644 --- a/src/Http/Routing/src/RouteEndpoint.cs +++ b/src/Http/Routing/src/RouteEndpoint.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.Routing RequestDelegate requestDelegate, RoutePattern routePattern, int order, - EndpointMetadataCollection metadata, - string displayName) + EndpointMetadataCollection? metadata, + string? displayName) : base(requestDelegate, metadata, displayName) { if (requestDelegate == null) diff --git a/src/Http/Routing/src/RouteEndpointModel.cs b/src/Http/Routing/src/RouteEndpointBuilder.cs similarity index 82% rename from src/Http/Routing/src/RouteEndpointModel.cs rename to src/Http/Routing/src/RouteEndpointBuilder.cs index f06ccba0bf..4397c51cfc 100644 --- a/src/Http/Routing/src/RouteEndpointModel.cs +++ b/src/Http/Routing/src/RouteEndpointBuilder.cs @@ -1,6 +1,7 @@ // 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 System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing.Patterns; @@ -25,6 +26,11 @@ namespace Microsoft.AspNetCore.Routing public override Endpoint Build() { + if (RequestDelegate is null) + { + throw new InvalidOperationException($"{nameof(RequestDelegate)} must be specified to construct a {nameof(RouteEndpoint)}."); + } + var routeEndpoint = new RouteEndpoint( RequestDelegate, RoutePattern, diff --git a/src/Http/Routing/src/RouteOptions.cs b/src/Http/Routing/src/RouteOptions.cs index dcff5482e7..796554dd58 100644 --- a/src/Http/Routing/src/RouteOptions.cs +++ b/src/Http/Routing/src/RouteOptions.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Routing public class RouteOptions { private IDictionary _constraintTypeMap = GetDefaultConstraintMap(); - private ICollection _endpointDataSources; + private ICollection _endpointDataSources = default!; /// /// Gets a collection of instances configured with routing. diff --git a/src/Http/Routing/src/RouteValueEqualityComparer.cs b/src/Http/Routing/src/RouteValueEqualityComparer.cs index f7cf0570c9..18ffc3070b 100644 --- a/src/Http/Routing/src/RouteValueEqualityComparer.cs +++ b/src/Http/Routing/src/RouteValueEqualityComparer.cs @@ -18,12 +18,12 @@ namespace Microsoft.AspNetCore.Routing /// /// strings are compared using . /// - public class RouteValueEqualityComparer : IEqualityComparer + public class RouteValueEqualityComparer : IEqualityComparer { public static readonly RouteValueEqualityComparer Default = new RouteValueEqualityComparer(); /// - public new bool Equals(object x, object y) + public new bool Equals(object? x, object? y) { var stringX = x as string ?? Convert.ToString(x, CultureInfo.InvariantCulture); var stringY = y as string ?? Convert.ToString(y, CultureInfo.InvariantCulture); @@ -52,4 +52,4 @@ namespace Microsoft.AspNetCore.Routing } } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/RouteValuesAddressScheme.cs b/src/Http/Routing/src/RouteValuesAddressScheme.cs index 3d0db2b0f9..80a74c19a4 100644 --- a/src/Http/Routing/src/RouteValuesAddressScheme.cs +++ b/src/Http/Routing/src/RouteValuesAddressScheme.cs @@ -30,7 +30,7 @@ namespace Microsoft.AspNetCore.Routing var state = State; - IList matchResults = null; + IList? matchResults = null; if (string.IsNullOrEmpty(address.RouteName)) { matchResults = state.AllMatchesLinkGenerationTree.GetMatches( @@ -141,8 +141,8 @@ namespace Microsoft.AspNetCore.Routing private OutboundRouteEntry CreateOutboundRouteEntry( RouteEndpoint endpoint, - IReadOnlyDictionary requiredValues, - string routeName) + IReadOnlyDictionary requiredValues, + string? routeName) { var entry = new OutboundRouteEntry() { diff --git a/src/Http/Routing/src/Template/InlineConstraint.cs b/src/Http/Routing/src/Template/InlineConstraint.cs index a711ecb136..71be48e247 100644 --- a/src/Http/Routing/src/Template/InlineConstraint.cs +++ b/src/Http/Routing/src/Template/InlineConstraint.cs @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Routing.Template throw new ArgumentNullException(nameof(other)); } - Constraint = other.Content; + Constraint = other.Content!; } /// @@ -40,4 +40,4 @@ namespace Microsoft.AspNetCore.Routing.Template /// public string Constraint { get; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Template/RouteTemplate.cs b/src/Http/Routing/src/Template/RouteTemplate.cs index ec5d5631f6..2b699e85cc 100644 --- a/src/Http/Routing/src/Template/RouteTemplate.cs +++ b/src/Http/Routing/src/Template/RouteTemplate.cs @@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.Routing.Template } } - public string TemplateText { get; } + public string? TemplateText { get; } public IList Parameters { get; } diff --git a/src/Http/Routing/src/Template/TemplateBinder.cs b/src/Http/Routing/src/Template/TemplateBinder.cs index 10af79ec2c..366a012b58 100644 --- a/src/Http/Routing/src/Template/TemplateBinder.cs +++ b/src/Http/Routing/src/Template/TemplateBinder.cs @@ -1,8 +1,6 @@ // 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. -#nullable enable - using System; using System.Collections; using System.Collections.Generic; diff --git a/src/Http/Routing/src/Template/TemplateMatcher.cs b/src/Http/Routing/src/Template/TemplateMatcher.cs index 97dc3565dd..9587525859 100644 --- a/src/Http/Routing/src/Template/TemplateMatcher.cs +++ b/src/Http/Routing/src/Template/TemplateMatcher.cs @@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Routing.Template continue; } - if (Defaults.TryGetValue(part.Name, out var value)) + if (Defaults.TryGetValue(part.Name!, out var value)) { _hasDefaultValue[i] = true; _defaultValues[i] = value; diff --git a/src/Http/Routing/src/Template/TemplatePart.cs b/src/Http/Routing/src/Template/TemplatePart.cs index 5d84969a9c..c7acbd1b57 100644 --- a/src/Http/Routing/src/Template/TemplatePart.cs +++ b/src/Http/Routing/src/Template/TemplatePart.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Microsoft.AspNetCore.Routing.Patterns; @@ -32,7 +33,7 @@ namespace Microsoft.AspNetCore.Routing.Template IsCatchAll = parameter.IsCatchAll; IsOptional = parameter.IsOptional; DefaultValue = parameter.Default; - InlineConstraints = parameter.ParameterPolicies?.Select(p => new InlineConstraint(p)); + InlineConstraints = parameter.ParameterPolicies?.Select(p => new InlineConstraint(p)) ?? Enumerable.Empty(); } else if (other.IsSeparator && other is RoutePatternSeparatorPart separator) { @@ -59,8 +60,8 @@ namespace Microsoft.AspNetCore.Routing.Template string name, bool isCatchAll, bool isOptional, - object defaultValue, - IEnumerable inlineConstraints) + object? defaultValue, + IEnumerable? inlineConstraints) { if (name == null) { @@ -83,12 +84,12 @@ namespace Microsoft.AspNetCore.Routing.Template public bool IsParameter { get; private set; } public bool IsOptional { get; private set; } public bool IsOptionalSeperator { get; set; } - public string Name { get; private set; } - public string Text { get; private set; } - public object DefaultValue { get; private set; } - public IEnumerable InlineConstraints { get; private set; } + public string? Name { get; private set; } + public string? Text { get; private set; } + public object? DefaultValue { get; private set; } + public IEnumerable InlineConstraints { get; private set; } = Enumerable.Empty(); - internal string DebuggerToString() + internal string? DebuggerToString() { if (IsParameter) { @@ -104,11 +105,11 @@ namespace Microsoft.AspNetCore.Routing.Template { if (IsLiteral && IsOptionalSeperator) { - return RoutePatternFactory.SeparatorPart(Text); + return RoutePatternFactory.SeparatorPart(Text!); } else if (IsLiteral) { - return RoutePatternFactory.LiteralPart(Text); + return RoutePatternFactory.LiteralPart(Text!); } else { @@ -119,7 +120,7 @@ namespace Microsoft.AspNetCore.Routing.Template RoutePatternParameterKind.Standard; var constraints = InlineConstraints.Select(c => new RoutePatternParameterPolicyReference(c.Constraint)); - return RoutePatternFactory.ParameterPart(Name, DefaultValue, kind, constraints); + return RoutePatternFactory.ParameterPart(Name!, DefaultValue, kind, constraints); } } } diff --git a/src/Http/Routing/src/Template/TemplateValuesResult.cs b/src/Http/Routing/src/Template/TemplateValuesResult.cs index 2a7c46398f..98489a93a8 100644 --- a/src/Http/Routing/src/Template/TemplateValuesResult.cs +++ b/src/Http/Routing/src/Template/TemplateValuesResult.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Routing.Template /// /// The set of values that will appear in the URL. /// - public RouteValueDictionary AcceptedValues { get; set; } + public RouteValueDictionary AcceptedValues { get; set; } = default!; /// /// The set of values that that were supplied for URL generation. @@ -24,6 +24,6 @@ namespace Microsoft.AspNetCore.Routing.Template /// Implicit (ambient) values which are invalidated due to changes in values lexically earlier in the /// route template are excluded from this set. /// - public RouteValueDictionary CombinedValues { get; set; } + public RouteValueDictionary CombinedValues { get; set; } = default!; } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Tree/InboundMatch.cs b/src/Http/Routing/src/Tree/InboundMatch.cs index 57f1b6db7b..9ddb321de0 100644 --- a/src/Http/Routing/src/Tree/InboundMatch.cs +++ b/src/Http/Routing/src/Tree/InboundMatch.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using System.Diagnostics; using Microsoft.AspNetCore.Routing.Template; diff --git a/src/Http/Routing/src/Tree/InboundRouteEntry.cs b/src/Http/Routing/src/Tree/InboundRouteEntry.cs index 7c4a5f0abc..893a461d1c 100644 --- a/src/Http/Routing/src/Tree/InboundRouteEntry.cs +++ b/src/Http/Routing/src/Tree/InboundRouteEntry.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; using Microsoft.AspNetCore.Routing.Template; diff --git a/src/Http/Routing/src/Tree/LinkGenerationDecisionTree.cs b/src/Http/Routing/src/Tree/LinkGenerationDecisionTree.cs index 6aa8b84867..47db9e345b 100644 --- a/src/Http/Routing/src/Tree/LinkGenerationDecisionTree.cs +++ b/src/Http/Routing/src/Tree/LinkGenerationDecisionTree.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Tree/OutboundMatch.cs b/src/Http/Routing/src/Tree/OutboundMatch.cs index 49980b9912..95653e3bb5 100644 --- a/src/Http/Routing/src/Tree/OutboundMatch.cs +++ b/src/Http/Routing/src/Tree/OutboundMatch.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using Microsoft.AspNetCore.Routing.Template; namespace Microsoft.AspNetCore.Routing.Tree diff --git a/src/Http/Routing/src/Tree/OutboundRouteEntry.cs b/src/Http/Routing/src/Tree/OutboundRouteEntry.cs index 9c5258df1a..4df5ae351a 100644 --- a/src/Http/Routing/src/Tree/OutboundRouteEntry.cs +++ b/src/Http/Routing/src/Tree/OutboundRouteEntry.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; using Microsoft.AspNetCore.Routing.Template; @@ -64,4 +66,4 @@ namespace Microsoft.AspNetCore.Routing.Tree /// public object Data { get; set; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Tree/TreeEnumerator.cs b/src/Http/Routing/src/Tree/TreeEnumerator.cs index 5a88f5bc35..2f7d3dc94a 100644 --- a/src/Http/Routing/src/Tree/TreeEnumerator.cs +++ b/src/Http/Routing/src/Tree/TreeEnumerator.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Tree/TreeRouteBuilder.cs b/src/Http/Routing/src/Tree/TreeRouteBuilder.cs index 59e06d83c0..1f9e9d0313 100644 --- a/src/Http/Routing/src/Tree/TreeRouteBuilder.cs +++ b/src/Http/Routing/src/Tree/TreeRouteBuilder.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Http/Routing/src/Tree/TreeRouter.cs b/src/Http/Routing/src/Tree/TreeRouter.cs index 9dd6eb290b..5a27d237f3 100644 --- a/src/Http/Routing/src/Tree/TreeRouter.cs +++ b/src/Http/Routing/src/Tree/TreeRouter.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Text.Encodings.Web; diff --git a/src/Http/Routing/src/Tree/UrlMatchingNode.cs b/src/Http/Routing/src/Tree/UrlMatchingNode.cs index ffc387efe9..b829bc7036 100644 --- a/src/Http/Routing/src/Tree/UrlMatchingNode.cs +++ b/src/Http/Routing/src/Tree/UrlMatchingNode.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Tree/UrlMatchingTree.cs b/src/Http/Routing/src/Tree/UrlMatchingTree.cs index 570dce1b3a..3dec2b54bd 100644 --- a/src/Http/Routing/src/Tree/UrlMatchingTree.cs +++ b/src/Http/Routing/src/Tree/UrlMatchingTree.cs @@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Routing.Tree current.Matches.Sort((x, y) => { var result = x.Entry.Precedence.CompareTo(y.Entry.Precedence); - return result == 0 ? x.Entry.RouteTemplate.TemplateText.CompareTo(y.Entry.RouteTemplate.TemplateText) : result; + return result == 0 ? x.Entry.RouteTemplate.TemplateText!.CompareTo(y.Entry.RouteTemplate.TemplateText) : result; }); } From e893ef59e8e54cf990afcfd6400cffc1b4a618b0 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Mon, 27 Jul 2020 21:33:58 +0430 Subject: [PATCH 062/106] [Routing] Move to GenericHost (#24281) --- .../EndpointRoutingBenchmarkTest.cs | 19 +- .../Benchmarks/RouterBenchmarkTest.cs | 20 +- .../EndpointRoutingIntegrationTest.cs | 301 +++++++++++------- .../EndpointRoutingSampleTest.cs | 11 +- .../test/FunctionalTests/RouterSampleTest.cs | 9 +- .../FunctionalTests/RoutingTestFixture.cs | 15 +- .../WebHostBuilderExtensionsTest.cs | 24 +- .../testassets/Benchmarks/Benchmarks.csproj | 1 + .../test/testassets/Benchmarks/Program.cs | 44 ++- .../test/testassets/RoutingSandbox/Program.cs | 27 +- .../RoutingSandbox/RoutingSandbox.csproj | 1 + .../test/testassets/RoutingWebSite/Program.cs | 30 +- .../RoutingWebSite/RoutingWebSite.csproj | 1 + 13 files changed, 329 insertions(+), 174 deletions(-) diff --git a/src/Http/Routing/test/FunctionalTests/Benchmarks/EndpointRoutingBenchmarkTest.cs b/src/Http/Routing/test/FunctionalTests/Benchmarks/EndpointRoutingBenchmarkTest.cs index b40da83fc9..003db4f95f 100644 --- a/src/Http/Routing/test/FunctionalTests/Benchmarks/EndpointRoutingBenchmarkTest.cs +++ b/src/Http/Routing/test/FunctionalTests/Benchmarks/EndpointRoutingBenchmarkTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -6,6 +6,9 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Routing.FunctionalTests @@ -13,19 +16,24 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public class EndpointRoutingBenchmarkTest : IDisposable { private readonly HttpClient _client; + private readonly IHost _host; private readonly TestServer _testServer; public EndpointRoutingBenchmarkTest() { // This switch and value are set by benchmark server when running the app for profiling. var args = new[] { "--scenarios", "PlaintextEndpointRouting" }; - var webHostBuilder = Benchmarks.Program.GetWebHostBuilder(args); + var hostBuilder = Benchmarks.Program.GetHostBuilder(args); + + _host = hostBuilder.Build(); // Make sure we are using the right startup - var startupName = webHostBuilder.GetSetting("Startup"); - Assert.Equal(nameof(Benchmarks.StartupUsingEndpointRouting), startupName); + var configuration = _host.Services.GetService(); + var startupName = configuration["Startup"]; + Assert.Equal(nameof(Benchmarks.StartupUsingEndpointRouting), startupName); - _testServer = new TestServer(webHostBuilder); + _testServer = _host.GetTestServer(); + _host.Start(); _client = _testServer.CreateClient(); _client.BaseAddress = new Uri("http://localhost"); } @@ -53,6 +61,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests { _testServer.Dispose(); _client.Dispose(); + _host.Dispose(); } } } diff --git a/src/Http/Routing/test/FunctionalTests/Benchmarks/RouterBenchmarkTest.cs b/src/Http/Routing/test/FunctionalTests/Benchmarks/RouterBenchmarkTest.cs index aecbaaab8c..ccd11a551a 100644 --- a/src/Http/Routing/test/FunctionalTests/Benchmarks/RouterBenchmarkTest.cs +++ b/src/Http/Routing/test/FunctionalTests/Benchmarks/RouterBenchmarkTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -6,6 +6,10 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.TestHost; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Routing.FunctionalTests @@ -13,19 +17,24 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public class RouterBenchmarkTest : IDisposable { private readonly HttpClient _client; + private readonly IHost _host; private readonly TestServer _testServer; public RouterBenchmarkTest() { // This switch and value are set by benchmark server when running the app for profiling. var args = new[] { "--scenarios", "PlaintextRouting" }; - var webHostBuilder = Benchmarks.Program.GetWebHostBuilder(args); + var hostBuilder = Benchmarks.Program.GetHostBuilder(args); + + _host = hostBuilder.Build(); // Make sure we are using the right startup - var startupName = webHostBuilder.GetSetting("Startup"); + var configuration = _host.Services.GetService(); + var startupName = configuration["Startup"]; Assert.Equal(nameof(Benchmarks.StartupUsingRouter), startupName); - _testServer = new TestServer(webHostBuilder); + _testServer = _host.GetTestServer(); + _host.Start(); _client = _testServer.CreateClient(); _client.BaseAddress = new Uri("http://localhost"); } @@ -53,6 +62,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests { _testServer.Dispose(); _client.Dispose(); + _host.Dispose(); } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/test/FunctionalTests/EndpointRoutingIntegrationTest.cs b/src/Http/Routing/test/FunctionalTests/EndpointRoutingIntegrationTest.cs index f0fa4a4f59..860ebac133 100644 --- a/src/Http/Routing/test/FunctionalTests/EndpointRoutingIntegrationTest.cs +++ b/src/Http/Routing/test/FunctionalTests/EndpointRoutingIntegrationTest.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Routing.FunctionalTests @@ -31,20 +32,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_WhenNoAuthMetadataIsConfigured() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(b => b.Map("/", TestDelegate)); - }) - .ConfigureServices(services => - { - services.AddAuthorization(); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(b => b.Map("/", TestDelegate)); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/").SendAsync("GET"); @@ -55,20 +64,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_WhenEndpointIsNotFound() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(b => b.Map("/", TestDelegate)); - }) - .ConfigureServices(services => - { - services.AddAuthorization(); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(b => b.Map("/", TestDelegate)); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/not-found").SendAsync("GET"); @@ -79,20 +96,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_WithAuthorizedEndpoint() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - }) - .ConfigureServices(services => - { - services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/").SendAsync("GET"); @@ -103,20 +128,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_NotConfigured_Throws() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - }) - .ConfigureServices(services => - { - services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); - services.AddRouting(); - }); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var ex = await Assert.ThrowsAsync(() => server.CreateRequest("/").SendAsync("GET")); Assert.Equal(AuthErrorMessage, ex.Message); @@ -126,18 +159,26 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_NotConfigured_WhenEndpointIsNotFound() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - }) - .ConfigureServices(services => - { - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/not-found").SendAsync("GET"); @@ -148,20 +189,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_ConfiguredBeforeRouting_Throws() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseAuthorization(); - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - }) - .ConfigureServices(services => - { - services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseAuthorization(); + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var ex = await Assert.ThrowsAsync(() => server.CreateRequest("/").SendAsync("GET")); Assert.Equal(AuthErrorMessage, ex.Message); @@ -171,20 +220,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_ConfiguredAfterRouting_Throws() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - app.UseAuthorization(); - }) - .ConfigureServices(services => - { - services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + app.UseAuthorization(); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var ex = await Assert.ThrowsAsync(() => server.CreateRequest("/").SendAsync("GET")); Assert.Equal(AuthErrorMessage, ex.Message); @@ -194,20 +251,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task CorsMiddleware_WithCorsEndpoint() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseCors(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin())); - }) - .ConfigureServices(services => - { - services.AddCors(); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseCors(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin())); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddCors(); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/").SendAsync("PUT"); @@ -218,20 +283,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task CorsMiddleware_ConfiguredBeforeRouting_Throws() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseCors(); - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin())); - }) - .ConfigureServices(services => - { - services.AddCors(); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseCors(); + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin())); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddCors(); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var ex = await Assert.ThrowsAsync(() => server.CreateRequest("/").SendAsync("GET")); Assert.Equal(CORSErrorMessage, ex.Message); diff --git a/src/Http/Routing/test/FunctionalTests/EndpointRoutingSampleTest.cs b/src/Http/Routing/test/FunctionalTests/EndpointRoutingSampleTest.cs index e5ad2bd10a..aa575ab084 100644 --- a/src/Http/Routing/test/FunctionalTests/EndpointRoutingSampleTest.cs +++ b/src/Http/Routing/test/FunctionalTests/EndpointRoutingSampleTest.cs @@ -6,6 +6,7 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; using RoutingWebSite; using Xunit; @@ -14,12 +15,17 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public class EndpointRoutingSampleTest : IDisposable { private readonly HttpClient _client; + private readonly IHost _host; private readonly TestServer _testServer; public EndpointRoutingSampleTest() { - var webHostBuilder = Program.GetWebHostBuilder(new[] { Program.EndpointRoutingScenario, }); - _testServer = new TestServer(webHostBuilder); + var hostBuilder = Program.GetHostBuilder(new[] { Program.EndpointRoutingScenario, }); + _host = hostBuilder.Build(); + + _testServer = _host.GetTestServer(); + _host.Start(); + _client = _testServer.CreateClient(); _client.BaseAddress = new Uri("http://localhost"); } @@ -227,6 +233,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests { _testServer.Dispose(); _client.Dispose(); + _host.Dispose(); } } } diff --git a/src/Http/Routing/test/FunctionalTests/RouterSampleTest.cs b/src/Http/Routing/test/FunctionalTests/RouterSampleTest.cs index 9388a03781..d0b93a8965 100644 --- a/src/Http/Routing/test/FunctionalTests/RouterSampleTest.cs +++ b/src/Http/Routing/test/FunctionalTests/RouterSampleTest.cs @@ -6,6 +6,7 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; using RoutingWebSite; using Xunit; @@ -14,12 +15,15 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public class RouterSampleTest : IDisposable { private readonly HttpClient _client; + private readonly IHost _host; private readonly TestServer _testServer; public RouterSampleTest() { - var webHostBuilder = Program.GetWebHostBuilder(new[] { Program.RouterScenario, }); - _testServer = new TestServer(webHostBuilder); + var hostBuilder = Program.GetHostBuilder(new[] { Program.RouterScenario, }); + _host = hostBuilder.Build(); + _testServer = _host.GetTestServer(); + _host.Start(); _client = _testServer.CreateClient(); _client.BaseAddress = new Uri("http://localhost"); } @@ -96,6 +100,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests { _testServer.Dispose(); _client.Dispose(); + _host.Dispose(); } } } diff --git a/src/Http/Routing/test/FunctionalTests/RoutingTestFixture.cs b/src/Http/Routing/test/FunctionalTests/RoutingTestFixture.cs index 51c9bc8c5a..c0c97347f3 100644 --- a/src/Http/Routing/test/FunctionalTests/RoutingTestFixture.cs +++ b/src/Http/Routing/test/FunctionalTests/RoutingTestFixture.cs @@ -5,6 +5,7 @@ using System; using System.Net.Http; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; namespace Microsoft.AspNetCore.Routing.FunctionalTests { @@ -14,10 +15,18 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public RoutingTestFixture() { - var builder = new WebHostBuilder() - .UseStartup(typeof(TStartup)); + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseStartup(typeof(TStartup)) + .UseTestServer(); + }) + .Build(); - _server = new TestServer(builder); + _server = host.GetTestServer(); + + host.Start(); Client = _server.CreateClient(); Client.BaseAddress = new Uri("http://localhost"); diff --git a/src/Http/Routing/test/FunctionalTests/WebHostBuilderExtensionsTest.cs b/src/Http/Routing/test/FunctionalTests/WebHostBuilderExtensionsTest.cs index 7466006026..59373e2594 100644 --- a/src/Http/Routing/test/FunctionalTests/WebHostBuilderExtensionsTest.cs +++ b/src/Http/Routing/test/FunctionalTests/WebHostBuilderExtensionsTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using Xunit; +using Microsoft.Extensions.Hosting; namespace Microsoft.AspNetCore.Routing.FunctionalTests { @@ -79,14 +80,21 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task UseRouter_MapGet_MatchesRequest(Action routeBuilder, HttpRequestMessage request, string expected) { // Arrange - var webhostbuilder = new WebHostBuilder(); - webhostbuilder - .ConfigureServices(services => services.AddRouting()) - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webhostbuilder => { - app.UseRouter(routeBuilder); - }); - var testServer = new TestServer(webhostbuilder); + webhostbuilder + .Configure(app => + { + app.UseRouter(routeBuilder); + }) + .UseTestServer(); + }) + .ConfigureServices(services => services.AddRouting()) + .Build(); + + var testServer = host.GetTestServer(); + await host.StartAsync(); var client = testServer.CreateClient(); // Act diff --git a/src/Http/Routing/test/testassets/Benchmarks/Benchmarks.csproj b/src/Http/Routing/test/testassets/Benchmarks/Benchmarks.csproj index 8bab94164f..6f70f9b391 100644 --- a/src/Http/Routing/test/testassets/Benchmarks/Benchmarks.csproj +++ b/src/Http/Routing/test/testassets/Benchmarks/Benchmarks.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Http/Routing/test/testassets/Benchmarks/Program.cs b/src/Http/Routing/test/testassets/Benchmarks/Program.cs index 4e832df4a2..b4b29acb03 100644 --- a/src/Http/Routing/test/testassets/Benchmarks/Program.cs +++ b/src/Http/Routing/test/testassets/Benchmarks/Program.cs @@ -1,20 +1,23 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; namespace Benchmarks { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - GetWebHostBuilder(args).Build().Run(); + return GetHostBuilder(args).Build().RunAsync(); } - public static IWebHostBuilder GetWebHostBuilder(string[] args) + public static IHostBuilder GetHostBuilder(string[] args) { var config = new ConfigurationBuilder() .AddCommandLine(args) @@ -24,22 +27,35 @@ namespace Benchmarks // Consoler logger has a major impact on perf results, so do not use // default builder. - var webHostBuilder = new WebHostBuilder() - .UseConfiguration(config) - .UseKestrel(); + var hostBuilder = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseTestServer() + .UseConfiguration(config); + }); var scenario = config["scenarios"]?.ToLower(); if (scenario == "plaintextdispatcher" || scenario == "plaintextendpointrouting") { - webHostBuilder.UseStartup(); - // for testing - webHostBuilder.UseSetting("Startup", nameof(StartupUsingEndpointRouting)); + hostBuilder.ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseStartup() + // for testing + .UseSetting("Startup", nameof(StartupUsingEndpointRouting)); + }); } else if (scenario == "plaintextrouting" || scenario == "plaintextrouter") { - webHostBuilder.UseStartup(); - // for testing - webHostBuilder.UseSetting("Startup", nameof(StartupUsingRouter)); + hostBuilder.ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseStartup() + // for testing + .UseSetting("Startup", nameof(StartupUsingRouter)); + }); } else { @@ -47,7 +63,7 @@ namespace Benchmarks $"Invalid scenario '{scenario}'. Allowed scenarios are PlaintextEndpointRouting and PlaintextRouter"); } - return webHostBuilder; + return hostBuilder; } } } diff --git a/src/Http/Routing/test/testassets/RoutingSandbox/Program.cs b/src/Http/Routing/test/testassets/RoutingSandbox/Program.cs index 4f2d60bc76..edcc062745 100644 --- a/src/Http/Routing/test/testassets/RoutingSandbox/Program.cs +++ b/src/Http/Routing/test/testassets/RoutingSandbox/Program.cs @@ -2,8 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace RoutingSandbox @@ -13,14 +16,14 @@ namespace RoutingSandbox public const string EndpointRoutingScenario = "endpointrouting"; public const string RouterScenario = "router"; - public static void Main(string[] args) + public static Task Main(string[] args) { - var webHost = GetWebHostBuilder(args).Build(); - webHost.Run(); + var host = GetHostBuilder(args).Build(); + return host.RunAsync(); } // For unit testing - public static IWebHostBuilder GetWebHostBuilder(string[] args) + public static IHostBuilder GetHostBuilder(string[] args) { string scenario; if (args.Length == 0) @@ -57,16 +60,20 @@ namespace RoutingSandbox } - return new WebHostBuilder() - .UseKestrel() - .UseIISIntegration() + return new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseIISIntegration() + .UseContentRoot(Environment.CurrentDirectory) + .UseStartup(startupType); + }) .ConfigureLogging(b => { b.AddConsole(); b.SetMinimumLevel(LogLevel.Critical); - }) - .UseContentRoot(Environment.CurrentDirectory) - .UseStartup(startupType); + }); } } } diff --git a/src/Http/Routing/test/testassets/RoutingSandbox/RoutingSandbox.csproj b/src/Http/Routing/test/testassets/RoutingSandbox/RoutingSandbox.csproj index 873236404f..554514e46f 100644 --- a/src/Http/Routing/test/testassets/RoutingSandbox/RoutingSandbox.csproj +++ b/src/Http/Routing/test/testassets/RoutingSandbox/RoutingSandbox.csproj @@ -5,6 +5,7 @@ + diff --git a/src/Http/Routing/test/testassets/RoutingWebSite/Program.cs b/src/Http/Routing/test/testassets/RoutingWebSite/Program.cs index d96af1814f..3727c9a9a8 100644 --- a/src/Http/Routing/test/testassets/RoutingWebSite/Program.cs +++ b/src/Http/Routing/test/testassets/RoutingWebSite/Program.cs @@ -1,9 +1,12 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace RoutingWebSite @@ -13,14 +16,14 @@ namespace RoutingWebSite public const string EndpointRoutingScenario = "endpointrouting"; public const string RouterScenario = "router"; - public static void Main(string[] args) + public static Task Main(string[] args) { - var webHost = GetWebHostBuilder(args).Build(); - webHost.Run(); + var host = GetHostBuilder(args).Build(); + return host.RunAsync(); } // For unit testing - public static IWebHostBuilder GetWebHostBuilder(string[] args) + public static IHostBuilder GetHostBuilder(string[] args) { string scenario; if (args.Length == 0) @@ -57,16 +60,21 @@ namespace RoutingWebSite } - return new WebHostBuilder() - .UseKestrel() - .UseIISIntegration() + return new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseIISIntegration() + .UseContentRoot(Environment.CurrentDirectory) + .UseStartup(startupType) + .UseTestServer(); + }) .ConfigureLogging(b => { b.AddConsole(); b.SetMinimumLevel(LogLevel.Critical); - }) - .UseContentRoot(Environment.CurrentDirectory) - .UseStartup(startupType); + }); } } } diff --git a/src/Http/Routing/test/testassets/RoutingWebSite/RoutingWebSite.csproj b/src/Http/Routing/test/testassets/RoutingWebSite/RoutingWebSite.csproj index 873236404f..554514e46f 100644 --- a/src/Http/Routing/test/testassets/RoutingWebSite/RoutingWebSite.csproj +++ b/src/Http/Routing/test/testassets/RoutingWebSite/RoutingWebSite.csproj @@ -5,6 +5,7 @@ + From 60971450960d8ebc29636cee98533cc677ef1c2d Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Tue, 28 Jul 2020 00:39:15 +0430 Subject: [PATCH 063/106] [Security] Move to GenericHost (#24282) --- .../samples/Certificate.Sample/Program.cs | 34 +-- .../Cookies/samples/CookieSample/Program.cs | 22 +- .../samples/CookieSessionSample/Program.cs | 22 +- .../samples/JwtBearerSample/Program.cs | 14 +- .../OpenIdConnect.AzureAdSample/Program.cs | 15 +- .../samples/OpenIdConnectSample/Program.cs | 15 +- .../samples/WsFedSample/Program.cs | 40 +-- .../OpenIdConnectConfigurationTests.cs | 33 ++- .../Authentication/test/PolicyTests.cs | 56 ++-- .../samples/CookiePolicySample/Program.cs | 22 +- .../CookiePolicy/test/CookieConsentTests.cs | 29 ++- .../CookiePolicy/test/CookiePolicyTests.cs | 244 +++++++++++------- 12 files changed, 335 insertions(+), 211 deletions(-) diff --git a/src/Security/Authentication/Certificate/samples/Certificate.Sample/Program.cs b/src/Security/Authentication/Certificate/samples/Certificate.Sample/Program.cs index 1c4a2d2958..c5077427d7 100644 --- a/src/Security/Authentication/Certificate/samples/Certificate.Sample/Program.cs +++ b/src/Security/Authentication/Certificate/samples/Certificate.Sample/Program.cs @@ -1,26 +1,30 @@ -using Microsoft.AspNetCore; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.Kestrel.Https; +using Microsoft.Extensions.Hosting; namespace Certificate.Sample { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - BuildWebHost(args).Run(); - } - - public static IWebHost BuildWebHost(string[] args) - => WebHost.CreateDefaultBuilder(args) - .UseStartup() - .ConfigureKestrel(options => - { - options.ConfigureHttpsDefaults(opt => + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHost(webHostBuilder => { - opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate; - }); - }) - .Build(); + webHostBuilder + .UseStartup() + .ConfigureKestrel(options => + { + options.ConfigureHttpsDefaults(opt => + { + opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate; + }); + }); + }) + .Build(); + + return host.RunAsync(); + } } } diff --git a/src/Security/Authentication/Cookies/samples/CookieSample/Program.cs b/src/Security/Authentication/Cookies/samples/CookieSample/Program.cs index 3f40d3194b..7cd8884876 100644 --- a/src/Security/Authentication/Cookies/samples/CookieSample/Program.cs +++ b/src/Security/Authentication/Cookies/samples/CookieSample/Program.cs @@ -1,26 +1,32 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace CookieSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); factory.AddFilter("Console", level => level >= LogLevel.Information); }) - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/Cookies/samples/CookieSessionSample/Program.cs b/src/Security/Authentication/Cookies/samples/CookieSessionSample/Program.cs index 1a19850e64..298b809ca1 100644 --- a/src/Security/Authentication/Cookies/samples/CookieSessionSample/Program.cs +++ b/src/Security/Authentication/Cookies/samples/CookieSessionSample/Program.cs @@ -1,26 +1,32 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace CookieSessionSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); factory.AddFilter("Console", level => level >= LogLevel.Information); }) - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Program.cs b/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Program.cs index 348d6c560c..a0dec58e23 100644 --- a/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Program.cs +++ b/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Program.cs @@ -1,4 +1,4 @@ -using Microsoft.AspNetCore; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; @@ -6,13 +6,17 @@ namespace JwtBearerSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = WebHost.CreateDefaultBuilder(args) - .UseStartup() + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webHostBuilder => + { + webHostBuilder + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnect.AzureAdSample/Program.cs b/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnect.AzureAdSample/Program.cs index 077f415dfb..1ec249d54e 100644 --- a/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnect.AzureAdSample/Program.cs +++ b/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnect.AzureAdSample/Program.cs @@ -1,17 +1,22 @@ -using Microsoft.AspNetCore; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; namespace OpenIdConnect.AzureAdSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = WebHost.CreateDefaultBuilder(args) - .UseStartup() + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webHostBuilder => + { + webHostBuilder + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnectSample/Program.cs b/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnectSample/Program.cs index aace6e77ea..34f1798fa3 100644 --- a/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnectSample/Program.cs +++ b/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnectSample/Program.cs @@ -1,18 +1,23 @@ -using Microsoft.AspNetCore; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; namespace OpenIdConnectSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = WebHost.CreateDefaultBuilder(args) - .UseStartup() + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webHostBuilder => + { + webHostBuilder + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/WsFederation/samples/WsFedSample/Program.cs b/src/Security/Authentication/WsFederation/samples/WsFedSample/Program.cs index 40e1945c69..b53b5ab65b 100644 --- a/src/Security/Authentication/WsFederation/samples/WsFedSample/Program.cs +++ b/src/Security/Authentication/WsFederation/samples/WsFedSample/Program.cs @@ -1,24 +1,36 @@ -using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net; using System.Reflection; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; -using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace WsFedSample { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel(options => + { + options.Listen(IPAddress.Loopback, 44307, listenOptions => + { + // Configure SSL + var serverCertificate = LoadCertificate(); + listenOptions.UseHttps(serverCertificate); + }); + }) + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); @@ -26,21 +38,9 @@ namespace WsFedSample factory.AddFilter("Console", level => level >= LogLevel.Information); factory.AddFilter("Debug", level => level >= LogLevel.Information); }) - .UseKestrel(options => - { - options.Listen(IPAddress.Loopback, 44307, listenOptions => - { - // Configure SSL - var serverCertificate = LoadCertificate(); - listenOptions.UseHttps(serverCertificate); - }); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } private static X509Certificate2 LoadCertificate() diff --git a/src/Security/Authentication/test/OpenIdConnect/OpenIdConnectConfigurationTests.cs b/src/Security/Authentication/test/OpenIdConnect/OpenIdConnectConfigurationTests.cs index af15948874..b18fc70439 100644 --- a/src/Security/Authentication/test/OpenIdConnect/OpenIdConnectConfigurationTests.cs +++ b/src/Security/Authentication/test/OpenIdConnect/OpenIdConnectConfigurationTests.cs @@ -437,7 +437,22 @@ namespace Microsoft.AspNetCore.Authentication.Test.OpenIdConnect [Fact] public async Task MetadataAddressIsGeneratedFromAuthorityWhenMissing() { - var builder = new WebHostBuilder() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseAuthentication(); + app.Run(async context => + { + var resolver = context.RequestServices.GetRequiredService(); + var handler = await resolver.GetHandlerAsync(context, OpenIdConnectDefaults.AuthenticationScheme) as OpenIdConnectHandler; + Assert.Equal($"{TestServerBuilder.DefaultAuthority}/.well-known/openid-configuration", handler.Options.MetadataAddress); + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.AddAuthentication() @@ -449,17 +464,11 @@ namespace Microsoft.AspNetCore.Authentication.Test.OpenIdConnect o.SignInScheme = Guid.NewGuid().ToString(); }); }) - .Configure(app => - { - app.UseAuthentication(); - app.Run(async context => - { - var resolver = context.RequestServices.GetRequiredService(); - var handler = await resolver.GetHandlerAsync(context, OpenIdConnectDefaults.AuthenticationScheme) as OpenIdConnectHandler; - Assert.Equal($"{TestServerBuilder.DefaultAuthority}/.well-known/openid-configuration", handler.Options.MetadataAddress); - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync(@"https://example.com"); Assert.Equal(HttpStatusCode.OK, transaction.Response.StatusCode); } diff --git a/src/Security/Authentication/test/PolicyTests.cs b/src/Security/Authentication/test/PolicyTests.cs index 77d764e14b..5049635b1a 100644 --- a/src/Security/Authentication/test/PolicyTests.cs +++ b/src/Security/Authentication/test/PolicyTests.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Authentication @@ -17,7 +18,7 @@ namespace Microsoft.AspNetCore.Authentication [Fact] public async Task CanDispatch() { - var server = CreateServer(services => + using var server = await CreateServer(services => { services.AddLogging().AddAuthentication(o => { @@ -333,7 +334,7 @@ namespace Microsoft.AspNetCore.Authentication [Fact] public async Task CanDynamicTargetBasedOnQueryString() { - var server = CreateServer(services => + using var server = await CreateServer(services => { services.AddAuthentication(o => { @@ -455,33 +456,44 @@ namespace Microsoft.AspNetCore.Authentication } } - private static TestServer CreateServer(Action configure = null, string defaultScheme = null) + private static async Task CreateServer(Action configure = null, string defaultScheme = null) { - var builder = new WebHostBuilder() - .Configure(app => + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.UseAuthentication(); - app.Use(async (context, next) => - { - var req = context.Request; - var res = context.Response; - if (req.Path.StartsWithSegments(new PathString("/auth"), out var remainder)) + webHostBuilder + .Configure(app => { - var name = (remainder.Value.Length > 0) ? remainder.Value.Substring(1) : null; - var result = await context.AuthenticateAsync(name); - await res.DescribeAsync(result?.Ticket?.Principal); - } - else - { - await next(); - } - }); + app.UseAuthentication(); + app.Use(async (context, next) => + { + var req = context.Request; + var res = context.Response; + if (req.Path.StartsWithSegments(new PathString("/auth"), out var remainder)) + { + var name = (remainder.Value.Length > 0) ? remainder.Value.Substring(1) : null; + var result = await context.AuthenticateAsync(name); + await res.DescribeAsync(result?.Ticket?.Principal); + } + else + { + await next(); + } + }); + }) + .UseTestServer(); }) .ConfigureServices(services => { configure?.Invoke(services); - }); - return new TestServer(builder); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); + + return server; } } } diff --git a/src/Security/CookiePolicy/samples/CookiePolicySample/Program.cs b/src/Security/CookiePolicy/samples/CookiePolicySample/Program.cs index 3fc09a3db2..14c40d95be 100644 --- a/src/Security/CookiePolicy/samples/CookiePolicySample/Program.cs +++ b/src/Security/CookiePolicy/samples/CookiePolicySample/Program.cs @@ -1,26 +1,32 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace CookiePolicySample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); factory.AddFilter("Microsoft", LogLevel.Trace); }) - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/CookiePolicy/test/CookieConsentTests.cs b/src/Security/CookiePolicy/test/CookieConsentTests.cs index cda7e7d93c..6980935d54 100644 --- a/src/Security/CookiePolicy/test/CookieConsentTests.cs +++ b/src/Security/CookiePolicy/test/CookieConsentTests.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Net.Http.Headers; using Xunit; @@ -641,20 +642,30 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test Assert.NotNull(manualCookie.Expires); // Expires may not exactly match to the second. } - private Task RunTestAsync(Action configureOptions, Action configureRequest, RequestDelegate handleRequest) + private async Task RunTestAsync(Action configureOptions, Action configureRequest, RequestDelegate handleRequest) { - var builder = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(); + app.Run(handleRequest); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.Configure(configureOptions); }) - .Configure(app => - { - app.UseCookiePolicy(); - app.Run(handleRequest); - }); - var server = new TestServer(builder); - return server.SendAsync(configureRequest); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); + + return await server.SendAsync(configureRequest); } } } diff --git a/src/Security/CookiePolicy/test/CookiePolicyTests.cs b/src/Security/CookiePolicy/test/CookiePolicyTests.cs index 783c29e4e0..6f5c940c7d 100644 --- a/src/Security/CookiePolicy/test/CookiePolicyTests.cs +++ b/src/Security/CookiePolicy/test/CookiePolicyTests.cs @@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Net.Http.Headers; using Xunit; @@ -244,23 +245,32 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyCanHijackAppend() { - var builder = new WebHostBuilder() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.UseCookiePolicy(new CookiePolicyOptions - { - OnAppendCookie = ctx => ctx.CookieName = ctx.CookieValue = "Hao" - }); - app.Run(context => - { - context.Response.Cookies.Append("A", "A"); - context.Response.Cookies.Append("B", "B", new CookieOptions { Secure = false }); - context.Response.Cookies.Append("C", "C", new CookieOptions() { SameSite = Http.SameSiteMode.Strict }); - context.Response.Cookies.Append("D", "D", new CookieOptions { Secure = true }); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(new CookiePolicyOptions + { + OnAppendCookie = ctx => ctx.CookieName = ctx.CookieValue = "Hao" + }); + app.Run(context => + { + context.Response.Cookies.Append("A", "A"); + context.Response.Cookies.Append("B", "B", new CookieOptions { Secure = false }); + context.Response.Cookies.Append("C", "C", new CookieOptions() { SameSite = Http.SameSiteMode.Strict }); + context.Response.Cookies.Append("D", "D", new CookieOptions { Secure = true }); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); @@ -274,23 +284,32 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyCanHijackDelete() { - var builder = new WebHostBuilder() - .Configure(app => - { - app.UseCookiePolicy(new CookiePolicyOptions + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - OnDeleteCookie = ctx => ctx.CookieName = "A" - }); - app.Run(context => - { - context.Response.Cookies.Delete("A"); - context.Response.Cookies.Delete("B", new CookieOptions { Secure = false }); - context.Response.Cookies.Delete("C", new CookieOptions()); - context.Response.Cookies.Delete("D", new CookieOptions { Secure = true }); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(new CookiePolicyOptions + { + OnDeleteCookie = ctx => ctx.CookieName = "A" + }); + app.Run(context => + { + context.Response.Cookies.Delete("A"); + context.Response.Cookies.Delete("B", new CookieOptions { Secure = false }); + context.Response.Cookies.Delete("C", new CookieOptions()); + context.Response.Cookies.Delete("D", new CookieOptions { Secure = true }); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); @@ -302,28 +321,37 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyCallsCookieFeature() { - var builder = new WebHostBuilder() - .Configure(app => - { - app.Use(next => context => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - context.Features.Set(new TestCookieFeature()); - return next(context); - }); - app.UseCookiePolicy(new CookiePolicyOptions - { - OnDeleteCookie = ctx => ctx.CookieName = "A" - }); - app.Run(context => - { - Assert.Throws(() => context.Response.Cookies.Delete("A")); - Assert.Throws(() => context.Response.Cookies.Delete("A", new CookieOptions())); - Assert.Throws(() => context.Response.Cookies.Append("A", "A")); - Assert.Throws(() => context.Response.Cookies.Append("A", "A", new CookieOptions())); - return context.Response.WriteAsync("Done"); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .Configure(app => + { + app.Use(next => context => + { + context.Features.Set(new TestCookieFeature()); + return next(context); + }); + app.UseCookiePolicy(new CookiePolicyOptions + { + OnDeleteCookie = ctx => ctx.CookieName = "A" + }); + app.Run(context => + { + Assert.Throws(() => context.Response.Cookies.Delete("A")); + Assert.Throws(() => context.Response.Cookies.Delete("A", new CookieOptions())); + Assert.Throws(() => context.Response.Cookies.Append("A", "A")); + Assert.Throws(() => context.Response.Cookies.Append("A", "A", new CookieOptions())); + return context.Response.WriteAsync("Done"); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); Assert.Equal("Done", transaction.ResponseText); @@ -332,7 +360,26 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyAppliesToCookieAuth() { - var builder = new WebHostBuilder() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(new CookiePolicyOptions + { + HttpOnly = HttpOnlyPolicy.Always, + Secure = CookieSecurePolicy.Always, + }); + app.UseAuthentication(); + app.Run(context => + { + return context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, + new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity("TestUser", "Cookies")))); + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.AddAuthentication().AddCookie(o => @@ -342,21 +389,11 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test o.Cookie.SecurePolicy = CookieSecurePolicy.None; }); }) - .Configure(app => - { - app.UseCookiePolicy(new CookiePolicyOptions - { - HttpOnly = HttpOnlyPolicy.Always, - Secure = CookieSecurePolicy.Always, - }); - app.UseAuthentication(); - app.Run(context => - { - return context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, - new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity("TestUser", "Cookies")))); - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); @@ -372,7 +409,26 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyAppliesToCookieAuthChunks() { - var builder = new WebHostBuilder() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(new CookiePolicyOptions + { + HttpOnly = HttpOnlyPolicy.Always, + Secure = CookieSecurePolicy.Always, + }); + app.UseAuthentication(); + app.Run(context => + { + return context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, + new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity(new string('c', 1024 * 5), "Cookies")))); + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.AddAuthentication().AddCookie(o => @@ -382,21 +438,11 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test o.Cookie.SecurePolicy = CookieSecurePolicy.None; }); }) - .Configure(app => - { - app.UseCookiePolicy(new CookiePolicyOptions - { - HttpOnly = HttpOnlyPolicy.Always, - Secure = CookieSecurePolicy.Always, - }); - app.UseAuthentication(); - app.Run(context => - { - return context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, - new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity(new string('c', 1024 * 5), "Cookies")))); - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); @@ -475,16 +521,26 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test RequestDelegate configureSetup, params RequestTest[] tests) { - var builder = new WebHostBuilder() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Map(path, map => - { - map.UseCookiePolicy(cookiePolicy); - map.Run(configureSetup); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .Configure(app => + { + app.Map(path, map => + { + map.UseCookiePolicy(cookiePolicy); + map.Run(configureSetup); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); + foreach (var test in tests) { await test.Execute(server); From 97ced4e7c9b061579d40a656435cbe275f0bfc67 Mon Sep 17 00:00:00 2001 From: "Sean G. Wright" Date: Mon, 27 Jul 2020 17:04:25 -0400 Subject: [PATCH 064/106] Add docs to BuildFromSource for ANCM (#24304) (#24346) --- docs/BuildFromSource.md | 12 ++++++++++++ docs/vs-iis-express-aspnet-core-mvc-sandbox.jpg | Bin 0 -> 31878 bytes 2 files changed, 12 insertions(+) create mode 100644 docs/vs-iis-express-aspnet-core-mvc-sandbox.jpg diff --git a/docs/BuildFromSource.md b/docs/BuildFromSource.md index f16e82b559..23e107b5cb 100644 --- a/docs/BuildFromSource.md +++ b/docs/BuildFromSource.md @@ -132,6 +132,18 @@ Executing `.\restore.cmd` or `.\build.cmd` may produce these errors: In most cases, this is because the option _Use previews of the .NET Core SDK_ in VS2019 is not checked. Start Visual Studio, go to _Tools > Options_ and check _Use previews of the .NET Core SDK_ under _Environment > Preview Features_. +### Common error: HTTP Error 500.33 - ANCM Request Handler Load Failure + +The [ASP.NET Core Module](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module) (ANCM) for IIS is not supported when running projects in this repository. + +After using `startvs.cmd` to open a solution in Visual Studio, the Kestrel web host option must be used (name of the project) and not IIS Express. + +Example of running the `MvcSandbox` project: + +`.\startvs.cmd .\src\Mvc\Mvc.sln` + +![Web host options in Visual Studio](./vs-iis-express-aspnet-core-mvc-sandbox.jpg) + ## Building with Visual Studio Code Using Visual Studio Code with this repo requires setting environment variables on command line first. diff --git a/docs/vs-iis-express-aspnet-core-mvc-sandbox.jpg b/docs/vs-iis-express-aspnet-core-mvc-sandbox.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b09715e862b1aaa88b7ec826ecf6d14f3ac1c5e GIT binary patch literal 31878 zcmeFZXIPV4wHb2THoD!?Q{0N_de(Txi6W|lQ;97bBrnDsu9h zj5lfM=ouIoD5#m38R?m6=^5z%n1p}`KZcm(Itj^jdP;Ii`v3NI^&3EQjo=0z4+0(l zAq@c$4Z&4AfC~U1Ai-n%2g3jJA|S-$NJ@6?`VDgY1JySHgakxHgv3ODV2yv;AKwok zrXiudCH0V$PS=u*$A$h*VBC*uypPIT81zO^e0Sfte!PBzk%^gwm0v(mNLWN#Mpo|L zeR-9~s%q*_G&Enl)Hg6RGB&ZYws~u7XYb(V4)*Z$^7aV|{uB}#79J6w@Fg)R`D;pQ zR(4MA&%FGC!ivhO>KbTmU43g?dq-zicTex=*!aZc)btE|3Awzoy0*TtxrIJBJUTu( z#hji0K^Fml=-3$mdJ-H@X-7Q(QYT=rFiD#~Y(Sa;WOgy_`)m zAJ&knkI!l+T0UuyX7+r2BdTR9S<0E#B9;T% z)HTez_7_xK<4f;+Ajog^`rek>`}^71uPt>=>pg>Z%Ocw}-~- zv|mJ|K9a@H^l+%%9h3)BVVTe*>rvuZAd*8t5B24g6}*;9?%?AdR~6UdDE7Nhxm7<( z)srYN?J(;3QPVjj@d_aR;P6~D``c1kSy7o6wO_N z;4pQ?&{trFLERM&2?m*_f?5N|t-vQ-vcBuXzAt55hj2=3R{(!V!V3b}>np%dG-MgE zq&^MYY_!0fVhmMsF|QDtMgDGuMw089OPL2 zPEpgZ2CSTBZR%qf?Xnf$50aAUj-Td`+WvDc-4p6_XC|Byj-g00^w`L~_V~W^Z1>R& z6)pO^3psn-2TaQf=VhU>qIikAi=)%I>bZ_<|L4b(gRBNGLT*SUaUXYSzJ7BVg!|TU z1&D=w;`$R^GYc#?YlGbtz#*pfM610n_4%vIn;W;VK0HCrHk5zYgPUJ33Xhu$z%-0hlwv`mbxRT3uX_y0R|sS1`% zOV}QVoE!^O)q(27%?FWmY(J-$-*+h<@NLE{9B05)7n`A#H}9Igy4J5Nzzq9J@YJe~ z;@)XqbC~?A!3(lWxyUO3=M~_Fa?2G!8+irjg05<4uA>D>tS?r?K{$~5KQ53AJ;DFMUx&Q}ABJ`)-yN1Vjf|~$n7_q%;`+); z*`$Z(hx2cC9K(qBwJSuMKR{=$XK)9bv&=pY?ejf? zE<+c{O-)O#0F=1p!GL*O*S7jBZ2Hn+BK8xwNpDcJNQo1-H)&cmwwy|C=8LgbIKy`aiK>;2n_>CweXwuKKgUp1&&hI=5^WVDYnemzC=85SGSO@hG>5 z_@e16Kp}8nKjQlhp{x&o*OW{<;awreLm@ua=OG0-TN$z;3JRv)?sm>r>5f)mKO!*N ztPf12jdWQNd^?V-hxLs=BZMxVnYCq^eQbg(k+qvKwJDRK`7>% z<_o58Spc89QYh-)Q6ISszNh}It1>AeS$2$3QYrL@m37$pbJ(I2T0akxycff4CRbUV(tmhG4DQj4))tG(E658a+B}zr8n$MfacWEDK)?X8=;(q zf^|s}iBZsElz`#ZQE=lTdL2;ir`=+7Dblkfhev{MouD3oO6l8-7aTm zs?7Y(G8riRW*`3-bbATsBn8Vn0Y$F&del_rh)%ZIn1#IZgHdjcimUE8x zNru1(*yx=!gnDLk*NvoMa4bX?rB?jF8t?=Xwu~wIF`+E(Wub%aCxWB@lWOnIPxsvT77KN{mE$bR!}F4(J7Dl9%~9o?w2#Y@RU zNHeUbFkRc(-EkuMP3;@%fsC0W<)h#GiVXS2Gw^H2ly3*zJ2SxxasD8&W`_?1cAD8F zp9@~Ixm(}7-{D~5Ri+i&DjR3YAuGBqJ(|m2wHg zeO3KKFGX`Xug9&JtZ6M7aL0H!L+G^v`Gibt?h?Cpyl_PAoCG zsQtxuPHwbwm~>>iTUU~1cH5*Yw`}0o*WIQVGaa{Kf5caG^l~ix5INN@&ZRdh17Vtj zSUXUxfkcho1ZqmHiEsVr_gc1pBh@k_gEv6_WP0^KS!nbZW67UdwWdB!jpA0=O;_bp z%!KA^hD`7kfQu3X5g9J@WIWKgd#6-=3Z5Hy#Pu5yZO($?YMobTgAdFqdNzwBU)buH zdiuk)I|6Hxp6vi0%HysS>P&1H8pb5G=me`IB$=Y`T=eEXm2HGS6102 zy;blC;!E++Q=t=enQS(@5QEKMs&d&RU%>Kz&bqE`=i#(K{*zaLo?L{6u7>H<6+ocr z3IJ^J!__xq4pC#RFj{wUU@L3l3MY9SIC4AML_verOipiH7palNLnJq2bzmrRy(^{C zr8D3)`e%x5_JXmA5vFje<5!pCz(kaxR0}x^``6E})Y;+&4?GA`sP6XM%lrrY?461$ zfaftoYJ>q)r_WR}@n{>w`|RyLWb+uJbYXt(U{rnucnMi3VxTN`WVgQEGU(ti{5dN^ z2=F(J@Cq=q3#pU4#ByP^xooR(D~MAR1T9_loX|gG>LLMxz*~v!BPYHVd)ik32-y{Y zPD>Ra_HqDErSU~ zm07Z3FjYC=9^cm>$|hva9CIgcw9MG={%|#$dj|Yu%g!`gEF8ZUlU;3BfHV4cz}-At zl*73Ib&$MaWb;jomPu7@=%Xp#;dkl#ri9lg9LK`D-jktYzxoD7TvD@y^;S4AvmjAh zxx$InJ4=RG~K)Sau5{b-{!Ya!$-v-{Nyqf<$lAIlFVu_8@^xByAue$^EKiFZyu z8RlF8hC0?SPcpIE_=pD3A$o9FRzbav%~hF7ju%3k@%@xxi*>4XRtpjoz=aOUbW@x< z^o}inKY3Z~!WMoj!sz$&M|+VV>&(>0o2eJTow;xE={j%f-i|&SDy+ZQ@mq0wxA&qz zXSNrm-DIdeMEvhya-j;3GS4uLSAga*ywWbquBHxz*kB+z4m1cyG~YJZ4QzFHi8n&w zWxdfCV)1om3vc4U!F#-dX_Xia2!F*q!U1j`msgre`oqQB>)=a`@pKq3I7ZHmH?UDe z)GyTKHyIr}j4$3%FXm+C+8i&4B7v zk2?|z7v?u_Ye?09WCUxkd~H`JecW68DcO_z=I@uTa~XyKEhZ*n4y zH8>XSj~xU=TpDan<+Q!+2giSlM;|xU$GiF z_HGg>Zts-`D+YLm=xEDB=I8;NwSIXZpJhcx4c34WJ#G66e@Bc%X6p1LONhU4t^BBg z_STdZPI-H*2l3Xg@_&QfI#MSX>Tx)y^<#_G3C6kw`l(@`+aua%FCEp&oarOv-(jrM zIha#$R>xv<1!!d{{uyY628Ql)yjY>a=j4qy=UZG~JzbTnU^Xnd9-hFVB*%*E^MiHsjE@@5hN zYvV>nvdh2WI*RND@x2FjWBO)72T;(~aZ|l_N|)RazwYSC=$ht9y@|=CU$ydcv|1u# zcdXe?1$wJfksH3~0LV^nY>5QvqV^JSjQY5J?b2upH&31y(zQ0+ip?BFnK6drY=Rjf=A3}1m|R>Wprmd+q$?X zG~U*@^C08h04pQS&&7ss9Hho-Ivzw#Di*qZXy4xmB0mkJB!%6=jgZZEj+`yklfC}60+}X?FPWglqfdLsOWm6 z$*6m0Wz+zl&zB(E za5u*AUgvuk-HB)|+#@E7;|W+wSuxO7k^+0L8U+bae3-v^NKLo@RXML>XSQ|C-s-`D zI9gRE)_KPC4PS z2Xgdck|jX?-ubg)E096}Id;Is$o5lekmu-%yP+*A`pp#}xYO9Crn=!mIj+b|onf`n zlg2yFeu`FYfc-;}BiMi-kcF`6ZtHf@ylPHqz2DuuEqIHDdpb>{Xl{r2kwSU@&xs@= zfgA1p#pGb-l?&O?mprl*Scy6gkK; z2~(vz+TM~f-CQXO!&_5)@o%5^YKG3%l_#v}Cl#qVq&jQ}Wksm`oj?C~zex+_1FP^( z(oe|gCa^Vjmj!SBXI`G`puS(<`2V_xl2Sphab%yj;a7b|@1EjL#)4XmYB%>%V0SlP zfQ%Vzd2;;{Z`b@NF~p5z;!>^v2)us1@h*8xgYA|GL#=|9E<))Oz-RwoHT{l6qh%>3 zwAF_(s6ZaRX<`%Il(l)X`z0|e+R(2AYn|9_QLofJ;I}E*uI=3Rd3MHFht;%@@y3WK zP13u=h*%sGSvYKcjq3tcea`MyoRO<2Il0lR_k&HGq0IUlrg~N@Gx5zmkn9O2Wohe? zRFRH@Cu@cmDkfDCy=@JND(vf23bugYM+r;!1_N~%3Q9a1* zonl?V#K(ZLY@IWO9RFBHbfvCwu|#Q!>cS7Qu%A=wDY>n4-UY0RB(m7T$JSs)S*Z@S z0AZsolhE+xN%#AuM@kM)IK+1LgXv~2Gewb=7tvLa)lf0LEWe0OJa9HA`7TJ!D|s&Rv;da3Q9O3$d0tz3mxr>BD8|<%|>z#R`mC*k`ab zK__uTV226_Xs^<1jaG2~_3b1--oQYfB6>Z;d?gaZF0mj==`?hC4E!X!any1YKE3_a zeVQV`;BCn8V?qVyo_CeBW-)5d0yyycrUmJIb{2}migTfA74bGL@HT$?KjmlAS|9Td z$?LO?LBtJbB{Ip^-3`U%t461s6)bkVC2KE~50^i+Z8!5z6dzU9G)z=~6MxHf2O{N| zF_UBSNH%&gnH>xBL`3>{b~+NZRXl+U21|$ybXMDx=$u5G4xW{)dfx0L7OlD47?|F# zkhF`I{A+9eu<-suYnxNs$-+j#9xqc)kE@fe07cZt777gk@C@kw_=0B} z*^!jmC-Am`$sNiYyT`>GKoQU3j*y)9Q4NuE zJKiC=Zu$O;osO59@GK}NZo%tYS1K&Bc&9{$$ciI3ExwPKHQ<}0b;JQNRmbaSB3hm( z>-D{eo>8z?I^E04@pmf+&SGm?Vb)x&8!caO#5dL;OWc__ueLKe%m_YthBvbhJGpvb zoweh2W+U)XhyHUz156+)s0*Hj`PP0;+GJB!OYLiwtHCwBw*sJ?dBfrs^Zw;ULeHUd z1cD|H^8>jlV_O}oQx!p9RZ$+92!%e~dGKCI<2)hi#vu^%MDPlbaT}+NlZLcD1Y*&l z2hQlyt!a2-)-qq>{Cr|5c2MM=ygOem<9wB&XT^b>h(hc!EuYv8!Q3aE`r=OPcHR3Y?J5A{J9AyW(_Iw%-cBJv@gAZ#dr48->(K;v#(3@vQsL zr5$eOseKVg&wbcUIrsYXNT%yqqP%F*mzRd|AufU`{B`pg;N@q zGM_G^DvVnzH8brhQvq918*HS{pNQQfOFiDdj&(x8f~&~QM8vh8kJHYX=GQi(CO3^t z=bHKfi4!j^`QpNUvoMo!8}|JxE8)*{@JGnmGW7~#+3ZWv`1iAdhP$aHtl(sERd=7{ zXqjEoIdJ&4)%C=b~O0>mpar@T`H07^;PF? zD&PCuc*r6zJdj%qXRb!KK7Fxe|GbdqStj)_u+*`9ba-Ep86t26VC`J%GDE6=||k(~)B=T4J_rXqFe4Y*>>Ao31GYaZR1hJnM3S@L4QR%!k-P>-m^`7u`nvX5Ul;h>$ zG5ZvOc@R2iIW%1PE{My1V*NlG^YxqA9a80|9F?)icVMfbVHb0MeRa66%x-`r&xWtX z+a_qoiYFII0BalC4Jn(x8y&ufm)M9sj>A@OUg9tbRKDDSPe!4Fhu z`=n3tiSG3Eb{}i_Xun_>uTkeK>Gu8BgD6?L2G72z&!Ty#vYjbpw3Wrkj*N5V1{%>m zMat~N-8il%_3rdmKnr{G`$VLgR8A!4!Gk%10qsIRhp~NS8ibdJsAw*lVrq0&-LE&p z@I+ybe5f)ZeYRtCZ#n9&n;vGi6G){9M$O zk!#kwo6HX$QCMeygb;}qkgbJ!B@d0fknl-Zde#@7<*Ov4`<2o9I| zrfcWqB;lvZQ4@Ni$6i2Nl`MH9>MN?#;%he(L2U_}r9;r*#Wa{ zN0wEE6GIv4=A`e$k-nzYxZ6w!ea#r!u^-#ahQ_C}d^sfgbc46FmR6wl#k(b+$;pj> zeEqugIxfVXKC83gL3iuojoMkQQz%XwbZ%;nM10FTf(=~GQ!9=HkYR>Q8YjiaG$VSB zd=Wd_h+VA<5Fpvu^2FVKJ$*(6$bF4v2us2VPF8Iu7LXy+Z8pYJ1HAJgk5=(1uKN>w-sTCE>SV0L=_48C z`#?TrEsn)s=E{ci2mSsVUEj22E|wq-3uFFV?i^0|SeLNr6~J*ywJbp~uk{K*>}QMI zj#eWV7f>*Ezvvh%B`x!J{`sll&2LlTy7=3N93>akedy8ezc6yk;u_+qlr(6if%%lf zw-G=d(91&!M*n`r=GK2+bR+(p5FS_3wn-zZZIc-Wwim zrZV%1xTIK-9r*k(6uSZ}&%?H>AUzvI+2$|x#tio&z|TqObszj)<5I_{x3VJIxk5~M zw=*~=-L)vG)tdd;x+WzCa@B8CjaFB0aCeexthL{0bfPF^;qQ$&;;>RdbG19O+OZ-| zWO7bC7Kq23ier)&O_dCMyQEB1-;2LH>7eWhM}Wx0ehE7k<_K}IdEbN#t99Y701=8| zzztr!-2&+_jr!J9k65>t?A*d-SQqhQ0;C{$%Pan1w3WuFGLsQjby7N$Vne$yAJzD| zx!}8rJY37o=KZNyQs}@(o*kI9ijOc*Qsk2@IwZCTYtWo=Us2Mw5ML^CyZl=lZ04M# zQQXs$`4=e8!7|*hE84(jIz=kq{du;i1=ru9qm?I+3i5Akn&MEtxB?i8YmVxf(Voq8 zAl9ARFW8=Aobxe|wq}vgRs?lbx^1UVK=RVfq|9l9^Do0a;=!G}%TQ}@;!LvSmw->* zy<`@WXwNo(iHl{krh$`m+boRU*z*xF>?<)R-jLa6jdju5b59tWRjHD>gGsD}`hMRK z?UhC_Y3E`DU!fWeQ?=~Rncpz6@YTiI;58v&>Lu|aYrkZKP+}jW1yaDCd5Ad^!~lD;{7b1eM_$tVQeCWtoxthm zgh#(S+;ES%j%e`73m7t%hx+^)zRUoD*4OE!;a^meEUwNSAfuCCxkZ%12B&4 zlK35DACui3g!?E9JjLoC^p(p!rhoZ&)2NFzkc|A@Al*KR7I(J{ZhZbVAF`c{>z_zA zY39>6?f%%q-nUAfAv>41<`hy(mx4!b`g32!3o6v3zTtusa#I|)<*cx z`R0l#pcSj@@6N@c2HV8dWsggQ#GI|-n`*2js;$$4+Nvg@Lz#9;QHEp0Ca^kM7W7c~ zmD4qA-P)+A<#D~{6dU{DI4?g$UyF6b?=F1poi2|Nd&|!J~iG65pol>fZ43$u%ryFkz(RbD@?8rmFqk zI3gI9oTuMPd>w>$D8i#-FRuXf`+pt|lY_orrC~w^*gr)d=buL?#@K^A>xKyA&xh6j zJTOUSA2&WmWd8Hq=&n4x0z72ny1)soCcm!d&dNK$ABXS%2JA1PaNlNH;=c+@mAztz zN!{f_5jQXe;m9QrB9?kyQ0K|@B_RnwF!f!DtV43f@F@z~ zTBm#q!-nKcM>DkC=4#P&YmUQxfejT=rS!{>QBl&R5! zp)O@!)E&BFhG^sFnME67vWJO-u6GX!Wj|7>QFV3d%!IagTFS_x;u{e{~i^`{re zyq(w|c6T2^b&aqZ6&gHoD%1ihH(i2e-<6$DS=ZIMdrShO;xC_R+TWL+(g4a?ubqhwTNSf|;zprq)nJWNeZWOk!Yj%JUU^)7+@Hu$@ZH>)y6SzE5aS zBXAKChPa7!TQXzP8Lkq*ID=PPa%cH&hEICabiaIFr>wWuxV%XAn?;&yrt1MZHY9+~ z4#9}EN8Y#gRuB6LWlROvH;82;}{Jr2#B}=<^>~gBRsYZG;bcOEF-Lu$V zJh*F~cVX@4fl6+LMAVBXWuq$Fn&roxs)~%uB>f%|_V+lkKKS*U<%!DY9n;GnEgkkE zrMjUK*a2X?nFsW_5tu>QsRyw>ivlV(3VtsO$G*t6TXV6KA)j`nY|&n@__`!##d~ki zC2p+5U#cviwS2>z8&mXCE`|bu`nd6Ho6}(v;9sRdAMfpj5A=D)O0x9Xdc2n!G~D$@ z?YAL_mF2u_%}}2{*9=#Kw9En!PbD6;;@+CbZ0SE6ez02`_?s~K)n$!yb?i+){qd>R zUw9+D)jLNer-x})%Rfq;PJNAN6?;bY?6z_>ZGrsfCMB+>(-Nj-mlvNz^!ZuO%fKZk zJ}_)jSATuzd^JA(XmO#SuL;ffpSAdhA7A~l#C)AuSC#(5QS8hW0H=O2bioAPzm%Sz zs(NK#zaJskfZ7Qlp7QftQW&6at#qKlm?19II=zm*Hm1bs^O1Noeh=pr@*;@)HF4n2 zpq*Dg+T%X}n_8J@F;gf5b|O|W8DonO>atJ3clfMYPl;sMWLKxbdrJLh0TVU5q=$!c zg3T-;Zav#(Fs#VbsItUNbyuqeJ;u51)YXF0VY^FAuv%6@BXx~T_O`b;Eo0m(CdUOM z&gg?n2G#>rB@@^nzV=CC`9cp=(rf@b%d}KqOn-z>!35)zRQ}nRj|Ux9B&h!I@2Uj@ zE_oUZGjjIyiOp?aIu*iXlx zOOfriB&M4n6VG5r_$Y^Nu1=LAy!&havnzlyol`f1>j#NP<=;9u8S0^E=!autWey7! z8*io6ro0b`7K57l>H@~C#|5-q4F(~!y?y+hik*Rz4+3Xmd%oz)dEfVR#H-4Qgn9RJ z(Iu^3MCcKGYu{}cr{v{v*aoC6b97#-j$eBszDMD4uE?tLo0H#?e)2gW=}?GU(dypo zXQua+y;T`#3=D)DKGEyGvK#bl@(2~^BSWEJS~a5XW!zs6U0OgSOT==1S>l_4;=1E zIx4G^LSHp|?D!j_@1FECT>+{|6VNIx8il6z9v&#ufuCEZR&v(}=y*jGN?CNs6mL@9 zD-*lSX|!Fm2+O1gQ`33fXnQ$Yb@}3wXRqtUN1?`sc%82!XRh}|5WZ>bNo4|axGFr< zu;DxgHVu17SKbf3vipZ_VCd5L33V9f9gJzQ9}CJUdMWdog*~UjuXo$5?W05t(;_O4 zXFcy~CRz011VlmRMHid_6S$igvPHyAyJnHmU?3Se$j3`Yjz6 ztO7Q%?$T}!SM8d|A}q+i4{6(+eZ!!krWLvz z%`@Lbp5L>)5a`+C)J?v#zX${h>SCsZQDrCbDE_XN3yTmS6IL+aE3yr4z3-N@B`?+@ zDQ+Cj|9PtmH8k4DoUS4isQ$o zZ1+kSyDk|;?;G6dP}$A&xYMPGV?dp(A7{IrPx#7M*PS?)r6|KqE{e=#l?+cJFx&Y7 z!xl9BX#V*xKKg0T`O`zv>Gn-Q?t>Haf$bkdw=`TVOm^=H?Y3oW2Qv^l$6w@P%wzC^Y zh_Ggfpbq$svn54Rs>~OfnQ2pv=#kbSB9H5A;XOc;Lvah-BU&6+w;s_C%nQ`e3rx#$ z39!{isUy8K+b==Ub&K}SBjV?cC3T5Lu}OExIGzlW$pAkn-^9csCEN2ADJ`9ne3s{w zst`_Maqv5|?7a`({CLs@h<^{@`{3kv18tD9hzQdv*gCbas$exQa9lfcx&kz&wjzZ> z=;`{pgYNwvd`7D6D;W|1#HeUbHnJfTz%qG}#{;HMm1XKdp2E%`8yB|5xI`8=cRk^p z8`tN_Dg3Y#$ode#h2Be z_iG+>lrpXML^@PDZ+>{@Rf4yyu+-?xFfPqhGulIykz=9Ux}aB+;{UBQrcxlTgXy6SagFx8Lrc@+kC#27`KM<6hVC*`t~m!6tXnPr zbU2Mte37+n!OVvq3dKnXhH~lGUD#w@MqstF8K9QzObWMV%kQ3m4-}VvrRBd0`eM4O zjhCoZ+u4SdBR{K#C$luQ)rZbuCFhQBy=|siFCU$@*Z2qqJ1t@&Jv|9BBr&RvPU}`x zzra!&#BQX|bJBj^en=bM)0+AH%3R06I97AOcFNm zN^f+(1a<(j7!miItS9%K&BIaxxqhQ0sj&Ca7LldZu0od7B4=lZDrb zdug7vd=5B~XFWo&1oUR`jm+wYwn;f;$Tp5)Rs6FwKsg%+J=`&H1y4DCD_fCbC&I-j z3hJ-xL?xI=Gs`{4_D4iqD<_%^wZL&%^=>A1K8d4SdK#4BA*1R{I-H6fkwoh@-QBO^;!;net&oPF znnfjQLp!-pr2-JPIXu$)VteebW_$C?e_ilAX>sQ5Ly2UHCacu3$_exPwrSI!SwQ`6LVIS*un?IM&o5_i|} zG1Q$*Jo>jsR2i)CHo@OUJ^w=_R9Oduaz5YZ!hJmIHLkqOz{j*Q!|zQ@<=~vT zZh2b%+5>1Ud8*KZvORpa&p+^;~X1_RsNeMEsW~J$g3P|G zqjB+KG4Z#}&Gm_vA1C2=`6{~GNghAH{+90pU?oBKm1&>73m;uOYJiU3Yela(is~Bo z5%j7tUhgxI|80w0y~Q)(=$I+ zmuRVs%M@wz;I`GqW@ry}LuM8hX4003;|Z$CIZ2-kIViSu7yPw;**pK7NPpuy`M<7? z@?WsmMxC=qk>l{*CHI-PAg_Ijr?J@Zen9aBh=yVD!*F3T81s46;__@y~rX~HY9<9ivj5T|StSA+E zg);?y*XvotcnbxDjdr#QZN;IY>W9Bn!XNAuoQT4(oqb4U8c;fmADDb6X~ zds`2afQ*g8+T?cp1mPs6zyq?v(d`~SNx3rZ!ou?@gbFvA_ng16oW+(r&Z>zCH($_z zBfvE?NjXQZ6UT@9rGJj@S|<$4S5j&x#WqCVv1X=~S%X`Nm6wbw z@9A^r;&so*-Sz@KLOF+EO$!_{ZjMU$nR+j$gVgcWr*(`;H0tbB#5A2Fq}JZ1_Fy6w zYL-R82rnQ~J+hhevKV99AwLxoy)fc(8Jn+dzwS6Vk29s5o|_(enrYHgJ0-(bqV!G> zR-f8o>-)ozuYV*wO~_j|A$o`5p;L~~&_hGnTnP}w9G~sK27^r=QiBoaaEl@=b(Wt! z>Y@eC_ybM%Q2CnaH9r!L^l_h~WY4#buh_ocvaTgnxoP?(Wi__PC?c5oEnBqnR%T__ zM|Xzt3{%?%R`H3cuu|A4zpm`Z9(QqGKF$M^R=Lva7Y>wNQGR2Eevi=4>XsU~s2$At zCuJxJe-~7ZmX@t1P0oFIAl2TlfBQNS;Jvn?Gc#yZyj2#OUomIgmDm4s?-74ZtaCDv zTR*7$c4%Pv`+E$Oa*Xw-mjOpr@VUNxbuEkYP3JnO|GrcANjmuwA{fWBu|OKycH*O7 zlOj-%vl+lM(KtIXS^TrkiakU>UgfQ&r}0zA8;m#N!ez^E)pufiQQ!111$p+j;r4Pm zwwI0d8G+wlIiQ6?;JwCthv&T%fie>&;p@(c5qlYINDHs z>`_TfrY}Tn^5lo1Ls<4(k+0^Y!}pM-APXixFw(R^tHh!+gJ;6&-EtC}eHqwz&5Jit zRx_-BrLZ1bOh$3nuEqq%2-cvQ)ZZ+jmwY1HQMQn#z)W&u;#S$nO*G4QvSHj{(_4XBjRw7UCq@!bC*b&%W7f%vF5~2Ud$|$(>t??ax-Gjh{ z)tUtvG-cvM$3$~eL5rJ^m(L)&`!phWg2AsRe$PV?H6%Qm?>C=T9+d8IKJJlP zYkY&~%(zvB##c0b2Gyr2^Bg|C0>IG=PoM#o-ID91h}xCIv_lgE2xFsL9_HtM`(*Q7 zGzm0ZlJ~#~90t}HJ+M9tF#M`~Vi9*wkW1)@0dKi!{k#IWVfUKEC(k9W08`Ef0Z?dJ zNe}8m2ZQ&WS(9KW_)zy^!kyrl7YMHeGj_8;d^#+q}QN=*6%fReh<|zTBSdvz7}+-n#RO z(i~LBxj*pqUBaMXz$(1<-O6jLT##4LGIgwxZ>#^T4^%sJ|$ zs9w6j!K+?dcW}(>ocB;DhN(7QgT8k-OoM9r-7Wwnj8(>1EW#q-&TZ)?+bu~8H?>Vo zCl+gCI`=M1$`-52W4uNbyHcN*2w|Z3?lLtECcFLf%shE{ zw8xXZr00diaXKP>tKG8dhdYAT$Sh-Gk;%IxgPMRq~UyiJy z{MX{{r}oJwHh-uOofh9CjsXNC^3y`1)Y_$9GuKevCL1;gkVeP+KnE>BKTf?I2LlPT zmmJA2Y}-y>D8k>^ueFjkq&{K(I?Usg(EnTH_w8Hd79w7ioeMnZwVc$@@ao+c?S`Ao zpPZ^eJrcP_EqvVG%%8unjVk3{3`eJ@YM|of<-28xMzW^=a@*y?x`a!H1JEDbHhK7HS%C z^&54>`+g?040C=Aqg7@gq*{tC5-55>`@|`F?CAx=OH<8Rs0a6lhsT7qK0-t~?UUzb znPHMkBNA)Pqk0CWpvbTj#qepoC$=^8iYiFf`HT#D>8FlQ!#44YAr7dW&oQz1B(2Yb zr!aTDQG80cnwwr%74Y9}@)wt8WtXnNb2fdGYJXhm6t0fzlCrSG=nu!0b>V+hciz!( zy=}iI5u$`3O4LM&BwBPqkcgf^nl_k3XE36UItf3~31S36^r#auqnAW45uF%y^fnlE zFeYdJp7WMG>%7l-*ZJ$L_m5eYVfMaf-(}zXy1t+9#kNyWw&3b9t3Bv~JtPOU+su3} zF3!)G{uTD{`GwS9VMeq<6d*$&d3eD&lcot6n({37+EfFdI@KjtWuGrtwumfSgm*KP zUYt&d(}a@v8%6eNDn4GPnK+QKbkYXQL$|L$F1fiXo5U>#)caIastaYx-!T19B6_)9$Z=Oc znJPdeRz-Ine5M8&Y2qRNrqJ2JPLcFRZ@8LaPJ@*0;>rECzT&NQk=8U9a|Xi^*fPB>W1ZHGOZ1WEfSjQ&mJ0R@R_(SnmZ*?{*QW-Q!r!l#QL1UvY2g zz1q#GT%*F{m3f&cKA*({50Yz?zbC*et=};`pY?paRCZe)_nbFZvo=%SgZ-h}O*Oa) ziey7f<%m(ev{B~})}Z%=Xg%J6jctJkI$KX5zAmvZkF?uvUCr5h_>=i^L@&#O6%pjl zN?1QIq8u_}Qkmed05j zLRe}%lQ^RuZ$ULH;QC-qz1u1Xs{wCGdZxZ)l^YP6dQ zYmn<4H$R7L)e5L#q;O~)W`erd<<3OmQ z8jK-jq-1F<-WJ`2UEEN;OmK)o>*MJycUHpD;!N{-*p1dANNXY0aNen8ima4g&yT#x znqRNqPt{U*hyn3XYQTU27KWUmB_LCB9oOdXB5)!@aV2c%>bou1AHvtGpomnn7NMfjN;;{gibsuCaIuo{MuW3?bR%uckc;7D^$r#0q0f%j}zK zT-Dz@RN3!Ivf+Qw^0j$uX^A+9n~p(PO9Lh6Qr%=xEWdtjRFP=`eh({JLn4+#+N_*! zGc4KfHp6R8Y!(~3YDDto zs9R^aECgd|o|Wiu${?I!FxcvF4bOYO-Li3sV`et9q;4SMbQVDT_cQo2o8R<0sZjMgF;v+BN>{2EPLR`HlFvIu)g+XzJ`Dc)aci z`qx2_^Dqb;O_2iFiyTSk)J5cnZY8x!I`^cv`!gotECX7i=PyY~wNl)v-LZrHQtQ z;2j<*vAI+ocaH|7l;4%{fg=KRMfoY6$7I3N&^NFBR+)xRno65)5}HH3gFHL&xHEg^ z&$`s1HVa_x4N(rT(coFgDo3cEF62ljk=-#6{h}|d)35|S)OT>pO*V^bttwcqh8S=! z{4f(We|k@A1K(THF{phbuY|`{G2&9<3zz3wOn>cB>|6N**q$_W{5jOCDJQN>p(-m{ zm&|yyF|^XD%C-YKiY`^r^>q+$c(tnJG%E3M^IO9M$879}r^spPk30^Mto_3E!!F@@vIn zv*ty<*#iO)T0Y31cQqcjAY3>*L#8t(KwpXK^2XK*Uw=vxR6BdQO7X39;y?a(|8*)5 zQ_F+Y-Evm{I}rB&`tm+HsfU~_BKGBrG0uPNCcgZG5f!Zmh!sDcyOH>dFJi<ryn{IAIHKN~9oIZY`+=PM<};qa=)v$;Th)$Z zXXFW&!rGTJ3b2-~Jmc&;e~r2v&FY@p z`e2rw;yp7M=h_yU5VKsFO*ENLk5-QUj7B17F7bM=3F+p(5Yvw!;ohz=xIYVQh1y;! z3ky7P~+lQhrbC@Ytug#@lxu24Y0P(Xhe9WABS-uq2+d?RCj!Y~pJU zQ+o`<#N=$W&h`A@XDWjBhG@y%v|Bb^*YMug zVnVcOvgHi^Yd02({B-ht{BH^f^WW+bU3~>o=p?yG@NezNJ62%RkB&al6xaDbl1%@W zjN*Sl?hcmy(m)swSD`J2bALah2`{b55(Z34()B$$x>U&N3`1P{`xusby^r@xj z{86k}X<7EyuhnA`Id5lX?j&@C7*jsirl1_4TUWEKqCeGwb5>9UVZv1j_g(}B#^w^I z7rv}N1F#6ok9Rt$jjxfP8N$^dXXwv?GFGohe({<+lA9$Z@aVbO7!}7IbUvFa`s6wKPIF;wz%~o zZ)YlDSfD9_C`I6IKMCI~B-j|Gw4F@<%rCrGH!-c6Edz4?U=cCtV`MYTHph3BFdnJm zL=gO5*rs}Y)O!I|JbBTeFhIOBB{fOex1z&cCjPz&|4}ku=Jvb|;?P&5xsix4=Nmr- z2mhSmB09`B)6T-58p>yKk4OLm(?vq~y|z0i54(>Ty&#_qiESByad_<|`Sv%(RSYjp zs}KLgiG}guHg9vfP>p>I`*B8UobCbYb0EYki@8ZM(3A-A`o7h$p?29Zy{_!Xofcco zBRh&9h3EG)G=}B+i8n2z))P8!Pp++b!g#*1$p|+Y%^e6L`PP}7J8qNvAOX!O;`m*s z{9XB^B~PCT;k~*uuKEL2sSz?KyjOF`pyV@L-{Q+K1p~|tJ(2s@`GIXa`p^TE`dK={ z;S?1!BU2e_JnY>IqkEL(m)0IuYl?hm@z-AJRhf?r-pfr1L%~vT&z3A^j1vh$ATL0M z7yaJM!yB&<4X}iBEeoc083lPO0XVvu79P_3@M{gc zBRim=j|Z%P*K(q}uoCCbL$E^4sfDRAk@*7ozYyaIT4SeRS7+mB?VW>|WhOZ-1bi#s zl##Yeks^-vnn^0jfSA4D3b7*aMHdmPA&tYTv$C+l>Gh}GjOkJHC~P(ZI$d*Xxu41T6RKJ8!H|b6?;??%_v>z4z1MY6>ePLDL6y`TzcIWFyIBZM zB0=7Eo+lV=%*{rs&^VM31$vHJRBy#?^wjJev<**piU}dg%sw)|dqq+|IQHk-o8|x< zR7tw|8TvXq<<-Sbt=Fa}oQ6S6yusd26i>$FlVF#|O6)GQx`gN^2)QiKnV$2Uj5<{~ zd{1m#K!icK0i%z28q2=CRd#tF>s~#y`t>@7cD>4lWg2d&$*Y_qas%0=h=$Duw3Nr} zY4P^9s>(p1Xc@fliL0{a;Pye#{pTOCrsfU1VY~+IRC5lQqUN(WwKxeB$|ZXT7ICAY zV)C#AzF&*g4{G%|j$#!}==v!wI;-XkjSS`|kM7J6t;s7IjU(65NW%U^CN;ojX$oId zd{L~k{V@%%<}8V2ZEL1QIP$7aKBz@b>Y~A}56CSX%&}Tp6p9I7JQy6Kq#30?+E>OT z#c&U&V)h_~^Cs9tOBRG5!62Wz^$@;jtZmv;`Q07O*MzJS zGf(G^|5DoI7#n%LDX8S*7x4k_a*1+xC=3A2&*lIt+ncC_M!lHV>->1g{v?06e_SJ9BY#BT zx!rrQnHdbySZ8=`K+VHSmEy5qNG%glp89tT7X;8M^rxDRb=qMn3c1iUyZw3P?oCXs zSfb>9ESF}@4=Fdnqc_`boae)+6%8ME_U}Jk_JytNHO|hC_iWfpAjx%;TTS7$PR&gf+MPruE*xOKtPqR)NIFS6q`nai_x8#u-iBU6wNK$3Yd5Hm^1wL9$?b}OBYlU-Z z$E!0-GegVZ4I&W7k&QPZo+s$*5Fzv8dJApr3jUc%-p-{}W9hy@<+Qmq7|)tFXx+=k z_k8N-_}-EW33cPoh^$OuH$sj{#^b%bGkNWgp00I^jo-R@cM5`M{mL9;E&KhaCcyGI zgJe&^JAnM)H3=>36aYN@i3W3{WY!v=9>(vueO=IZ^*5E9v>R@^p2dOvhIH?86Ssvv z7IN!&wbWJOrbD4r@q+e|eZw}Ho#QVI>O7X{2@W^c$sNbI+T{%oU7l@5hl#)Euo-gH z{vdTki`89Qy7J7U+{y}BO$PXuuI%<*{8=D`l%!M!Azwypg5x)vi8^W+QVEj?K2tkk z*$;GxpA2?wa_bl6!B01TG!fNgvjkuMxBLCS-}nFJ&*u>?Zr=2_o{Y_aQ*@tbnHtqT zr#rTZd+k5!zpoZj&lDj+72PDr&WmWMxyx3@6+Gt5f%yS_cKB>+s4>obp_Qu-nZlm` zDsT3Fp$>I#t!sw0%YJJ@XjYlB{!TfjY*N>=(DCT#knmAutO_L{8LSs_!IvGuCl`rU zV{u9wQvC`o0e^TAxqK0+O+~GVh4Z}XoZhgEZ{OyGLYTa=sMf5wo6_}$sZ)8sK`kUR zu6OwI&mRb8PxtxLUkXdUYy32@7z+m1A5Yo^o&4I%k8JCBl`~hHfiFkus##T$3@GczdOt6P+Ul&~FiPJ8#{0gi^a-#fISV!~ZQ6%l@L-|A%IIqE+ zl+_?1O_RXZ+2T85W14s}BjXVzf0K~_J7EO*@Tn5mP;W`_ie7>e;?jLvfnBsBS~rs| z;^wjbE$rOfUYyLEp?W?O1J<-6<(s|86N!|jvY_6l>8E;m*^D{?eF~$ScvsfbLsgd@ z#9tUD4!~KZDlG`V$miwcap*4l_KN*?YxV2!evvrQVq(IMgXvCZG=`g(LvsuxE-?Et zYHu_C+6x2&$T345XPo!;F<1@?92 zv_?Sn+tDOE6nqD=K27)C9-ArrcEqNxLO(F*kQC#;*el^aunUf zKkIm8C)8Ggr~Ftr5*@Lv&)ix7)rE2C@KuhSroh0eG#mxasVR;ce%NA6$TBXa?CYvdn=x8FTZ zLf58f4M#O=jW7PROEpCL#ueSD)-Aw~itL$aN26LH97=B?bQ_QIY?%u|p#X|AXqBBy zoNSYJl7EC<{`6zuy4X12k)bV;Cc5UdQ+E5^)8|&jr#v2g70gNT0>dM_YYpC?wHI3F zr=__;G*7_agQ(0c1a68iUaGk`kQ7EkG=L7PUJoA26eK3&&I})osz~8(+KpJ7y2&Yn zXqAqofh^^b#!k3DxL?p!o_HGBjGpV{r(2$0v>{S*~xqK=;a!CR1gRG#`8!a`wL; zp~P~E@#s@l*KyAwIi~nb;U?lh7AsPj+wgMfnp!f9JKCm7if<^t*VT?wP2NvY;1i*` zQ<9Z9IUfQ)%c~x2(7YO(lcaC_FeV32MPsiL_bHK4r$Z5?nv*y*wpIa}Iohb*7oWvf z%=bMu1{tV7bG-LfZoHnhNC@$zRi{~{Kwa5^#b96*@SN5*F1EqSQ8C-S>+f&A zPz3DwsV?hWJCuvol-p{utH~@$&YWH7$Myn&q)+R0K7}|Y>UQ~jj%3v$Xnvg)^E(eA z=}ZqA=M^$@@L-cPQ4;EFlhf}MkUPz?=VYG8=lxZRg8kd|H{ZU0r#R~K3%in1AK*<> zh8j44MK+_Yz7o`0X+Ig_`sr7>Jf_MfENMXUn?n@pLMd)P{7pc(=E!Tf_>_1v*) zt=O}l$V^LQQK{21w2On2+t$QN{ag1{#l^H8rJLrK5}yt*Cw!4Pf$n22sshfcvSYH1 ztQ|`2JF3>is80Ny5<49)^Tn{?Xu+g$^#&housv0Q=gHmq28lJob_w(BRsX=_0k zC6SN2Qj>Tq4b2-#diU5{>+4gD|1&>i0^6bat`Mw3{Eo9!n$>f)8kOS?h$fy32^kfB zDiyfH;ifH;sJ^aVF7O{gAd_a2+*tt{5sIL)A5;;{2DuXGjS|`qYuzKP=^GoWG-|%G zJ@|CpD7#ugCDdBA!bEeZ4u!QnYuzNH?lu5fzHw!6mYX_ffmE1fo6qG zMYw~?5s9rb!Q^=-D*2~B?sWCszr>YUvp^Fw{wYxOEW@ivRYgCam}7{SJZ}my>ih z*Q!JN4(0s1E&Z;wPgi9a9l~;p`uktKkrdvhcj!y~2CyVA{U&m=zbppvrfQ(mucWn1R+TSaqh?HXz?F7F$r6(@ zLAmVF0TcI4WbB-+KF?OlMupKUJ-@IFv zVY846PcjcT9aCY#fu25p$B$R8kC3Q#{$VYZ@`3)fV6g92_2tCh6jDNCkL#ig5gWUW z>An-PsDO>fg*O&f&Vo5sF;FNt_!K8LbBmbZlru$?-)ON1N#YZ*aJnG`i$q@i&xx}0 zmWm1P?mr~tnQk3V$@B7h9$F8PIQ-_T0j)D?A0(*}B;o|5AA&MZY@6Te8r}P9kol1Sy<~!Cy8_9?Hh!1y;Yjvp6gC`{367A?{V| zCra&(W`4PT9;dphEYAYRLw5hDHOE1x9bK-Ls>|IB^qkT>=PG$8e(G>`-mRH12Q;dT zuE9RX^ubV4qt|Z=U~#6xj;fwp3%*b{-i(tc*rtIRd~VQZiohFYM?KM=+M+N%zl6{P;s%bBN(3PGftk=2X5Bz<%*a z`GwTA=H9El%nL`eX#28q2y}R(iEC#iLSR(RciaXua;;{!RMPT6!@Ivybs5+w27&a{%|F5R%CJ&271jc;*Ngek(-7@Akvkue~)7Y|aUvO(LHr)yQ+W zbmF4203o)*-jEg8_vP3||862g+$8fih2kQSDW9kXG9{k2m*GwWEd3!&VEx>+W~|n{ zW3stZRO-u#b7EgIT0OJwP=wPk8BUD43J?UHXGB5`V6?N-X7GgIz6R{=bK;Ak5(Tf6 zOSEzqv6H?pDr2L$X%R(vi z%!=fb5pU}Q%l4WuW`KJo3p&|M@!?{a636JW=LZ8-YU;VM2~>xZ}T@k{r5!n`C?A$^nb zwL8ZTGB-&l9oN@Ur4^Y^4Cyr+PJh%;G1@dB0FSBAfA<0@!oYQ9QQ;8*3?=MYVhE6M z?;r)x;C_Z$>za@;A3wUv^F@VTzMG)?)=HR{Gpsk^@te8XB0W%@JE_+ZZx%{5WKxBF)_~?gpii8K4=UETlsWFQ@ z3;U_&S^LTfh8dsUg6yWu7J6zSUY}S2C2fj{(d{z7;Qr&fLz0WN6~pYyYg=*`RaVP# z-xS7zolD!ghHkc*b(o5KAlRDt%t;CaOJs^eDFS9@xmIQVQK4XDl09yjD)s(@ANMK0 zZA@bPMZ%k8n&UAUo@5rM2AW*Ql(gV1yBpEvX6rc}j~z2D>st>g_OykZIUW3qSnhnM zIUjfSsUfH!P@R}6pPL=#D)6(X{}CoxJorbFIHtk06RLwQ*2EOb z0p73EzI&5PdpDGo4{TN;yrcVLq6xR~rCN1$bx??d>FnkVKnT-U2jf#8cWf>+ z^05-j{BT)B9oKTSt4N!=ZDm|HrXNY!RNsUEqW z2=!wTNxK%qe5F$Pwe+0S?el9y&qKrd@q>Qm=pb#Au|Tza?Aj6X2=HMirDdEgnshIN z6@Il9EzRFq1`WNW!(Z5yf#?zsZ2ab$BNB=6+JkbjhT!HwayRZY9r|GtIW{Kxq2=L# zPCQFX!37IF&Ny0kh)M&3Urs;Pr0uKo33V9CNog0Xts3fggoC;-*gY}N~8V`r&0}$Y2KUh;eH@5oQCDw2L#<>9t@$9osFo${le#Ri+ z{F?if-7p>rdp^51y3Y@5u6=poLn=c~jFBD^nFD4%!av;E&)%!77Wx^#FT#>0!`brXq(mT>aiuFCk||(FFWqTp6IOW8o2A3N;64+ z?TP-)uw32)=CIOl>(4?`c*J z72O^`A)zOOjH`~_@Mlmmn9RNQ^DzL_{8LWD4G?ly2h*n>&?|~>2}=uUO1!Il@mA!u zcHugd4*7>P>Y3e5RmaB1(or8RY|-{dQ7XECnVmsib@PP3TS5dYV}NylJSo>n$afF;&Nrshr_ONoChXDE~Jv^UphDUq%Kq?biN#Z z^U{h6S?*7Y*0T*m69<}DinW9fQ_@v^Vas9N^r=3w(dD{Hd-RjlW;>|0sgHFGCMvZvZNxbU+Rg5Ud+$bE80bW0Ok z(7j};f$l;nvkCRqE~*dqb36%SHPqv7f&|JjaTZ>sRg1G?Av7qVWwM$g`sWqC&;es_ zw!x=t<|Q$O;>I&tvO6PAkVNI}W&f~oJT1y%iaT#emfKRZ=NKE-_;xb&J#(_dl)*(# z#ZF!+qw3Bw2Qo|Q0TCU`f+YuNe@*YI@-ox7tY5t?4T;MePa8B>@e$ru0OW_jHqG{n zq8*xf085-F4~=oMhQwA(zghgV3q}*}wsjH6aua?I{0nB} zzhgx*tR@|&8S*Q-SzfE{b3vrX$?!ga>;b$HSuG`7vflbV7K zMhS_R1;UnGe-yU`R=oR1Nw*>rCE!?xU=9|(KL@4v`Z~^s!xx;svW**j_ip*gc{VyN zMXIFNltSk=w^D*0Vs)zr7D>I3;{}B?GEkX;&kjW*qysP&6Zu9pUX_zr{j6fl`;ttn ze^pt&Hb_v6Kl{Df`9pys7h*OHk{lSB4FK^z4ZvR$^w4h(P@ZKV2kevtxY-XAOx}>R z=fLR!2o^Zv+0I$}j|XspQJ1_bKN}Is5v7pccYZvtEbkN5*s|Vu!C0M}6n2)Q&nlqz zmfog#^JNQa*0BF- z^Y#wlB?Qf{CTcF!_j2n`A}+wA0+hR7hG6IK-S&y|6E-3U+<7FUR9X3^mzv6!t9zt@ z7qyBix{;l|Zp>6*fE@4jbP}>3a+t2X>q}XYZu1gMg;!j4+<Wd-{>SiT^B(EJO@}uzu$c zJt$G0Wipk>_OtUVu*h378-2{CQtA7}dXC4==3VISkiTV9))JzNy{a0rSG|(GV)aK) z#{W5#%-42~+NI%|q-U92WBjcbC%M63T2NxuT#bzDFUEO}tLv|fZGarOS=s(Z1nD|T zh3oy`q?ulw?UGx5qLk39HXq!?K=^Zu#60HqJ9mFm{CRBcR4CwZYY&iVfJ`p3#7Y3* zF6YjygG8)`U}%u>r6$+7T$jVW&RPwLMR!iy%UaskLe0>qpw|_Dc8cSFUO73ds28UH z`Rkv<H6f zN`PTs4rqHdoJ&j!s-Y2OJ+cTfJA*Yg9pw-EA~Pj&MNi)%r}zURep3*OzX;^y?W(O| zn#okaN7^4RB8H&|(nUbK8TE;AZ_XqN-A_$=U}V)G_})7AVAY4iG`ifBxe-JZn7) ztXkdP8wb*IJ?$gG!|CaG81NLBbv$(#j}`4yQi~A83^%9+;O=SYl1G|G*VH4VCXt-#!6K`xp>t-r6=a?+Mk{ zBtPVUOzipj#XbCPmIUP?72aqH{G%;@_Q~hRdVKwb$2Xd9DBM^CT;vr9mt~zCMVPYTRKqCn2y|QnUyPqdK6WznbLwr49=EShMEPgl?Jb+SxFh zj({5ZHfA|+YR308Z|S)CyWfn>R*A$INuc>~lz0r@P-6`=Cps)Ju{rDeqPB+1RlunA zFWs^V1KxsiyWN~nAz11TpA54 zDE8V2K;fU)>x@i^Rcq4SYQ60Klk%b>Bv~c?#1;0N;til=Aw2W@qZ3Ocp7-_+0Zs0< zK!_YAbMy>b^8TjSb%Xslxgi-b!*baSjv}*6-9x>ZY`rvBjjmo9d&vOHRZl4f=T6=nfWtp!S{RV+ zN3T_FRbjoSM?bUN;uvRNesW{?rQHRV$ICT=4!3pZNcZy{PrNfzZlshWpi>swqL$we zwL>>!zA6c9*@Vw><)!i};8jA+RR5e$|I`e5ax(?XU6|A8>N^BpZs}6 z|C|;^R9??A|JBi-QT|_!N};W(`^Van`%eQ){r|@)hk#wy-(ET>VA&)et# literal 0 HcmV?d00001 From 747957bb40ce238d2ff72bb8cbf122eb2577c0e8 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Tue, 28 Jul 2020 02:59:00 +0430 Subject: [PATCH 065/106] [Hosting] Move to GenericHost (#24297) --- .../SampleStartups/StartupBlockingOnStart.cs | 19 ++++++--- .../StartupConfigureAddresses.cs | 20 +++++---- .../StartupExternallyControlled.cs | 16 +++++--- .../SampleStartups/StartupFullControl.cs | 41 +++++++++++-------- .../SampleStartups/StartupHelloWorld.cs | 16 +++++--- .../SampleStartups/StartupInjection.cs | 24 +++++++---- 6 files changed, 86 insertions(+), 50 deletions(-) diff --git a/src/Hosting/samples/SampleStartups/StartupBlockingOnStart.cs b/src/Hosting/samples/SampleStartups/StartupBlockingOnStart.cs index dca16710e9..fda2dffae3 100644 --- a/src/Hosting/samples/SampleStartups/StartupBlockingOnStart.cs +++ b/src/Hosting/samples/SampleStartups/StartupBlockingOnStart.cs @@ -1,9 +1,11 @@ using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; // Note that this sample will not run. It is only here to illustrate usage patterns. @@ -27,20 +29,25 @@ namespace SampleStartups } // Entry point for the application. - public static void Main(string[] args) + public static async Task Main(string[] args) { var config = new ConfigurationBuilder().AddCommandLine(args).Build(); - var host = new WebHostBuilder() - .UseConfiguration(config) - .UseKestrel() - .UseStartup() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseConfiguration(config) + .UseKestrel() + .UseStartup(); + }) .Build(); using (host) { - host.Start(); + await host.StartAsync(); Console.ReadLine(); + await host.StopAsync(); } } } diff --git a/src/Hosting/samples/SampleStartups/StartupConfigureAddresses.cs b/src/Hosting/samples/SampleStartups/StartupConfigureAddresses.cs index 294497bbf7..123fb56e46 100644 --- a/src/Hosting/samples/SampleStartups/StartupConfigureAddresses.cs +++ b/src/Hosting/samples/SampleStartups/StartupConfigureAddresses.cs @@ -1,7 +1,9 @@ +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; // Note that this sample will not run. It is only here to illustrate usage patterns. @@ -19,18 +21,22 @@ namespace SampleStartups } // Entry point for the application. - public static void Main(string[] args) + public static Task Main(string[] args) { var config = new ConfigurationBuilder().AddCommandLine(args).Build(); - var host = new WebHostBuilder() - .UseConfiguration(config) - .UseKestrel() - .UseStartup() - .UseUrls("http://localhost:5000", "http://localhost:5001") + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseConfiguration(config) + .UseKestrel() + .UseStartup() + .UseUrls("http://localhost:5000", "http://localhost:5001"); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Hosting/samples/SampleStartups/StartupExternallyControlled.cs b/src/Hosting/samples/SampleStartups/StartupExternallyControlled.cs index 296fcc0b0f..8a8523bdb9 100644 --- a/src/Hosting/samples/SampleStartups/StartupExternallyControlled.cs +++ b/src/Hosting/samples/SampleStartups/StartupExternallyControlled.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Hosting; // Note that this sample will not run. It is only here to illustrate usage patterns. @@ -11,7 +12,7 @@ namespace SampleStartups { public class StartupExternallyControlled : StartupBase { - private IWebHost _host; + private IHost _host; private readonly List _urls = new List(); // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. @@ -29,10 +30,15 @@ namespace SampleStartups public void Start() { - _host = new WebHostBuilder() - .UseKestrel() - .UseStartup() - .Start(_urls.ToArray()); + _host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseStartup() + .UseUrls(_urls.ToArray()); + }) + .Start(); } public async Task StopAsync() diff --git a/src/Hosting/samples/SampleStartups/StartupFullControl.cs b/src/Hosting/samples/SampleStartups/StartupFullControl.cs index 81a2605557..035efb5d1d 100644 --- a/src/Hosting/samples/SampleStartups/StartupFullControl.cs +++ b/src/Hosting/samples/SampleStartups/StartupFullControl.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -13,7 +14,7 @@ namespace SampleStartups { public class StartupFullControl { - public static void Main(string[] args) + public static Task Main(string[] args) { var config = new ConfigurationBuilder() .AddEnvironmentVariables(prefix: "ASPNETCORE_") @@ -21,30 +22,34 @@ namespace SampleStartups .AddCommandLine(args) .Build(); - var host = new WebHostBuilder() - .UseConfiguration(config) // Default set of configurations to use, may be subsequently overridden - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) // Override the content root with the current directory - .UseUrls("http://*:1000", "https://*:902") - .UseEnvironment(Environments.Development) - .UseWebRoot("public") + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseConfiguration(config) // Default set of configurations to use, may be subsequently overridden + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) // Override the content root with the current directory + .UseUrls("http://*:1000", "https://*:902") + .UseEnvironment(Environments.Development) + .UseWebRoot("public") + .Configure(app => + { + // Write the application inline, this won't call any startup class in the assembly + + app.Use(next => context => + { + return next(context); + }); + }); + }) .ConfigureServices(services => { // Configure services that the application can see services.AddSingleton(); }) - .Configure(app => - { - // Write the application inline, this won't call any startup class in the assembly - - app.Use(next => context => - { - return next(context); - }); - }) .Build(); - host.Run(); + return host.RunAsync(); } } diff --git a/src/Hosting/samples/SampleStartups/StartupHelloWorld.cs b/src/Hosting/samples/SampleStartups/StartupHelloWorld.cs index a02513d201..0af69a7bd1 100644 --- a/src/Hosting/samples/SampleStartups/StartupHelloWorld.cs +++ b/src/Hosting/samples/SampleStartups/StartupHelloWorld.cs @@ -1,6 +1,8 @@ +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Hosting; // Note that this sample will not run. It is only here to illustrate usage patterns. @@ -18,14 +20,18 @@ namespace SampleStartups } // Entry point for the application. - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() - .UseKestrel() - .UseStartup() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Hosting/samples/SampleStartups/StartupInjection.cs b/src/Hosting/samples/SampleStartups/StartupInjection.cs index 163ac165a6..88703a8177 100644 --- a/src/Hosting/samples/SampleStartups/StartupInjection.cs +++ b/src/Hosting/samples/SampleStartups/StartupInjection.cs @@ -1,8 +1,10 @@ using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; // HostingStartup's in the primary assembly are run automatically. [assembly: HostingStartup(typeof(SampleStartups.StartupInjection))] @@ -17,18 +19,22 @@ namespace SampleStartups } // Entry point for the application. - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() - .UseKestrel() - // Each of these three sets ApplicationName to the current assembly, which is needed in order to - // scan the assembly for HostingStartupAttributes. - // .UseSetting(WebHostDefaults.ApplicationKey, "SampleStartups") - // .Configure(_ => { }) - .UseStartup() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + // Each of these three sets ApplicationName to the current assembly, which is needed in order to + // scan the assembly for HostingStartupAttributes. + // .UseSetting(WebHostDefaults.ApplicationKey, "SampleStartups") + // .Configure(_ => { }) + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } From 2243f3f1719e424f4024daefeb3e1d6120a44bf4 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Tue, 28 Jul 2020 12:32:46 +1200 Subject: [PATCH 066/106] Rename KeepAlivePingInterval to KeepAlivePingDelay (#24308) --- src/Servers/Kestrel/Core/src/Http2Limits.cs | 18 ++++++------- .../src/Internal/Http2/Http2Connection.cs | 4 +-- .../Http2/Http2KeepAliveTests.cs | 26 +++++++++---------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Servers/Kestrel/Core/src/Http2Limits.cs b/src/Servers/Kestrel/Core/src/Http2Limits.cs index eccf7e0598..99329be0a1 100644 --- a/src/Servers/Kestrel/Core/src/Http2Limits.cs +++ b/src/Servers/Kestrel/Core/src/Http2Limits.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core private int _maxRequestHeaderFieldSize = (int)Http2PeerSettings.DefaultMaxFrameSize; private int _initialConnectionWindowSize = 1024 * 128; // Larger than the default 64kb, and larger than any one single stream. private int _initialStreamWindowSize = 1024 * 96; // Larger than the default 64kb - private TimeSpan _keepAlivePingInterval = TimeSpan.MaxValue; + private TimeSpan _keepAlivePingDelay = TimeSpan.MaxValue; private TimeSpan _keepAlivePingTimeout = TimeSpan.FromSeconds(20); /// @@ -147,18 +147,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core } /// - /// Gets or sets the keep alive ping interval. The server will send a keep alive ping to the client if it - /// doesn't receive any frames for this period of time. This property is used together with + /// Gets or sets the keep alive ping delay. The server will send a keep alive ping to the client if it + /// doesn't receive any frames on a connection for this period of time. This property is used together with /// to close broken connections. /// - /// Interval must be greater than or equal to 1 second. Set to to - /// disable the keep alive ping interval. + /// Delay value must be greater than or equal to 1 second. Set to to + /// disable the keep alive ping. /// Defaults to . /// /// - public TimeSpan KeepAlivePingInterval + public TimeSpan KeepAlivePingDelay { - get => _keepAlivePingInterval; + get => _keepAlivePingDelay; set { // Keep alive uses Kestrel's system clock which has a 1 second resolution. Time is greater or equal to clock resolution. @@ -167,13 +167,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core throw new ArgumentOutOfRangeException(nameof(value), CoreStrings.FormatArgumentTimeSpanGreaterOrEqual(Heartbeat.Interval)); } - _keepAlivePingInterval = value != Timeout.InfiniteTimeSpan ? value : TimeSpan.MaxValue; + _keepAlivePingDelay = value != Timeout.InfiniteTimeSpan ? value : TimeSpan.MaxValue; } } /// /// Gets or sets the keep alive ping timeout. Keep alive pings are sent when a period of inactivity exceeds - /// the configured value. The server will close the connection if it + /// the configured value. The server will close the connection if it /// doesn't receive any frames within the timeout. /// /// Timeout must be greater than or equal to 1 second. Set to to diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs index 28002d804a..136e8d3cf4 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs @@ -107,10 +107,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 var connectionWindow = (uint)http2Limits.InitialConnectionWindowSize; _inputFlowControl = new InputFlowControl(connectionWindow, connectionWindow / 2); - if (http2Limits.KeepAlivePingInterval != TimeSpan.MaxValue) + if (http2Limits.KeepAlivePingDelay != TimeSpan.MaxValue) { _keepAlive = new Http2KeepAlive( - http2Limits.KeepAlivePingInterval, + http2Limits.KeepAlivePingDelay, http2Limits.KeepAlivePingTimeout, context.ServiceContext.SystemClock); } diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs index 47176d32bc..71d2bcbbba 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs @@ -12,9 +12,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests public class Http2KeepAliveTests : Http2TestBase { [Fact] - public async Task KeepAlivePingInterval_InfiniteTimeSpan_KeepAliveNotEnabled() + public async Task KeepAlivePingDelay_InfiniteTimeSpan_KeepAliveNotEnabled() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = Timeout.InfiniteTimeSpan; + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = Timeout.InfiniteTimeSpan; await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task KeepAlivePingTimeout_InfiniteTimeSpan_NoGoAway() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingTimeout = Timeout.InfiniteTimeSpan; await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_WithoutActivity_PingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_WithActivity_NoPingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -104,7 +104,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalNotExceeded_NoPingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(5); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(5); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -122,7 +122,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_MultipleTimes_PingsNotSentWhileAwaitingOnAck() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -146,7 +146,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_MultipleTimes_PingSentAfterAck() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -185,7 +185,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task TimeoutExceeded_NoAck_GoAway() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingTimeout = TimeSpan.FromSeconds(3); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -217,7 +217,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task TimeoutExceeded_NonPingActivity_NoGoAway() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingTimeout = TimeSpan.FromSeconds(3); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -250,7 +250,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_StreamStarted_NoPingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -275,7 +275,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_ConnectionFlowControlUsedUpThenPings_NoPingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); // Reduce connection window size so that one stream can fill it _serviceContext.ServerOptions.Limits.Http2.InitialConnectionWindowSize = 65535; @@ -330,7 +330,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task TimeoutExceeded_ConnectionFlowControlUsedUpThenPings_NoGoAway() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); // Reduce connection window size so that one stream can fill it _serviceContext.ServerOptions.Limits.Http2.InitialConnectionWindowSize = 65535; From 0437117cfb5bc91a34878fb962076bb05f4b8273 Mon Sep 17 00:00:00 2001 From: Youssef Victor <31348972+Youssef1313@users.noreply.github.com> Date: Tue, 28 Jul 2020 09:58:27 +0200 Subject: [PATCH 067/106] Remove extra abstract keyword (#24274) --- .../Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs index 559ce47bc5..d762777c5f 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal /// [AllowAnonymous] [IdentityDefaultUI(typeof(ResendEmailConfirmationModel<>))] - public abstract class ResendEmailConfirmationModel : PageModel + public class ResendEmailConfirmationModel : PageModel { /// /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used From 085921305a64d89d52fdcf100f70d2d5a59e1765 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Tue, 28 Jul 2020 22:32:09 +0430 Subject: [PATCH 068/106] [IIS] Move to GenericHost (#24280) --- .../IIS/samples/NativeIISSample/Startup.cs | 20 +- .../test/IIS.Tests/Utilities/TestServer.cs | 41 +- .../samples/IISSample/Startup.cs | 16 +- .../test/Tests/IISExtensionTests.cs | 30 +- .../test/Tests/IISMiddlewareTests.cs | 484 +++++++++++------- 5 files changed, 360 insertions(+), 231 deletions(-) diff --git a/src/Servers/IIS/IIS/samples/NativeIISSample/Startup.cs b/src/Servers/IIS/IIS/samples/NativeIISSample/Startup.cs index 96c77e15cb..2535f3a247 100644 --- a/src/Servers/IIS/IIS/samples/NativeIISSample/Startup.cs +++ b/src/Servers/IIS/IIS/samples/NativeIISSample/Startup.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -12,6 +13,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.IIS; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; namespace NativeIISSample { @@ -115,16 +117,20 @@ namespace NativeIISSample "WEBSOCKET_VERSION" }; - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() - .UseKestrel() - .UseIIS() - .UseIISIntegration() - .UseStartup() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseIIS() + .UseIISIntegration() + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Servers/IIS/IIS/test/IIS.Tests/Utilities/TestServer.cs b/src/Servers/IIS/IIS/test/IIS.Tests/Utilities/TestServer.cs index 64415084d1..5943a18382 100644 --- a/src/Servers/IIS/IIS/test/IIS.Tests/Utilities/TestServer.cs +++ b/src/Servers/IIS/IIS/test/IIS.Tests/Utilities/TestServer.cs @@ -23,7 +23,7 @@ using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests { - public class TestServer: IDisposable, IStartup + public class TestServer : IDisposable { private const string InProcessHandlerDll = "aspnetcorev2_inprocess.dll"; private const string AspNetCoreModuleDll = "aspnetcorev2.dll"; @@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests public TestConnection CreateConnection() => new TestConnection(_currentPort); private static IISServerOptions _options; - private IWebHost _host; + private IHost _host; private string _appHostConfigPath; private int _currentPort; @@ -131,16 +131,24 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests private int Main(IntPtr argc, IntPtr argv) { - var builder = new WebHostBuilder() - .UseIIS() - .ConfigureServices(services => + _host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - services.Configure(options => options.MaxRequestBodySize = _options.MaxRequestBodySize); - services.AddSingleton(this); - services.AddSingleton(_loggerFactory); + webHostBuilder + .UseIIS() + .UseSetting(WebHostDefaults.ApplicationKey, typeof(TestServer).GetTypeInfo().Assembly.FullName) + .Configure(app => + { + app.Map("/start", builder => builder.Run(context => context.Response.WriteAsync("Done"))); + _appBuilder(app); + }) + .ConfigureServices(services => + { + services.Configure(options => options.MaxRequestBodySize = _options.MaxRequestBodySize); + services.AddSingleton(_loggerFactory); + }); }) - .UseSetting(WebHostDefaults.ApplicationKey, typeof(TestServer).GetTypeInfo().Assembly.FullName); - _host = builder.Build(); + .Build(); var doneEvent = new ManualResetEventSlim(); var lifetime = _host.Services.GetService(); @@ -167,17 +175,6 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests WebCoreLock.Release(); } - public IServiceProvider ConfigureServices(IServiceCollection services) - { - return services.BuildServiceProvider(); - } - - public void Configure(IApplicationBuilder app) - { - app.Map("/start", builder => builder.Run(context => context.Response.WriteAsync("Done"))); - _appBuilder(app); - } - private delegate int hostfxr_main_fn(IntPtr argc, IntPtr argv); [DllImport(HWebCoreDll)] @@ -195,7 +192,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests [DllImport(InProcessHandlerDll)] private static extern int set_main_handler(hostfxr_main_fn main); - [DllImport("kernel32", SetLastError=true, CharSet = CharSet.Ansi)] + [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)] private static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpFileName); private void Retry(Action func, int attempts) diff --git a/src/Servers/IIS/IISIntegration/samples/IISSample/Startup.cs b/src/Servers/IIS/IISIntegration/samples/IISSample/Startup.cs index f99b6ad729..401e4748ed 100644 --- a/src/Servers/IIS/IISIntegration/samples/IISSample/Startup.cs +++ b/src/Servers/IIS/IISIntegration/samples/IISSample/Startup.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -10,6 +11,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.IISIntegration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace IISSample @@ -88,19 +90,23 @@ namespace IISSample }); } - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuidler => + { + webHostBuidler + .UseKestrel() + .UseStartup(); + }) .ConfigureLogging((_, factory) => { factory.AddConsole(); factory.AddFilter("Console", level => level >= LogLevel.Debug); }) - .UseKestrel() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Servers/IIS/IISIntegration/test/Tests/IISExtensionTests.cs b/src/Servers/IIS/IISIntegration/test/Tests/IISExtensionTests.cs index 772fbde2c3..27e6404c3d 100644 --- a/src/Servers/IIS/IISIntegration/test/Tests/IISExtensionTests.cs +++ b/src/Servers/IIS/IISIntegration/test/Tests/IISExtensionTests.cs @@ -2,9 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration @@ -12,19 +14,27 @@ namespace Microsoft.AspNetCore.Server.IISIntegration public class IISExtensionTests { [Fact] - public void CallingUseIISIntegrationMultipleTimesWorks() + public async Task CallingUseIISIntegrationMultipleTimesWorks() { + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .UseIISIntegration() + .Configure(app => { }) + .UseTestServer(); + }) + .Build(); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .UseIISIntegration() - .Configure(app => { }); - var server = new TestServer(builder); + var server = host.GetTestServer(); - var filters = server.Host.Services.GetServices() + await host.StartAsync(); + + var filters = server.Services.GetServices() .OfType(); Assert.Single(filters); diff --git a/src/Servers/IIS/IISIntegration/test/Tests/IISMiddlewareTests.cs b/src/Servers/IIS/IISIntegration/test/Tests/IISMiddlewareTests.cs index 890ce500e9..124b9b6c76 100644 --- a/src/Servers/IIS/IISIntegration/test/Tests/IISMiddlewareTests.cs +++ b/src/Servers/IIS/IISIntegration/test/Tests/IISMiddlewareTests.cs @@ -4,7 +4,6 @@ using System; using System.Net; using System.Net.Http; -using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Builder; @@ -12,6 +11,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http.Features.Authentication; using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.Testing; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Xunit; @@ -25,21 +25,30 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => - { - var auth = context.Features.Get(); - Assert.Null(auth); - assertsExecuted = true; - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + var auth = context.Features.Get(); + Assert.Null(auth); + assertsExecuted = true; + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -53,22 +62,31 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => - { - var auth = context.Features.Get(); - Assert.Null(auth); - assertsExecuted = true; - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + var auth = context.Features.Get(); + Assert.Null(auth); + assertsExecuted = true; + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); var response = await server.CreateClient().SendAsync(req); @@ -85,23 +103,32 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestExecuted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var applicationStoppingFired = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", pathBase) - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - var appLifetime = app.ApplicationServices.GetRequiredService(); - appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", pathBase) + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); - app.Run(context => - { - requestExecuted.SetResult(0); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + app.Run(context => + { + requestExecuted.SetResult(0); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(HttpMethod.Post, requestPath); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -135,23 +162,32 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestExecuted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var applicationStoppingFired = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - var appLifetime = app.ApplicationServices.GetRequiredService(); - appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); - app.Run(context => - { - requestExecuted.SetResult(0); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + app.Run(context => + { + requestExecuted.SetResult(0); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(method, "/iisintegration"); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -171,23 +207,32 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestExecuted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var applicationStoppingFired = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - var appLifetime = app.ApplicationServices.GetRequiredService(); - appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); - app.Run(context => - { - requestExecuted.SetResult(0); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + app.Run(context => + { + requestExecuted.SetResult(0); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(HttpMethod.Post, path); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -207,23 +252,32 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestExecuted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var applicationStoppingFired = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - var appLifetime = app.ApplicationServices.GetRequiredService(); - appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); - app.Run(context => - { - requestExecuted.SetResult(0); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + app.Run(context => + { + requestExecuted.SetResult(0); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(HttpMethod.Post, "/iisintegration"); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -236,43 +290,63 @@ namespace Microsoft.AspNetCore.Server.IISIntegration } [Fact] - public void UrlDelayRegisteredAndPreferHostingUrlsSet() + public async Task UrlDelayRegisteredAndPreferHostingUrlsSet() { - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => Task.FromResult(0)); - }); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => Task.FromResult(0)); + }); - Assert.Null(builder.GetSetting(WebHostDefaults.ServerUrlsKey)); - Assert.Null(builder.GetSetting(WebHostDefaults.PreferHostingUrlsKey)); + Assert.Null(webHostBuilder.GetSetting(WebHostDefaults.ServerUrlsKey)); + Assert.Null(webHostBuilder.GetSetting(WebHostDefaults.PreferHostingUrlsKey)); - // Adds a server and calls Build() - var server = new TestServer(builder); + webHostBuilder.UseTestServer(); + }) + .Build(); - Assert.Equal("http://127.0.0.1:12345", builder.GetSetting(WebHostDefaults.ServerUrlsKey)); - Assert.Equal("true", builder.GetSetting(WebHostDefaults.PreferHostingUrlsKey)); + var server = host.GetTestServer(); + + await host.StartAsync(); + + var configuration = host.Services.GetService(); + + Assert.Equal("http://127.0.0.1:12345", configuration[WebHostDefaults.ServerUrlsKey]); + Assert.Equal("true", configuration[WebHostDefaults.PreferHostingUrlsKey]); } [Fact] - public void PathBaseHiddenFromServer() + public async Task PathBaseHiddenFromServer() { - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/pathBase") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => Task.FromResult(0)); - }); - new TestServer(builder); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/pathBase") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => Task.FromResult(0)); + }) + .UseTestServer(); + }) + .Build(); - Assert.Equal("http://127.0.0.1:12345", builder.GetSetting(WebHostDefaults.ServerUrlsKey)); + host.GetTestServer(); + + await host.StartAsync(); + + var configuration = host.Services.GetService(); + Assert.Equal("http://127.0.0.1:12345", configuration[WebHostDefaults.ServerUrlsKey]); } [Fact] @@ -280,21 +354,30 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestPathBase = string.Empty; var requestPath = string.Empty; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/pathbase") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => - { - requestPathBase = context.Request.PathBase.Value; - requestPath = context.Request.Path.Value; - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/pathbase") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + requestPathBase = context.Request.PathBase.Value; + requestPath = context.Request.Path.Value; + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(HttpMethod.Get, "/PathBase/Path"); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -309,24 +392,33 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(async context => - { - var auth = context.RequestServices.GetRequiredService(); - var windows = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); - Assert.NotNull(windows); - Assert.Null(windows.DisplayName); - Assert.Equal("Microsoft.AspNetCore.Server.IISIntegration.AuthenticationHandler", windows.HandlerType.FullName); - assertsExecuted = true; - }); - }); - var server = new TestServer(builder); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(async context => + { + var auth = context.RequestServices.GetRequiredService(); + var windows = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); + Assert.NotNull(windows); + Assert.Null(windows.DisplayName); + Assert.Equal("Microsoft.AspNetCore.Server.IISIntegration.AuthenticationHandler", windows.HandlerType.FullName); + assertsExecuted = true; + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -342,11 +434,36 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(async context => + { + var auth = context.RequestServices.GetService(); + Assert.NotNull(auth); + var windowsAuth = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); + if (forward) + { + Assert.NotNull(windowsAuth); + Assert.Null(windowsAuth.DisplayName); + Assert.Equal("AuthenticationHandler", windowsAuth.HandlerType.Name); + } + else + { + Assert.Null(windowsAuth); + } + assertsExecuted = true; + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.Configure(options => @@ -354,27 +471,11 @@ namespace Microsoft.AspNetCore.Server.IISIntegration options.ForwardWindowsAuthentication = forward; }); }) - .Configure(app => - { - app.Run(async context => - { - var auth = context.RequestServices.GetService(); - Assert.NotNull(auth); - var windowsAuth = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); - if (forward) - { - Assert.NotNull(windowsAuth); - Assert.Null(windowsAuth.DisplayName); - Assert.Equal("AuthenticationHandler", windowsAuth.HandlerType.Name); - } - else - { - Assert.Null(windowsAuth); - } - assertsExecuted = true; - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -390,11 +491,24 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + assertsExecuted = true; + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.Configure(options => @@ -402,15 +516,11 @@ namespace Microsoft.AspNetCore.Server.IISIntegration options.ForwardWindowsAuthentication = forward; }); }) - .Configure(app => - { - app.Run(context => - { - assertsExecuted = true; - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); From 4aa5e03207a005d7310ba792c76f5339d74c3364 Mon Sep 17 00:00:00 2001 From: Tanay Parikh Date: Tue, 28 Jul 2020 11:21:33 -0700 Subject: [PATCH 069/106] Unquarantine Tests (#24295) * Unquarantine Tests --- .../test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs | 1 - src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs b/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs index 0e2773406f..2283a00208 100644 --- a/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs +++ b/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs @@ -1495,7 +1495,6 @@ namespace Interop.FunctionalTests [Theory] [MemberData(nameof(SupportedSchemes))] - [QuarantinedTest] public async Task ConnectionWindowSize_Server(string scheme) { var requestFinished = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); diff --git a/src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs b/src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs index d3aee43cac..0d69f49d2e 100644 --- a/src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs +++ b/src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs @@ -221,7 +221,6 @@ namespace Microsoft.DotNet.Watcher.Tools.Tests } [Fact] - [QuarantinedTest] public async Task ProjectReferences_Graph() { var graph = new TestProjectGraph(_tempDir); From e225057370ee3997835da0abf4daf432e9ffe466 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Tue, 28 Jul 2020 18:22:44 -0700 Subject: [PATCH 070/106] Add missing .ConfigureAwait(false) to WebHost (#24390) --- src/Hosting/Hosting/src/Internal/WebHost.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Hosting/Hosting/src/Internal/WebHost.cs b/src/Hosting/Hosting/src/Internal/WebHost.cs index ae935412b4..58cfc933dd 100644 --- a/src/Hosting/Hosting/src/Internal/WebHost.cs +++ b/src/Hosting/Hosting/src/Internal/WebHost.cs @@ -383,7 +383,7 @@ namespace Microsoft.AspNetCore.Hosting switch (serviceProvider) { case IAsyncDisposable asyncDisposable: - await asyncDisposable.DisposeAsync(); + await asyncDisposable.DisposeAsync().ConfigureAwait(false); break; case IDisposable disposable: disposable.Dispose(); From 01e05359d644a1f68c1e26a196fc3370ec9ded49 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Wed, 29 Jul 2020 17:13:46 +0430 Subject: [PATCH 071/106] Dispose CTS in WebHost.StopAsync (#24399) --- src/Hosting/Hosting/src/Internal/WebHost.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Hosting/Hosting/src/Internal/WebHost.cs b/src/Hosting/Hosting/src/Internal/WebHost.cs index 58cfc933dd..1e69982a50 100644 --- a/src/Hosting/Hosting/src/Internal/WebHost.cs +++ b/src/Hosting/Hosting/src/Internal/WebHost.cs @@ -325,7 +325,8 @@ namespace Microsoft.AspNetCore.Hosting _logger.Shutdown(); - var timeoutToken = new CancellationTokenSource(Options.ShutdownTimeout).Token; + using var timeoutCTS = new CancellationTokenSource(Options.ShutdownTimeout); + var timeoutToken = timeoutCTS.Token; if (!cancellationToken.CanBeCanceled) { cancellationToken = timeoutToken; From 5e49fc336e4464711ff2a8db2e00b9bafb518c78 Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Wed, 29 Jul 2020 14:49:50 +0100 Subject: [PATCH 072/106] In CSS scoping, support ::deep alongside other combinators (#24376) --- .../src/RewriteCssCommand.cs | 35 ++++++++++++-- .../test/RewriteCssCommandTest.cs | 48 +++++++++++++++++++ 2 files changed, 78 insertions(+), 5 deletions(-) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/RewriteCssCommand.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/RewriteCssCommand.cs index 6369d3bc93..f9e33cae14 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/RewriteCssCommand.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/RewriteCssCommand.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.Css.Parser.Parser; using Microsoft.Css.Parser.Tokens; @@ -18,6 +19,11 @@ namespace Microsoft.AspNetCore.Razor.Tools { internal class RewriteCssCommand : CommandBase { + private const string DeepCombinatorText = "::deep"; + private readonly static TimeSpan _regexTimeout = TimeSpan.FromSeconds(1); + private readonly static Regex _deepCombinatorRegex = new Regex($@"^{DeepCombinatorText}\s*", RegexOptions.None, _regexTimeout); + private readonly static Regex _trailingCombinatorRegex = new Regex(@"\s+[\>\+\~]$", RegexOptions.None, _regexTimeout); + public RewriteCssCommand(Application parent) : base(parent, "rewritecss") { @@ -145,12 +151,12 @@ namespace Microsoft.AspNetCore.Razor.Tools // If there's a deep combinator among the sequence of simple selectors, we consider that to signal // the end of the set of simple selectors for us to look at, plus we strip it out var allSimpleSelectors = selector.Children.OfType(); - var firstDeepCombinator = allSimpleSelectors.FirstOrDefault(s => IsDeepCombinator(s.Text)); + var firstDeepCombinator = allSimpleSelectors.FirstOrDefault(s => _deepCombinatorRegex.IsMatch(s.Text)); var lastSimpleSelector = allSimpleSelectors.TakeWhile(s => s != firstDeepCombinator).LastOrDefault(); if (lastSimpleSelector != null) { - Edits.Add(new InsertSelectorScopeEdit { Position = lastSimpleSelector.AfterEnd }); + Edits.Add(new InsertSelectorScopeEdit { Position = FindPositionBeforeTrailingCombinator(lastSimpleSelector) }); } else if (firstDeepCombinator != null) { @@ -162,13 +168,32 @@ namespace Microsoft.AspNetCore.Razor.Tools // Also remove the deep combinator if we matched one if (firstDeepCombinator != null) { - Edits.Add(new DeleteContentEdit { Position = firstDeepCombinator.Start, DeleteLength = firstDeepCombinator.Length }); + Edits.Add(new DeleteContentEdit { Position = firstDeepCombinator.Start, DeleteLength = DeepCombinatorText.Length }); } } - private static bool IsDeepCombinator(string simpleSelectorText) + private int FindPositionBeforeTrailingCombinator(SimpleSelector lastSimpleSelector) { - return string.Equals(simpleSelectorText, "::deep", StringComparison.Ordinal); + // For a selector like "a > ::deep b", the parser splits it as "a >", "::deep", "b". + // The place we want to insert the scope is right after "a", hence we need to detect + // if the simple selector ends with " >" or similar, and if so, insert before that. + var text = lastSimpleSelector.Text; + var lastChar = text.Length > 0 ? text[^1] : default; + switch (lastChar) + { + case '>': + case '+': + case '~': + var trailingCombinatorMatch = _trailingCombinatorRegex.Match(text); + if (trailingCombinatorMatch.Success) + { + var trailingCombinatorLength = trailingCombinatorMatch.Length; + return lastSimpleSelector.AfterEnd - trailingCombinatorLength; + } + break; + } + + return lastSimpleSelector.AfterEnd; } protected override void VisitAtDirective(AtDirective item) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/test/RewriteCssCommandTest.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/test/RewriteCssCommandTest.cs index 57d8830a52..2c2d199f80 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/test/RewriteCssCommandTest.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/test/RewriteCssCommandTest.cs @@ -91,6 +91,54 @@ namespace Microsoft.AspNetCore.Razor.Tools ", result); } + [Fact] + public void RespectsDeepCombinatorWithDirectDescendant() + { + // Arrange/act + var result = RewriteCssCommand.AddScopeToSelectors(@" + a > ::deep b { color: red; } + c ::deep > d { color: blue; } +", "TestScope"); + + // Assert + Assert.Equal(@" + a[TestScope] > b { color: red; } + c[TestScope] > d { color: blue; } +", result); + } + + [Fact] + public void RespectsDeepCombinatorWithAdjacentSibling() + { + // Arrange/act + var result = RewriteCssCommand.AddScopeToSelectors(@" + a + ::deep b { color: red; } + c ::deep + d { color: blue; } +", "TestScope"); + + // Assert + Assert.Equal(@" + a[TestScope] + b { color: red; } + c[TestScope] + d { color: blue; } +", result); + } + + [Fact] + public void RespectsDeepCombinatorWithGeneralSibling() + { + // Arrange/act + var result = RewriteCssCommand.AddScopeToSelectors(@" + a ~ ::deep b { color: red; } + c ::deep ~ d { color: blue; } +", "TestScope"); + + // Assert + Assert.Equal(@" + a[TestScope] ~ b { color: red; } + c[TestScope] ~ d { color: blue; } +", result); + } + [Fact] public void IgnoresMultipleDeepCombinators() { From f88034902a8761153aeb9c12658d7915b9d66853 Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Wed, 29 Jul 2020 11:37:52 -0700 Subject: [PATCH 073/106] Don't render route component if OnNavigateAsync task in-progress (#24225) --- .../Components/src/Routing/Router.cs | 31 ++++++++++++------- .../test/E2ETest/Tests/RoutingTest.cs | 23 ++++++++++++++ .../RouterTest/TestRouterWithOnNavigate.razor | 17 +++++++++- 3 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/Components/Components/src/Routing/Router.cs b/src/Components/Components/src/Routing/Router.cs index ab95ee2c63..8470101904 100644 --- a/src/Components/Components/src/Routing/Router.cs +++ b/src/Components/Components/src/Routing/Router.cs @@ -152,6 +152,19 @@ namespace Microsoft.AspNetCore.Components.Routing internal virtual void Refresh(bool isNavigationIntercepted) { + // If an `OnNavigateAsync` task is currently in progress, then wait + // for it to complete before rendering. Note: because _previousOnNavigateTask + // is initialized to a CompletedTask on initialization, this will still + // allow first-render to complete successfully. + if (_previousOnNavigateTask.Status != TaskStatus.RanToCompletion) + { + if (Navigating != null) + { + _renderHandle.Render(Navigating); + } + return; + } + RefreshRouteTable(); var locationPath = NavigationManager.ToBaseRelativePath(_locationAbsolute); @@ -248,19 +261,15 @@ namespace Microsoft.AspNetCore.Components.Routing var previousTask = _previousOnNavigateTask; var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); _previousOnNavigateTask = tcs.Task; - try + + // And pass an indicator for the previous task to the currently running one. + var shouldRefresh = await RunOnNavigateAsync(path, previousTask); + tcs.SetResult(); + if (shouldRefresh) { - // And pass an indicator for the previous task to the currently running one. - var shouldRefresh = await RunOnNavigateAsync(path, previousTask); - if (shouldRefresh) - { - Refresh(isNavigationIntercepted); - } - } - finally - { - tcs.SetResult(); + Refresh(isNavigationIntercepted); } + } private void OnLocationChanged(object sender, LocationChangedEventArgs args) diff --git a/src/Components/test/E2ETest/Tests/RoutingTest.cs b/src/Components/test/E2ETest/Tests/RoutingTest.cs index 074e57d372..28fe0a1727 100644 --- a/src/Components/test/E2ETest/Tests/RoutingTest.cs +++ b/src/Components/test/E2ETest/Tests/RoutingTest.cs @@ -578,6 +578,29 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests Assert.NotNull(errorUiElem); } + [Fact] + public void OnNavigate_DoesNotRenderWhileOnNavigateExecuting() + { + var app = Browser.MountTestComponent(); + + // Navigate to a route + SetUrlViaPushState("/WithParameters/name/Abc"); + + // Click the button to trigger a re-render + var button = app.FindElement(By.Id("trigger-rerender")); + button.Click(); + + // Assert that the parameter route didn't render + Browser.DoesNotExist(By.Id("test-info")); + + // Navigate to another page to cancel the previous `OnNavigateAsync` + // task and trigger a re-render on its completion + SetUrlViaPushState("/LongPage1"); + + // Confirm that the route was rendered + Browser.Equal("This is a long page you can scroll.", () => app.FindElement(By.Id("test-info")).Text); + } + private long BrowserScrollY { get => (long)((IJavaScriptExecutor)Browser).ExecuteScript("return window.scrollY"); diff --git a/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouterWithOnNavigate.razor b/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouterWithOnNavigate.razor index 5baa82fc00..7b0c289b56 100644 --- a/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouterWithOnNavigate.razor +++ b/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouterWithOnNavigate.razor @@ -1,5 +1,9 @@ @using Microsoft.AspNetCore.Components.Routing +@using System.Threading + + +
@@ -21,7 +25,8 @@ { { "LongPage1", new Func(TestLoadingPageShows) }, { "LongPage2", new Func(TestOnNavCancel) }, - { "Other", new Func(TestOnNavException) } + { "Other", new Func(TestOnNavException) }, + {"WithParameters/name/Abc", new Func(TestRefreshHandling)} }; private async Task OnNavigateAsync(NavigationContext args) @@ -50,4 +55,14 @@ await Task.CompletedTask; throw new Exception("This is an uncaught exception."); } + + public static async Task TestRefreshHandling(NavigationContext args) + { + await Task.Delay(Timeout.Infinite, args.CancellationToken); + } + + private void TriggerRerender() + { + Console.WriteLine("Nothing to see here, just an even to trigger a re-render..."); + } } From ae840db2ccde12eeac25f43326389411718247c1 Mon Sep 17 00:00:00 2001 From: Huei Feng <695979933@qq.com> Date: Thu, 30 Jul 2020 06:00:23 +0800 Subject: [PATCH 074/106] Add a readonly modifier to a missing readonly field (#24379) --- .../Kestrel/Core/src/Internal/Http3/Http3Connection.cs | 2 +- .../Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs | 4 ++-- .../Kestrel/Core/src/Internal/Http3/Http3Stream.cs | 4 ++-- .../Core/src/Internal/Http3/QPack/DecoderStreamReader.cs | 2 +- .../Core/src/Internal/Http3/QPack/EncoderStreamReader.cs | 8 ++++---- .../Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs | 2 +- .../src/Internal/Infrastructure/ThreadPoolAwaitable.cs | 2 +- .../Core/src/Internal/KestrelServerOptionsSetup.cs | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Connection.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Connection.cs index b0c85bfcdf..20a500a355 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Connection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Connection.cs @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3 private long _highestOpenedStreamId; // TODO lock to access private volatile bool _haveSentGoAway; private readonly object _sync = new object(); - private MultiplexedConnectionContext _multiplexedContext; + private readonly MultiplexedConnectionContext _multiplexedContext; private readonly Http3ConnectionContext _context; private readonly ISystemClock _systemClock; private readonly TimeoutControl _timeoutControl; diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs index 0c89d21c0d..a8b0d8d7bc 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs @@ -20,9 +20,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3 private const int EncoderStream = 2; private const int DecoderStream = 3; - private Http3FrameWriter _frameWriter; + private readonly Http3FrameWriter _frameWriter; private readonly Http3Connection _http3Connection; - private HttpConnectionContext _context; + private readonly HttpConnectionContext _context; private readonly Http3RawFrame _incomingFrame = new Http3RawFrame(); private volatile int _isClosed; private int _gracefulCloseInitiator; diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs index c4004372bf..d8530a577a 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs @@ -32,8 +32,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3 private static ReadOnlySpan TrailersBytes => new byte[8] { (byte)'t', (byte)'r', (byte)'a', (byte)'i', (byte)'l', (byte)'e', (byte)'r', (byte)'s' }; private static ReadOnlySpan ConnectBytes => new byte[7] { (byte)'C', (byte)'O', (byte)'N', (byte)'N', (byte)'E', (byte)'C', (byte)'T' }; - private Http3FrameWriter _frameWriter; - private Http3OutputProducer _http3Output; + private readonly Http3FrameWriter _frameWriter; + private readonly Http3OutputProducer _http3Output; private int _isClosed; private int _gracefulCloseInitiator; private readonly Http3StreamContext _context; diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/DecoderStreamReader.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/DecoderStreamReader.cs index 6b53b79900..621714dac1 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/DecoderStreamReader.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/DecoderStreamReader.cs @@ -43,7 +43,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3.QPack private const byte InsertCountIncrementPrefixMask = 0x3F; private const int InsertCountIncrementPrefix = 6; - private IntegerDecoder _integerDecoder = new IntegerDecoder(); + private readonly IntegerDecoder _integerDecoder = new IntegerDecoder(); private State _state; public DecoderStreamReader() diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/EncoderStreamReader.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/EncoderStreamReader.cs index b235415902..2fd44021d3 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/EncoderStreamReader.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/EncoderStreamReader.cs @@ -76,15 +76,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3.QPack private const byte HuffmanMask = 0x80; private bool _s; - private byte[] _stringOctets; - private byte[] _headerNameOctets; - private byte[] _headerValueOctets; + private readonly byte[] _stringOctets; + private readonly byte[] _headerNameOctets; + private readonly byte[] _headerValueOctets; private byte[] _headerName; private int _headerNameLength; private int _headerValueLength; private int _stringLength; private int _stringIndex; - private DynamicTable _dynamicTable = new DynamicTable(1000); // TODO figure out architecture. + private readonly DynamicTable _dynamicTable = new DynamicTable(1000); // TODO figure out architecture. private readonly IntegerDecoder _integerDecoder = new IntegerDecoder(); private State _state = State.Ready; diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs index e26a2961cb..0e42007907 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure private readonly IDebugger _debugger; private readonly IKestrelTrace _trace; private readonly TimeSpan _interval; - private Thread _timerThread; + private readonly Thread _timerThread; private volatile bool _stopped; public Heartbeat(IHeartbeatHandler[] callbacks, ISystemClock systemClock, IDebugger debugger, IKestrelTrace trace) diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/ThreadPoolAwaitable.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/ThreadPoolAwaitable.cs index 69f3cb48d5..b0db58a240 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/ThreadPoolAwaitable.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/ThreadPoolAwaitable.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 { internal class ThreadPoolAwaitable : ICriticalNotifyCompletion { - public static ThreadPoolAwaitable Instance = new ThreadPoolAwaitable(); + public static readonly ThreadPoolAwaitable Instance = new ThreadPoolAwaitable(); private ThreadPoolAwaitable() { diff --git a/src/Servers/Kestrel/Core/src/Internal/KestrelServerOptionsSetup.cs b/src/Servers/Kestrel/Core/src/Internal/KestrelServerOptionsSetup.cs index 0c7d0a375f..fd35a67b1d 100644 --- a/src/Servers/Kestrel/Core/src/Internal/KestrelServerOptionsSetup.cs +++ b/src/Servers/Kestrel/Core/src/Internal/KestrelServerOptionsSetup.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal { internal class KestrelServerOptionsSetup : IConfigureOptions { - private IServiceProvider _services; + private readonly IServiceProvider _services; public KestrelServerOptionsSetup(IServiceProvider services) { From cf728173d1de6c95ab441dcb86ca7185d4100ec0 Mon Sep 17 00:00:00 2001 From: William Godbe Date: Wed, 29 Jul 2020 15:51:44 -0700 Subject: [PATCH 075/106] Quarantine failing test (#24415) * Quarantine failing test * Update DefaultControllerFactoryTest.cs --- .../Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Mvc/Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs b/src/Mvc/Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs index ec2770bb93..759cf3ff7e 100644 --- a/src/Mvc/Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs +++ b/src/Mvc/Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; +using Microsoft.AspNetCore.Testing; using Moq; using Xunit; @@ -186,6 +187,7 @@ namespace Microsoft.AspNetCore.Mvc.Controllers } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/24414")] public void DefaultControllerFactory_DelegatesDisposalToControllerActivator() { // Arrange From b9e663bffb8245032a4fa010db5179d70fe7728e Mon Sep 17 00:00:00 2001 From: marlongerson <48413285+marlongerson@users.noreply.github.com> Date: Thu, 30 Jul 2020 13:03:11 -0700 Subject: [PATCH 076/106] [Identity] Updated RenderSection to use async method. (#24121) --- src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml index fba362e452..f3af76940b 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml @@ -89,6 +89,6 @@ - @RenderSection("Scripts", required: false) + @await RenderSectionAsync("Scripts", required: false) From e3501ddd4a9c292fb43b89bf50676def919c13cd Mon Sep 17 00:00:00 2001 From: Miha Zupan Date: Thu, 30 Jul 2020 22:11:58 +0200 Subject: [PATCH 077/106] H/QPackEncoder overloads accepting Encoding (#24448) --- .../runtime/Http2/Hpack/HPackEncoder.cs | 148 ++++++++++++------ .../runtime/Http3/QPack/QPackEncoder.cs | 111 ++++++++++--- 2 files changed, 186 insertions(+), 73 deletions(-) diff --git a/src/Shared/runtime/Http2/Hpack/HPackEncoder.cs b/src/Shared/runtime/Http2/Hpack/HPackEncoder.cs index d2fbc52232..4c3ac29527 100644 --- a/src/Shared/runtime/Http2/Hpack/HPackEncoder.cs +++ b/src/Shared/runtime/Http2/Hpack/HPackEncoder.cs @@ -4,6 +4,7 @@ #nullable enable using System.Collections.Generic; using System.Diagnostics; +using System.Text; namespace System.Net.Http.HPack { @@ -96,7 +97,7 @@ namespace System.Net.Http.HPack if (IntegerEncoder.Encode(index, 4, destination, out int indexLength)) { Debug.Assert(indexLength >= 1); - if (EncodeStringLiteral(value, destination.Slice(indexLength), out int nameLength)) + if (EncodeStringLiteral(value, valueEncoding: null, destination.Slice(indexLength), out int nameLength)) { bytesWritten = indexLength + nameLength; return true; @@ -128,7 +129,7 @@ namespace System.Net.Http.HPack if (IntegerEncoder.Encode(index, 4, destination, out int indexLength)) { Debug.Assert(indexLength >= 1); - if (EncodeStringLiteral(value, destination.Slice(indexLength), out int nameLength)) + if (EncodeStringLiteral(value, valueEncoding: null, destination.Slice(indexLength), out int nameLength)) { bytesWritten = indexLength + nameLength; return true; @@ -160,7 +161,7 @@ namespace System.Net.Http.HPack if (IntegerEncoder.Encode(index, 6, destination, out int indexLength)) { Debug.Assert(indexLength >= 1); - if (EncodeStringLiteral(value, destination.Slice(indexLength), out int nameLength)) + if (EncodeStringLiteral(value, valueEncoding: null, destination.Slice(indexLength), out int nameLength)) { bytesWritten = indexLength + nameLength; return true; @@ -276,7 +277,7 @@ namespace System.Net.Http.HPack { destination[0] = mask; if (EncodeLiteralHeaderName(name, destination.Slice(1), out int nameLength) && - EncodeStringLiteral(value, destination.Slice(1 + nameLength), out int valueLength)) + EncodeStringLiteral(value, valueEncoding: null, destination.Slice(1 + nameLength), out int valueLength)) { bytesWritten = 1 + nameLength + valueLength; return true; @@ -289,6 +290,11 @@ namespace System.Net.Http.HPack /// Encodes a "Literal Header Field without Indexing - New Name". public static bool EncodeLiteralHeaderFieldWithoutIndexingNewName(string name, ReadOnlySpan values, string separator, Span destination, out int bytesWritten) + { + return EncodeLiteralHeaderFieldWithoutIndexingNewName(name, values, separator, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeLiteralHeaderFieldWithoutIndexingNewName(string name, ReadOnlySpan values, string separator, Encoding? valueEncoding, Span destination, out int bytesWritten) { // From https://tools.ietf.org/html/rfc7541#section-6.2.2 // ------------------------------------------------------ @@ -309,7 +315,7 @@ namespace System.Net.Http.HPack { destination[0] = 0; if (EncodeLiteralHeaderName(name, destination.Slice(1), out int nameLength) && - EncodeStringLiterals(values, separator, destination.Slice(1 + nameLength), out int valueLength)) + EncodeStringLiterals(values, separator, valueEncoding, destination.Slice(1 + nameLength), out int valueLength)) { bytesWritten = 1 + nameLength + valueLength; return true; @@ -395,27 +401,20 @@ namespace System.Net.Http.HPack return false; } - private static bool EncodeStringLiteralValue(string value, Span destination, out int bytesWritten) + private static void EncodeValueStringPart(string value, Span destination) { - if (value.Length <= destination.Length) - { - for (int i = 0; i < value.Length; i++) - { - char c = value[i]; - if ((c & 0xFF80) != 0) - { - throw new HttpRequestException(SR.net_http_request_invalid_char_encoding); - } + Debug.Assert(destination.Length >= value.Length); - destination[i] = (byte)c; + for (int i = 0; i < value.Length; i++) + { + char c = value[i]; + if ((c & 0xFF80) != 0) + { + throw new HttpRequestException(SR.net_http_request_invalid_char_encoding); } - bytesWritten = value.Length; - return true; + destination[i] = (byte)c; } - - bytesWritten = 0; - return false; } public static bool EncodeStringLiteral(ReadOnlySpan value, Span destination, out int bytesWritten) @@ -453,6 +452,11 @@ namespace System.Net.Http.HPack } public static bool EncodeStringLiteral(string value, Span destination, out int bytesWritten) + { + return EncodeStringLiteral(value, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeStringLiteral(string value, Encoding? valueEncoding, Span destination, out int bytesWritten) { // From https://tools.ietf.org/html/rfc7541#section-5.2 // ------------------------------------------------------ @@ -466,13 +470,28 @@ namespace System.Net.Http.HPack if (destination.Length != 0) { destination[0] = 0; // TODO: Use Huffman encoding - if (IntegerEncoder.Encode(value.Length, 7, destination, out int integerLength)) + + int encodedStringLength = valueEncoding is null || ReferenceEquals(valueEncoding, Encoding.Latin1) + ? value.Length + : valueEncoding.GetByteCount(value); + + if (IntegerEncoder.Encode(encodedStringLength, 7, destination, out int integerLength)) { Debug.Assert(integerLength >= 1); - - if (EncodeStringLiteralValue(value, destination.Slice(integerLength), out int valueLength)) + destination = destination.Slice(integerLength); + if (encodedStringLength <= destination.Length) { - bytesWritten = integerLength + valueLength; + if (valueEncoding is null) + { + EncodeValueStringPart(value, destination); + } + else + { + int written = valueEncoding.GetBytes(value, destination); + Debug.Assert(written == encodedStringLength); + } + + bytesWritten = integerLength + encodedStringLength; return true; } } @@ -502,56 +521,87 @@ namespace System.Net.Http.HPack } public static bool EncodeStringLiterals(ReadOnlySpan values, string? separator, Span destination, out int bytesWritten) + { + return EncodeStringLiterals(values, separator, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeStringLiterals(ReadOnlySpan values, string? separator, Encoding? valueEncoding, Span destination, out int bytesWritten) { bytesWritten = 0; if (values.Length == 0) { - return EncodeStringLiteral("", destination, out bytesWritten); + return EncodeStringLiteral("", valueEncoding: null, destination, out bytesWritten); } else if (values.Length == 1) { - return EncodeStringLiteral(values[0], destination, out bytesWritten); + return EncodeStringLiteral(values[0], valueEncoding, destination, out bytesWritten); } if (destination.Length != 0) { - int valueLength = 0; + Debug.Assert(separator != null); + int valueLength; // Calculate length of all parts and separators. - foreach (string part in values) + if (valueEncoding is null || ReferenceEquals(valueEncoding, Encoding.Latin1)) { - valueLength = checked((int)(valueLength + part.Length)); + valueLength = checked((int)(values.Length - 1) * separator.Length); + foreach (string part in values) + { + valueLength = checked((int)(valueLength + part.Length)); + } + } + else + { + valueLength = checked((int)(values.Length - 1) * valueEncoding.GetByteCount(separator)); + foreach (string part in values) + { + valueLength = checked((int)(valueLength + valueEncoding.GetByteCount(part))); + } } - - Debug.Assert(separator != null); - valueLength = checked((int)(valueLength + (values.Length - 1) * separator.Length)); destination[0] = 0; if (IntegerEncoder.Encode(valueLength, 7, destination, out int integerLength)) { Debug.Assert(integerLength >= 1); - - int encodedLength = 0; - for (int j = 0; j < values.Length; j++) + destination = destination.Slice(integerLength); + if (destination.Length >= valueLength) { - if (j != 0 && !EncodeStringLiteralValue(separator, destination.Slice(integerLength), out encodedLength)) + if (valueEncoding is null) { - return false; + string value = values[0]; + EncodeValueStringPart(value, destination); + destination = destination.Slice(value.Length); + + for (int i = 1; i < values.Length; i++) + { + EncodeValueStringPart(separator, destination); + destination = destination.Slice(separator.Length); + + value = values[i]; + EncodeValueStringPart(value, destination); + destination = destination.Slice(value.Length); + } + } + else + { + int written = valueEncoding.GetBytes(values[0], destination); + destination = destination.Slice(written); + + for (int i = 1; i < values.Length; i++) + { + written = valueEncoding.GetBytes(separator, destination); + destination = destination.Slice(written); + + written = valueEncoding.GetBytes(values[i], destination); + destination = destination.Slice(written); + } } - integerLength += encodedLength; - - if (!EncodeStringLiteralValue(values[j], destination.Slice(integerLength), out encodedLength)) - { - return false; - } - - integerLength += encodedLength; + bytesWritten = integerLength + valueLength; + return true; } - - bytesWritten = integerLength; - return true; } } diff --git a/src/Shared/runtime/Http3/QPack/QPackEncoder.cs b/src/Shared/runtime/Http3/QPack/QPackEncoder.cs index be43dc3bc7..68e04ed2d4 100644 --- a/src/Shared/runtime/Http3/QPack/QPackEncoder.cs +++ b/src/Shared/runtime/Http3/QPack/QPackEncoder.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Net.Http.HPack; +using System.Text; namespace System.Net.Http.QPack { @@ -59,6 +60,11 @@ namespace System.Net.Http.QPack // - T is constant 1 here, indicating a static table reference. // - H is constant 0 here, as we do not yet perform Huffman coding. public static bool EncodeLiteralHeaderFieldWithStaticNameReference(int index, string value, Span destination, out int bytesWritten) + { + return EncodeLiteralHeaderFieldWithStaticNameReference(index, value, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeLiteralHeaderFieldWithStaticNameReference(int index, string value, Encoding? valueEncoding, Span destination, out int bytesWritten) { // Requires at least two bytes (one for name reference header, one for value length) if (destination.Length >= 2) @@ -68,7 +74,7 @@ namespace System.Net.Http.QPack { destination = destination.Slice(headerBytesWritten); - if (EncodeValueString(value, destination, out int valueBytesWritten)) + if (EncodeValueString(value, valueEncoding, destination, out int valueBytesWritten)) { bytesWritten = headerBytesWritten + valueBytesWritten; return true; @@ -81,7 +87,7 @@ namespace System.Net.Http.QPack } /// - /// Encodes just the name part of a Literal Header Field With Static Name Reference. Must call after to encode the header's value. + /// Encodes just the name part of a Literal Header Field With Static Name Reference. Must call after to encode the header's value. /// public static byte[] EncodeLiteralHeaderFieldWithStaticNameReferenceToArray(int index) { @@ -119,7 +125,12 @@ namespace System.Net.Http.QPack // - H is constant 0 here, as we do not yet perform Huffman coding. public static bool EncodeLiteralHeaderFieldWithoutNameReference(string name, string value, Span destination, out int bytesWritten) { - if (EncodeNameString(name, destination, out int nameLength) && EncodeValueString(value, destination.Slice(nameLength), out int valueLength)) + return EncodeLiteralHeaderFieldWithoutNameReference(name, value, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeLiteralHeaderFieldWithoutNameReference(string name, string value, Encoding? valueEncoding, Span destination, out int bytesWritten) + { + if (EncodeNameString(name, destination, out int nameLength) && EncodeValueString(value, valueEncoding, destination.Slice(nameLength), out int valueLength)) { bytesWritten = nameLength + valueLength; return true; @@ -136,7 +147,12 @@ namespace System.Net.Http.QPack ///
public static bool EncodeLiteralHeaderFieldWithoutNameReference(string name, ReadOnlySpan values, string valueSeparator, Span destination, out int bytesWritten) { - if (EncodeNameString(name, destination, out int nameLength) && EncodeValueString(values, valueSeparator, destination.Slice(nameLength), out int valueLength)) + return EncodeLiteralHeaderFieldWithoutNameReference(name, values, valueSeparator, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeLiteralHeaderFieldWithoutNameReference(string name, ReadOnlySpan values, string valueSeparator, Encoding? valueEncoding, Span destination, out int bytesWritten) + { + if (EncodeNameString(name, destination, out int nameLength) && EncodeValueString(values, valueSeparator, valueEncoding, destination.Slice(nameLength), out int valueLength)) { bytesWritten = nameLength + valueLength; return true; @@ -147,7 +163,7 @@ namespace System.Net.Http.QPack } /// - /// Encodes just the value part of a Literawl Header Field Without Static Name Reference. Must call after to encode the header's value. + /// Encodes just the value part of a Literawl Header Field Without Static Name Reference. Must call after to encode the header's value. /// public static byte[] EncodeLiteralHeaderFieldWithoutNameReferenceToArray(string name) { @@ -169,19 +185,32 @@ namespace System.Net.Http.QPack return temp.Slice(0, bytesWritten).ToArray(); } - private static bool EncodeValueString(string s, Span buffer, out int length) + private static bool EncodeValueString(string s, Encoding? valueEncoding, Span buffer, out int length) { if (buffer.Length != 0) { buffer[0] = 0; - if (IntegerEncoder.Encode(s.Length, 7, buffer, out int nameLength)) + + int encodedStringLength = valueEncoding is null || ReferenceEquals(valueEncoding, Encoding.Latin1) + ? s.Length + : valueEncoding.GetByteCount(s); + + if (IntegerEncoder.Encode(encodedStringLength, 7, buffer, out int nameLength)) { buffer = buffer.Slice(nameLength); - if (buffer.Length >= s.Length) + if (buffer.Length >= encodedStringLength) { - EncodeValueStringPart(s, buffer); + if (valueEncoding is null) + { + EncodeValueStringPart(s, buffer); + } + else + { + int written = valueEncoding.GetBytes(s, buffer); + Debug.Assert(written == encodedStringLength); + } - length = nameLength + s.Length; + length = nameLength + encodedStringLength; return true; } } @@ -195,25 +224,42 @@ namespace System.Net.Http.QPack /// Encodes a value by concatenating a collection of strings, separated by a separator string. ///
public static bool EncodeValueString(ReadOnlySpan values, string? separator, Span buffer, out int length) + { + return EncodeValueString(values, separator, valueEncoding: null, buffer, out length); + } + + public static bool EncodeValueString(ReadOnlySpan values, string? separator, Encoding? valueEncoding, Span buffer, out int length) { if (values.Length == 1) { - return EncodeValueString(values[0], buffer, out length); + return EncodeValueString(values[0], valueEncoding, buffer, out length); } if (values.Length == 0) { // TODO: this will be called with a string array from HttpHeaderCollection. Can we ever get a 0-length array from that? Assert if not. - return EncodeValueString(string.Empty, buffer, out length); + return EncodeValueString(string.Empty, valueEncoding: null, buffer, out length); } if (buffer.Length > 0) { Debug.Assert(separator != null); - int valueLength = separator.Length * (values.Length - 1); - for (int i = 0; i < values.Length; ++i) + int valueLength; + if (valueEncoding is null || ReferenceEquals(valueEncoding, Encoding.Latin1)) { - valueLength += values[i].Length; + valueLength = separator.Length * (values.Length - 1); + foreach (string part in values) + { + valueLength += part.Length; + } + } + else + { + valueLength = valueEncoding.GetByteCount(separator) * (values.Length - 1); + foreach (string part in values) + { + valueLength += valueEncoding.GetByteCount(part); + } } buffer[0] = 0; @@ -222,18 +268,35 @@ namespace System.Net.Http.QPack buffer = buffer.Slice(nameLength); if (buffer.Length >= valueLength) { - string value = values[0]; - EncodeValueStringPart(value, buffer); - buffer = buffer.Slice(value.Length); - - for (int i = 1; i < values.Length; ++i) + if (valueEncoding is null) { - EncodeValueStringPart(separator, buffer); - buffer = buffer.Slice(separator.Length); - - value = values[i]; + string value = values[0]; EncodeValueStringPart(value, buffer); buffer = buffer.Slice(value.Length); + + for (int i = 1; i < values.Length; i++) + { + EncodeValueStringPart(separator, buffer); + buffer = buffer.Slice(separator.Length); + + value = values[i]; + EncodeValueStringPart(value, buffer); + buffer = buffer.Slice(value.Length); + } + } + else + { + int written = valueEncoding.GetBytes(values[0], buffer); + buffer = buffer.Slice(written); + + for (int i = 1; i < values.Length; i++) + { + written = valueEncoding.GetBytes(separator, buffer); + buffer = buffer.Slice(written); + + written = valueEncoding.GetBytes(values[i], buffer); + buffer = buffer.Slice(written); + } } length = nameLength + valueLength; From d0cca519b45da4ac1ff209252d953d8797fd5110 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Fri, 31 Jul 2020 03:40:58 +0430 Subject: [PATCH 078/106] Set ContentLength for TestHost (#24107) --- src/Hosting/TestHost/src/ClientHandler.cs | 13 ++-- .../TestHost/test/ClientHandlerTests.cs | 61 +++++++++++++++++++ 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/src/Hosting/TestHost/src/ClientHandler.cs b/src/Hosting/TestHost/src/ClientHandler.cs index 5c4a42a5a8..5805493225 100644 --- a/src/Hosting/TestHost/src/ClientHandler.cs +++ b/src/Hosting/TestHost/src/ClientHandler.cs @@ -100,7 +100,7 @@ namespace Microsoft.AspNetCore.TestHost if (request.Version == HttpVersion.Version20) { // https://tools.ietf.org/html/rfc7540 - req.Protocol = HttpProtocol.Http2; + req.Protocol = HttpProtocol.Http2; } else { @@ -142,12 +142,13 @@ namespace Microsoft.AspNetCore.TestHost } req.QueryString = QueryString.FromUriComponent(request.RequestUri); - if (requestContent != null) + // Reading the ContentLength will add it to the Headers‼ + // https://github.com/dotnet/runtime/blob/874399ab15e47c2b4b7c6533cc37d27d47cb5242/src/libraries/System.Net.Http/src/System/Net/Http/Headers/HttpContentHeaders.cs#L68-L87 + _ = requestContent.Headers.ContentLength; + + foreach (var header in requestContent.Headers) { - foreach (var header in requestContent.Headers) - { - req.Headers.Append(header.Key, header.Value.ToArray()); - } + req.Headers.Append(header.Key, header.Value.ToArray()); } req.Body = new AsyncStreamWrapper(reader.AsStream(), () => contextBuilder.AllowSynchronousIO); diff --git a/src/Hosting/TestHost/test/ClientHandlerTests.cs b/src/Hosting/TestHost/test/ClientHandlerTests.cs index e94ffc16f4..3e3406e6f5 100644 --- a/src/Hosting/TestHost/test/ClientHandlerTests.cs +++ b/src/Hosting/TestHost/test/ClientHandlerTests.cs @@ -4,7 +4,9 @@ using System; using System.IO; using System.Linq; +using System.Net; using System.Net.Http; +using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; @@ -103,6 +105,51 @@ namespace Microsoft.AspNetCore.TestHost return httpClient.GetAsync("http://example.com"); } + [Fact] + public Task ContentLengthWithBodyWorks() + { + var contentBytes = Encoding.UTF8.GetBytes("This is a content!"); + var handler = new ClientHandler(new PathString(""), new DummyApplication(context => + { + Assert.Equal(contentBytes.LongLength, context.Request.ContentLength); + + return Task.CompletedTask; + })); + var httpClient = new HttpClient(handler); + var content = new ByteArrayContent(contentBytes); + + return httpClient.PostAsync("http://example.com", content); + } + + [Fact] + public Task ContentLengthWithNoBodyWorks() + { + var handler = new ClientHandler(new PathString(""), new DummyApplication(context => + { + Assert.Equal(0, context.Request.ContentLength); + + return Task.CompletedTask; + })); + var httpClient = new HttpClient(handler); + + return httpClient.GetAsync("http://example.com"); + } + + [Fact] + public Task ContentLengthWithChunkedTransferEncodingWorks() + { + var handler = new ClientHandler(new PathString(""), new DummyApplication(context => + { + Assert.Null(context.Request.ContentLength); + + return Task.CompletedTask; + })); + + var httpClient = new HttpClient(handler); + + return httpClient.PostAsync("http://example.com", new UnlimitedContent()); + } + [Fact] public async Task ServerTrailersSetOnResponseAfterContentRead() { @@ -566,5 +613,19 @@ namespace Microsoft.AspNetCore.TestHost } } } + + private class UnlimitedContent : HttpContent + { + protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) + { + return Task.CompletedTask; + } + + protected override bool TryComputeLength(out long length) + { + length = -1; + return false; + } + } } } From 799014cfe777885e323c9306b080c61043190b28 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Fri, 31 Jul 2020 03:59:38 +0430 Subject: [PATCH 079/106] Throw BadHttpRequestException in HttpSys (#24213) --- .../src/RequestProcessing/RequestContext.cs | 10 ++++- .../src/RequestProcessing/RequestStream.cs | 10 +++-- .../FunctionalTests/RequestBodyLimitTests.cs | 43 +++++++++++++------ .../test/FunctionalTests/ServerTests.cs | 26 ++++++++++- 4 files changed, 69 insertions(+), 20 deletions(-) diff --git a/src/Servers/HttpSys/src/RequestProcessing/RequestContext.cs b/src/Servers/HttpSys/src/RequestProcessing/RequestContext.cs index de0cefb72d..997339ac14 100644 --- a/src/Servers/HttpSys/src/RequestProcessing/RequestContext.cs +++ b/src/Servers/HttpSys/src/RequestProcessing/RequestContext.cs @@ -289,7 +289,15 @@ namespace Microsoft.AspNetCore.Server.HttpSys Response.Trailers.IsReadOnly = false; Response.Headers.Clear(); Response.Trailers.Clear(); - SetFatalResponse(500); + + if (ex is BadHttpRequestException badHttpRequestException) + { + SetFatalResponse(badHttpRequestException.StatusCode); + } + else + { + SetFatalResponse(StatusCodes.Status500InternalServerError); + } } } finally diff --git a/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs b/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs index 758a060b94..c5e00a9239 100644 --- a/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs +++ b/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs @@ -7,6 +7,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.HttpSys.Internal; using Microsoft.Extensions.Logging; @@ -432,8 +433,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys var contentLength = RequestContext.Request.ContentLength; if (contentLength.HasValue && _maxSize.HasValue && contentLength.Value > _maxSize.Value) { - throw new IOException( - $"The request's Content-Length {contentLength.Value} is larger than the request body size limit {_maxSize.Value}."); + throw new BadHttpRequestException( + $"The request's Content-Length {contentLength.Value} is larger than the request body size limit {_maxSize.Value}.", + StatusCodes.Status413PayloadTooLarge); } HasStarted = true; @@ -450,7 +452,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys _totalRead += bytesRead; if (_maxSize.HasValue && _totalRead > _maxSize.Value) { - exception = new IOException($"The total number of bytes read {_totalRead} has exceeded the request body size limit {_maxSize.Value}."); + exception = new BadHttpRequestException( + $"The total number of bytes read {_totalRead} has exceeded the request body size limit {_maxSize.Value}.", + StatusCodes.Status413PayloadTooLarge); return true; } exception = null; diff --git a/src/Servers/HttpSys/test/FunctionalTests/RequestBodyLimitTests.cs b/src/Servers/HttpSys/test/FunctionalTests/RequestBodyLimitTests.cs index fa4ae52632..4f825d8ae6 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/RequestBodyLimitTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/RequestBodyLimitTests.cs @@ -7,6 +7,7 @@ using System.Net; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Testing; using Xunit; @@ -159,10 +160,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Equal(11, httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -182,10 +185,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Equal(11, httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = Assert.Throws(() => { var t = httpContext.Request.Body.ReadAsync(input, 0, input.Length); }); + var ex = Assert.Throws(() => { var t = httpContext.Request.Body.ReadAsync(input, 0, input.Length); }); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => { var t = httpContext.Request.Body.ReadAsync(input, 0, input.Length); }); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => { var t = httpContext.Request.Body.ReadAsync(input, 0, input.Length); }); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -205,10 +210,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Equal(11, httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = Assert.Throws(() => httpContext.Request.Body.BeginRead(input, 0, input.Length, null, null)); + var ex = Assert.Throws(() => httpContext.Request.Body.BeginRead(input, 0, input.Length, null, null)); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => httpContext.Request.Body.BeginRead(input, 0, input.Length, null, null)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => httpContext.Request.Body.BeginRead(input, 0, input.Length, null, null)); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -229,10 +236,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Null(httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -252,9 +261,11 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Null(httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); + var ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); - ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); }, options => options.MaxRequestBodySize = 10)) { @@ -275,10 +286,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Null(httpContext.Request.ContentLength); byte[] input = new byte[100]; var body = httpContext.Request.Body; - var ex = Assert.Throws(() => body.EndRead(body.BeginRead(input, 0, input.Length, null, null))); + var ex = Assert.Throws(() => body.EndRead(body.BeginRead(input, 0, input.Length, null, null))); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => body.EndRead(body.BeginRead(input, 0, input.Length, null, null))); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => body.EndRead(body.BeginRead(input, 0, input.Length, null, null))); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -303,8 +316,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys int read = httpContext.Request.Body.Read(input, 0, input.Length); Assert.Equal(10, read); content.Block.Release(); - var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The total number of bytes read 20 has exceeded the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -328,8 +342,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys int read = await httpContext.Request.Body.ReadAsync(input, 0, input.Length); Assert.Equal(10, read); content.Block.Release(); - var ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); + var ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); Assert.Equal("The total number of bytes read 20 has exceeded the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); }, options => options.MaxRequestBodySize = 10)) { string response = await SendRequestAsync(address, content, chunked: true); diff --git a/src/Servers/HttpSys/test/FunctionalTests/ServerTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ServerTests.cs index fbea889de4..5fc71a2047 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ServerTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ServerTests.cs @@ -204,11 +204,33 @@ namespace Microsoft.AspNetCore.Server.HttpSys })) { Task requestTask = SendRequestAsync(address); - await Assert.ThrowsAsync(async () => await requestTask); + var ex = await Assert.ThrowsAsync(async () => await requestTask); + Assert.Equal(StatusCodes.Status500InternalServerError, (int)ex.StatusCode); // Do it again to make sure the server didn't crash requestTask = SendRequestAsync(address); - await Assert.ThrowsAsync(async () => await requestTask); + ex = await Assert.ThrowsAsync(async () => await requestTask); + Assert.Equal(StatusCodes.Status500InternalServerError, (int)ex.StatusCode); + } + } + + [ConditionalFact] + public async Task Server_BadHttpRequestException_SetStatusCode() + { + string address; + using (Utilities.CreateHttpServer(out address, httpContext => + { + throw new BadHttpRequestException("Something happened", StatusCodes.Status418ImATeapot); + })) + { + Task requestTask = SendRequestAsync(address); + var ex = await Assert.ThrowsAsync(async () => await requestTask); + Assert.Equal(StatusCodes.Status418ImATeapot, (int)ex.StatusCode); + + // Do it again to make sure the server didn't crash + requestTask = SendRequestAsync(address); + ex = await Assert.ThrowsAsync(async () => await requestTask); + Assert.Equal(StatusCodes.Status418ImATeapot, (int)ex.StatusCode); } } From 3e1e69eccef4ea54c46c7e706413a0448abbbec9 Mon Sep 17 00:00:00 2001 From: Pranav K Date: Thu, 30 Jul 2020 17:09:14 -0700 Subject: [PATCH 080/106] Add nullable annotations to Authenticator.Core & Authentication.Cookies (#24307) Contributes to https://github.com/dotnet/aspnetcore/issues/5680 --- .../src/AuthenticateResult.cs | 2 ++ .../AuthenticationHttpContextExtensions.cs | 6 ++-- .../src/AuthenticationTicket.cs | 8 ++--- src/Http/Http.Abstractions/src/PathString.cs | 2 +- .../src/CookieAuthenticationHandler.cs | 34 ++++++++++--------- .../src/CookieAuthenticationOptions.cs | 10 +++--- .../Cookies/src/CookieExtensions.cs | 6 ++-- .../Cookies/src/CookieSignedInContext.cs | 2 +- .../Cookies/src/CookieSigningInContext.cs | 2 +- .../Cookies/src/CookieSigningOutContext.cs | 2 +- .../Cookies/src/ICookieManager.cs | 4 +-- .../Cookies/src/LoggingExtensions.cs | 4 +-- ...t.AspNetCore.Authentication.Cookies.csproj | 3 +- ...ostConfigureCookieAuthenticationOptions.cs | 2 +- .../Core/src/AuthenticationBuilder.cs | 12 +++---- .../Core/src/AuthenticationHandler.cs | 26 +++++++------- .../Core/src/AuthenticationSchemeOptions.cs | 20 +++++------ ...thenticationServiceCollectionExtensions.cs | 2 +- .../Core/src/Events/AccessDeniedContext.cs | 6 ++-- .../Core/src/Events/HandleRequestContext.cs | 4 +-- .../Core/src/Events/PrincipalContext.cs | 4 +-- .../Core/src/Events/PropertiesContext.cs | 2 +- .../src/Events/RemoteAuthenticationContext.cs | 8 ++--- .../Core/src/Events/RemoteFailureContext.cs | 4 +-- .../Core/src/Events/ResultContext.cs | 18 ++++++---- .../Core/src/Events/TicketReceivedContext.cs | 2 +- .../Core/src/IDataSerializer.cs | 4 +++ .../Core/src/ISecureDataFormat.cs | 11 ++++-- .../Core/src/JsonDocumentAuthExtensions.cs | 2 +- .../Core/src/LoggingExtensions.cs | 28 +++++++-------- ...Microsoft.AspNetCore.Authentication.csproj | 3 +- .../Core/src/PolicySchemeHandler.cs | 10 +++--- .../Core/src/PropertiesSerializer.cs | 10 +++--- .../Core/src/RemoteAuthenticationHandler.cs | 21 ++++++------ .../Core/src/RemoteAuthenticationOptions.cs | 10 +++--- .../Core/src/RequestPathBaseCookieBuilder.cs | 4 +-- .../Core/src/SecureDataFormat.cs | 9 +++-- .../Core/src/SignInAuthenticationHandler.cs | 6 ++-- .../Core/src/SignOutAuthenticationHandler.cs | 6 ++-- .../Core/src/TicketSerializer.cs | 4 +-- src/Security/build.cmd | 3 ++ .../ChunkingCookieManager.cs | 8 +++-- 42 files changed, 183 insertions(+), 151 deletions(-) create mode 100644 src/Security/build.cmd diff --git a/src/Http/Authentication.Abstractions/src/AuthenticateResult.cs b/src/Http/Authentication.Abstractions/src/AuthenticateResult.cs index f801ce5308..f10b5b9392 100644 --- a/src/Http/Authentication.Abstractions/src/AuthenticateResult.cs +++ b/src/Http/Authentication.Abstractions/src/AuthenticateResult.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Security.Claims; namespace Microsoft.AspNetCore.Authentication @@ -19,6 +20,7 @@ namespace Microsoft.AspNetCore.Authentication /// /// If a ticket was produced, authenticate was successful. /// + [MemberNotNullWhen(true, nameof(Ticket))] public bool Succeeded => Ticket != null; /// diff --git a/src/Http/Authentication.Abstractions/src/AuthenticationHttpContextExtensions.cs b/src/Http/Authentication.Abstractions/src/AuthenticationHttpContextExtensions.cs index 539f1c74f3..e6d56aa4fa 100644 --- a/src/Http/Authentication.Abstractions/src/AuthenticationHttpContextExtensions.cs +++ b/src/Http/Authentication.Abstractions/src/AuthenticationHttpContextExtensions.cs @@ -36,7 +36,7 @@ namespace Microsoft.AspNetCore.Authentication /// The context. /// The name of the authentication scheme. /// The result. - public static Task ChallengeAsync(this HttpContext context, string scheme) => + public static Task ChallengeAsync(this HttpContext context, string? scheme) => context.ChallengeAsync(scheme, properties: null); /// @@ -72,7 +72,7 @@ namespace Microsoft.AspNetCore.Authentication /// The context. /// The name of the authentication scheme. /// The task. - public static Task ForbidAsync(this HttpContext context, string scheme) => + public static Task ForbidAsync(this HttpContext context, string? scheme) => context.ForbidAsync(scheme, properties: null); /// @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Authentication /// The name of the authentication scheme. /// The user. /// The task. - public static Task SignInAsync(this HttpContext context, string scheme, ClaimsPrincipal principal) => + public static Task SignInAsync(this HttpContext context, string? scheme, ClaimsPrincipal principal) => context.SignInAsync(scheme, principal, properties: null); /// diff --git a/src/Http/Authentication.Abstractions/src/AuthenticationTicket.cs b/src/Http/Authentication.Abstractions/src/AuthenticationTicket.cs index 4960060787..e756566855 100644 --- a/src/Http/Authentication.Abstractions/src/AuthenticationTicket.cs +++ b/src/Http/Authentication.Abstractions/src/AuthenticationTicket.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Authentication /// the that represents the authenticated user. /// additional properties that can be consumed by the user or runtime. /// the authentication middleware that was responsible for this ticket. - public AuthenticationTicket(ClaimsPrincipal principal, AuthenticationProperties? properties, string? authenticationScheme) + public AuthenticationTicket(ClaimsPrincipal principal, AuthenticationProperties? properties, string authenticationScheme) { if (principal == null) { @@ -41,17 +41,17 @@ namespace Microsoft.AspNetCore.Authentication /// /// Gets the authentication type. /// - public string? AuthenticationScheme { get; private set; } + public string AuthenticationScheme { get; } /// /// Gets the claims-principal with authenticated user identities. /// - public ClaimsPrincipal Principal { get; private set; } + public ClaimsPrincipal Principal { get; } /// /// Additional state values for the authentication session. /// - public AuthenticationProperties Properties { get; private set; } + public AuthenticationProperties Properties { get; } /// /// Returns a copy of the ticket. diff --git a/src/Http/Http.Abstractions/src/PathString.cs b/src/Http/Http.Abstractions/src/PathString.cs index 79f82ddd1a..48eb14c015 100644 --- a/src/Http/Http.Abstractions/src/PathString.cs +++ b/src/Http/Http.Abstractions/src/PathString.cs @@ -424,7 +424,7 @@ namespace Microsoft.AspNetCore.Http /// The left parameter /// The right parameter /// The ToString combination of both values - public static string operator +(PathString left, string right) + public static string operator +(PathString left, string? right) { // This overload exists to prevent the implicit string<->PathString converter from // trying to call the PathString+PathString operator for things that are not path strings. diff --git a/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs b/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs index 7ca9348595..f10e6114cd 100644 --- a/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs +++ b/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics; using System.Linq; using System.Security.Claims; using System.Text.Encodings.Web; @@ -27,9 +28,9 @@ namespace Microsoft.AspNetCore.Authentication.Cookies private DateTimeOffset? _refreshIssuedUtc; private DateTimeOffset? _refreshExpiresUtc; - private string _sessionKey; - private Task _readCookieTask; - private AuthenticationTicket _refreshTicket; + private string? _sessionKey; + private Task? _readCookieTask; + private AuthenticationTicket? _refreshTicket; public CookieAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) @@ -41,7 +42,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// protected new CookieAuthenticationEvents Events { - get { return (CookieAuthenticationEvents)base.Events; } + get { return (CookieAuthenticationEvents)base.Events!; } set { base.Events = value; } } @@ -86,7 +87,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies } } - private void RequestRefresh(AuthenticationTicket ticket, ClaimsPrincipal replacedPrincipal = null) + private void RequestRefresh(AuthenticationTicket ticket, ClaimsPrincipal? replacedPrincipal = null) { var issuedUtc = ticket.Properties.IssuedUtc; var expiresUtc = ticket.Properties.ExpiresUtc; @@ -102,7 +103,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies } } - private AuthenticationTicket CloneTicket(AuthenticationTicket ticket, ClaimsPrincipal replacedPrincipal) + private AuthenticationTicket CloneTicket(AuthenticationTicket ticket, ClaimsPrincipal? replacedPrincipal) { var principal = replacedPrincipal ?? ticket.Principal; var newPrincipal = new ClaimsPrincipal(); @@ -122,7 +123,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies private async Task ReadCookieTicket() { - var cookie = Options.CookieManager.GetRequestCookie(Context, Options.Cookie.Name); + var cookie = Options.CookieManager.GetRequestCookie(Context, Options.Cookie.Name!); if (string.IsNullOrEmpty(cookie)) { return AuthenticateResult.NoResult(); @@ -157,7 +158,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies { if (Options.SessionStore != null) { - await Options.SessionStore.RemoveAsync(_sessionKey); + await Options.SessionStore.RemoveAsync(_sessionKey!); } return AuthenticateResult.Fail("Ticket expired"); } @@ -176,6 +177,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies return result; } + Debug.Assert(result.Ticket != null); var context = new CookieValidatePrincipalContext(Context, Scheme, Options, result.Ticket); await Events.ValidatePrincipal(context); @@ -244,7 +246,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies Options.CookieManager.AppendResponseCookie( Context, - Options.Cookie.Name, + Options.Cookie.Name!, cookieValue, cookieOptions); @@ -252,7 +254,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies } } - protected async override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties) + protected async override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties) { if (user == null) { @@ -299,7 +301,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies signInContext.CookieOptions.Expires = expiresUtc.ToUniversalTime(); } - var ticket = new AuthenticationTicket(signInContext.Principal, signInContext.Properties, signInContext.Scheme.Name); + var ticket = new AuthenticationTicket(signInContext.Principal!, signInContext.Properties, signInContext.Scheme.Name); if (Options.SessionStore != null) { @@ -324,14 +326,14 @@ namespace Microsoft.AspNetCore.Authentication.Cookies Options.CookieManager.AppendResponseCookie( Context, - Options.Cookie.Name, + Options.Cookie.Name!, cookieValue, signInContext.CookieOptions); var signedInContext = new CookieSignedInContext( Context, Scheme, - signInContext.Principal, + signInContext.Principal!, signInContext.Properties, Options); @@ -344,7 +346,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies Logger.AuthenticationSchemeSignedIn(Scheme.Name); } - protected async override Task HandleSignOutAsync(AuthenticationProperties properties) + protected async override Task HandleSignOutAsync(AuthenticationProperties? properties) { properties = properties ?? new AuthenticationProperties(); @@ -369,7 +371,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies Options.CookieManager.DeleteCookie( Context, - Options.Cookie.Name, + Options.Cookie.Name!, context.CookieOptions); // Only redirect on the logout path @@ -449,7 +451,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies await Events.RedirectToLogin(redirectContext); } - private string GetTlsTokenBinding() + private string? GetTlsTokenBinding() { var binding = Context.Features.Get()?.GetProvidedTokenBindingId(); return binding == null ? null : Convert.ToBase64String(binding); diff --git a/src/Security/Authentication/Cookies/src/CookieAuthenticationOptions.cs b/src/Security/Authentication/Cookies/src/CookieAuthenticationOptions.cs index 0248669979..49e7092b76 100644 --- a/src/Security/Authentication/Cookies/src/CookieAuthenticationOptions.cs +++ b/src/Security/Authentication/Cookies/src/CookieAuthenticationOptions.cs @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// /// If set this will be used by the CookieAuthenticationHandler for data protection. /// - public IDataProtectionProvider DataProtectionProvider { get; set; } + public IDataProtectionProvider? DataProtectionProvider { get; set; } /// /// The SlidingExpiration is set to true to instruct the handler to re-issue a new cookie with a new @@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// public new CookieAuthenticationEvents Events { - get => (CookieAuthenticationEvents)base.Events; + get => (CookieAuthenticationEvents)base.Events!; set => base.Events = value; } @@ -119,20 +119,20 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// The TicketDataFormat is used to protect and unprotect the identity and other properties which are stored in the /// cookie value. If not provided one will be created using . /// - public ISecureDataFormat TicketDataFormat { get; set; } + public ISecureDataFormat TicketDataFormat { get; set; } = default!; /// /// The component used to get cookies from the request or set them on the response. /// /// ChunkingCookieManager will be used by default. /// - public ICookieManager CookieManager { get; set; } + public ICookieManager CookieManager { get; set; } = default!; /// /// An optional container in which to store the identity across requests. When used, only a session identifier is sent /// to the client. This can be used to mitigate potential problems with very large identities. /// - public ITicketStore SessionStore { get; set; } + public ITicketStore? SessionStore { get; set; } /// /// diff --git a/src/Security/Authentication/Cookies/src/CookieExtensions.cs b/src/Security/Authentication/Cookies/src/CookieExtensions.cs index 7763e6a624..7787ad8094 100644 --- a/src/Security/Authentication/Cookies/src/CookieExtensions.cs +++ b/src/Security/Authentication/Cookies/src/CookieExtensions.cs @@ -17,13 +17,13 @@ namespace Microsoft.Extensions.DependencyInjection public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme) => builder.AddCookie(authenticationScheme, configureOptions: null); - public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, Action configureOptions) + public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, Action? configureOptions) => builder.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, configureOptions); - public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, Action configureOptions) + public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, Action? configureOptions) => builder.AddCookie(authenticationScheme, displayName: null, configureOptions: configureOptions); - public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, string displayName, Action configureOptions) + public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, string? displayName, Action? configureOptions) { builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton, PostConfigureCookieAuthenticationOptions>()); builder.Services.AddOptions(authenticationScheme).Validate(o => o.Cookie.Expiration == null, "Cookie.Expiration is ignored, use ExpireTimeSpan instead."); diff --git a/src/Security/Authentication/Cookies/src/CookieSignedInContext.cs b/src/Security/Authentication/Cookies/src/CookieSignedInContext.cs index 98c31dd190..d0d1dde8b7 100644 --- a/src/Security/Authentication/Cookies/src/CookieSignedInContext.cs +++ b/src/Security/Authentication/Cookies/src/CookieSignedInContext.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies HttpContext context, AuthenticationScheme scheme, ClaimsPrincipal principal, - AuthenticationProperties properties, + AuthenticationProperties? properties, CookieAuthenticationOptions options) : base(context, scheme, options, properties) { diff --git a/src/Security/Authentication/Cookies/src/CookieSigningInContext.cs b/src/Security/Authentication/Cookies/src/CookieSigningInContext.cs index 41d7b4f6ae..b85429f0cf 100644 --- a/src/Security/Authentication/Cookies/src/CookieSigningInContext.cs +++ b/src/Security/Authentication/Cookies/src/CookieSigningInContext.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies AuthenticationScheme scheme, CookieAuthenticationOptions options, ClaimsPrincipal principal, - AuthenticationProperties properties, + AuthenticationProperties? properties, CookieOptions cookieOptions) : base(context, scheme, options, properties) { diff --git a/src/Security/Authentication/Cookies/src/CookieSigningOutContext.cs b/src/Security/Authentication/Cookies/src/CookieSigningOutContext.cs index 34f6e49ab6..fd0e9712b1 100644 --- a/src/Security/Authentication/Cookies/src/CookieSigningOutContext.cs +++ b/src/Security/Authentication/Cookies/src/CookieSigningOutContext.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies HttpContext context, AuthenticationScheme scheme, CookieAuthenticationOptions options, - AuthenticationProperties properties, + AuthenticationProperties? properties, CookieOptions cookieOptions) : base(context, scheme, options, properties) => CookieOptions = cookieOptions; diff --git a/src/Security/Authentication/Cookies/src/ICookieManager.cs b/src/Security/Authentication/Cookies/src/ICookieManager.cs index 4514fefa97..5db41d7223 100644 --- a/src/Security/Authentication/Cookies/src/ICookieManager.cs +++ b/src/Security/Authentication/Cookies/src/ICookieManager.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// /// /// - string GetRequestCookie(HttpContext context, string key); + string? GetRequestCookie(HttpContext context, string key); /// /// Append the given cookie to the response. @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// /// /// - void AppendResponseCookie(HttpContext context, string key, string value, CookieOptions options); + void AppendResponseCookie(HttpContext context, string key, string? value, CookieOptions options); /// /// Append a delete cookie to the response. diff --git a/src/Security/Authentication/Cookies/src/LoggingExtensions.cs b/src/Security/Authentication/Cookies/src/LoggingExtensions.cs index a8a59f29dd..340fb04a29 100644 --- a/src/Security/Authentication/Cookies/src/LoggingExtensions.cs +++ b/src/Security/Authentication/Cookies/src/LoggingExtensions.cs @@ -7,8 +7,8 @@ namespace Microsoft.Extensions.Logging { internal static class LoggingExtensions { - private static Action _authenticationSchemeSignedIn; - private static Action _authenticationSchemeSignedOut; + private static Action _authenticationSchemeSignedIn; + private static Action _authenticationSchemeSignedOut; static LoggingExtensions() { diff --git a/src/Security/Authentication/Cookies/src/Microsoft.AspNetCore.Authentication.Cookies.csproj b/src/Security/Authentication/Cookies/src/Microsoft.AspNetCore.Authentication.Cookies.csproj index 803c58f408..af13015b04 100644 --- a/src/Security/Authentication/Cookies/src/Microsoft.AspNetCore.Authentication.Cookies.csproj +++ b/src/Security/Authentication/Cookies/src/Microsoft.AspNetCore.Authentication.Cookies.csproj @@ -1,4 +1,4 @@ - + ASP.NET Core middleware that enables an application to use cookie based authentication. @@ -9,6 +9,7 @@ true aspnetcore;authentication;security false + enable diff --git a/src/Security/Authentication/Cookies/src/PostConfigureCookieAuthenticationOptions.cs b/src/Security/Authentication/Cookies/src/PostConfigureCookieAuthenticationOptions.cs index 48895072e9..5881098800 100644 --- a/src/Security/Authentication/Cookies/src/PostConfigureCookieAuthenticationOptions.cs +++ b/src/Security/Authentication/Cookies/src/PostConfigureCookieAuthenticationOptions.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// The options instance to configure. public void PostConfigure(string name, CookieAuthenticationOptions options) { - options.DataProtectionProvider = options.DataProtectionProvider ?? _dp; + options.DataProtectionProvider ??= _dp; if (string.IsNullOrEmpty(options.Cookie.Name)) { diff --git a/src/Security/Authentication/Core/src/AuthenticationBuilder.cs b/src/Security/Authentication/Core/src/AuthenticationBuilder.cs index d4efd0c847..c89c153003 100644 --- a/src/Security/Authentication/Core/src/AuthenticationBuilder.cs +++ b/src/Security/Authentication/Core/src/AuthenticationBuilder.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Authentication /// public virtual IServiceCollection Services { get; } - private AuthenticationBuilder AddSchemeHelper(string authenticationScheme, string displayName, Action configureOptions) + private AuthenticationBuilder AddSchemeHelper(string authenticationScheme, string? displayName, Action? configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : class, IAuthenticationHandler { @@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Authentication /// The display name of this scheme. /// Used to configure the scheme options. /// The builder. - public virtual AuthenticationBuilder AddScheme(string authenticationScheme, string displayName, Action configureOptions) + public virtual AuthenticationBuilder AddScheme(string authenticationScheme, string? displayName, Action? configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : AuthenticationHandler => AddSchemeHelper(authenticationScheme, displayName, configureOptions); @@ -70,7 +70,7 @@ namespace Microsoft.AspNetCore.Authentication /// The name of this scheme. /// Used to configure the scheme options. /// The builder. - public virtual AuthenticationBuilder AddScheme(string authenticationScheme, Action configureOptions) + public virtual AuthenticationBuilder AddScheme(string authenticationScheme, Action? configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : AuthenticationHandler => AddScheme(authenticationScheme, displayName: null, configureOptions: configureOptions); @@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Authentication /// The display name of this scheme. /// Used to configure the scheme options. /// The builder. - public virtual AuthenticationBuilder AddRemoteScheme(string authenticationScheme, string displayName, Action configureOptions) + public virtual AuthenticationBuilder AddRemoteScheme(string authenticationScheme, string? displayName, Action? configureOptions) where TOptions : RemoteAuthenticationOptions, new() where THandler : RemoteAuthenticationHandler { @@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.Authentication /// The display name of this scheme. /// Used to configure the scheme options. /// The builder. - public virtual AuthenticationBuilder AddPolicyScheme(string authenticationScheme, string displayName, Action configureOptions) + public virtual AuthenticationBuilder AddPolicyScheme(string authenticationScheme, string? displayName, Action configureOptions) => AddSchemeHelper(authenticationScheme, displayName, configureOptions); // Used to ensure that there's always a default sign in scheme that's not itself @@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.Authentication public void PostConfigure(string name, TOptions options) { - options.SignInScheme = options.SignInScheme ?? _authOptions.DefaultSignInScheme ?? _authOptions.DefaultScheme; + options.SignInScheme ??= _authOptions.DefaultSignInScheme ?? _authOptions.DefaultScheme; } } } diff --git a/src/Security/Authentication/Core/src/AuthenticationHandler.cs b/src/Security/Authentication/Core/src/AuthenticationHandler.cs index 5f8a8d588f..d19286d030 100644 --- a/src/Security/Authentication/Core/src/AuthenticationHandler.cs +++ b/src/Security/Authentication/Core/src/AuthenticationHandler.cs @@ -13,11 +13,11 @@ namespace Microsoft.AspNetCore.Authentication { public abstract class AuthenticationHandler : IAuthenticationHandler where TOptions : AuthenticationSchemeOptions, new() { - private Task _authenticateTask; + private Task? _authenticateTask; - public AuthenticationScheme Scheme { get; private set; } - public TOptions Options { get; private set; } - protected HttpContext Context { get; private set; } + public AuthenticationScheme Scheme { get; private set; } = default!; + public TOptions Options { get; private set; } = default!; + protected HttpContext Context { get; private set; } = default!; protected HttpRequest Request { @@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.Authentication /// The handler calls methods on the events which give the application control at certain points where processing is occurring. /// If it is not provided a default instance is supplied which does nothing when the methods are called. /// - protected virtual object Events { get; set; } + protected virtual object? Events { get; set; } protected virtual string ClaimsIssuer => Options.ClaimsIssuer ?? Scheme.Name; @@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.Authentication protected string BuildRedirectUri(string targetPath) => Request.Scheme + "://" + Request.Host + OriginalPathBase + targetPath; - protected virtual string ResolveTarget(string scheme) + protected virtual string? ResolveTarget(string? scheme) { var target = scheme ?? Options.ForwardDefaultSelector?.Invoke(Context) ?? Options.ForwardDefault; @@ -135,10 +135,10 @@ namespace Microsoft.AspNetCore.Authentication } // Calling Authenticate more than once should always return the original value. - var result = await HandleAuthenticateOnceAsync(); - if (result?.Failure == null) + var result = await HandleAuthenticateOnceAsync() ?? AuthenticateResult.NoResult(); + if (result.Failure == null) { - var ticket = result?.Ticket; + var ticket = result.Ticket; if (ticket?.Principal != null) { Logger.AuthenticationSchemeAuthenticated(Scheme.Name); @@ -212,7 +212,7 @@ namespace Microsoft.AspNetCore.Authentication return Task.CompletedTask; } - public async Task ChallengeAsync(AuthenticationProperties properties) + public async Task ChallengeAsync(AuthenticationProperties? properties) { var target = ResolveTarget(Options.ForwardChallenge); if (target != null) @@ -221,12 +221,12 @@ namespace Microsoft.AspNetCore.Authentication return; } - properties = properties ?? new AuthenticationProperties(); + properties ??= new AuthenticationProperties(); await HandleChallengeAsync(properties); Logger.AuthenticationSchemeChallenged(Scheme.Name); } - public async Task ForbidAsync(AuthenticationProperties properties) + public async Task ForbidAsync(AuthenticationProperties? properties) { var target = ResolveTarget(Options.ForwardForbid); if (target != null) @@ -235,7 +235,7 @@ namespace Microsoft.AspNetCore.Authentication return; } - properties = properties ?? new AuthenticationProperties(); + properties ??= new AuthenticationProperties(); await HandleForbiddenAsync(properties); Logger.AuthenticationSchemeForbidden(Scheme.Name); } diff --git a/src/Security/Authentication/Core/src/AuthenticationSchemeOptions.cs b/src/Security/Authentication/Core/src/AuthenticationSchemeOptions.cs index 0f1e1b9814..1cfe428cf5 100644 --- a/src/Security/Authentication/Core/src/AuthenticationSchemeOptions.cs +++ b/src/Security/Authentication/Core/src/AuthenticationSchemeOptions.cs @@ -26,17 +26,17 @@ namespace Microsoft.AspNetCore.Authentication /// /// Gets or sets the issuer that should be used for any claims that are created /// - public string ClaimsIssuer { get; set; } + public string? ClaimsIssuer { get; set; } /// /// Instance used for events /// - public object Events { get; set; } + public object? Events { get; set; } /// /// If set, will be used as the service type to get the Events instance instead of the property. /// - public Type EventsType { get; set; } + public Type? EventsType { get; set; } /// /// If set, this specifies a default scheme that authentication handlers should forward all authentication operations to @@ -44,42 +44,42 @@ namespace Microsoft.AspNetCore.Authentication /// setting first, followed by checking the ForwardDefaultSelector, followed by ForwardDefault. The first non null result /// will be used as the target scheme to forward to. /// - public string ForwardDefault { get; set; } + public string? ForwardDefault { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward AuthenticateAsync calls to. /// For example Context.AuthenticateAsync("ThisScheme") => Context.AuthenticateAsync("ForwardAuthenticateValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardAuthenticate { get; set; } + public string? ForwardAuthenticate { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward ChallengeAsync calls to. /// For example Context.ChallengeAsync("ThisScheme") => Context.ChallengeAsync("ForwardChallengeValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardChallenge { get; set; } + public string? ForwardChallenge { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward ForbidAsync calls to. /// For example Context.ForbidAsync("ThisScheme") => Context.ForbidAsync("ForwardForbidValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardForbid { get; set; } + public string? ForwardForbid { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward SignInAsync calls to. /// For example Context.SignInAsync("ThisScheme") => Context.SignInAsync("ForwardSignInValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardSignIn { get; set; } + public string? ForwardSignIn { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward SignOutAsync calls to. /// For example Context.SignOutAsync("ThisScheme") => Context.SignOutAsync("ForwardSignOutValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardSignOut { get; set; } + public string? ForwardSignOut { get; set; } /// /// Used to select a default scheme for the current request that authentication handlers should forward all authentication operations to @@ -87,7 +87,7 @@ namespace Microsoft.AspNetCore.Authentication /// setting first, followed by checking the ForwardDefaultSelector, followed by ForwardDefault. The first non null result /// will be used as the target scheme to forward to. /// - public Func ForwardDefaultSelector { get; set; } + public Func? ForwardDefaultSelector { get; set; } } } diff --git a/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs b/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs index 6c381b84ab..70e707f34d 100644 --- a/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs +++ b/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs @@ -58,7 +58,7 @@ namespace Microsoft.Extensions.DependencyInjection public void PostConfigure(string name, TOptions options) { - options.SignInScheme = options.SignInScheme ?? _authOptions.DefaultSignInScheme; + options.SignInScheme ??= _authOptions.DefaultSignInScheme; } } diff --git a/src/Security/Authentication/Core/src/Events/AccessDeniedContext.cs b/src/Security/Authentication/Core/src/Events/AccessDeniedContext.cs index f01d69453b..30cfee4e69 100644 --- a/src/Security/Authentication/Core/src/Events/AccessDeniedContext.cs +++ b/src/Security/Authentication/Core/src/Events/AccessDeniedContext.cs @@ -27,18 +27,18 @@ namespace Microsoft.AspNetCore.Authentication /// /// Additional state values for the authentication session. /// - public AuthenticationProperties Properties { get; set; } + public AuthenticationProperties? Properties { get; set; } /// /// Gets or sets the return URL that will be flowed up to the access denied page. /// If is not set, this property is not used. /// - public string ReturnUrl { get; set; } + public string? ReturnUrl { get; set; } /// /// Gets or sets the parameter name that will be used to flow the return URL. /// By default, this property is set to . /// - public string ReturnUrlParameter { get; set; } + public string ReturnUrlParameter { get; set; } = default!; } } diff --git a/src/Security/Authentication/Core/src/Events/HandleRequestContext.cs b/src/Security/Authentication/Core/src/Events/HandleRequestContext.cs index 52dd9ce12f..d31cc921e2 100644 --- a/src/Security/Authentication/Core/src/Events/HandleRequestContext.cs +++ b/src/Security/Authentication/Core/src/Events/HandleRequestContext.cs @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Authentication /// /// The which is used by the handler. /// - public HandleRequestResult Result { get; protected set; } + public HandleRequestResult Result { get; protected set; } = default!; /// /// Discontinue all processing for this request and return to the client. @@ -29,4 +29,4 @@ namespace Microsoft.AspNetCore.Authentication /// public void SkipHandler() => Result = HandleRequestResult.SkipHandler(); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/Events/PrincipalContext.cs b/src/Security/Authentication/Core/src/Events/PrincipalContext.cs index 8bf40760a1..f2585fdfbc 100644 --- a/src/Security/Authentication/Core/src/Events/PrincipalContext.cs +++ b/src/Security/Authentication/Core/src/Events/PrincipalContext.cs @@ -19,12 +19,12 @@ namespace Microsoft.AspNetCore.Authentication /// The authentication scheme. /// The authentication options associated with the scheme. /// The authentication properties. - protected PrincipalContext(HttpContext context, AuthenticationScheme scheme, TOptions options, AuthenticationProperties properties) + protected PrincipalContext(HttpContext context, AuthenticationScheme scheme, TOptions options, AuthenticationProperties? properties) : base(context, scheme, options, properties) { } /// /// Gets the containing the user claims. /// - public virtual ClaimsPrincipal Principal { get; set; } + public virtual ClaimsPrincipal? Principal { get; set; } } } diff --git a/src/Security/Authentication/Core/src/Events/PropertiesContext.cs b/src/Security/Authentication/Core/src/Events/PropertiesContext.cs index f1730d0d7f..f803d248b5 100644 --- a/src/Security/Authentication/Core/src/Events/PropertiesContext.cs +++ b/src/Security/Authentication/Core/src/Events/PropertiesContext.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Authentication /// The authentication scheme. /// The authentication options associated with the scheme. /// The authentication properties. - protected PropertiesContext(HttpContext context, AuthenticationScheme scheme, TOptions options, AuthenticationProperties properties) + protected PropertiesContext(HttpContext context, AuthenticationScheme scheme, TOptions options, AuthenticationProperties? properties) : base(context, scheme, options) { Properties = properties ?? new AuthenticationProperties(); diff --git a/src/Security/Authentication/Core/src/Events/RemoteAuthenticationContext.cs b/src/Security/Authentication/Core/src/Events/RemoteAuthenticationContext.cs index b7a0168798..76b42239bc 100644 --- a/src/Security/Authentication/Core/src/Events/RemoteAuthenticationContext.cs +++ b/src/Security/Authentication/Core/src/Events/RemoteAuthenticationContext.cs @@ -23,14 +23,14 @@ namespace Microsoft.AspNetCore.Authentication HttpContext context, AuthenticationScheme scheme, TOptions options, - AuthenticationProperties properties) + AuthenticationProperties? properties) : base(context, scheme, options) => Properties = properties ?? new AuthenticationProperties(); /// /// Gets the containing the user claims. /// - public ClaimsPrincipal Principal { get; set; } + public ClaimsPrincipal? Principal { get; set; } /// /// Gets or sets the . @@ -40,10 +40,10 @@ namespace Microsoft.AspNetCore.Authentication /// /// Calls success creating a ticket with the and . /// - public void Success() => Result = HandleRequestResult.Success(new AuthenticationTicket(Principal, Properties, Scheme.Name)); + public void Success() => Result = HandleRequestResult.Success(new AuthenticationTicket(Principal!, Properties, Scheme.Name)); public void Fail(Exception failure) => Result = HandleRequestResult.Fail(failure); public void Fail(string failureMessage) => Result = HandleRequestResult.Fail(failureMessage); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/Events/RemoteFailureContext.cs b/src/Security/Authentication/Core/src/Events/RemoteFailureContext.cs index 6b3598f40a..c39956aa3f 100644 --- a/src/Security/Authentication/Core/src/Events/RemoteFailureContext.cs +++ b/src/Security/Authentication/Core/src/Events/RemoteFailureContext.cs @@ -24,11 +24,11 @@ namespace Microsoft.AspNetCore.Authentication /// /// User friendly error message for the error. /// - public Exception Failure { get; set; } + public Exception? Failure { get; set; } /// /// Additional state values for the authentication session. /// - public AuthenticationProperties Properties { get; set; } + public AuthenticationProperties? Properties { get; set; } } } diff --git a/src/Security/Authentication/Core/src/Events/ResultContext.cs b/src/Security/Authentication/Core/src/Events/ResultContext.cs index 12b21f4bf6..b8ca95b43e 100644 --- a/src/Security/Authentication/Core/src/Events/ResultContext.cs +++ b/src/Security/Authentication/Core/src/Events/ResultContext.cs @@ -12,6 +12,8 @@ namespace Microsoft.AspNetCore.Authentication /// public abstract class ResultContext : BaseContext where TOptions : AuthenticationSchemeOptions { + private AuthenticationProperties? _properties; + /// /// Constructor. /// @@ -24,26 +26,30 @@ namespace Microsoft.AspNetCore.Authentication /// /// Gets or sets the containing the user claims. /// - public ClaimsPrincipal Principal { get; set; } + public ClaimsPrincipal? Principal { get; set; } - private AuthenticationProperties _properties; /// /// Gets or sets the . /// - public AuthenticationProperties Properties { - get => _properties ?? (_properties = new AuthenticationProperties()); + public AuthenticationProperties Properties + { + get + { + _properties ??= new AuthenticationProperties(); + return _properties; + } set => _properties = value; } /// /// Gets the result. /// - public AuthenticateResult Result { get; private set; } + public AuthenticateResult Result { get; private set; } = default!; /// /// Calls success creating a ticket with the and . /// - public void Success() => Result = HandleRequestResult.Success(new AuthenticationTicket(Principal, Properties, Scheme.Name)); + public void Success() => Result = HandleRequestResult.Success(new AuthenticationTicket(Principal!, Properties, Scheme.Name)); /// /// Indicates that there was no information returned for this authentication scheme. diff --git a/src/Security/Authentication/Core/src/Events/TicketReceivedContext.cs b/src/Security/Authentication/Core/src/Events/TicketReceivedContext.cs index 51b77a37fa..665cb2769a 100644 --- a/src/Security/Authentication/Core/src/Events/TicketReceivedContext.cs +++ b/src/Security/Authentication/Core/src/Events/TicketReceivedContext.cs @@ -19,6 +19,6 @@ namespace Microsoft.AspNetCore.Authentication : base(context, scheme, options, ticket?.Properties) => Principal = ticket?.Principal; - public string ReturnUri { get; set; } + public string? ReturnUri { get; set; } } } diff --git a/src/Security/Authentication/Core/src/IDataSerializer.cs b/src/Security/Authentication/Core/src/IDataSerializer.cs index ad9c523005..be1367600c 100644 --- a/src/Security/Authentication/Core/src/IDataSerializer.cs +++ b/src/Security/Authentication/Core/src/IDataSerializer.cs @@ -1,11 +1,15 @@ // 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 System.Diagnostics.CodeAnalysis; + namespace Microsoft.AspNetCore.Authentication { public interface IDataSerializer { byte[] Serialize(TModel model); + + [return: MaybeNull] TModel Deserialize(byte[] data); } } diff --git a/src/Security/Authentication/Core/src/ISecureDataFormat.cs b/src/Security/Authentication/Core/src/ISecureDataFormat.cs index 73b1b882b5..56b815440b 100644 --- a/src/Security/Authentication/Core/src/ISecureDataFormat.cs +++ b/src/Security/Authentication/Core/src/ISecureDataFormat.cs @@ -1,13 +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 System.Diagnostics.CodeAnalysis; + namespace Microsoft.AspNetCore.Authentication { public interface ISecureDataFormat { string Protect(TData data); - string Protect(TData data, string purpose); + + string Protect(TData data, string? purpose); + + [return: MaybeNull] TData Unprotect(string protectedText); - TData Unprotect(string protectedText, string purpose); + + [return: MaybeNull] + TData Unprotect(string protectedText, string? purpose); } } diff --git a/src/Security/Authentication/Core/src/JsonDocumentAuthExtensions.cs b/src/Security/Authentication/Core/src/JsonDocumentAuthExtensions.cs index 83784ddfd3..eaa3ea5c30 100644 --- a/src/Security/Authentication/Core/src/JsonDocumentAuthExtensions.cs +++ b/src/Security/Authentication/Core/src/JsonDocumentAuthExtensions.cs @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Authentication { public static class JsonDocumentAuthExtensions { - public static string GetString(this JsonElement element, string key) + public static string? GetString(this JsonElement element, string key) { if (element.TryGetProperty(key, out var property) && property.ValueKind != JsonValueKind.Null) { diff --git a/src/Security/Authentication/Core/src/LoggingExtensions.cs b/src/Security/Authentication/Core/src/LoggingExtensions.cs index 75a1e3e6e3..d8a9d3ef64 100644 --- a/src/Security/Authentication/Core/src/LoggingExtensions.cs +++ b/src/Security/Authentication/Core/src/LoggingExtensions.cs @@ -7,20 +7,20 @@ namespace Microsoft.Extensions.Logging { internal static class LoggingExtensions { - private static readonly Action _authenticationSchemeAuthenticated; - private static readonly Action _authenticationSchemeNotAuthenticated; - private static readonly Action _authenticationSchemeNotAuthenticatedWithFailure; - private static readonly Action _authenticationSchemeChallenged; - private static readonly Action _authenticationSchemeForbidden; - private static readonly Action _remoteAuthenticationError; - private static readonly Action _signInHandled; - private static readonly Action _signInSkipped; - private static readonly Action _correlationPropertyNotFound; - private static readonly Action _correlationCookieNotFound; - private static readonly Action _unexpectedCorrelationCookieValue; - private static readonly Action _accessDeniedError; - private static readonly Action _accessDeniedContextHandled; - private static readonly Action _accessDeniedContextSkipped; + private static readonly Action _authenticationSchemeAuthenticated; + private static readonly Action _authenticationSchemeNotAuthenticated; + private static readonly Action _authenticationSchemeNotAuthenticatedWithFailure; + private static readonly Action _authenticationSchemeChallenged; + private static readonly Action _authenticationSchemeForbidden; + private static readonly Action _remoteAuthenticationError; + private static readonly Action _signInHandled; + private static readonly Action _signInSkipped; + private static readonly Action _correlationPropertyNotFound; + private static readonly Action _correlationCookieNotFound; + private static readonly Action _unexpectedCorrelationCookieValue; + private static readonly Action _accessDeniedError; + private static readonly Action _accessDeniedContextHandled; + private static readonly Action _accessDeniedContextSkipped; static LoggingExtensions() { diff --git a/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj b/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj index e81a55f314..5d8135751d 100644 --- a/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj +++ b/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj @@ -1,4 +1,4 @@ - + ASP.NET Core common types used by the various authentication middleware components. @@ -8,6 +8,7 @@ true aspnetcore;authentication;security false + enable diff --git a/src/Security/Authentication/Core/src/PolicySchemeHandler.cs b/src/Security/Authentication/Core/src/PolicySchemeHandler.cs index 4dbbb7de2d..3a171f1cf2 100644 --- a/src/Security/Authentication/Core/src/PolicySchemeHandler.cs +++ b/src/Security/Authentication/Core/src/PolicySchemeHandler.cs @@ -18,19 +18,19 @@ namespace Microsoft.AspNetCore.Authentication public PolicySchemeHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { } - protected override Task HandleChallengeAsync(AuthenticationProperties properties) + protected override Task HandleChallengeAsync(AuthenticationProperties? properties) => throw new NotImplementedException(); - protected override Task HandleForbiddenAsync(AuthenticationProperties properties) + protected override Task HandleForbiddenAsync(AuthenticationProperties? properties) => throw new NotImplementedException(); - protected override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties) + protected override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties) => throw new NotImplementedException(); - protected override Task HandleSignOutAsync(AuthenticationProperties properties) + protected override Task HandleSignOutAsync(AuthenticationProperties? properties) => throw new NotImplementedException(); protected override Task HandleAuthenticateAsync() => throw new NotImplementedException(); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/PropertiesSerializer.cs b/src/Security/Authentication/Core/src/PropertiesSerializer.cs index c213bc4f60..0789d1e1a1 100644 --- a/src/Security/Authentication/Core/src/PropertiesSerializer.cs +++ b/src/Security/Authentication/Core/src/PropertiesSerializer.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Authentication } } - public virtual AuthenticationProperties Deserialize(byte[] data) + public virtual AuthenticationProperties? Deserialize(byte[] data) { using (var memory = new MemoryStream(data)) { @@ -59,7 +59,7 @@ namespace Microsoft.AspNetCore.Authentication } } - public virtual AuthenticationProperties Read(BinaryReader reader) + public virtual AuthenticationProperties? Read(BinaryReader reader) { if (reader == null) { @@ -72,12 +72,12 @@ namespace Microsoft.AspNetCore.Authentication } var count = reader.ReadInt32(); - var extra = new Dictionary(count); + var extra = new Dictionary(count); for (var index = 0; index != count; ++index) { - string key = reader.ReadString(); - string value = reader.ReadString(); + var key = reader.ReadString(); + var value = reader.ReadString(); extra.Add(key, value); } return new AuthenticationProperties(extra); diff --git a/src/Security/Authentication/Core/src/RemoteAuthenticationHandler.cs b/src/Security/Authentication/Core/src/RemoteAuthenticationHandler.cs index 2f650f0971..ed5e379d66 100644 --- a/src/Security/Authentication/Core/src/RemoteAuthenticationHandler.cs +++ b/src/Security/Authentication/Core/src/RemoteAuthenticationHandler.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics; using System.Security.Cryptography; using System.Text.Encodings.Web; using System.Threading.Tasks; @@ -18,7 +19,7 @@ namespace Microsoft.AspNetCore.Authentication private const string CorrelationMarker = "N"; private const string AuthSchemeKey = ".AuthScheme"; - protected string SignInScheme => Options.SignInScheme; + protected string? SignInScheme => Options.SignInScheme; /// /// The handler calls methods on the events which give the application control at certain points where processing is occurring. @@ -26,7 +27,7 @@ namespace Microsoft.AspNetCore.Authentication /// protected new RemoteAuthenticationEvents Events { - get { return (RemoteAuthenticationEvents)base.Events; } + get { return (RemoteAuthenticationEvents)base.Events!; } set { base.Events = value; } } @@ -46,9 +47,9 @@ namespace Microsoft.AspNetCore.Authentication return false; } - AuthenticationTicket ticket = null; - Exception exception = null; - AuthenticationProperties properties = null; + AuthenticationTicket? ticket = null; + Exception? exception = null; + AuthenticationProperties? properties = null; try { var authResult = await HandleRemoteAuthenticateAsync(); @@ -109,6 +110,7 @@ namespace Microsoft.AspNetCore.Authentication } // We have a ticket if we get here + Debug.Assert(ticket != null); var ticketContext = new TicketReceivedContext(Context, Scheme, Options, ticket) { ReturnUri = ticket.Properties.RedirectUri @@ -135,7 +137,7 @@ namespace Microsoft.AspNetCore.Authentication } } - await Context.SignInAsync(SignInScheme, ticketContext.Principal, ticketContext.Properties); + await Context.SignInAsync(SignInScheme, ticketContext.Principal!, ticketContext.Properties); // Default redirect path is the base path if (string.IsNullOrEmpty(ticketContext.ReturnUri)) @@ -165,10 +167,9 @@ namespace Microsoft.AspNetCore.Authentication } // The SignInScheme may be shared with multiple providers, make sure this provider issued the identity. - string authenticatedScheme; var ticket = result.Ticket; if (ticket != null && ticket.Principal != null && ticket.Properties != null - && ticket.Properties.Items.TryGetValue(AuthSchemeKey, out authenticatedScheme) + && ticket.Properties.Items.TryGetValue(AuthSchemeKey, out var authenticatedScheme) && string.Equals(Scheme.Name, authenticatedScheme, StringComparison.Ordinal)) { return AuthenticateResult.Success(new AuthenticationTicket(ticket.Principal, @@ -211,9 +212,9 @@ namespace Microsoft.AspNetCore.Authentication throw new ArgumentNullException(nameof(properties)); } - if (!properties.Items.TryGetValue(CorrelationProperty, out string correlationId)) + if (!properties.Items.TryGetValue(CorrelationProperty, out var correlationId)) { - Logger.CorrelationPropertyNotFound(Options.CorrelationCookie.Name); + Logger.CorrelationPropertyNotFound(Options.CorrelationCookie.Name!); return false; } diff --git a/src/Security/Authentication/Core/src/RemoteAuthenticationOptions.cs b/src/Security/Authentication/Core/src/RemoteAuthenticationOptions.cs index 4dd39ca16e..933d6e000d 100644 --- a/src/Security/Authentication/Core/src/RemoteAuthenticationOptions.cs +++ b/src/Security/Authentication/Core/src/RemoteAuthenticationOptions.cs @@ -70,17 +70,17 @@ namespace Microsoft.AspNetCore.Authentication /// This cannot be set at the same time as BackchannelCertificateValidator unless the value /// can be downcast to a WebRequestHandler. /// - public HttpMessageHandler BackchannelHttpHandler { get; set; } + public HttpMessageHandler? BackchannelHttpHandler { get; set; } /// /// Used to communicate with the remote identity provider. /// - public HttpClient Backchannel { get; set; } + public HttpClient Backchannel { get; set; } = default!; /// /// Gets or sets the type used to secure data. /// - public IDataProtectionProvider DataProtectionProvider { get; set; } + public IDataProtectionProvider? DataProtectionProvider { get; set; } /// /// The request path within the application's base path where the user-agent will be returned. @@ -110,7 +110,7 @@ namespace Microsoft.AspNetCore.Authentication /// This value typically corresponds to a cookie middleware registered in the Startup class. /// When omitted, is used as a fallback value. /// - public string SignInScheme { get; set; } + public string? SignInScheme { get; set; } /// /// Gets or sets the time limit for completing the authentication flow (15 minutes by default). @@ -119,7 +119,7 @@ namespace Microsoft.AspNetCore.Authentication public new RemoteAuthenticationEvents Events { - get => (RemoteAuthenticationEvents)base.Events; + get => (RemoteAuthenticationEvents)base.Events!; set => base.Events = value; } diff --git a/src/Security/Authentication/Core/src/RequestPathBaseCookieBuilder.cs b/src/Security/Authentication/Core/src/RequestPathBaseCookieBuilder.cs index 2efc05c155..d4f81c85ca 100644 --- a/src/Security/Authentication/Core/src/RequestPathBaseCookieBuilder.cs +++ b/src/Security/Authentication/Core/src/RequestPathBaseCookieBuilder.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Authentication /// /// Gets an optional value that is appended to the request path base. /// - protected virtual string AdditionalPath { get; } + protected virtual string? AdditionalPath { get; } public override CookieOptions Build(HttpContext context, DateTimeOffset expiresFrom) { diff --git a/src/Security/Authentication/Core/src/SecureDataFormat.cs b/src/Security/Authentication/Core/src/SecureDataFormat.cs index f35025d8bb..e53a51e71a 100644 --- a/src/Security/Authentication/Core/src/SecureDataFormat.cs +++ b/src/Security/Authentication/Core/src/SecureDataFormat.cs @@ -1,6 +1,7 @@ // 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 System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.DataProtection; namespace Microsoft.AspNetCore.Authentication @@ -21,7 +22,7 @@ namespace Microsoft.AspNetCore.Authentication return Protect(data, purpose: null); } - public string Protect(TData data, string purpose) + public string Protect(TData data, string? purpose) { var userData = _serializer.Serialize(data); @@ -35,12 +36,14 @@ namespace Microsoft.AspNetCore.Authentication return Base64UrlTextEncoder.Encode(protectedData); } + [return: MaybeNull] public TData Unprotect(string protectedText) { return Unprotect(protectedText, purpose: null); } - public TData Unprotect(string protectedText, string purpose) + [return: MaybeNull] + public TData Unprotect(string protectedText, string? purpose) { try { @@ -76,4 +79,4 @@ namespace Microsoft.AspNetCore.Authentication } } } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/SignInAuthenticationHandler.cs b/src/Security/Authentication/Core/src/SignInAuthenticationHandler.cs index dbd612dc10..064ea47ae0 100644 --- a/src/Security/Authentication/Core/src/SignInAuthenticationHandler.cs +++ b/src/Security/Authentication/Core/src/SignInAuthenticationHandler.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Authentication public SignInAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { } - public virtual Task SignInAsync(ClaimsPrincipal user, AuthenticationProperties properties) + public virtual Task SignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties) { var target = ResolveTarget(Options.ForwardSignIn); return (target != null) @@ -33,7 +33,7 @@ namespace Microsoft.AspNetCore.Authentication /// /// /// A Task. - protected abstract Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties); + protected abstract Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/SignOutAuthenticationHandler.cs b/src/Security/Authentication/Core/src/SignOutAuthenticationHandler.cs index 015cb39e05..12b2027fc4 100644 --- a/src/Security/Authentication/Core/src/SignOutAuthenticationHandler.cs +++ b/src/Security/Authentication/Core/src/SignOutAuthenticationHandler.cs @@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Authentication public SignOutAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { } - public virtual Task SignOutAsync(AuthenticationProperties properties) + public virtual Task SignOutAsync(AuthenticationProperties? properties) { var target = ResolveTarget(Options.ForwardSignOut); return (target != null) @@ -31,6 +31,6 @@ namespace Microsoft.AspNetCore.Authentication /// /// /// A Task. - protected abstract Task HandleSignOutAsync(AuthenticationProperties properties); + protected abstract Task HandleSignOutAsync(AuthenticationProperties? properties); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/TicketSerializer.cs b/src/Security/Authentication/Core/src/TicketSerializer.cs index e33ec71725..0ef6664675 100644 --- a/src/Security/Authentication/Core/src/TicketSerializer.cs +++ b/src/Security/Authentication/Core/src/TicketSerializer.cs @@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Authentication } } - public virtual AuthenticationTicket Deserialize(byte[] data) + public virtual AuthenticationTicket? Deserialize(byte[] data) { using (var memory = new MemoryStream(data)) { @@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Authentication } } - public virtual AuthenticationTicket Read(BinaryReader reader) + public virtual AuthenticationTicket? Read(BinaryReader reader) { if (reader == null) { diff --git a/src/Security/build.cmd b/src/Security/build.cmd new file mode 100644 index 0000000000..2406296662 --- /dev/null +++ b/src/Security/build.cmd @@ -0,0 +1,3 @@ +@ECHO OFF +SET RepoRoot=%~dp0..\.. +%RepoRoot%\build.cmd -projects %~dp0**\*.*proj %* diff --git a/src/Shared/ChunkingCookieManager/ChunkingCookieManager.cs b/src/Shared/ChunkingCookieManager/ChunkingCookieManager.cs index 098e3d6690..395e23d5cc 100644 --- a/src/Shared/ChunkingCookieManager/ChunkingCookieManager.cs +++ b/src/Shared/ChunkingCookieManager/ChunkingCookieManager.cs @@ -1,6 +1,8 @@ // 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. +#nullable enable + using System; using System.Collections.Generic; using System.Globalization; @@ -61,7 +63,7 @@ namespace Microsoft.AspNetCore.Internal public bool ThrowForPartialCookies { get; set; } // Parse the "chunks-XX" to determine how many chunks there should be. - private static int ParseChunksCount(string value) + private static int ParseChunksCount(string? value) { if (value != null && value.StartsWith(ChunkCountPrefix, StringComparison.Ordinal)) { @@ -82,7 +84,7 @@ namespace Microsoft.AspNetCore.Internal /// /// /// The reassembled cookie, if any, or null. - public string GetRequestCookie(HttpContext context, string key) + public string? GetRequestCookie(HttpContext context, string key) { if (context == null) { @@ -144,7 +146,7 @@ namespace Microsoft.AspNetCore.Internal /// /// /// - public void AppendResponseCookie(HttpContext context, string key, string value, CookieOptions options) + public void AppendResponseCookie(HttpContext context, string key, string? value, CookieOptions options) { if (context == null) { From f28ef7c3e8bd8c80e5199f5c5c7d95ba5087eaf8 Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Fri, 31 Jul 2020 17:54:35 +0100 Subject: [PATCH 081/106] Use ordinal comparison when detecting event handler attributes. Fixes #24465 (#24471) --- .../Components/src/RenderTree/RenderTreeDiffBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs index 8f39258ddc..6adf9cffbf 100644 --- a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs +++ b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs @@ -954,7 +954,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree // based on the common usage of attributes for DOM events. if ((newFrame.AttributeValue is MulticastDelegate || newFrame.AttributeValue is EventCallback) && newFrame.AttributeName.Length >= 3 && - newFrame.AttributeName.StartsWith("on")) + newFrame.AttributeName.StartsWith("on", StringComparison.Ordinal)) { diffContext.Renderer.AssignEventHandlerId(ref newFrame); } From 4290bcc78235daa3b274709190c9970d37d54363 Mon Sep 17 00:00:00 2001 From: Brennan Date: Fri, 31 Jul 2020 10:13:28 -0700 Subject: [PATCH 082/106] Pass serialization exceptions to Hub disconnect (#24408) --- .../server/Core/src/HubConnectionContext.cs | 8 ++++ .../server/Core/src/HubConnectionHandler.cs | 2 +- .../HubConnectionHandlerTestUtils/Hubs.cs | 33 +++++++++---- .../SignalR/test/HubConnectionHandlerTests.cs | 48 ++++++++++++++++++- 4 files changed, 78 insertions(+), 13 deletions(-) diff --git a/src/SignalR/server/Core/src/HubConnectionContext.cs b/src/SignalR/server/Core/src/HubConnectionContext.cs index 01d07d2e8a..e0a6d758f6 100644 --- a/src/SignalR/server/Core/src/HubConnectionContext.cs +++ b/src/SignalR/server/Core/src/HubConnectionContext.cs @@ -91,6 +91,8 @@ namespace Microsoft.AspNetCore.SignalR internal HubCallerContext HubCallerContext { get; } + internal Exception CloseException { get; private set; } + /// /// Gets a that notifies when the connection is aborted. /// @@ -212,6 +214,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); @@ -231,6 +234,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); @@ -247,6 +251,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); @@ -274,6 +279,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); } @@ -299,6 +305,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); } @@ -336,6 +343,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); } diff --git a/src/SignalR/server/Core/src/HubConnectionHandler.cs b/src/SignalR/server/Core/src/HubConnectionHandler.cs index 403a03e8ae..6ef96034ad 100644 --- a/src/SignalR/server/Core/src/HubConnectionHandler.cs +++ b/src/SignalR/server/Core/src/HubConnectionHandler.cs @@ -182,7 +182,7 @@ namespace Microsoft.AspNetCore.SignalR return; } - await HubOnDisconnectedAsync(connection, null); + await HubOnDisconnectedAsync(connection, connection.CloseException); } private async Task HubOnDisconnectedAsync(HubConnectionContext connection, Exception exception) diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs index 3031ee9ffd..c2a4893fd4 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs @@ -189,16 +189,6 @@ namespace Microsoft.AspNetCore.SignalR.Tests { } - private class SelfRef - { - public SelfRef() - { - Self = this; - } - - public SelfRef Self { get; set; } - } - public async Task StreamingConcat(ChannelReader source) { var sb = new StringBuilder(); @@ -331,6 +321,16 @@ namespace Microsoft.AspNetCore.SignalR.Tests } } + internal class SelfRef + { + public SelfRef() + { + Self = this; + } + + public SelfRef Self { get; set; } + } + public abstract class TestHub : Hub { public override Task OnConnectedAsync() @@ -1123,9 +1123,20 @@ namespace Microsoft.AspNetCore.SignalR.Tests return base.OnConnectedAsync(); } + public Task ProtocolErrorSelf() + { + return Clients.Caller.SendAsync("Send", new SelfRef()); + } + + public Task ProtocolErrorAll() + { + return Clients.All.SendAsync("Send", new SelfRef()); + } + public override Task OnDisconnectedAsync(Exception exception) { _state.TokenStateInDisconnected = Context.ConnectionAborted.IsCancellationRequested; + _state.DisconnectedException = exception; return base.OnDisconnectedAsync(exception); } @@ -1138,6 +1149,8 @@ namespace Microsoft.AspNetCore.SignalR.Tests public bool TokenStateInConnected { get; set; } public bool TokenStateInDisconnected { get; set; } + + public Exception DisconnectedException { get; set; } } public class CallerServiceHub : Hub diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs index ceab4322be..32d198d2fd 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs @@ -19,10 +19,8 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Connections.Features; -using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Internal; using Microsoft.AspNetCore.SignalR.Protocol; -using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; @@ -3342,6 +3340,52 @@ namespace Microsoft.AspNetCore.SignalR.Tests } } + [Fact] + public async Task SerializationExceptionsSendSelfArePassedToOnDisconnectedAsync() + { + using (StartVerifiableLog(write => write.EventId.Name == "FailedWritingMessage")) + { + var state = new ConnectionLifetimeState(); + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(s => s.AddSingleton(state), LoggerFactory); + var connectionHandler = serviceProvider.GetService>(); + + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + // Test HubConnectionContext.WriteCore(HubMessage) codepath + await client.SendInvocationAsync(nameof(ConnectionLifetimeHub.ProtocolErrorSelf)).OrTimeout(); + + await connectionHandlerTask.OrTimeout(); + + Assert.IsType(state.DisconnectedException); + } + } + } + + [Fact] + public async Task SerializationExceptionsSendAllArePassedToOnDisconnectedAsync() + { + using (StartVerifiableLog(write => write.EventId.Name == "FailedWritingMessage")) + { + var state = new ConnectionLifetimeState(); + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(s => s.AddSingleton(state), LoggerFactory); + var connectionHandler = serviceProvider.GetService>(); + + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + // Test HubConnectionContext.WriteCore(SerializedHubMessage) codepath + await client.SendInvocationAsync(nameof(ConnectionLifetimeHub.ProtocolErrorAll)).OrTimeout(); + + await connectionHandlerTask.OrTimeout(); + + Assert.IsType(state.DisconnectedException); + } + } + } + [Fact(Skip = "Magic auto cast not supported")] public async Task UploadStreamItemInvalidTypeAutoCasts() { From b2fe5dd4b1a74e09e6bc07135a753533775ea997 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 31 Jul 2020 10:32:31 -0700 Subject: [PATCH 083/106] Update dependencies from https://github.com/dotnet/roslyn build 20200729.3 (#24456) Microsoft.Net.Compilers.Toolset From Version 3.8.0-1.20367.11 -> To Version 3.8.0-2.20379.3 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a22a673428..3b884cae68 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -313,9 +313,9 @@ https://github.com/dotnet/arcade ff5d4b6c8dbdaeacb6e6159d3f8185118dffd915 - + https://github.com/dotnet/roslyn - fb7b2e716d163b7abebf57db505e01a4a521ddae + 7238563e5c051535770a9266c45d925012ad2b76 diff --git a/eng/Versions.props b/eng/Versions.props index 180dc2aee6..3ac9563017 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -62,7 +62,7 @@ --> - 3.8.0-1.20367.11 + 3.8.0-2.20379.3 5.0.0-rc.1.20370.4 5.0.0-rc.1.20370.4 From c0c0a26000635c4588bd0fb1a9e01fb3aef39f4c Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Fri, 31 Jul 2020 12:44:27 -0700 Subject: [PATCH 084/106] Wait for component to mount before checking for output (#24451) * Wait for component to mount before checking for output * Use Exists to check for element with timeout * Update ComponentRenderingTest.cs --- src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs b/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs index 7f62e86441..6a105a5fff 100644 --- a/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs +++ b/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs @@ -46,7 +46,8 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests public void CanRenderTextOnlyComponent() { var appElement = Browser.MountTestComponent(); - Assert.Equal("Hello from TextOnlyComponent", appElement.Text); + + Browser.Exists(By.XPath("//*[contains(., 'Hello from TextOnlyComponent')]")); } // This verifies that we've correctly configured the Razor language version via MSBuild. From e6b9a3d2958e345584c7874bb723575bf1eed9df Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Fri, 31 Jul 2020 13:35:54 -0700 Subject: [PATCH 085/106] Remove debian 8 from helix runs (#24454) * Add display environment * Print out env variables as part of helix runs * Update TestRunner.cs * Remove Debian 8 from helix matrix * Remove Debian 8 skip * Remove debian 8 skip * Remove debian 8 * Remove debian 8 skip * Remove Debian 8 skip * Remove debian 8 * Update Program.cs * Update TestRunner.cs * Update TestRunner.cs --- docs/Helix.md | 2 +- eng/scripts/RunHelix.ps1 | 3 +-- eng/targets/Helix.Common.props | 1 - .../Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs | 2 -- .../Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs | 1 - .../HttpsConnectionMiddlewareTests.cs | 1 - src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs | 4 +--- 7 files changed, 3 insertions(+), 11 deletions(-) diff --git a/docs/Helix.md b/docs/Helix.md index 318a9ef8cb..477574dc2c 100644 --- a/docs/Helix.md +++ b/docs/Helix.md @@ -19,7 +19,7 @@ This will restore, and then publish all the test project including some bootstra ## Overview of the helix usage in our pipelines - Required queues: Windows10, OSX, Ubuntu1604 -- Full queue matrix: Windows[7, 81, 10], Ubuntu[1604, 1804, 2004], Centos7, Debian[8,9], Redhat7, Fedora28, Arm64 (Win10, Debian9) +- Full queue matrix: Windows[7, 81, 10], Ubuntu[1604, 1804, 2004], Centos7, Debian9, Redhat7, Fedora28, Arm64 (Win10, Debian9) - The queues are defined in [Helix.Common.props](https://github.com/dotnet/aspnetcore/blob/master/eng/targets/Helix.Common.props) [aspnetcore-ci](https://dev.azure.com/dnceng/public/_build?definitionId=278) runs non quarantined tests against the required helix queues as a required PR check and all builds on all branches. diff --git a/eng/scripts/RunHelix.ps1 b/eng/scripts/RunHelix.ps1 index b2200d37fd..2a20580c3a 100644 --- a/eng/scripts/RunHelix.ps1 +++ b/eng/scripts/RunHelix.ps1 @@ -15,7 +15,6 @@ Windows.7.Amd64.Open OSX.1014.Amd64.Open Centos.7.Amd64.Open - Debian.8.Amd64.Open Debian.9.Amd64.Open Redhat.7.Amd64.Open .PARAMETER RunQuarantinedTests @@ -39,4 +38,4 @@ $env:BUILD_REPOSITORY_NAME="aspnetcore" $env:SYSTEM_TEAMPROJECT="aspnetcore" $HelixQueues = $HelixQueues -replace ";", "%3B" -dotnet msbuild $Project /t:Helix /p:TargetArchitecture="$TargetArchitecture" /p:IsRequiredCheck=true /p:IsHelixDaily=true /p:HelixTargetQueues=$HelixQueues /p:RunQuarantinedTests=$RunQuarantinedTests /p:_UseHelixOpenQueues=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log \ No newline at end of file +dotnet msbuild $Project /t:Helix /p:TargetArchitecture="$TargetArchitecture" /p:IsRequiredCheck=true /p:IsHelixDaily=true /p:HelixTargetQueues=$HelixQueues /p:RunQuarantinedTests=$RunQuarantinedTests /p:_UseHelixOpenQueues=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log diff --git a/eng/targets/Helix.Common.props b/eng/targets/Helix.Common.props index 5f8a83cb6d..d68970f8dc 100644 --- a/eng/targets/Helix.Common.props +++ b/eng/targets/Helix.Common.props @@ -32,7 +32,6 @@ - diff --git a/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs b/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs index c4a89e9fcf..620c08a73e 100644 --- a/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs +++ b/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs @@ -80,7 +80,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.Http2 [ConditionalFact] [OSSkipCondition(OperatingSystems.MacOSX, SkipReason = "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492")] - [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/10428", Queues = "Debian.8.Amd64;Debian.8.Amd64.Open")] // Debian 8 uses OpenSSL 1.0.1 which does not support HTTP/2 [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10)] public async Task TlsAlpnHandshakeSelectsHttp2From1and2() { @@ -111,7 +110,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.Http2 [ConditionalFact] [OSSkipCondition(OperatingSystems.MacOSX, SkipReason = "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492")] - [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/10428", Queues = "Debian.8.Amd64;Debian.8.Amd64.Open")] // Debian 8 uses OpenSSL 1.0.1 which does not support HTTP/2 [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10)] public async Task TlsAlpnHandshakeSelectsHttp2() { diff --git a/src/Servers/Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs b/src/Servers/Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs index d5788e3369..e8537520d1 100644 --- a/src/Servers/Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs +++ b/src/Servers/Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs @@ -23,7 +23,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.Http2 { [OSSkipCondition(OperatingSystems.MacOSX, SkipReason = "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492")] [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10)] - [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/10428", Queues = "Debian.8.Amd64;Debian.8.Amd64.Open")] // Debian 8 uses OpenSSL 1.0.1 which does not support HTTP/2 public class ShutdownTests : TestApplicationErrorLoggerLoggedTest { private static X509Certificate2 _x509Certificate2 = TestResources.GetTestCertificate(); diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/HttpsConnectionMiddlewareTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/HttpsConnectionMiddlewareTests.cs index 70b216e149..59c7222df7 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/HttpsConnectionMiddlewareTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/HttpsConnectionMiddlewareTests.cs @@ -632,7 +632,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests [InlineData(HttpProtocols.Http2)] [InlineData(HttpProtocols.Http1AndHttp2)] [OSSkipCondition(OperatingSystems.MacOSX, SkipReason = "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492")] - [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/10428", Queues = "Debian.8.Amd64;Debian.8.Amd64.Open")] // Debian 8 uses OpenSSL 1.0.1 which does not support HTTP/2 [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10)] public async Task ListenOptionsProtolsCanBeSetAfterUseHttps(HttpProtocols httpProtocols) { diff --git a/src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs b/src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs index d2e2ce85a4..21b18f8aee 100644 --- a/src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs +++ b/src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs @@ -12,9 +12,7 @@ namespace Interop.FunctionalTests return // "Missing Windows ALPN support: https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation#Support" or missing compatible ciphers (Win8.1) new MinimumOSVersionAttribute(OperatingSystems.Windows, WindowsVersions.Win10).IsMet // "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492" - && new OSSkipConditionAttribute(OperatingSystems.MacOSX).IsMet - // Debian 8 uses OpenSSL 1.0.1 which does not support ALPN - && new SkipOnHelixAttribute("https://github.com/dotnet/aspnetcore/issues/10428") { Queues = "Debian.8.Amd64;Debian.8.Amd64.Open" }.IsMet; + && new OSSkipConditionAttribute(OperatingSystems.MacOSX).IsMet; } } } From f495fcb151e9e620d6dc34b238672816d7fae5bb Mon Sep 17 00:00:00 2001 From: Pranav K Date: Fri, 31 Jul 2020 13:40:52 -0700 Subject: [PATCH 086/106] Avoid doing unncecessary work when generating component declaration files. (#24445) The output of the declaration file for Razor components are unaffected by all inputs other than the input .razor file. Consequently we can avoid regenerating these files if the output is newer than the input. This is the same heuristic we apply to Blazor WebAsssembly's compression artifacts. This PR combines these two improvements for a ~90ms (10%) improvement in the inner loop. ``` 17 ms GenerateBlazorWebAssemblyBootJson 1 calls 22 ms Copy 8 calls 39 ms ProcessFrameworkReferences 1 calls 40 ms RazorTagHelper 1 calls 51 ms ResolveAssemblyReference 1 calls 70 ms GetFileHash 1 calls 80 ms RazorGenerate 2 calls 111 ms Csc 2 calls Time Elapsed 00:00:00.95 ``` ``` 17 ms GenerateBlazorWebAssemblyBootJson 1 calls 21 ms Copy 8 calls 37 ms ProcessFrameworkReferences 1 calls 51 ms ResolveAssemblyReference 1 calls 70 ms Csc 1 calls 72 ms GetFileHash 1 calls 79 ms RazorGenerate 2 calls Time Elapsed 00:00:00.86 ``` In after: Csc calls reduced to one, RazorTagHelper call removed. --- .../src/GenerateCommand.cs | 14 +++++ .../BuildIncrementalismTest.cs | 62 +++++++++++++++++-- .../Microsoft.NET.Sdk.Razor.Component.targets | 8 ++- 3 files changed, 79 insertions(+), 5 deletions(-) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs index 6bcf622d1d..658b9d2263 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs @@ -201,6 +201,7 @@ namespace Microsoft.AspNetCore.Razor.Tools if (GenerateDeclaration.HasValue()) { b.Features.Add(new SetSuppressPrimaryMethodBodyOptionFeature()); + b.Features.Add(new SuppressChecksumOptionsFeature()); } if (RootNamespace.HasValue()) @@ -227,6 +228,7 @@ namespace Microsoft.AspNetCore.Razor.Tools }); var results = GenerateCode(engine, sourceItems); + var isGeneratingDeclaration = GenerateDeclaration.HasValue(); foreach (var result in results) { @@ -255,6 +257,18 @@ namespace Microsoft.AspNetCore.Razor.Tools { // Only output the file if we generated it without errors. var outputFilePath = result.InputItem.OutputPath; + var generatedCode = result.CSharpDocument.GeneratedCode; + if (isGeneratingDeclaration) + { + // When emiting declarations, only write if it the contents are different. + // This allows build incrementalism to kick in when the declaration remains unchanged between builds. + if (File.Exists(outputFilePath) && + string.Equals(File.ReadAllText(outputFilePath), generatedCode, StringComparison.Ordinal)) + { + continue; + } + } + File.WriteAllText(outputFilePath, result.CSharpDocument.GeneratedCode); } } diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildIncrementalismTest.cs b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildIncrementalismTest.cs index df84c3b7a6..e651cad69f 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildIncrementalismTest.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildIncrementalismTest.cs @@ -174,9 +174,10 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests [Fact] [InitializeTestProject("MvcWithComponents")] - public async Task BuildComponents_RegeneratesComponentDefinition_WhenFilesChange() + public async Task BuildComponents_DoesNotRegenerateComponentDefinition_WhenDefinitionIsUnchanged() { // Act - 1 + var updatedContent = "Some content"; var tagHelperOutputCache = Path.Combine(IntermediateOutputPath, "MvcWithComponents.TagHelpers.output.cache"); var generatedFile = Path.Combine(RazorIntermediateOutputPath, "Views", "Shared", "NavMenu.razor.g.cs"); @@ -204,7 +205,56 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests var definitionThumbprint = GetThumbPrint(tagHelperOutputCache); // Act - 2 - ReplaceContent("Different things", "Views", "Shared", "NavMenu.razor"); + ReplaceContent(updatedContent, "Views", "Shared", "NavMenu.razor"); + result = await DotnetMSBuild("Build"); + + // Assert - 2 + Assert.FileExists(result, generatedDefinitionFile); + // Definition file remains unchanged. + Assert.Equal(generatedDefinitionThumbprint, GetThumbPrint(generatedDefinitionFile)); + Assert.FileExists(result, generatedFile); + // Generated file should change and include the new content. + Assert.NotEqual(generatedFileThumbprint, GetThumbPrint(generatedFile)); + Assert.FileContains(result, generatedFile, updatedContent); + + // TagHelper cache should remain unchanged. + Assert.Equal(definitionThumbprint, GetThumbPrint(tagHelperOutputCache)); + } + + [Fact] + [InitializeTestProject("MvcWithComponents")] + public async Task BuildComponents_RegeneratesComponentDefinition_WhenFilesChange() + { + // Act - 1 + var updatedContent = "@code { [Parameter] public string AParameter { get; set; } }"; + var tagHelperOutputCache = Path.Combine(IntermediateOutputPath, "MvcWithComponents.TagHelpers.output.cache"); + + var generatedFile = Path.Combine(RazorIntermediateOutputPath, "Views", "Shared", "NavMenu.razor.g.cs"); + var generatedDefinitionFile = Path.Combine(RazorComponentIntermediateOutputPath, "Views", "Shared", "NavMenu.razor.g.cs"); + + // Assert - 1 + var result = await DotnetMSBuild("Build"); + + Assert.BuildPassed(result); + var outputFile = Path.Combine(OutputPath, "MvcWithComponents.dll"); + Assert.FileExists(result, OutputPath, "MvcWithComponents.dll"); + var outputAssemblyThumbprint = GetThumbPrint(outputFile); + + Assert.FileExists(result, generatedDefinitionFile); + var generatedDefinitionThumbprint = GetThumbPrint(generatedDefinitionFile); + Assert.FileExists(result, generatedFile); + var generatedFileThumbprint = GetThumbPrint(generatedFile); + + Assert.FileExists(result, tagHelperOutputCache); + Assert.FileContains( + result, + tagHelperOutputCache, + @"""Name"":""MvcWithComponents.Views.Shared.NavMenu"""); + + var definitionThumbprint = GetThumbPrint(tagHelperOutputCache); + + // Act - 2 + ReplaceContent(updatedContent, "Views", "Shared", "NavMenu.razor"); result = await DotnetMSBuild("Build"); // Assert - 2 @@ -222,8 +272,12 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests tagHelperOutputCache, @"""Name"":""MvcWithComponents.Views.Shared.NavMenu"""); - // TODO: - Assert.Equal(definitionThumbprint, GetThumbPrint(tagHelperOutputCache)); + Assert.FileContains( + result, + tagHelperOutputCache, + "AParameter"); + + Assert.NotEqual(definitionThumbprint, GetThumbPrint(tagHelperOutputCache)); } [Fact] diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Component.targets b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Component.targets index 89e93a3a98..922d3fb34e 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Component.targets +++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Component.targets @@ -29,6 +29,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_RazorComponentInputHash> <_RazorComponentInputCacheFile>$(IntermediateOutputPath)$(MSBuildProjectName).RazorComponent.input.cache + <_RazorComponentDeclarationOutputCacheFile>$(IntermediateOutputPath)$(MSBuildProjectName).RazorComponent.output.cache @@ -85,7 +86,7 @@ Copyright (c) .NET Foundation. All rights reserved. Name="RazorGenerateComponentDeclaration" DependsOnTargets="$(RazorGenerateComponentDeclarationDependsOn)" Inputs="$(MSBuildAllProjects);@(RazorComponentWithTargetPath);$(_RazorComponentInputCacheFile)" - Outputs="@(_RazorComponentDeclaration)" + Outputs="$(_RazorComponentDeclarationOutputCacheFile)" Condition="'@(RazorComponentWithTargetPath->Count())'!='0'"> @@ -120,8 +121,13 @@ Copyright (c) .NET Foundation. All rights reserved. TagHelperManifest="$(_RazorComponentDeclarationManifest)" GenerateDeclaration="true" /> + + + From a64f3fda00e35026e5830fcba5343a5707d73716 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 31 Jul 2020 14:04:05 -0700 Subject: [PATCH 087/106] Update dependencies from https://github.com/dotnet/arcade build 20200724.1 (#24482) Microsoft.DotNet.Helix.Sdk , Microsoft.DotNet.Arcade.Sdk From Version 5.0.0-beta.20364.3 -> To Version 5.0.0-beta.20374.1 - downgrade of the Arcade SDK should be fine Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 8 +++---- eng/common/cross/toolchain.cmake | 39 ++++++++++++++++++++------------ global.json | 4 ++-- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3b884cae68..2995c7f564 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -305,13 +305,13 @@ https://github.com/dotnet/runtime 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/arcade - 22d6355c4f3c9ac00b0e3abf9d85f2fb07e4787b + f6192d1e284a08ac05041d05fa6e60dec74b24f5 - + https://github.com/dotnet/arcade - ff5d4b6c8dbdaeacb6e6159d3f8185118dffd915 + f6192d1e284a08ac05041d05fa6e60dec74b24f5 https://github.com/dotnet/roslyn diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 88a758afb1..b9fe796f0d 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -127,29 +127,40 @@ endif() # Specify link flags +function(add_toolchain_linker_flag Flag) + set(Config "${ARGV1}") + set(CONFIG_SUFFIX "") + if (NOT Config STREQUAL "") + set(CONFIG_SUFFIX "_${Config}") + endif() + set("CMAKE_EXE_LINKER_FLAGS${CONFIG_SUFFIX}" "${CMAKE_EXE_LINKER_FLAGS${CONFIG_SUFFIX}} ${Flag}" PARENT_SCOPE) + set("CMAKE_SHARED_LINKER_FLAGS${CONFIG_SUFFIX}" "${CMAKE_SHARED_LINKER_FLAGS${CONFIG_SUFFIX}} ${Flag}" PARENT_SCOPE) +endfunction() + + if(TARGET_ARCH_NAME STREQUAL "armel") if(DEFINED TIZEN_TOOLCHAIN) # For Tizen only - add_link_options("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") - add_link_options("-L${CROSS_ROOTFS}/lib") - add_link_options("-L${CROSS_ROOTFS}/usr/lib") - add_link_options("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") endif() elseif(TARGET_ARCH_NAME STREQUAL "arm64") if(DEFINED TIZEN_TOOLCHAIN) # For Tizen only - add_link_options("-B${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") - add_link_options("-L${CROSS_ROOTFS}/lib64") - add_link_options("-L${CROSS_ROOTFS}/usr/lib64") - add_link_options("-L${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib64") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") - add_link_options("-Wl,--rpath-link=${CROSS_ROOTFS}/lib64") - add_link_options("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64") - add_link_options("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/lib64") + add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64") + add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") endif() elseif(TARGET_ARCH_NAME STREQUAL "x86") - add_link_options(-m32) + add_toolchain_linker_flag(-m32) elseif(ILLUMOS) - add_link_options("-L${CROSS_ROOTFS}/lib/amd64") - add_link_options("-L${CROSS_ROOTFS}/usr/amd64/lib") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib/amd64") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/amd64/lib") endif() # Specify compile options diff --git a/global.json b/global.json index 6496dffe47..43ce9ccf9d 100644 --- a/global.json +++ b/global.json @@ -30,7 +30,7 @@ }, "msbuild-sdks": { "Yarn.MSBuild": "1.15.2", - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20377.2", - "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20364.3" + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20374.1", + "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20374.1" } } From 6f7a3dfd4e4aacb6da55dce90df8be2ac32ddacd Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Fri, 31 Jul 2020 22:04:48 +0100 Subject: [PATCH 088/106] Remove Blazor internal profiling infrastructure (#24468) * Put back InternalCalls * Removing .NET profiling calls * Remove JS side profiling --- .../Microsoft.AspNetCore.Components.csproj | 1 - .../src/Profiling/ComponentsProfiling.cs | 23 --- .../src/Profiling/NoOpComponentsProfiling.cs | 16 -- .../WebAssemblyComponentsProfiling.cs | 41 ------ .../src/RenderTree/RenderTreeDiffBuilder.cs | 47 ------ .../Components/src/RenderTree/Renderer.cs | 11 -- .../src/Rendering/ComponentState.cs | 5 - .../src/Rendering/RenderTreeBuilder.cs | 71 --------- .../Web.JS/dist/Release/blazor.server.js | 8 +- .../Web.JS/dist/Release/blazor.webassembly.js | 2 +- src/Components/Web.JS/src/Boot.Server.ts | 2 - src/Components/Web.JS/src/Boot.WebAssembly.ts | 5 - src/Components/Web.JS/src/GlobalExports.ts | 2 - .../Web.JS/src/Platform/Mono/MonoPlatform.ts | 5 - .../Web.JS/src/Platform/Profiling.ts | 137 ------------------ .../Web.JS/src/Rendering/BrowserRenderer.ts | 5 - .../JSInterop/src/InternalCalls.cs} | 0 .../Microsoft.JSInterop.WebAssembly.csproj | 1 - 18 files changed, 5 insertions(+), 377 deletions(-) delete mode 100644 src/Components/Components/src/Profiling/ComponentsProfiling.cs delete mode 100644 src/Components/Components/src/Profiling/NoOpComponentsProfiling.cs delete mode 100644 src/Components/Components/src/Profiling/WebAssemblyComponentsProfiling.cs delete mode 100644 src/Components/Web.JS/src/Platform/Profiling.ts rename src/Components/{Shared/src/WebAssemblyJSInteropInternalCalls.cs => WebAssembly/JSInterop/src/InternalCalls.cs} (100%) diff --git a/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj b/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj index 7565534a51..1e7f881ed5 100644 --- a/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj +++ b/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj @@ -10,7 +10,6 @@ - diff --git a/src/Components/Components/src/Profiling/ComponentsProfiling.cs b/src/Components/Components/src/Profiling/ComponentsProfiling.cs deleted file mode 100644 index f47a0c917c..0000000000 --- a/src/Components/Components/src/Profiling/ComponentsProfiling.cs +++ /dev/null @@ -1,23 +0,0 @@ -// 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 System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace Microsoft.AspNetCore.Components.Profiling -{ - internal abstract class ComponentsProfiling - { - // For now, this is only intended for use on Blazor WebAssembly, and will have no effect - // when running on Blazor Server. The reason for having the ComponentsProfiling abstraction - // is so that if we later have two different implementations (one for WebAssembly, one for - // Server), the execution characteristics of calling Start/End will be unchanged and historical - // perf data will still be comparable to newer data. - public static readonly ComponentsProfiling Instance = PlatformInfo.IsWebAssembly - ? new WebAssemblyComponentsProfiling() - : (ComponentsProfiling)new NoOpComponentsProfiling(); - - public abstract void Start([CallerMemberName] string? name = null); - public abstract void End([CallerMemberName] string? name = null); - } -} diff --git a/src/Components/Components/src/Profiling/NoOpComponentsProfiling.cs b/src/Components/Components/src/Profiling/NoOpComponentsProfiling.cs deleted file mode 100644 index 74037e7de7..0000000000 --- a/src/Components/Components/src/Profiling/NoOpComponentsProfiling.cs +++ /dev/null @@ -1,16 +0,0 @@ -// 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. - -namespace Microsoft.AspNetCore.Components.Profiling -{ - internal class NoOpComponentsProfiling : ComponentsProfiling - { - public override void Start(string? name) - { - } - - public override void End(string? name) - { - } - } -} diff --git a/src/Components/Components/src/Profiling/WebAssemblyComponentsProfiling.cs b/src/Components/Components/src/Profiling/WebAssemblyComponentsProfiling.cs deleted file mode 100644 index 4e0b6dbd74..0000000000 --- a/src/Components/Components/src/Profiling/WebAssemblyComponentsProfiling.cs +++ /dev/null @@ -1,41 +0,0 @@ -// 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 WebAssembly.JSInterop; - -namespace Microsoft.AspNetCore.Components.Profiling -{ - // Later on, we will likely want to move this into the WebAssembly package. However it needs to - // be inlined into the Components package directly until we're ready to make the underlying - // ComponentsProfile abstraction into a public API. It's possible that this API will never become - // public, or that it will be replaced by something more standard for .NET, if it's possible to - // make that work performantly on WebAssembly. - - internal class WebAssemblyComponentsProfiling : ComponentsProfiling - { - static bool IsCapturing = false; - - public static void SetCapturing(bool isCapturing) - { - IsCapturing = isCapturing; - } - - public override void Start(string? name) - { - if (IsCapturing) - { - InternalCalls.InvokeJSUnmarshalled( - out _, "_blazorProfileStart", name, null, null); - } - } - - public override void End(string? name) - { - if (IsCapturing) - { - InternalCalls.InvokeJSUnmarshalled( - out _, "_blazorProfileEnd", name, null, null); - } - } - } -} diff --git a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs index 6adf9cffbf..aabd22217a 100644 --- a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs +++ b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs @@ -7,7 +7,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; -using Microsoft.AspNetCore.Components.Profiling; using Microsoft.AspNetCore.Components.Rendering; namespace Microsoft.AspNetCore.Components.RenderTree @@ -28,7 +27,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree ArrayRange oldTree, ArrayRange newTree) { - ComponentsProfiling.Instance.Start(); var editsBuffer = batchBuilder.EditsBuffer; var editsBufferStartLength = editsBuffer.Count; @@ -37,7 +35,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree var editsSegment = editsBuffer.ToSegment(editsBufferStartLength, editsBuffer.Count); var result = new RenderTreeDiff(componentId, editsSegment); - ComponentsProfiling.Instance.End(); return result; } @@ -49,7 +46,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl) { - ProfilingStart(); // This is deliberately a very large method. Parts of it could be factored out // into other private methods, but doing so comes at a consequential perf cost, // because it involves so much parameter passing. You can think of the code here @@ -300,12 +296,10 @@ namespace Microsoft.AspNetCore.Components.RenderTree diffContext.KeyedItemInfoDictionaryPool.Return(keyedItemInfos); } } - ProfilingEnd(); } private static Dictionary BuildKeyToInfoLookup(DiffContext diffContext, int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl) { - ProfilingStart(); var result = diffContext.KeyedItemInfoDictionaryPool.Get(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; @@ -351,7 +345,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree newStartIndex = NextSiblingIndex(frame, newStartIndex); } - ProfilingEnd(); return result; } @@ -394,7 +387,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl) { - ProfilingStart(); // The overhead of the dictionary used by AppendAttributeDiffEntriesForRangeSlow is // significant, so we want to try and do a merge-join if possible, but fall back to // a hash-join if not. We'll do a merge join until we hit a case we can't handle and @@ -443,7 +435,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree ref diffContext, oldStartIndex, oldEndIndexExcl, newStartIndex, newEndIndexExcl); - ProfilingEnd(); return; } @@ -469,12 +460,9 @@ namespace Microsoft.AspNetCore.Components.RenderTree ref diffContext, oldStartIndex, oldEndIndexExcl, newStartIndex, newEndIndexExcl); - ProfilingEnd(); return; } } - - ProfilingEnd(); } private static void AppendAttributeDiffEntriesForRangeSlow( @@ -482,7 +470,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl) { - ProfilingStart(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; @@ -521,7 +508,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree // We should have processed any additions at this point. Reset for the next batch. diffContext.AttributeDiffSet.Clear(); - ProfilingEnd(); } private static void UpdateRetainedChildComponent( @@ -529,7 +515,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldComponentIndex, int newComponentIndex) { - ProfilingStart(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; ref var oldComponentFrame = ref oldTree[oldComponentIndex]; @@ -556,8 +541,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree { componentState.SetDirectParameters(newParameters); } - - ProfilingEnd(); } private static int NextSiblingIndex(in RenderTreeFrame frame, int frameIndex) @@ -580,7 +563,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldFrameIndex, int newFrameIndex) { - ProfilingStart(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; ref var oldFrame = ref oldTree[oldFrameIndex]; @@ -593,7 +575,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree { InsertNewFrame(ref diffContext, newFrameIndex); RemoveOldFrame(ref diffContext, oldFrameIndex); - ProfilingEnd(); return; } @@ -719,8 +700,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree default: throw new NotImplementedException($"Encountered unsupported frame type during diffing: {newTree[newFrameIndex].FrameType}"); } - - ProfilingEnd(); } // This should only be called for attributes that have the same name. This is an @@ -730,7 +709,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldFrameIndex, int newFrameIndex) { - ProfilingStart(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; ref var oldFrame = ref oldTree[oldFrameIndex]; @@ -759,13 +737,10 @@ namespace Microsoft.AspNetCore.Components.RenderTree // since it was unchanged. newFrame = oldFrame; } - - ProfilingEnd(); } private static void InsertNewFrame(ref DiffContext diffContext, int newFrameIndex) { - ProfilingStart(); var newTree = diffContext.NewTree; ref var newFrame = ref newTree[newFrameIndex]; switch (newFrame.FrameType) @@ -818,12 +793,10 @@ namespace Microsoft.AspNetCore.Components.RenderTree default: throw new NotImplementedException($"Unexpected frame type during {nameof(InsertNewFrame)}: {newFrame.FrameType}"); } - ProfilingEnd(); } private static void RemoveOldFrame(ref DiffContext diffContext, int oldFrameIndex) { - ProfilingStart(); var oldTree = diffContext.OldTree; ref var oldFrame = ref oldTree[oldFrameIndex]; switch (oldFrame.FrameType) @@ -865,7 +838,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree default: throw new NotImplementedException($"Unexpected frame type during {nameof(RemoveOldFrame)}: {oldFrame.FrameType}"); } - ProfilingEnd(); } private static int GetAttributesEndIndexExclusive(RenderTreeFrame[] tree, int rootIndex) @@ -899,7 +871,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static void InitializeNewSubtree(ref DiffContext diffContext, int frameIndex) { - ProfilingStart(); var frames = diffContext.NewTree; var endIndexExcl = frameIndex + frames[frameIndex].ElementSubtreeLength; for (var i = frameIndex; i < endIndexExcl; i++) @@ -921,12 +892,10 @@ namespace Microsoft.AspNetCore.Components.RenderTree break; } } - ProfilingEnd(); } private static void InitializeNewComponentFrame(ref DiffContext diffContext, int frameIndex) { - ProfilingStart(); var frames = diffContext.NewTree; ref var frame = ref frames[frameIndex]; @@ -943,7 +912,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree var initialParametersLifetime = new ParameterViewLifetime(diffContext.BatchBuilder); var initialParameters = new ParameterView(initialParametersLifetime, frames, frameIndex); childComponentState.SetDirectParameters(initialParameters); - ProfilingEnd(); } private static void InitializeNewAttributeFrame(ref DiffContext diffContext, ref RenderTreeFrame newFrame) @@ -988,7 +956,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static void DisposeFramesInRange(RenderBatchBuilder batchBuilder, RenderTreeFrame[] frames, int startIndex, int endIndexExcl) { - ProfilingStart(); for (var i = startIndex; i < endIndexExcl; i++) { ref var frame = ref frames[i]; @@ -1001,7 +968,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree batchBuilder.DisposedEventHandlerIds.Append(frame.AttributeEventHandlerId); } } - ProfilingEnd(); } /// @@ -1043,18 +1009,5 @@ namespace Microsoft.AspNetCore.Components.RenderTree SiblingIndex = 0; } } - - // Having too many calls to ComponentsProfiling.Instance.Start/End has a measurable perf impact - // even when capturing is disabled. So, to enable detailed profiling for this class, define the - // Profile_RenderTreeDiffBuilder compiler symbol, otherwise the calls are compiled out entirely. - // Enabling detailed profiling adds about 5% to rendering benchmark times. - - [Conditional("Profile_RenderTreeDiffBuilder")] - private static void ProfilingStart([CallerMemberName] string? name = null) - => ComponentsProfiling.Instance.Start(name); - - [Conditional("Profile_RenderTreeDiffBuilder")] - private static void ProfilingEnd([CallerMemberName] string? name = null) - => ComponentsProfiling.Instance.End(name); } } diff --git a/src/Components/Components/src/RenderTree/Renderer.cs b/src/Components/Components/src/RenderTree/Renderer.cs index e284e0c867..6a501d1e04 100644 --- a/src/Components/Components/src/RenderTree/Renderer.cs +++ b/src/Components/Components/src/RenderTree/Renderer.cs @@ -8,7 +8,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Components.Profiling; using Microsoft.AspNetCore.Components.Rendering; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -247,7 +246,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree /// public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo fieldInfo, EventArgs eventArgs) { - ComponentsProfiling.Instance.Start(); Dispatcher.AssertAccess(); if (!_eventBindings.TryGetValue(eventHandlerId, out var callback)) @@ -275,7 +273,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree catch (Exception e) { HandleException(e); - ComponentsProfiling.Instance.End(); return Task.CompletedTask; } finally @@ -290,7 +287,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree // Task completed synchronously or is still running. We already processed all of the rendering // work that was queued so let our error handler deal with it. var result = GetErrorHandledTask(task); - ComponentsProfiling.Instance.End(); return result; } @@ -441,7 +437,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree private void ProcessRenderQueue() { - ComponentsProfiling.Instance.Start(); Dispatcher.AssertAccess(); if (_isBatchInProgress) @@ -456,7 +451,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree { if (_batchBuilder.ComponentRenderQueue.Count == 0) { - ComponentsProfiling.Instance.End(); return; } @@ -468,9 +462,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree } var batch = _batchBuilder.ToBatch(); - ComponentsProfiling.Instance.Start(nameof(UpdateDisplayAsync)); updateDisplayTask = UpdateDisplayAsync(batch); - ComponentsProfiling.Instance.End(nameof(UpdateDisplayAsync)); // Fire off the execution of OnAfterRenderAsync, but don't wait for it // if there is async work to be done. @@ -480,7 +472,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree { // Ensure we catch errors while running the render functions of the components. HandleException(e); - ComponentsProfiling.Instance.End(); return; } finally @@ -498,8 +489,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree { ProcessRenderQueue(); } - - ComponentsProfiling.Instance.End(); } private Task InvokeRenderCompletedCalls(ArrayRange updatedComponents, Task updateDisplayTask) diff --git a/src/Components/Components/src/Rendering/ComponentState.cs b/src/Components/Components/src/Rendering/ComponentState.cs index 760d3b8d1a..3bff9bcfc8 100644 --- a/src/Components/Components/src/Rendering/ComponentState.cs +++ b/src/Components/Components/src/Rendering/ComponentState.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; -using Microsoft.AspNetCore.Components.Profiling; using Microsoft.AspNetCore.Components.RenderTree; namespace Microsoft.AspNetCore.Components.Rendering @@ -57,7 +56,6 @@ namespace Microsoft.AspNetCore.Components.Rendering public void RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment) { - ComponentsProfiling.Instance.Start(); // A component might be in the render queue already before getting disposed by an // earlier entry in the render queue. In that case, rendering is a no-op. if (_componentWasDisposed) @@ -69,9 +67,7 @@ namespace Microsoft.AspNetCore.Components.Rendering (CurrentRenderTree, _renderTreeBuilderPrevious) = (_renderTreeBuilderPrevious, CurrentRenderTree); CurrentRenderTree.Clear(); - ComponentsProfiling.Instance.Start("BuildRenderTree"); renderFragment(CurrentRenderTree); - ComponentsProfiling.Instance.End("BuildRenderTree"); var diff = RenderTreeDiffBuilder.ComputeDiff( _renderer, @@ -81,7 +77,6 @@ namespace Microsoft.AspNetCore.Components.Rendering CurrentRenderTree.GetFrames()); batchBuilder.UpdatedComponentDiffs.Append(diff); batchBuilder.InvalidateParameterViews(); - ComponentsProfiling.Instance.End(); } public bool TryDisposeInBatch(RenderBatchBuilder batchBuilder, [NotNullWhen(false)] out Exception? exception) diff --git a/src/Components/Components/src/Rendering/RenderTreeBuilder.cs b/src/Components/Components/src/Rendering/RenderTreeBuilder.cs index 4e9280c70f..566265c988 100644 --- a/src/Components/Components/src/Rendering/RenderTreeBuilder.cs +++ b/src/Components/Components/src/Rendering/RenderTreeBuilder.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; -using Microsoft.AspNetCore.Components.Profiling; using Microsoft.AspNetCore.Components.RenderTree; namespace Microsoft.AspNetCore.Components.Rendering @@ -45,7 +44,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// A value representing the type of the element. public void OpenElement(int sequence, string elementName) { - ProfilingStart(); // We are entering a new scope, since we track the "duplicate attributes" per // element/component we might need to clean them up now. if (_hasSeenAddMultipleAttributes) @@ -56,7 +54,6 @@ namespace Microsoft.AspNetCore.Components.Rendering _openElementIndices.Push(_entries.Count); Append(RenderTreeFrame.Element(sequence, elementName)); - ProfilingEnd(); } /// @@ -65,7 +62,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void CloseElement() { - ProfilingStart(); var indexOfEntryBeingClosed = _openElementIndices.Pop(); // We might be closing an element with only attributes, run the duplicate cleanup pass @@ -77,7 +73,6 @@ namespace Microsoft.AspNetCore.Components.Rendering ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; entry = entry.WithElementSubtreeLength(_entries.Count - indexOfEntryBeingClosed); - ProfilingEnd(); } /// @@ -87,9 +82,7 @@ namespace Microsoft.AspNetCore.Components.Rendering /// Content for the new markup frame. public void AddMarkupContent(int sequence, string? markupContent) { - ProfilingStart(); Append(RenderTreeFrame.Markup(sequence, markupContent ?? string.Empty)); - ProfilingEnd(); } /// @@ -99,9 +92,7 @@ namespace Microsoft.AspNetCore.Components.Rendering /// Content for the new text frame. public void AddContent(int sequence, string? textContent) { - ProfilingStart(); Append(RenderTreeFrame.Text(sequence, textContent ?? string.Empty)); - ProfilingEnd(); } /// @@ -111,7 +102,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// Content to append. public void AddContent(int sequence, RenderFragment? fragment) { - ProfilingStart(); if (fragment != null) { // We surround the fragment with a region delimiter to indicate that the @@ -122,7 +112,6 @@ namespace Microsoft.AspNetCore.Components.Rendering fragment(this); CloseRegion(); } - ProfilingEnd(); } /// @@ -133,12 +122,10 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value used by . public void AddContent(int sequence, RenderFragment? fragment, TValue value) { - ProfilingStart(); if (fragment != null) { AddContent(sequence, fragment(value)); } - ProfilingEnd(); } /// @@ -169,15 +156,12 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The name of the attribute. public void AddAttribute(int sequence, string name) { - ProfilingStart(); - if (_lastNonAttributeFrameType != RenderTreeFrameType.Element) { throw new InvalidOperationException($"Valueless attributes may only be added immediately after frames of type {RenderTreeFrameType.Element}"); } Append(RenderTreeFrame.Attribute(sequence, name, BoxedTrue)); - ProfilingEnd(); } /// @@ -194,7 +178,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value of the attribute. public void AddAttribute(int sequence, string name, bool value) { - ProfilingStart(); AssertCanAddAttribute(); if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { @@ -210,7 +193,6 @@ namespace Microsoft.AspNetCore.Components.Rendering { TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -227,7 +209,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value of the attribute. public void AddAttribute(int sequence, string name, string? value) { - ProfilingStart(); AssertCanAddAttribute(); if (value != null || _lastNonAttributeFrameType == RenderTreeFrameType.Component) { @@ -237,7 +218,6 @@ namespace Microsoft.AspNetCore.Components.Rendering { TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -254,7 +234,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value of the attribute. public void AddAttribute(int sequence, string name, MulticastDelegate? value) { - ProfilingStart(); AssertCanAddAttribute(); if (value != null || _lastNonAttributeFrameType == RenderTreeFrameType.Component) { @@ -264,7 +243,6 @@ namespace Microsoft.AspNetCore.Components.Rendering { TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -285,7 +263,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void AddAttribute(int sequence, string name, EventCallback value) { - ProfilingStart(); AssertCanAddAttribute(); if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { @@ -310,7 +287,6 @@ namespace Microsoft.AspNetCore.Components.Rendering // Track the attribute name if needed since we elided the frame. TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -331,7 +307,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void AddAttribute(int sequence, string name, EventCallback value) { - ProfilingStart(); AssertCanAddAttribute(); if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { @@ -356,7 +331,6 @@ namespace Microsoft.AspNetCore.Components.Rendering // Track the attribute name if needed since we elided the frame. TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -370,7 +344,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value of the attribute. public void AddAttribute(int sequence, string name, object? value) { - ProfilingStart(); // This looks a bit daunting because we need to handle the boxed/object version of all of the // types that AddAttribute special cases. if (_lastNonAttributeFrameType == RenderTreeFrameType.Element) @@ -423,7 +396,6 @@ namespace Microsoft.AspNetCore.Components.Rendering // This is going to throw. Calling it just to get a consistent exception message. AssertCanAddAttribute(); } - ProfilingEnd(); } /// @@ -438,7 +410,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// A holding the name and value of the attribute. public void AddAttribute(int sequence, in RenderTreeFrame frame) { - ProfilingStart(); if (frame.FrameType != RenderTreeFrameType.Attribute) { throw new ArgumentException($"The {nameof(frame.FrameType)} must be {RenderTreeFrameType.Attribute}."); @@ -446,7 +417,6 @@ namespace Microsoft.AspNetCore.Components.Rendering AssertCanAddAttribute(); Append(frame.WithAttributeSequence(sequence)); - ProfilingEnd(); } /// @@ -456,7 +426,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// A collection of key-value pairs representing attributes. public void AddMultipleAttributes(int sequence, IEnumerable>? attributes) { - ProfilingStart(); // Calling this up-front just to make sure we validate before mutating anything. AssertCanAddAttribute(); @@ -473,7 +442,6 @@ namespace Microsoft.AspNetCore.Components.Rendering AddAttribute(sequence, attribute.Key, attribute.Value); } } - ProfilingEnd(); } /// @@ -490,7 +458,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The name of another attribute whose value can be updated when the event handler is executed. public void SetUpdatesAttributeName(string updatesAttributeName) { - ProfilingStart(); if (_entries.Count == 0) { throw new InvalidOperationException("No preceding attribute frame exists."); @@ -503,7 +470,6 @@ namespace Microsoft.AspNetCore.Components.Rendering } prevFrame = prevFrame.WithAttributeEventUpdatesAttributeName(updatesAttributeName); - ProfilingEnd(); } /// @@ -535,12 +501,10 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value for the key. public void SetKey(object? value) { - ProfilingStart(); if (value == null) { // Null is equivalent to not having set a key, which is valuable because Razor syntax doesn't have an // easy way to have conditional directive attributes - ProfilingEnd(); return; } @@ -563,12 +527,10 @@ namespace Microsoft.AspNetCore.Components.Rendering default: throw new InvalidOperationException($"Cannot set a key on a frame of type {parentFrame.FrameType}."); } - ProfilingEnd(); } private void OpenComponentUnchecked(int sequence, Type componentType) { - ProfilingStart(); // We are entering a new scope, since we track the "duplicate attributes" per // element/component we might need to clean them up now. if (_hasSeenAddMultipleAttributes) @@ -579,7 +541,6 @@ namespace Microsoft.AspNetCore.Components.Rendering _openElementIndices.Push(_entries.Count); Append(RenderTreeFrame.ChildComponent(sequence, componentType)); - ProfilingEnd(); } /// @@ -588,7 +549,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void CloseComponent() { - ProfilingStart(); var indexOfEntryBeingClosed = _openElementIndices.Pop(); // We might be closing a component with only attributes. Run the attribute cleanup pass @@ -600,7 +560,6 @@ namespace Microsoft.AspNetCore.Components.Rendering ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; entry = entry.WithComponentSubtreeLength(_entries.Count - indexOfEntryBeingClosed); - ProfilingEnd(); } /// @@ -610,14 +569,12 @@ namespace Microsoft.AspNetCore.Components.Rendering /// An action to be invoked whenever the reference value changes. public void AddElementReferenceCapture(int sequence, Action elementReferenceCaptureAction) { - ProfilingStart(); if (GetCurrentParentFrameType() != RenderTreeFrameType.Element) { throw new InvalidOperationException($"Element reference captures may only be added as children of frames of type {RenderTreeFrameType.Element}"); } Append(RenderTreeFrame.ElementReferenceCapture(sequence, elementReferenceCaptureAction)); - ProfilingEnd(); } /// @@ -627,7 +584,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// An action to be invoked whenever the reference value changes. public void AddComponentReferenceCapture(int sequence, Action componentReferenceCaptureAction) { - ProfilingStart(); var parentFrameIndex = GetCurrentParentFrameIndex(); if (!parentFrameIndex.HasValue) { @@ -641,7 +597,6 @@ namespace Microsoft.AspNetCore.Components.Rendering } Append(RenderTreeFrame.ComponentReferenceCapture(sequence, componentReferenceCaptureAction, parentFrameIndexValue)); - ProfilingEnd(); } /// @@ -650,7 +605,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// An integer that represents the position of the instruction in the source code. public void OpenRegion(int sequence) { - ProfilingStart(); // We are entering a new scope, since we track the "duplicate attributes" per // element/component we might need to clean them up now. if (_hasSeenAddMultipleAttributes) @@ -661,7 +615,6 @@ namespace Microsoft.AspNetCore.Components.Rendering _openElementIndices.Push(_entries.Count); Append(RenderTreeFrame.Region(sequence)); - ProfilingEnd(); } /// @@ -670,11 +623,9 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void CloseRegion() { - ProfilingStart(); var indexOfEntryBeingClosed = _openElementIndices.Pop(); ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; entry = entry.WithRegionSubtreeLength(_entries.Count - indexOfEntryBeingClosed); - ProfilingEnd(); } private void AssertCanAddAttribute() @@ -702,29 +653,24 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void Clear() { - ProfilingStart(); _entries.Clear(); _openElementIndices.Clear(); _lastNonAttributeFrameType = null; _hasSeenAddMultipleAttributes = false; _seenAttributeNames?.Clear(); - ProfilingEnd(); } // internal because this should only be used during the post-event tree patching logic // It's expensive because it involves copying all the subsequent memory in the array internal void InsertAttributeExpensive(int insertAtIndex, int sequence, string attributeName, object? attributeValue) { - ProfilingStart(); // Replicate the same attribute omission logic as used elsewhere if ((attributeValue == null) || (attributeValue is bool boolValue && !boolValue)) { - ProfilingEnd(); return; } _entries.InsertExpensive(insertAtIndex, RenderTreeFrame.Attribute(sequence, attributeName, attributeValue)); - ProfilingEnd(); } /// @@ -748,7 +694,6 @@ namespace Microsoft.AspNetCore.Components.Rendering // Internal for testing internal void ProcessDuplicateAttributes(int first) { - ProfilingStart(); Debug.Assert(_hasSeenAddMultipleAttributes); // When AddMultipleAttributes method has been called, we need to postprocess attributes while closing @@ -830,7 +775,6 @@ namespace Microsoft.AspNetCore.Components.Rendering seenAttributeNames.Clear(); _hasSeenAddMultipleAttributes = false; - ProfilingEnd(); } // Internal for testing @@ -847,22 +791,7 @@ namespace Microsoft.AspNetCore.Components.Rendering void IDisposable.Dispose() { - ProfilingStart(); _entries.Dispose(); - ProfilingEnd(); } - - // Having too many calls to ComponentsProfiling.Instance.Start/End has a measurable perf impact - // even when capturing is disabled. So, to enable detailed profiling for this class, define the - // Profile_RenderTreeBuilder compiler symbol, otherwise the calls are compiled out entirely. - // Enabling detailed profiling adds about 5% to rendering benchmark times. - - [Conditional("Profile_RenderTreeBuilder")] - private static void ProfilingStart([CallerMemberName] string? name = null) - => ComponentsProfiling.Instance.Start(name); - - [Conditional("Profile_RenderTreeBuilder")] - private static void ProfilingEnd([CallerMemberName] string? name = null) - => ComponentsProfiling.Instance.End(name); } } diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js index 341b69d67c..950538b8a2 100644 --- a/src/Components/Web.JS/dist/Release/blazor.server.js +++ b/src/Components/Web.JS/dist/Release/blazor.server.js @@ -1,19 +1,19 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=54)}([function(e,t,n){"use strict";var r;n.d(t,"a",(function(){return r})),function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(r||(r={}))},function(e,t,n){"use strict";(function(e){n.d(t,"e",(function(){return c})),n.d(t,"a",(function(){return u})),n.d(t,"c",(function(){return l})),n.d(t,"g",(function(){return f})),n.d(t,"i",(function(){return h})),n.d(t,"j",(function(){return p})),n.d(t,"f",(function(){return d})),n.d(t,"d",(function(){return g})),n.d(t,"b",(function(){return y})),n.d(t,"h",(function(){return v}));var r=n(0),o=n(6),i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(14))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(45);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return K(this,void 0,void 0,(function(){var t,n,r;return V(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(13))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(43);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return K(this,void 0,void 0,(function(){var t,n,r;return V(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] * @license MIT */ -var r=n(55),o=n(56),i=n(57);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(U,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(9))},function(e,t,n){"use strict";var r=n(15).Buffer,o=n(58),i=n(21),a=n(71),s=n(74),c=n(75);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(60);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(61),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(39).EventEmitter},function(e,t,n){"use strict";var r=n(22);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(67).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(22);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(20);u.inherits=n(16);var l={deprecate:n(70)},f=n(40),h=n(15).Buffer,p=o.Uint8Array||function(){};var d,g=n(41);function y(){}function v(e,t){s=s||n(10),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(10),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(14),n(68).setImmediate,n(9))},function(e,t,n){"use strict";e.exports=a;var r=n(10),o=n(20);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(11).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(59); +var r=n(53),o=n(54),i=n(55);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(8))},function(e,t,n){"use strict";var r=n(14).Buffer,o=n(56),i=n(20),a=n(69),s=n(72),c=n(73);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(58);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(59),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(37).EventEmitter},function(e,t,n){"use strict";var r=n(21);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(65).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(21);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(19);u.inherits=n(15);var l={deprecate:n(68)},f=n(38),h=n(14).Buffer,p=o.Uint8Array||function(){};var d,g=n(39);function y(){}function v(e,t){s=s||n(9),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(9),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(13),n(66).setImmediate,n(8))},function(e,t,n){"use strict";e.exports=a;var r=n(9),o=n(19);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(10).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(57); /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT - */function o(e,t){if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o=0;u--)if(l[u]!==f[u])return!1;for(u=l.length-1;u>=0;u--)if(s=l[u],!m(e[s],t[s],n,r))return!1;return!0}(e,t,n,r))}return n?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function S(e,t,n,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof n&&(r=n,n=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(n&&n.name?" ("+n.name+").":".")+(r?" "+r:"."),e&&!o&&v(o,n,"Missing expected exception"+r);var i="string"==typeof r,s=!e&&o&&!n;if((!e&&a.isError(o)&&i&&E(o,n)||s)&&v(o,n,"Got unwanted exception"+r),e&&o&&n&&!E(o,n)||!e&&o)throw o}h.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return g(y(e.actual),128)+" "+e.operator+" "+g(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,o=d(t),i=r.indexOf("\n"+o);if(i>=0){var a=r.indexOf("\n",i+1);r=r.substring(a+1)}this.stack=r}}},a.inherits(h.AssertionError,Error),h.fail=v,h.ok=b,h.equal=function(e,t,n){e!=t&&v(e,t,n,"==",h.equal)},h.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",h.notEqual)},h.deepEqual=function(e,t,n){m(e,t,!1)||v(e,t,n,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,n){m(e,t,!0)||v(e,t,n,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,n){m(e,t,!1)&&v(e,t,n,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,n,r){m(t,n,!0)&&v(t,n,r,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",h.strictEqual)},h.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",h.notStrictEqual)},h.throws=function(e,t,n){S(!0,e,t,n)},h.doesNotThrow=function(e,t,n){S(!1,e,t,n)},h.ifError=function(e){if(e)throw e},h.strict=r((function e(t,n){t||v(t,!0,n,"==",e)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict=h.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(9))},function(e,t,n){"use strict"; + */function o(e,t){if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o=0;u--)if(l[u]!==f[u])return!1;for(u=l.length-1;u>=0;u--)if(s=l[u],!m(e[s],t[s],n,r))return!1;return!0}(e,t,n,r))}return n?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function S(e,t,n,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof n&&(r=n,n=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(n&&n.name?" ("+n.name+").":".")+(r?" "+r:"."),e&&!o&&v(o,n,"Missing expected exception"+r);var i="string"==typeof r,s=!e&&o&&!n;if((!e&&a.isError(o)&&i&&E(o,n)||s)&&v(o,n,"Got unwanted exception"+r),e&&o&&n&&!E(o,n)||!e&&o)throw o}h.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return g(y(e.actual),128)+" "+e.operator+" "+g(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,o=d(t),i=r.indexOf("\n"+o);if(i>=0){var a=r.indexOf("\n",i+1);r=r.substring(a+1)}this.stack=r}}},a.inherits(h.AssertionError,Error),h.fail=v,h.ok=b,h.equal=function(e,t,n){e!=t&&v(e,t,n,"==",h.equal)},h.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",h.notEqual)},h.deepEqual=function(e,t,n){m(e,t,!1)||v(e,t,n,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,n){m(e,t,!0)||v(e,t,n,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,n){m(e,t,!1)&&v(e,t,n,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,n,r){m(t,n,!0)&&v(t,n,r,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",h.strictEqual)},h.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",h.notStrictEqual)},h.throws=function(e,t,n){S(!0,e,t,n)},h.doesNotThrow=function(e,t,n){S(!1,e,t,n)},h.ifError=function(e){if(e)throw e},h.strict=r((function e(t,n){t||v(t,!0,n,"==",e)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict=h.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(8))},function(e,t,n){"use strict"; /* object-assign (c) Sindre Sorhus @license MIT -*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(11),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(69),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(9))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(38)).Stream=t,t.Readable=t,t.Writable=n(43),t.Duplex=n(10),t.Transform=n(44),t.PassThrough=n(73)},function(e,t,n){"use strict";e.exports=i;var r=n(44),o=n(20);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(16),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(21);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(37).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(35),o=n(34),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(11),o=n(12),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="0.0.0-DEV_BUILD"}]); \ No newline at end of file +*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(10),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(67),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(8))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(36)).Stream=t,t.Readable=t,t.Writable=n(41),t.Duplex=n(9),t.Transform=n(42),t.PassThrough=n(71)},function(e,t,n){"use strict";e.exports=i;var r=n(42),o=n(19);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(15),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(20);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(35).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(33),o=n(32),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(16),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(10),o=n(11),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="5.0.0-dev"}]); \ No newline at end of file diff --git a/src/Components/Web.JS/dist/Release/blazor.webassembly.js b/src/Components/Web.JS/dist/Release/blazor.webassembly.js index c26bbb9fa2..15031bc249 100644 --- a/src/Components/Web.JS/dist/Release/blazor.webassembly.js +++ b/src/Components/Web.JS/dist/Release/blazor.webassembly.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=46)}([,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){window.DotNet=e;var t=[],n={},r={},o=1,i=null;function a(e){t.push(e)}function s(e,t,n,r){var o=l();if(o.invokeDotNetFromJS){var i=JSON.stringify(r,m),a=o.invokeDotNetFromJS(e,t,n,i);return a?f(a):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead.")}function u(e,t,r,i){if(e&&r)throw new Error("For instance method calls, assemblyName should be null. Received '"+e+"'.");var a=o++,s=new Promise((function(e,t){n[a]={resolve:e,reject:t}}));try{var u=JSON.stringify(i,m);l().beginInvokeDotNetFromJS(a,e,t,r,u)}catch(e){c(a,!1,e)}return s}function l(){if(null!==i)return i;throw new Error("No .NET call dispatcher has been set.")}function c(e,t,r){if(!n.hasOwnProperty(e))throw new Error("There is no pending async call with ID "+e+".");var o=n[e];delete n[e],t?o.resolve(r):o.reject(r)}function f(e){return e?JSON.parse(e,(function(e,n){return t.reduce((function(t,n){return n(e,t)}),n)})):null}function d(e){return e instanceof Error?e.message+"\n"+e.stack:e?e.toString():"null"}function p(e){if(Object.prototype.hasOwnProperty.call(r,e))return r[e];var t,n=window,o="window";if(e.split(".").forEach((function(e){if(!(e in n))throw new Error("Could not find '"+e+"' in '"+o+"'.");t=n,n=n[e],o+="."+e})),n instanceof Function)return n=n.bind(t),r[e]=n,n;throw new Error("The value '"+o+"' is not a function.")}e.attachDispatcher=function(e){i=e},e.attachReviver=a,e.invokeMethod=function(e,t){for(var n=[],r=2;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(l(i)&&l(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=l(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return l(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===c(e).namespaceURI},t.getLogicalChildrenArray=l,t.permuteLogicalChildren=function(e,t){var n=l(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=c},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(32),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),l=n(5),c=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){l.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,c=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),c instanceof HTMLElement&&u&&u.activeElement!==c&&c.focus(),l.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,l=0,c=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),y=m+f.count(a),v=m;v0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(47),l=n(4),c=n(50),f=n(36),d=n(19),p=n(51),h=n(52),m=n(53),y=n(5),v=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_,C=this;return o(this,(function(I){switch(I.label){case 0:if(v)throw new Error("Blazor has already started.");return v=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){y.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{l.renderBatch(e,new c.SharedMemoryRenderBatch(t))}finally{n.release()}y.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(C,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),b=null==e?void 0:e.environment,[4,m.BootConfigResult.initAsync(b)];case 1:return g=I.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(g.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(g)])];case 2:w=i.apply(void 0,[I.sent(),1]),E=w[0],I.label=3;case 3:return I.trys.push([3,5,,6]),[4,t.start(E)];case 4:return I.sent(),[3,6];case 5:throw _=I.sent(),new Error("Failed to start platform. Reason: "+_);case 6:return t.callEntryPoint(E.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),c.initializeProfiling((function(e){v("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var c=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,y=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(c,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),l.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),y.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(c,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function y(e){return e+12}function v(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(34),a=n(35);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var l=a.decodeUtf8(s.slice(0,u)),c=JSON.parse(l);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(c.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(c),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],y=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,y,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=l}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return c(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return c(e,t,l.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=c(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=c(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return c(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},l={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function c(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var a=e;if(e instanceof Comment&&(l(a)&&l(a).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(a))throw new Error("Not implemented: moving existing logical children");var i=l(t);if(n0;)e(r,0)}var a=r;a.parentNode.removeChild(a)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[a]||null},t.getLogicalChild=function(e,t){return l(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===c(e).namespaceURI},t.getLogicalChildrenArray=l,t.permuteLogicalChildren=function(e,t){var n=l(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,a=r;a;){var i=a.nextSibling;if(n.insertBefore(a,t),a===o)break;a=i}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=c},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(7),o=n(4),a=n(30);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:a.domFunctions}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(25),o=n(26),a=n(12),i=n(29),s=n(18),u=n(7),l=document.createElement("template"),c=document.createElementNS("http://www.w3.org/2000/svg","g"),f={submit:!0},d={},p=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){f[e.type]&&e.preventDefault();var a={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(a,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),d[e]=t},e.prototype.updateComponent=function(e,t,n,r){var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var i=d[t];if(i){var s=a.getLogicalSiblingEnd(i);delete d[t],s?function(e,t){var n=a.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=a.getLogicalChildrenArray(n),o=r.indexOf(e)+1,i=r.indexOf(t),s=o;s<=i;s++)a.removeLogicalChild(n,o);e.textContent="!"}(i,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(i)}var u=a.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus()},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,i,s){for(var u,l=0,c=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(i),m=f.offset(i),y=m+f.count(i),v=m;v0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=a,t.readUint64LE=function(e,t){var n=a(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+a(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var a=e[t+o];if(n|=(127&a)<65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function s(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i};Object.defineProperty(t,"__esModule",{value:!0});var i=n(3);n(22);var s=n(17),u=n(45),l=n(4),c=n(48),f=n(34),d=n(18),p=n(49),h=n(50),m=n(51),y=!1;function v(e){return r(this,void 0,void 0,(function(){var t,n,f,v,b,g,w,E,_=this;return o(this,(function(I){switch(I.label){case 0:if(y)throw new Error("Blazor has already started.");return y=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return i.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){var n=u.monoPlatform.beginHeapLock();try{l.renderBatch(e,new c.SharedMemoryRenderBatch(t))}finally{n.release()}},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,i.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),v=null==e?void 0:e.environment,[4,m.BootConfigResult.initAsync(v)];case 1:return b=I.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=a.apply(void 0,[I.sent(),1]),w=g[0],I.label=3;case 3:return I.trys.push([3,5,,6]),[4,t.start(w)];case 4:return I.sent(),[3,6];case 5:throw E=I.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=v,f.shouldAutoStart()&&v().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function s(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var c,f;s.attachDebuggerHotkey(e),window.Browser={init:function(){}},c=function(){window.Module=function(e,t,n){var c=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var m,g=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(m=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(c,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,v(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){a=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],m&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),l.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(m),g.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),a=e.bootConfig.resources.satelliteResources;if(a){var i=Promise.all(n.filter((function(e){return a.hasOwnProperty(e)})).map((function(t){return e.loadResources(a[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(c,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(i.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return p(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>f)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*c+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return p(e+(t||0))},readStringField:function(e,t,n){var r,o=p(e+(t||0));if(0===o)return null;if(n){var a=BINDING.unbox_mono_obj(o);return"boolean"==typeof a?a?"":null:a}return d?void 0===(r=d.stringCache.get(o))&&(r=BINDING.conv_string(o),d.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return b(),d=new g},invokeWhenHeapUnlocked:function(e){d?d.enqueuePostReleaseAction(e):e()}};var h=document.createElement("a");function m(e){return e+12}function y(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function v(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function b(){if(d)throw new Error("Assertion failed - heap is currently locked")}var g=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(d!==this)throw new Error("Trying to release a lock which isn't current");for(d=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),b()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function a(){return o&&r}t.hasDebuggingEnabled=a,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";a()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i};Object.defineProperty(t,"__esModule",{value:!0});var a=n(32),i=n(33);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=a.readInt32LE(s,0);s=s.slice(4);var l=i.decodeUtf8(s.slice(0,u)),c=JSON.parse(l);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(c.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(c),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],y=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,y,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=a,this.arrayBuilderSegmentReader=i,this.diffReader=s,this.editReader=u,this.frameReader=l}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,a.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*a.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*a.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return c(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return c(e,t,l.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=c(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=c(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var a={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},i={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+i.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return c(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},l={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function c(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function s(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]): Promise { throw new Error('Blazor has already started.'); } started = true; - initializeProfiling(null); // Establish options to be used const options = resolveOptions(userOptions); diff --git a/src/Components/Web.JS/src/Boot.WebAssembly.ts b/src/Components/Web.JS/src/Boot.WebAssembly.ts index b0e4546681..1095397390 100644 --- a/src/Components/Web.JS/src/Boot.WebAssembly.ts +++ b/src/Components/Web.JS/src/Boot.WebAssembly.ts @@ -11,7 +11,6 @@ import { WebAssemblyConfigLoader } from './Platform/WebAssemblyConfigLoader'; import { BootConfigResult } from './Platform/BootConfig'; import { Pointer } from './Platform/Platform'; import { WebAssemblyStartOptions } from './Platform/WebAssemblyStartOptions'; -import { profileStart, profileEnd } from './Platform/Profiling'; let started = false; @@ -34,8 +33,6 @@ async function boot(options?: Partial): Promise { const platform = Environment.setPlatform(monoPlatform); window['Blazor'].platform = platform; window['Blazor']._internal.renderBatch = (browserRendererId: number, batchAddress: Pointer) => { - profileStart('renderBatch'); - // We're going to read directly from the .NET memory heap, so indicate to the platform // that we don't want anything to modify the memory contents during this time. Currently this // is only guaranteed by the fact that .NET code doesn't run during this time, but in the @@ -47,8 +44,6 @@ async function boot(options?: Partial): Promise { } finally { heapLock.release(); } - - profileEnd('renderBatch'); }; // Configure navigation via JS Interop diff --git a/src/Components/Web.JS/src/GlobalExports.ts b/src/Components/Web.JS/src/GlobalExports.ts index 08f7557ba5..df7f9b18a8 100644 --- a/src/Components/Web.JS/src/GlobalExports.ts +++ b/src/Components/Web.JS/src/GlobalExports.ts @@ -1,7 +1,6 @@ import { navigateTo, internalFunctions as navigationManagerInternalFunctions } from './Services/NavigationManager'; import { attachRootComponentToElement } from './Rendering/Renderer'; import { domFunctions } from './DomWrapper'; -import { setProfilingEnabled } from './Platform/Profiling'; // Make the following APIs available in global scope for invocation from JS window['Blazor'] = { @@ -11,6 +10,5 @@ window['Blazor'] = { attachRootComponentToElement, navigationManager: navigationManagerInternalFunctions, domWrapper: domFunctions, - setProfilingEnabled: setProfilingEnabled, }, }; diff --git a/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts b/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts index ecad27cf6e..c2b6749a9f 100644 --- a/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts +++ b/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts @@ -5,7 +5,6 @@ import { WebAssemblyResourceLoader, LoadingResource } from '../WebAssemblyResour import { Platform, System_Array, Pointer, System_Object, System_String, HeapLock } from '../Platform'; import { loadTimezoneData } from './TimezoneDataFile'; import { WebAssemblyBootResourceType } from '../WebAssemblyStartOptions'; -import { initializeProfiling } from '../Profiling'; let mono_wasm_add_assembly: (name: string, heapAddress: number, length: number) => void; const appBinDirName = 'appBinDir'; @@ -36,10 +35,6 @@ export const monoPlatform: Platform = { start: function start(resourceLoader: WebAssemblyResourceLoader) { return new Promise((resolve, reject) => { attachDebuggerHotkey(resourceLoader); - initializeProfiling(isCapturing => { - const setCapturingMethod = bindStaticMethod('Microsoft.AspNetCore.Components', 'Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling', 'SetCapturing'); - setCapturingMethod(isCapturing); - }); // dotnet.js assumes the existence of this window['Browser'] = { diff --git a/src/Components/Web.JS/src/Platform/Profiling.ts b/src/Components/Web.JS/src/Platform/Profiling.ts deleted file mode 100644 index 4ae834b069..0000000000 --- a/src/Components/Web.JS/src/Platform/Profiling.ts +++ /dev/null @@ -1,137 +0,0 @@ -// Import type definitions to ensure that the global declaration -// is of BINDING is included when tests run -import './Mono/MonoTypes'; -import { System_String } from './Platform'; - -interface TimingEntry { - // To minimize overhead, don't even decode the strings that arrive from .NET. Assume they are compile-time constants - // and hence the memory address will be fixed, so we can just store the pointer value. - name: string | System_String; - type: 'start' | 'end'; - timestamp: number; -} - -interface TraceEvent { - // https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview - name: string; - cat: string; // Category - ph: 'B' | 'E'; // Phase - ts: number; // Timestamp in microseconds - pid: number; // Process ID - tid: number; // Thread ID -} - -let updateCapturingStateInHost: (isCapturing: boolean) => void; -let captureStartTime = 0; -const blazorProfilingEnabledKey = 'blazorProfilingEnabled'; -const profilingEnabled = !!localStorage[blazorProfilingEnabledKey]; -const entryLog: TimingEntry[] = []; -const openRegionsStack: (string | System_String)[] = []; - -export function setProfilingEnabled(enabled: boolean) { - // We only wire up the hotkeys etc. if the following localStorage entry is present during startup - // This is to ensure we're not interfering with any other hotkeys that developers might want to - // use for different purposes, plus it gives us a single point where we can notify .NET code during - // startup about whether profiling should be enabled. - localStorage[blazorProfilingEnabledKey] = (enabled !== false); - location.reload(); -} - -export function initializeProfiling(setCapturingCallback: ((isCapturing: boolean) => void) | null) { - if (!profilingEnabled) { - return; - } - - updateCapturingStateInHost = setCapturingCallback || (() => {}); - - // Attach hotkey (alt/cmd)+shift+p - const altKeyName = navigator.platform.match(/^Mac/i) ? 'Cmd' : 'Alt'; - console.info(`Profiling hotkey: Shift+${altKeyName}+P (when application has focus)`); - document.addEventListener('keydown', evt => { - if (evt.shiftKey && (evt.metaKey || evt.altKey) && evt.code === 'KeyP') { - toggleCaptureEnabled(); - } - }); -} - -export function profileStart(name: System_String | string) { - if (!captureStartTime) { - return; - } - - const startTime = performance.now(); - openRegionsStack.push(name); - entryLog.push({ name: name, type: 'start', timestamp: startTime }); -} - -export function profileEnd(name: System_String | string) { - if (!captureStartTime) { - return; - } - - const endTime = performance.now(); - const poppedRegionName = openRegionsStack.pop(); - if (!poppedRegionName) { - throw new Error(`Profiling mismatch: tried to end profiling for '${readJsString(name)}', but the stack was empty.`); - } else if (poppedRegionName !== name) { - throw new Error(`Profiling mismatch: tried to end profiling for '${readJsString(name)}', but the top stack item was '${readJsString(poppedRegionName)}'.`); - } - - entryLog.push({ name: name, type: 'end', timestamp: endTime }); -} - -function profileReset() { - openRegionsStack.length = 0; - entryLog.length = 0; - captureStartTime = 0; - updateCapturingStateInHost(false); -} - -function profileExport() { - const traceEvents: TraceEvent[] = entryLog.map(entry => ({ - name: readJsString(entry.name)!, - cat: 'PERF', - ph: entry.type === 'start' ? 'B': 'E', - ts: (entry.timestamp - captureStartTime) * 1000, - pid: 0, - tid: 0, - })); - const traceEventsJson = JSON.stringify(traceEvents); - const traceEventsBuffer = new TextEncoder().encode(traceEventsJson); - const anchorElement = document.createElement('a'); - anchorElement.href = URL.createObjectURL(new Blob([traceEventsBuffer])); - anchorElement.setAttribute('download', 'trace.json'); - anchorElement.click(); - URL.revokeObjectURL(anchorElement.href); -} - -function toggleCaptureEnabled() { - if (!captureStartTime) { - displayOverlayMessage('Started capturing performance profile...'); - updateCapturingStateInHost(true); - captureStartTime = performance.now(); - } else { - displayOverlayMessage('Finished capturing performance profile'); - profileExport(); - profileReset(); - } -} - -function displayOverlayMessage(message: string) { - const elem = document.createElement('div'); - elem.textContent = message; - elem.setAttribute('style', 'position: absolute; z-index: 99999; font-family: \'Sans Serif\'; top: 0; left: 0; padding: 4px; font-size: 12px; background-color: purple; color: white;'); - document.body.appendChild(elem); - setTimeout(() => document.body.removeChild(elem), 3000); -} - -function readJsString(str: string | System_String) { - // This is expensive, so don't do it while capturing timings. Only do it as part of the export process. - return typeof str === 'string' ? str : BINDING.conv_string(str); -} - -// These globals deliberately differ from our normal conventions for attaching functions inside Blazor.* -// because the intention is to minimize overhead in all reasonable ways. Having any dot-separators in the -// name would cause extra string allocations on every invocation. -window['_blazorProfileStart'] = profileStart; -window['_blazorProfileEnd'] = profileEnd; diff --git a/src/Components/Web.JS/src/Rendering/BrowserRenderer.ts b/src/Components/Web.JS/src/Rendering/BrowserRenderer.ts index a02e04e41c..5c2433efc7 100644 --- a/src/Components/Web.JS/src/Rendering/BrowserRenderer.ts +++ b/src/Components/Web.JS/src/Rendering/BrowserRenderer.ts @@ -6,7 +6,6 @@ import { applyCaptureIdToElement } from './ElementReferenceCapture'; import { EventFieldInfo } from './EventFieldInfo'; import { dispatchEvent } from './RendererEventDispatcher'; import { attachToEventDelegator as attachNavigationManagerToEventDelegator } from '../Services/NavigationManager'; -import { profileEnd, profileStart } from '../Platform/Profiling'; const selectValuePropname = '_blazorSelectValue'; const sharedTemplateElemForParsing = document.createElement('template'); const sharedSvgElemForParsing = document.createElementNS('http://www.w3.org/2000/svg', 'g'); @@ -41,8 +40,6 @@ export class BrowserRenderer { } public updateComponent(batch: RenderBatch, componentId: number, edits: ArrayBuilderSegment, referenceFrames: ArrayValues): void { - profileStart('updateComponent'); - const element = this.childComponentLocations[componentId]; if (!element) { throw new Error(`No element is currently associated with component ${componentId}`); @@ -70,8 +67,6 @@ export class BrowserRenderer { if ((activeElementBefore instanceof HTMLElement) && ownerDocument && ownerDocument.activeElement !== activeElementBefore) { activeElementBefore.focus(); } - - profileEnd('updateComponent'); } public disposeComponent(componentId: number) { diff --git a/src/Components/Shared/src/WebAssemblyJSInteropInternalCalls.cs b/src/Components/WebAssembly/JSInterop/src/InternalCalls.cs similarity index 100% rename from src/Components/Shared/src/WebAssemblyJSInteropInternalCalls.cs rename to src/Components/WebAssembly/JSInterop/src/InternalCalls.cs diff --git a/src/Components/WebAssembly/JSInterop/src/Microsoft.JSInterop.WebAssembly.csproj b/src/Components/WebAssembly/JSInterop/src/Microsoft.JSInterop.WebAssembly.csproj index 64d0f52e10..8b58eb02dd 100644 --- a/src/Components/WebAssembly/JSInterop/src/Microsoft.JSInterop.WebAssembly.csproj +++ b/src/Components/WebAssembly/JSInterop/src/Microsoft.JSInterop.WebAssembly.csproj @@ -9,7 +9,6 @@ - From 723e32a47dd0101b6c169ac4b7fbf61a25e83b32 Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Fri, 31 Jul 2020 14:49:56 -0700 Subject: [PATCH 089/106] Update documentation on darc (#24487) * Update documentation on darc * Apply suggestions from code review Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com> * Update code blocks in referenced assemblies Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com> --- docs/ReferenceResolution.md | 70 +++++++++++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/docs/ReferenceResolution.md b/docs/ReferenceResolution.md index c80d1a0acc..8e94b2a865 100644 --- a/docs/ReferenceResolution.md +++ b/docs/ReferenceResolution.md @@ -100,16 +100,64 @@ is changing to `Microsoft.AspNetCore.BetterThanOrange`, you would need to make t ``` -## Updating dependencies manually +## A darc cheatsheet -If the `dotnet-maestro` bot has not correctly updated the dependencies, it may be worthwhile running `darc` manually: +`darc` is a command-line tool that is used for dependency management in the dotnet ecosystem of repos. `darc` can be installed using the `darc-init` scripts located inside the `eng/common` directory. Once `darc` is installed, you'll need to set up the appropriate access tokens as outlined [in the official Darc docs](https://github.com/dotnet/arcade/blob/master/Documentation/Darc.md#setting-up-your-darc-client). + +Once `darc` is installed and set-up, it can be used to modify the subscriptions and dependencies in a project. + +**Getting the list of subscriptions in a repo** + +Subscriptions are objects that define the ecosystem repos we are listening for updates to, the frequency we are looking for updates, and more. + +```bash +darc get-subscriptions --target-branch master --target-repo aspnetcore$ --regex +``` + +**Disable/enable a subscription** + +```bash +darc subscription-status --id {subscriptionIdHere} --enable +darc subscription-status --id {subscriptionIdHere} --disable +``` + +**Trigger a subscription** + +Triggering a subscription will search for updates in its dependencies and open a PR in the target repo via the dotnet-maestro bot with these changes. + +```bash +darc trigger-subscriptions --id {subscriptionIdHere} +``` + +**Manually update dependencies** + +If the `dotnet-maestro` bot has not correctly updated the dependencies, `darc update-dependencies` may be used to update the dependencies manually. Note, you'll need to run the commands below in a separate branch and submit a PR with the changes. These are the things that the bot should do for you if you use `trigger-subscriptions` or automatically (when the subscription fires e.g. about 15 minutes after a dependency's build completes if `Update Frequency: EveryBuild`). + +```bash +darc update-dependencies --channel '.NET Core 3.1 Release' +darc update-dependencies --channel '.NET 5 Dev' --source-repo efcore +``` + +Generally, using `trigger-subscriptions` is preferred for creating dependency updates instead of manually updating dependencies in your own PR. + +**Toggling batchability of subscription** + +Subscriptions can be batched. When a dependency update is detected, `darc` will bundle the commits for that update with existing dependency PRs. To toggle whether a subscription is batched or not, you will need to use the `update-subscription` command. + +```bash +darc update-subscription --id {subscriptionIdHere} +``` + +Your shell's default editor will open and allow you to edit the metadata of the subscription. + +To disable batching, set `Batchable` to `False` and update the `Merge Policies` section with the following YAML. + +``` + - Name: Standard + Properties: {} +``` + +To enable batching, set `Batchable` to `True` and remove any `Merge Policies` set on the subscription. + +Note: Merge policies can only be set on unbatched subscriptions. Be sure to set/unset the `Merge Policies` field properly as you toggle batchability. -1. Install `darc` as described in -2. Run `darc update-dependencies --channel '.NET Core 3.1 Release'` - * Use `'trigger-subscriptions'` to prod the bot to create a PR if you do not want to make local changes - * Use `'.NET 3 Eng''` to update dependencies from dotnet/arcade - * Use `'.NET Eng - Latest'` to update dependencies from dotnet/arcade in the `master` branch - * Use `'VS Master'` to update dependencies from dotnet/roslyn in the `master` branch - * Use `'.NET 5 Dev'` to update dependencies from dotnet/efcore or dotnet/runtime in the `master` branch -3. `git diff` to confirm the tool's changes -4. Proceed with usual commit and PR From 130ec438fd8c5fecdb0d6fcaac4ee52d10b1687f Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Sat, 1 Aug 2020 10:38:26 -0700 Subject: [PATCH 090/106] Improve crash/hang support in helix (#24489) --- eng/helix/content/RunTests/TestRunner.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/eng/helix/content/RunTests/TestRunner.cs b/eng/helix/content/RunTests/TestRunner.cs index da4b4c228f..4eb8c903e2 100644 --- a/eng/helix/content/RunTests/TestRunner.cs +++ b/eng/helix/content/RunTests/TestRunner.cs @@ -247,7 +247,7 @@ namespace RunTests { // Timeout test run 5 minutes before the Helix job would timeout var cts = new CancellationTokenSource(Options.Timeout.Subtract(TimeSpan.FromMinutes(5))); - var commonTestArgs = $"vstest {Options.Target} --logger:xunit --logger:\"console;verbosity=normal\" --blame"; + var commonTestArgs = $"test {Options.Target} --logger:xunit --logger:\"console;verbosity=normal\" --blame \"CollectHangDump;TestTimeout=5m\""; if (Options.Quarantined) { Console.WriteLine("Running quarantined tests."); @@ -331,6 +331,22 @@ namespace RunTests { Console.WriteLine("No logs found in artifacts/log"); } + Console.WriteLine($"Copying TestResults/**/*.dmp to {HELIX_WORKITEM_UPLOAD_ROOT}/"); + if (Directory.Exists("TestResults")) + { + foreach (var file in Directory.EnumerateFiles("TestResults", "*.dmp", SearchOption.AllDirectories)) + { + var fileName = Path.GetFileName(file); + Console.WriteLine($"Copying: {file} to {Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, fileName)}"); + // Need to copy to HELIX_WORKITEM_UPLOAD_ROOT and HELIX_WORKITEM_UPLOAD_ROOT/../ in order for Azure Devops attachments to link properly and for Helix to store the logs + File.Copy(file, Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, fileName)); + File.Copy(file, Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, "..", fileName)); + } + } + else + { + Console.WriteLine("No dmps found in TestResults"); + } } } } From 4bb01a5a4358a0ba84177b62557469aace6b3019 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Sun, 2 Aug 2020 09:59:30 -0700 Subject: [PATCH 091/106] Update Blazor WebAssembly in-product survey link for .NET 5. (#24508) --- .../Client/Shared/SurveyPrompt.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Shared/SurveyPrompt.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Shared/SurveyPrompt.razor index 02714098ef..67828b574b 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Shared/SurveyPrompt.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Shared/SurveyPrompt.razor @@ -4,7 +4,7 @@ Please take our - brief survey + brief survey and tell us what you think. From b534f925890face10a2f4704dd5ea2acfc19be01 Mon Sep 17 00:00:00 2001 From: Doug Bunting <6431421+dougbu@users.noreply.github.com> Date: Sun, 2 Aug 2020 11:46:10 -0700 Subject: [PATCH 092/106] Remove unused HTML files (#24488) - just a bit confusing to leave these around - the files haven't been used since @pakrym removed the resources in 56c064bd53ed --- .../src/compiler/resources/GenericError.html | 146 ------------------ .../resources/GenericError_Exception.html | 8 - .../resources/GenericError_Footer.html | 3 - .../resources/GenericError_Message.html | 3 - 4 files changed, 160 deletions(-) delete mode 100644 src/Hosting/Hosting/src/compiler/resources/GenericError.html delete mode 100644 src/Hosting/Hosting/src/compiler/resources/GenericError_Exception.html delete mode 100644 src/Hosting/Hosting/src/compiler/resources/GenericError_Footer.html delete mode 100644 src/Hosting/Hosting/src/compiler/resources/GenericError_Message.html diff --git a/src/Hosting/Hosting/src/compiler/resources/GenericError.html b/src/Hosting/Hosting/src/compiler/resources/GenericError.html deleted file mode 100644 index c6b24c57e8..0000000000 --- a/src/Hosting/Hosting/src/compiler/resources/GenericError.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - 500 Internal Server Error - - - - - - - - [[[0]]] - - [[[1]]] - - [[[2]]] - - diff --git a/src/Hosting/Hosting/src/compiler/resources/GenericError_Exception.html b/src/Hosting/Hosting/src/compiler/resources/GenericError_Exception.html deleted file mode 100644 index 012e05bee7..0000000000 --- a/src/Hosting/Hosting/src/compiler/resources/GenericError_Exception.html +++ /dev/null @@ -1,8 +0,0 @@ -
- {0}
- {1}
- {2} -
- {3} -
-
diff --git a/src/Hosting/Hosting/src/compiler/resources/GenericError_Footer.html b/src/Hosting/Hosting/src/compiler/resources/GenericError_Footer.html deleted file mode 100644 index fe54861d87..0000000000 --- a/src/Hosting/Hosting/src/compiler/resources/GenericError_Footer.html +++ /dev/null @@ -1,3 +0,0 @@ -
- {0} {1} v{2}   |   Microsoft.AspNetCore.Hosting version {3}   |   {4}   |   Need help? -
diff --git a/src/Hosting/Hosting/src/compiler/resources/GenericError_Message.html b/src/Hosting/Hosting/src/compiler/resources/GenericError_Message.html deleted file mode 100644 index 39a83d8754..0000000000 --- a/src/Hosting/Hosting/src/compiler/resources/GenericError_Message.html +++ /dev/null @@ -1,3 +0,0 @@ -
- {0}
-
From 404d81767784552b0a148cb8c437332ebe726ae9 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Mon, 3 Aug 2020 06:54:03 -0700 Subject: [PATCH 093/106] Dipping toes into linker friendliness (#24458) - Annotated UseMiddleware and UseStartup to preserve constructors and public methods. - Annotated UseHub and MapHub preserve constructors and public methods. - Added a test to verify UseStartup and UseMiddleware works - The linker.xml preserves constructors all of the types that are registered in DI. This should be removed once we get the linker friendly DI changes. --- .../src/GenericHost/GenericWebHostBuilder.cs | 8 +- .../HostingStartupWebHostBuilder.cs | 6 +- .../src/GenericHost/ISupportsStartup.cs | 6 +- .../src/Internal/StartupLinkerOptions.cs | 13 +++ .../Hosting/src/Internal/StartupLoader.cs | 14 +-- .../Hosting/src/WebHostBuilderExtensions.cs | 9 +- .../Fakes/GenericWebHostBuilderWrapper.cs | 2 +- .../Hosting/test/WebHostBuilderTests.cs | 4 +- .../src/ApplicationPublisher.cs | 2 +- .../src/Common/DeploymentParameters.cs | 2 + .../FunctionalTests/LinkedApplicationTests.cs | 57 ++++++++++++ .../BasicLinkedApp/BasicLinkedApp.csproj | 31 +++++++ .../test/testassets/BasicLinkedApp/Linker.xml | 45 +++++++++ .../test/testassets/BasicLinkedApp/Program.cs | 38 ++++++++ .../test/testassets/BasicLinkedApp/Startup.cs | 29 ++++++ .../src/Extensions/UseMiddlewareExtensions.cs | 10 +- .../src/ConnectionBuilderExtensions.cs | 3 +- ...AspNetCore.Connections.Abstractions.csproj | 1 + .../DynamicallyAccessedMemberTypes.cs | 92 +++++++++++++++++++ .../DynamicallyAccessedMembersAttribute.cs | 48 ++++++++++ .../src/SignalRConnectionBuilderExtensions.cs | 5 +- .../src/HubEndpointRouteBuilderExtensions.cs | 7 +- 22 files changed, 405 insertions(+), 27 deletions(-) create mode 100644 src/Hosting/Hosting/src/Internal/StartupLinkerOptions.cs create mode 100644 src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs create mode 100644 src/Hosting/test/testassets/BasicLinkedApp/BasicLinkedApp.csproj create mode 100644 src/Hosting/test/testassets/BasicLinkedApp/Linker.xml create mode 100644 src/Hosting/test/testassets/BasicLinkedApp/Program.cs create mode 100644 src/Hosting/test/testassets/BasicLinkedApp/Startup.cs create mode 100644 src/Shared/CodeAnalysis/DynamicallyAccessedMemberTypes.cs create mode 100644 src/Shared/CodeAnalysis/DynamicallyAccessedMembersAttribute.cs diff --git a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs index a9625a7907..d3b97ca8f1 100644 --- a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs +++ b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs @@ -4,11 +4,13 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Runtime.ExceptionServices; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting.Builder; +using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -196,7 +198,7 @@ namespace Microsoft.AspNetCore.Hosting return this; } - public IWebHostBuilder UseStartup(Type startupType) + public IWebHostBuilder UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType) { // UseStartup can be called multiple times. Only run the last one. _startupObject = startupType; @@ -213,7 +215,7 @@ namespace Microsoft.AspNetCore.Hosting return this; } - public IWebHostBuilder UseStartup(Func startupFactory) + public IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]TStartup>(Func startupFactory) { // Clear the startup type _startupObject = startupFactory; @@ -232,7 +234,7 @@ namespace Microsoft.AspNetCore.Hosting return this; } - private void UseStartup(Type startupType, HostBuilderContext context, IServiceCollection services, object instance = null) + private void UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, HostBuilderContext context, IServiceCollection services, object instance = null) { var webHostBuilderContext = GetWebHostBuilderContext(context); var webHostOptions = (WebHostOptions)context.Properties[typeof(WebHostOptions)]; diff --git a/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs b/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs index f4034fc38b..ccffd884db 100644 --- a/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs +++ b/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs @@ -2,7 +2,9 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -71,12 +73,12 @@ namespace Microsoft.AspNetCore.Hosting return _builder.Configure(configure); } - public IWebHostBuilder UseStartup(Type startupType) + public IWebHostBuilder UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType) { return _builder.UseStartup(startupType); } - public IWebHostBuilder UseStartup(Func startupFactory) + public IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]TStartup>(Func startupFactory) { return _builder.UseStartup(startupFactory); } diff --git a/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs b/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs index 998f73d06b..360c3da631 100644 --- a/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs +++ b/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs @@ -2,14 +2,16 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting.Internal; namespace Microsoft.AspNetCore.Hosting { internal interface ISupportsStartup { IWebHostBuilder Configure(Action configure); - IWebHostBuilder UseStartup(Type startupType); - IWebHostBuilder UseStartup(Func startupFactory); + IWebHostBuilder UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType); + IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]TStartup>(Func startupFactory); } } diff --git a/src/Hosting/Hosting/src/Internal/StartupLinkerOptions.cs b/src/Hosting/Hosting/src/Internal/StartupLinkerOptions.cs new file mode 100644 index 0000000000..44ce693c31 --- /dev/null +++ b/src/Hosting/Hosting/src/Internal/StartupLinkerOptions.cs @@ -0,0 +1,13 @@ +// 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 System.Diagnostics.CodeAnalysis; + +namespace Microsoft.AspNetCore.Hosting.Internal +{ + internal static class StartupLinkerOptions + { + // We're going to keep all public constructors and public methods on Startup classes + public const DynamicallyAccessedMemberTypes Accessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods; + } +} diff --git a/src/Hosting/Hosting/src/Internal/StartupLoader.cs b/src/Hosting/Hosting/src/Internal/StartupLoader.cs index 8c80884b83..8e8f235eae 100644 --- a/src/Hosting/Hosting/src/Internal/StartupLoader.cs +++ b/src/Hosting/Hosting/src/Internal/StartupLoader.cs @@ -3,9 +3,11 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; using System.Reflection; +using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.Hosting @@ -37,7 +39,7 @@ namespace Microsoft.AspNetCore.Hosting // // If the Startup class ConfigureServices returns an and there is at least an registered we // throw as the filters can't be applied. - public static StartupMethods LoadMethods(IServiceProvider hostingServiceProvider, Type startupType, string environmentName, object instance = null) + public static StartupMethods LoadMethods(IServiceProvider hostingServiceProvider, [DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName, object instance = null) { var configureMethod = FindConfigureDelegate(startupType, environmentName); @@ -272,31 +274,31 @@ namespace Microsoft.AspNetCore.Hosting return type; } - internal static ConfigureBuilder FindConfigureDelegate(Type startupType, string environmentName) + internal static ConfigureBuilder FindConfigureDelegate([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName) { var configureMethod = FindMethod(startupType, "Configure{0}", environmentName, typeof(void), required: true); return new ConfigureBuilder(configureMethod); } - internal static ConfigureContainerBuilder FindConfigureContainerDelegate(Type startupType, string environmentName) + internal static ConfigureContainerBuilder FindConfigureContainerDelegate([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName) { var configureMethod = FindMethod(startupType, "Configure{0}Container", environmentName, typeof(void), required: false); return new ConfigureContainerBuilder(configureMethod); } - internal static bool HasConfigureServicesIServiceProviderDelegate(Type startupType, string environmentName) + internal static bool HasConfigureServicesIServiceProviderDelegate([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName) { return null != FindMethod(startupType, "Configure{0}Services", environmentName, typeof(IServiceProvider), required: false); } - internal static ConfigureServicesBuilder FindConfigureServicesDelegate(Type startupType, string environmentName) + internal static ConfigureServicesBuilder FindConfigureServicesDelegate([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName) { var servicesMethod = FindMethod(startupType, "Configure{0}Services", environmentName, typeof(IServiceProvider), required: false) ?? FindMethod(startupType, "Configure{0}Services", environmentName, typeof(void), required: false); return new ConfigureServicesBuilder(servicesMethod); } - private static MethodInfo FindMethod(Type startupType, string methodName, string environmentName, Type returnType = null, bool required = true) + private static MethodInfo FindMethod([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string methodName, string environmentName, Type returnType = null, bool required = true) { var methodNameWithEnv = string.Format(CultureInfo.InvariantCulture, methodName, environmentName); var methodNameWithNoEnv = string.Format(CultureInfo.InvariantCulture, methodName, ""); diff --git a/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs b/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs index 5d2b7133cc..20151ebe9e 100644 --- a/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs +++ b/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs @@ -2,8 +2,10 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Reflection; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.AspNetCore.Hosting.StaticWebAssets; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -67,7 +69,8 @@ namespace Microsoft.AspNetCore.Hosting /// The to configure. /// A delegate that specifies a factory for the startup class. /// The . - public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, Func startupFactory) + /// When using the il linker, all public methods of are preserved. This should match the Startup type directly (and not a base type). + public static IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]TStartup>(this IWebHostBuilder hostBuilder, Func startupFactory) where TStartup : class { if (startupFactory == null) { @@ -110,7 +113,7 @@ namespace Microsoft.AspNetCore.Hosting /// The to configure. /// The to be used. /// The . - public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, Type startupType) + public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, [DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType) { if (startupType == null) { @@ -151,7 +154,7 @@ namespace Microsoft.AspNetCore.Hosting /// The to configure. /// The type containing the startup methods for the application. /// The . - public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder) where TStartup : class + public static IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)]TStartup>(this IWebHostBuilder hostBuilder) where TStartup : class { return hostBuilder.UseStartup(typeof(TStartup)); } diff --git a/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs b/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs index e87be3a9ad..b0bf122d1b 100644 --- a/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs +++ b/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs @@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Hosting.Tests.Fakes return this; } - public IWebHostBuilder UseStartup(Func startupFactory) + public IWebHostBuilder UseStartup(Func startupFactory) { _builder.UseStartup(startupFactory); return this; diff --git a/src/Hosting/Hosting/test/WebHostBuilderTests.cs b/src/Hosting/Hosting/test/WebHostBuilderTests.cs index 81a8ab4941..d6b9a5f1a6 100644 --- a/src/Hosting/Hosting/test/WebHostBuilderTests.cs +++ b/src/Hosting/Hosting/test/WebHostBuilderTests.cs @@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Hosting public void UseStartupThrowsWhenFactoryReturnsNull(IWebHostBuilder builder) { var server = new TestServer(); - var ex = Assert.Throws(() => builder.UseServer(server).UseStartup(context => null).Build()); + var ex = Assert.Throws(() => builder.UseServer(server).UseStartup(context => null).Build()); Assert.Equal("The specified factory returned null startup instance.", ex.Message); } @@ -96,7 +96,7 @@ namespace Microsoft.AspNetCore.Hosting var server = new TestServer(); var host = builder.UseServer(server) .UseStartup() - .UseStartup(context => throw new InvalidOperationException("This doesn't run")) + .UseStartup(context => throw new InvalidOperationException("This doesn't run")) .Configure(app => { throw new InvalidOperationException("This doesn't run"); diff --git a/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs b/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs index ba5c545317..5ef431c2ce 100644 --- a/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs +++ b/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs @@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting // avoids triggering builds of dependencies of the test app which could cause issues like https://github.com/dotnet/arcade/issues/2941 + $" --no-dependencies" + $" /p:TargetArchitecture={deploymentParameters.RuntimeArchitecture}" - + " --no-restore"; + + (deploymentParameters.RestoreDependencies ? "" : " --no-restore"); if (deploymentParameters.ApplicationType == ApplicationType.Standalone) { diff --git a/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs b/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs index 1f7287d3a0..5002e8f530 100644 --- a/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs +++ b/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs @@ -113,6 +113,8 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting /// public string ApplicationBaseUriHint { get; set; } + public bool RestoreDependencies { get; set; } + /// /// Scheme used by the deployed application if is empty. /// diff --git a/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs b/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs new file mode 100644 index 0000000000..8bce9c2b42 --- /dev/null +++ b/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.IntegrationTesting; +using Microsoft.AspNetCore.Testing; +using Microsoft.Extensions.Logging; +using Xunit; + +namespace Microsoft.AspNetCore.Hosting.FunctionalTests +{ + public class LinkedApplicationTests : LoggedTest + { + [Fact] + public async Task LinkedApplicationWorks() + { + using (StartLog(out var loggerFactory)) + { + var logger = loggerFactory.CreateLogger("LinkedApplicationWorks"); + + // https://github.com/dotnet/aspnetcore/issues/8247 +#pragma warning disable 0618 + var applicationPath = Path.Combine(TestPathUtilities.GetSolutionRootDirectory("Hosting"), "test", "testassets", + "BasicLinkedApp"); +#pragma warning restore 0618 + + var deploymentParameters = new DeploymentParameters( + applicationPath, + ServerType.Kestrel, + RuntimeFlavor.CoreClr, + RuntimeArchitecture.x64) + { + TargetFramework = Tfm.Net50, + RuntimeArchitecture = RuntimeArchitecture.x64, + ApplicationType = ApplicationType.Standalone, + PublishApplicationBeforeDeployment = true, + RestoreDependencies = true, + StatusMessagesEnabled = false + }; + + using var deployer = new SelfHostDeployer(deploymentParameters, loggerFactory); + + var result = await deployer.DeployAsync(); + + // The app should have started up + Assert.False(deployer.HostProcess.HasExited); + + var response = await RetryHelper.RetryRequest(() => result.HttpClient.GetAsync("/"), logger, retryCount: 10); + var body = await response.Content.ReadAsStringAsync(); + + Assert.Equal("Hello World", body); + } + } + } +} diff --git a/src/Hosting/test/testassets/BasicLinkedApp/BasicLinkedApp.csproj b/src/Hosting/test/testassets/BasicLinkedApp/BasicLinkedApp.csproj new file mode 100644 index 0000000000..baf5d0e7d0 --- /dev/null +++ b/src/Hosting/test/testassets/BasicLinkedApp/BasicLinkedApp.csproj @@ -0,0 +1,31 @@ + + + + $(DefaultNetCoreTargetFramework) + Exe + true + link + + + + + + + + + + + + + + + + + link + + + + + + + diff --git a/src/Hosting/test/testassets/BasicLinkedApp/Linker.xml b/src/Hosting/test/testassets/BasicLinkedApp/Linker.xml new file mode 100644 index 0000000000..f3757db941 --- /dev/null +++ b/src/Hosting/test/testassets/BasicLinkedApp/Linker.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Hosting/test/testassets/BasicLinkedApp/Program.cs b/src/Hosting/test/testassets/BasicLinkedApp/Program.cs new file mode 100644 index 0000000000..d9dd267135 --- /dev/null +++ b/src/Hosting/test/testassets/BasicLinkedApp/Program.cs @@ -0,0 +1,38 @@ +// 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 System; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; + +namespace BasicLinkedApp +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + // Do not change the signature of this method. It's used for tests. + private static IHostBuilder CreateWebHostBuilder(string[] args) + { + return new HostBuilder() + .ConfigureHostConfiguration(config => + { + config.AddCommandLine(args); + }) + .ConfigureLogging(logging => + { + logging.AddConsole(); + }) + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder.UseKestrel().UseStartup(); + }); + } + } +} diff --git a/src/Hosting/test/testassets/BasicLinkedApp/Startup.cs b/src/Hosting/test/testassets/BasicLinkedApp/Startup.cs new file mode 100644 index 0000000000..d899b5352b --- /dev/null +++ b/src/Hosting/test/testassets/BasicLinkedApp/Startup.cs @@ -0,0 +1,29 @@ + +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using System.Threading.Tasks; + +namespace BasicLinkedApp +{ + public class Startup + { + public void Configure(IApplicationBuilder app) + { + app.UseMiddleware(); + } + } + + public class HelloWorldMiddleware + { + public HelloWorldMiddleware(RequestDelegate next) + { + + } + + public Task InvokeAsync(HttpContext context) + { + return context.Response.WriteAsync("Hello World"); + } + } +} diff --git a/src/Http/Http.Abstractions/src/Extensions/UseMiddlewareExtensions.cs b/src/Http/Http.Abstractions/src/Extensions/UseMiddlewareExtensions.cs index f33707e671..164b601d57 100644 --- a/src/Http/Http.Abstractions/src/Extensions/UseMiddlewareExtensions.cs +++ b/src/Http/Http.Abstractions/src/Extensions/UseMiddlewareExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Linq.Expressions; using System.Reflection; @@ -22,6 +23,9 @@ namespace Microsoft.AspNetCore.Builder private static readonly MethodInfo GetServiceInfo = typeof(UseMiddlewareExtensions).GetMethod(nameof(GetService), BindingFlags.NonPublic | BindingFlags.Static)!; + // We're going to keep all public constructors and public methods on middleware + private const DynamicallyAccessedMemberTypes MiddlewareAccessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods; + /// /// Adds a middleware type to the application's request pipeline. /// @@ -29,7 +33,7 @@ namespace Microsoft.AspNetCore.Builder /// The instance. /// The arguments to pass to the middleware type instance's constructor. /// The instance. - public static IApplicationBuilder UseMiddleware(this IApplicationBuilder app, params object[] args) + public static IApplicationBuilder UseMiddleware<[DynamicallyAccessedMembers(MiddlewareAccessibility)]TMiddleware>(this IApplicationBuilder app, params object[] args) { return app.UseMiddleware(typeof(TMiddleware), args); } @@ -41,7 +45,7 @@ namespace Microsoft.AspNetCore.Builder /// The middleware type. /// The arguments to pass to the middleware type instance's constructor. /// The instance. - public static IApplicationBuilder UseMiddleware(this IApplicationBuilder app, Type middleware, params object[] args) + public static IApplicationBuilder UseMiddleware(this IApplicationBuilder app, [DynamicallyAccessedMembers(MiddlewareAccessibility)] Type middleware, params object[] args) { if (typeof(IMiddleware).GetTypeInfo().IsAssignableFrom(middleware.GetTypeInfo())) { @@ -110,7 +114,7 @@ namespace Microsoft.AspNetCore.Builder }); } - private static IApplicationBuilder UseMiddlewareInterface(IApplicationBuilder app, Type middlewareType) + private static IApplicationBuilder UseMiddlewareInterface(IApplicationBuilder app, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type middlewareType) { return app.Use(next => { diff --git a/src/Servers/Connections.Abstractions/src/ConnectionBuilderExtensions.cs b/src/Servers/Connections.Abstractions/src/ConnectionBuilderExtensions.cs index 55b0311eb9..937f36b574 100644 --- a/src/Servers/Connections.Abstractions/src/ConnectionBuilderExtensions.cs +++ b/src/Servers/Connections.Abstractions/src/ConnectionBuilderExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; using Microsoft.Extensions.Internal; @@ -9,7 +10,7 @@ namespace Microsoft.AspNetCore.Connections { public static class ConnectionBuilderExtensions { - public static IConnectionBuilder UseConnectionHandler(this IConnectionBuilder connectionBuilder) where TConnectionHandler : ConnectionHandler + public static IConnectionBuilder UseConnectionHandler<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]TConnectionHandler>(this IConnectionBuilder connectionBuilder) where TConnectionHandler : ConnectionHandler { var handler = ActivatorUtilities.GetServiceOrCreateInstance(connectionBuilder.ApplicationServices); diff --git a/src/Servers/Connections.Abstractions/src/Microsoft.AspNetCore.Connections.Abstractions.csproj b/src/Servers/Connections.Abstractions/src/Microsoft.AspNetCore.Connections.Abstractions.csproj index fcea395964..e83b0142a0 100644 --- a/src/Servers/Connections.Abstractions/src/Microsoft.AspNetCore.Connections.Abstractions.csproj +++ b/src/Servers/Connections.Abstractions/src/Microsoft.AspNetCore.Connections.Abstractions.csproj @@ -17,6 +17,7 @@ + diff --git a/src/Shared/CodeAnalysis/DynamicallyAccessedMemberTypes.cs b/src/Shared/CodeAnalysis/DynamicallyAccessedMemberTypes.cs new file mode 100644 index 0000000000..2edc474a0b --- /dev/null +++ b/src/Shared/CodeAnalysis/DynamicallyAccessedMemberTypes.cs @@ -0,0 +1,92 @@ +#if !NET5_0 +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Diagnostics.CodeAnalysis +{ + /// + /// Specifies the types of members that are dynamically accessed. + /// + /// This enumeration has a attribute that allows a + /// bitwise combination of its member values. + /// + [Flags] + internal enum DynamicallyAccessedMemberTypes + { + /// + /// Specifies no members. + /// + None = 0, + + /// + /// Specifies the default, parameterless public constructor. + /// + PublicParameterlessConstructor = 0x0001, + + /// + /// Specifies all public constructors. + /// + PublicConstructors = 0x0002 | PublicParameterlessConstructor, + + /// + /// Specifies all non-public constructors. + /// + NonPublicConstructors = 0x0004, + + /// + /// Specifies all public methods. + /// + PublicMethods = 0x0008, + + /// + /// Specifies all non-public methods. + /// + NonPublicMethods = 0x0010, + + /// + /// Specifies all public fields. + /// + PublicFields = 0x0020, + + /// + /// Specifies all non-public fields. + /// + NonPublicFields = 0x0040, + + /// + /// Specifies all public nested types. + /// + PublicNestedTypes = 0x0080, + + /// + /// Specifies all non-public nested types. + /// + NonPublicNestedTypes = 0x0100, + + /// + /// Specifies all public properties. + /// + PublicProperties = 0x0200, + + /// + /// Specifies all non-public properties. + /// + NonPublicProperties = 0x0400, + + /// + /// Specifies all public events. + /// + PublicEvents = 0x0800, + + /// + /// Specifies all non-public events. + /// + NonPublicEvents = 0x1000, + + /// + /// Specifies all members. + /// + All = ~None + } +} +#endif \ No newline at end of file diff --git a/src/Shared/CodeAnalysis/DynamicallyAccessedMembersAttribute.cs b/src/Shared/CodeAnalysis/DynamicallyAccessedMembersAttribute.cs new file mode 100644 index 0000000000..c0ae1c6862 --- /dev/null +++ b/src/Shared/CodeAnalysis/DynamicallyAccessedMembersAttribute.cs @@ -0,0 +1,48 @@ +#if !NET5_0 +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Diagnostics.CodeAnalysis +{ + /// + /// Indicates that certain members on a specified are accessed dynamically, + /// for example through . + /// + /// + /// This allows tools to understand which members are being accessed during the execution + /// of a program. + /// + /// This attribute is valid on members whose type is or . + /// + /// When this attribute is applied to a location of type , the assumption is + /// that the string represents a fully qualified type name. + /// + /// If the attribute is applied to a method it's treated as a special case and it implies + /// the attribute should be applied to the "this" parameter of the method. As such the attribute + /// should only be used on instance methods of types assignable to System.Type (or string, but no methods + /// will use it there). + /// + [AttributeUsage( + AttributeTargets.Field | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter | + AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Method, + Inherited = false)] + internal sealed class DynamicallyAccessedMembersAttribute : Attribute + { + /// + /// Initializes a new instance of the class + /// with the specified member types. + /// + /// The types of members dynamically accessed. + public DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes memberTypes) + { + MemberTypes = memberTypes; + } + + /// + /// Gets the which specifies the type + /// of members dynamically accessed. + /// + public DynamicallyAccessedMemberTypes MemberTypes { get; } + } +} +#endif \ No newline at end of file diff --git a/src/SignalR/server/Core/src/SignalRConnectionBuilderExtensions.cs b/src/SignalR/server/Core/src/SignalRConnectionBuilderExtensions.cs index 58888470cf..d06baed604 100644 --- a/src/SignalR/server/Core/src/SignalRConnectionBuilderExtensions.cs +++ b/src/SignalR/server/Core/src/SignalRConnectionBuilderExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.SignalR.Internal; using Microsoft.Extensions.DependencyInjection; @@ -13,13 +14,15 @@ namespace Microsoft.AspNetCore.SignalR /// public static class SignalRConnectionBuilderExtensions { + private const DynamicallyAccessedMemberTypes HubAccessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods; + /// /// Configure the connection to host the specified type. /// /// The type to host on the connection. /// The connection to configure. /// The same instance of the for chaining. - public static IConnectionBuilder UseHub(this IConnectionBuilder connectionBuilder) where THub : Hub + public static IConnectionBuilder UseHub<[DynamicallyAccessedMembers(HubAccessibility)]THub>(this IConnectionBuilder connectionBuilder) where THub : Hub { var marker = connectionBuilder.ApplicationServices.GetService(typeof(SignalRCoreMarkerService)); if (marker == null) diff --git a/src/SignalR/server/SignalR/src/HubEndpointRouteBuilderExtensions.cs b/src/SignalR/server/SignalR/src/HubEndpointRouteBuilderExtensions.cs index 553ea3f8ce..3ac90b36f0 100644 --- a/src/SignalR/server/SignalR/src/HubEndpointRouteBuilderExtensions.cs +++ b/src/SignalR/server/SignalR/src/HubEndpointRouteBuilderExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.SignalR; @@ -11,6 +12,8 @@ namespace Microsoft.AspNetCore.Builder { public static class HubEndpointRouteBuilderExtensions { + private const DynamicallyAccessedMemberTypes HubAccessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods; + /// /// Maps incoming requests with the specified path to the specified type. /// @@ -18,7 +21,7 @@ namespace Microsoft.AspNetCore.Builder /// The to add the route to. /// The route pattern. /// An for endpoints associated with the connections. - public static HubEndpointConventionBuilder MapHub(this IEndpointRouteBuilder endpoints, string pattern) where THub : Hub + public static HubEndpointConventionBuilder MapHub<[DynamicallyAccessedMembers(HubAccessibility)]THub>(this IEndpointRouteBuilder endpoints, string pattern) where THub : Hub { return endpoints.MapHub(pattern, configureOptions: null); } @@ -31,7 +34,7 @@ namespace Microsoft.AspNetCore.Builder /// The route pattern. /// A callback to configure dispatcher options. /// An for endpoints associated with the connections. - public static HubEndpointConventionBuilder MapHub(this IEndpointRouteBuilder endpoints, string pattern, Action configureOptions) where THub : Hub + public static HubEndpointConventionBuilder MapHub<[DynamicallyAccessedMembers(HubAccessibility)]THub>(this IEndpointRouteBuilder endpoints, string pattern, Action configureOptions) where THub : Hub { var marker = endpoints.ServiceProvider.GetService(); From 749450ac7b67c2686f796fcc1e0299b8dfbe74c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Luthi?= Date: Mon, 3 Aug 2020 16:30:52 +0200 Subject: [PATCH 094/106] [HTTPS] Fix the CertificateManagerEventSource event ids (#24519) --- src/Shared/CertificateGeneration/CertificateManager.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Shared/CertificateGeneration/CertificateManager.cs b/src/Shared/CertificateGeneration/CertificateManager.cs index 1f2820b9be..cc63219bd9 100644 --- a/src/Shared/CertificateGeneration/CertificateManager.cs +++ b/src/Shared/CertificateGeneration/CertificateManager.cs @@ -853,13 +853,13 @@ namespace Microsoft.AspNetCore.Certificates.Generation [Event(50, Level = EventLevel.Verbose)] public void WindowsRemoveCertificateFromRootStoreNotFound() => WriteEvent(50, "The certificate was not trusted."); - [Event(50, Level = EventLevel.Verbose)] + [Event(51, Level = EventLevel.Verbose)] public void CorrectCertificateStateStart(string certificate) => WriteEvent(51, $"Correcting the the certificate state for '{certificate}'"); - [Event(51, Level = EventLevel.Verbose)] + [Event(52, Level = EventLevel.Verbose)] public void CorrectCertificateStateEnd() => WriteEvent(52, "Finished correcting the certificate state"); - [Event(52, Level = EventLevel.Error)] + [Event(53, Level = EventLevel.Error)] public void CorrectCertificateStateError(string error) => WriteEvent(53, $"An error has ocurred while correcting the certificate state: {error}."); [Event(54, Level = EventLevel.Verbose)] From 38e166fd590dc32bdf13adc3f45b74c318aee453 Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Mon, 3 Aug 2020 18:42:31 +0100 Subject: [PATCH 095/106] Optimize render tree building via RenderTreeFrameArrayBuilder (#24484) --- .../Components/src/ParameterView.cs | 24 +-- .../src/RenderTree/RenderTreeDiffBuilder.cs | 141 +++++++------- .../src/RenderTree/RenderTreeFrame.cs | 176 ++++++++++-------- .../RenderTree/RenderTreeFrameArrayBuilder.cs | 137 ++++++++++++++ .../Components/src/RenderTree/Renderer.cs | 15 +- .../src/Rendering/RenderTreeBuilder.cs | 113 ++++++----- .../src/Rendering/RenderTreeUpdater.cs | 26 +-- src/Components/Shared/src/ArrayBuilder.cs | 7 +- 8 files changed, 401 insertions(+), 238 deletions(-) create mode 100644 src/Components/Components/src/RenderTree/RenderTreeFrameArrayBuilder.cs diff --git a/src/Components/Components/src/ParameterView.cs b/src/Components/Components/src/ParameterView.cs index 569b8ff2c2..f68fb60573 100644 --- a/src/Components/Components/src/ParameterView.cs +++ b/src/Components/Components/src/ParameterView.cs @@ -142,8 +142,8 @@ namespace Microsoft.AspNetCore.Components var oldIndex = oldParameters._ownerIndex; var newIndex = _ownerIndex; - var oldEndIndexExcl = oldIndex + oldParameters._frames[oldIndex].ComponentSubtreeLength; - var newEndIndexExcl = newIndex + _frames[newIndex].ComponentSubtreeLength; + var oldEndIndexExcl = oldIndex + oldParameters._frames[oldIndex].ComponentSubtreeLengthField; + var newEndIndexExcl = newIndex + _frames[newIndex].ComponentSubtreeLengthField; while (true) { // First, stop if we've reached the end of either subtree @@ -162,21 +162,21 @@ namespace Microsoft.AspNetCore.Components ref var newFrame = ref _frames[newIndex]; // Stop if we've reached the end of either subtree's sequence of attributes - oldFinished = oldFrame.FrameType != RenderTreeFrameType.Attribute; - newFinished = newFrame.FrameType != RenderTreeFrameType.Attribute; + oldFinished = oldFrame.FrameTypeField != RenderTreeFrameType.Attribute; + newFinished = newFrame.FrameTypeField != RenderTreeFrameType.Attribute; if (oldFinished || newFinished) { return oldFinished == newFinished; // Same only if we have same number of parameters } else { - if (!string.Equals(oldFrame.AttributeName, newFrame.AttributeName, StringComparison.Ordinal)) + if (!string.Equals(oldFrame.AttributeNameField, newFrame.AttributeNameField, StringComparison.Ordinal)) { return false; // Different names } - var oldValue = oldFrame.AttributeValue; - var newValue = newFrame.AttributeValue; + var oldValue = oldFrame.AttributeValueField; + var newValue = newFrame.AttributeValueField; if (ChangeDetection.MayHaveChanged(oldValue, newValue)) { return false; @@ -216,8 +216,8 @@ namespace Microsoft.AspNetCore.Components public static ParameterView FromDictionary(IDictionary parameters) { var frames = new RenderTreeFrame[parameters.Count + 1]; - frames[0] = RenderTreeFrame.Element(0, GeneratedParameterViewElementName) - .WithElementSubtreeLength(frames.Length); + frames[0] = RenderTreeFrame.Element(0, GeneratedParameterViewElementName); + frames[0].ElementSubtreeLengthField = frames.Length; var i = 0; foreach (var kvp in parameters) @@ -303,7 +303,7 @@ namespace Microsoft.AspNetCore.Components { _frames = frames; _ownerIndex = ownerIndex; - _ownerDescendantsEndIndexExcl = ownerIndex + _frames[ownerIndex].ElementSubtreeLength; + _ownerDescendantsEndIndexExcl = ownerIndex + _frames[ownerIndex].ElementSubtreeLengthField; _currentIndex = ownerIndex; _current = default; } @@ -321,7 +321,7 @@ namespace Microsoft.AspNetCore.Components // ... or if you get to its first non-attribute descendant (because attributes // are always before any other type of descendant) - if (_frames[nextIndex].FrameType != RenderTreeFrameType.Attribute) + if (_frames[nextIndex].FrameTypeField != RenderTreeFrameType.Attribute) { return false; } @@ -329,7 +329,7 @@ namespace Microsoft.AspNetCore.Components _currentIndex = nextIndex; ref var frame = ref _frames[_currentIndex]; - _current = new ParameterValue(frame.AttributeName, frame.AttributeValue, false); + _current = new ParameterValue(frame.AttributeNameField, frame.AttributeValueField, false); return true; } diff --git a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs index aabd22217a..80bf99724e 100644 --- a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs +++ b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs @@ -78,7 +78,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree if (hasMoreOld) { ref var oldFrame = ref oldTree[oldStartIndex]; - oldSeq = oldFrame.Sequence; + oldSeq = oldFrame.SequenceField; oldKey = KeyValue(ref oldFrame); } else @@ -90,7 +90,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree if (hasMoreNew) { ref var newFrame = ref newTree[newStartIndex]; - newSeq = newFrame.Sequence; + newSeq = newFrame.SequenceField; newKey = KeyValue(ref newFrame); } else @@ -195,7 +195,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree var newLoopsBackLater = false; for (var testIndex = newStartIndex + 1; testIndex < newEndIndexExcl; testIndex++) { - if (newTree[testIndex].Sequence < newSeq) + if (newTree[testIndex].SequenceField < newSeq) { newLoopsBackLater = true; break; @@ -218,7 +218,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree var oldLoopsBackLater = false; for (var testIndex = oldStartIndex + 1; testIndex < oldEndIndexExcl; testIndex++) { - if (oldTree[testIndex].Sequence < oldSeq) + if (oldTree[testIndex].SequenceField < oldSeq) { oldLoopsBackLater = true; break; @@ -350,13 +350,13 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static void ThrowExceptionForDuplicateKey(object key, in RenderTreeFrame frame) { - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Component: - throw new InvalidOperationException($"More than one sibling of component '{frame.ComponentType}' has the same key value, '{key}'. Key values must be unique."); + throw new InvalidOperationException($"More than one sibling of component '{frame.ComponentTypeField}' has the same key value, '{key}'. Key values must be unique."); case RenderTreeFrameType.Element: - throw new InvalidOperationException($"More than one sibling of element '{frame.ElementName}' has the same key value, '{key}'. Key values must be unique."); + throw new InvalidOperationException($"More than one sibling of element '{frame.ElementNameField}' has the same key value, '{key}'. Key values must be unique."); default: throw new InvalidOperationException($"More than one sibling has the same key value, '{key}'. Key values must be unique."); @@ -365,12 +365,12 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static object KeyValue(ref RenderTreeFrame frame) { - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Element: - return frame.ElementKey; + return frame.ElementKeyField; case RenderTreeFrameType.Component: - return frame.ComponentKey; + return frame.ComponentKeyField; default: return null; } @@ -405,10 +405,10 @@ namespace Microsoft.AspNetCore.Components.RenderTree while (hasMoreOld || hasMoreNew) { - var oldSeq = hasMoreOld ? oldTree[oldStartIndex].Sequence : int.MaxValue; - var newSeq = hasMoreNew ? newTree[newStartIndex].Sequence : int.MaxValue; - var oldAttributeName = oldTree[oldStartIndex].AttributeName; - var newAttributeName = newTree[newStartIndex].AttributeName; + var oldSeq = hasMoreOld ? oldTree[oldStartIndex].SequenceField : int.MaxValue; + var newSeq = hasMoreNew ? newTree[newStartIndex].SequenceField : int.MaxValue; + var oldAttributeName = oldTree[oldStartIndex].AttributeNameField; + var newAttributeName = newTree[newStartIndex].AttributeNameField; if (oldSeq == newSeq && string.Equals(oldAttributeName, newAttributeName, StringComparison.Ordinal)) @@ -481,12 +481,12 @@ namespace Microsoft.AspNetCore.Components.RenderTree // 3. iterate through the remaining attributes in the set and add them for (var i = newStartIndex; i < newEndIndexExcl; i++) { - diffContext.AttributeDiffSet[newTree[i].AttributeName] = i; + diffContext.AttributeDiffSet[newTree[i].AttributeNameField] = i; } for (var i = oldStartIndex; i < oldEndIndexExcl; i++) { - var oldName = oldTree[i].AttributeName; + var oldName = oldTree[i].AttributeNameField; if (diffContext.AttributeDiffSet.TryGetValue(oldName, out var matchIndex)) { // Has a match in the new tree, look for a diff @@ -519,10 +519,11 @@ namespace Microsoft.AspNetCore.Components.RenderTree var newTree = diffContext.NewTree; ref var oldComponentFrame = ref oldTree[oldComponentIndex]; ref var newComponentFrame = ref newTree[newComponentIndex]; - var componentState = oldComponentFrame.ComponentState; + var componentState = oldComponentFrame.ComponentStateField; // Preserve the actual componentInstance - newComponentFrame = newComponentFrame.WithComponent(componentState); + newComponentFrame.ComponentStateField = componentState; + newComponentFrame.ComponentIdField = componentState.ComponentId; // As an important rendering optimization, we want to skip parameter update // notifications if we know for sure they haven't changed/mutated. The @@ -545,14 +546,14 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static int NextSiblingIndex(in RenderTreeFrame frame, int frameIndex) { - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Component: - return frameIndex + frame.ComponentSubtreeLength; + return frameIndex + frame.ComponentSubtreeLengthField; case RenderTreeFrameType.Element: - return frameIndex + frame.ElementSubtreeLength; + return frameIndex + frame.ElementSubtreeLengthField; case RenderTreeFrameType.Region: - return frameIndex + frame.RegionSubtreeLength; + return frameIndex + frame.RegionSubtreeLengthField; default: return frameIndex + 1; } @@ -570,8 +571,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree // This can't happen for sequence-matched frames from .razor components, but it can happen if you write your // builder logic manually or if two dissimilar frames matched by key. Treat as completely unrelated. - var newFrameType = newFrame.FrameType; - if (oldFrame.FrameType != newFrameType) + var newFrameType = newFrame.FrameTypeField; + if (oldFrame.FrameTypeField != newFrameType) { InsertNewFrame(ref diffContext, newFrameIndex); RemoveOldFrame(ref diffContext, oldFrameIndex); @@ -586,8 +587,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree { case RenderTreeFrameType.Text: { - var oldText = oldFrame.TextContent; - var newText = newFrame.TextContent; + var oldText = oldFrame.TextContentField; + var newText = newFrame.TextContentField; if (!string.Equals(oldText, newText, StringComparison.Ordinal)) { var referenceFrameIndex = diffContext.ReferenceFrames.Append(newFrame); @@ -599,8 +600,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Markup: { - var oldMarkup = oldFrame.MarkupContent; - var newMarkup = newFrame.MarkupContent; + var oldMarkup = oldFrame.MarkupContentField; + var newMarkup = newFrame.MarkupContentField; if (!string.Equals(oldMarkup, newMarkup, StringComparison.Ordinal)) { var referenceFrameIndex = diffContext.ReferenceFrames.Append(newFrame); @@ -612,8 +613,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Element: { - var oldElementName = oldFrame.ElementName; - var newElementName = newFrame.ElementName; + var oldElementName = oldFrame.ElementNameField; + var newElementName = newFrame.ElementNameField; if (string.Equals(oldElementName, newElementName, StringComparison.Ordinal)) { var oldFrameAttributesEndIndexExcl = GetAttributesEndIndexExclusive(oldTree, oldFrameIndex); @@ -626,8 +627,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree newFrameIndex + 1, newFrameAttributesEndIndexExcl); // Diff the children - var oldFrameChildrenEndIndexExcl = oldFrameIndex + oldFrame.ElementSubtreeLength; - var newFrameChildrenEndIndexExcl = newFrameIndex + newFrame.ElementSubtreeLength; + var oldFrameChildrenEndIndexExcl = oldFrameIndex + oldFrame.ElementSubtreeLengthField; + var newFrameChildrenEndIndexExcl = newFrameIndex + newFrame.ElementSubtreeLengthField; var hasChildrenToProcess = oldFrameChildrenEndIndexExcl > oldFrameAttributesEndIndexExcl || newFrameChildrenEndIndexExcl > newFrameAttributesEndIndexExcl; @@ -661,14 +662,14 @@ namespace Microsoft.AspNetCore.Components.RenderTree { AppendDiffEntriesForRange( ref diffContext, - oldFrameIndex + 1, oldFrameIndex + oldFrame.RegionSubtreeLength, - newFrameIndex + 1, newFrameIndex + newFrame.RegionSubtreeLength); + oldFrameIndex + 1, oldFrameIndex + oldFrame.RegionSubtreeLengthField, + newFrameIndex + 1, newFrameIndex + newFrame.RegionSubtreeLengthField); break; } case RenderTreeFrameType.Component: { - if (oldFrame.ComponentType == newFrame.ComponentType) + if (oldFrame.ComponentTypeField == newFrame.ComponentTypeField) { UpdateRetainedChildComponent( ref diffContext, @@ -698,7 +699,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree // We don't handle attributes here, they have their own diff logic. // See AppendDiffEntriesForAttributeFrame default: - throw new NotImplementedException($"Encountered unsupported frame type during diffing: {newTree[newFrameIndex].FrameType}"); + throw new NotImplementedException($"Encountered unsupported frame type during diffing: {newTree[newFrameIndex].FrameTypeField}"); } } @@ -715,7 +716,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree ref var newFrame = ref newTree[newFrameIndex]; // Using Equals to account for string comparisons, nulls, etc. - var valueChanged = !Equals(oldFrame.AttributeValue, newFrame.AttributeValue); + var valueChanged = !Equals(oldFrame.AttributeValueField, newFrame.AttributeValueField); if (valueChanged) { InitializeNewAttributeFrame(ref diffContext, ref newFrame); @@ -724,13 +725,13 @@ namespace Microsoft.AspNetCore.Components.RenderTree // If we're replacing an old event handler ID with a new one, register the old one for disposal, // plus keep track of the old->new chain until the old one is fully disposed - if (oldFrame.AttributeEventHandlerId > 0) + if (oldFrame.AttributeEventHandlerIdField > 0) { - diffContext.Renderer.TrackReplacedEventHandlerId(oldFrame.AttributeEventHandlerId, newFrame.AttributeEventHandlerId); - diffContext.BatchBuilder.DisposedEventHandlerIds.Append(oldFrame.AttributeEventHandlerId); + diffContext.Renderer.TrackReplacedEventHandlerId(oldFrame.AttributeEventHandlerIdField, newFrame.AttributeEventHandlerIdField); + diffContext.BatchBuilder.DisposedEventHandlerIds.Append(oldFrame.AttributeEventHandlerIdField); } } - else if (oldFrame.AttributeEventHandlerId > 0) + else if (oldFrame.AttributeEventHandlerIdField > 0) { // Retain the event handler ID by copying the old frame over the new frame. // this will prevent us from needing to dispose the old event handler @@ -743,7 +744,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree { var newTree = diffContext.NewTree; ref var newFrame = ref newTree[newFrameIndex]; - switch (newFrame.FrameType) + switch (newFrame.FrameTypeField) { case RenderTreeFrameType.Attribute: { @@ -756,7 +757,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Element: { InitializeNewSubtree(ref diffContext, newFrameIndex); - var referenceFrameIndex = diffContext.ReferenceFrames.Append(newTree, newFrameIndex, newFrame.ElementSubtreeLength); + var referenceFrameIndex = diffContext.ReferenceFrames.Append(newTree, newFrameIndex, newFrame.ElementSubtreeLengthField); diffContext.Edits.Append(RenderTreeEdit.PrependFrame(diffContext.SiblingIndex, referenceFrameIndex)); diffContext.SiblingIndex++; break; @@ -764,7 +765,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Region: { var regionChildFrameIndex = newFrameIndex + 1; - var regionChildFrameEndIndexExcl = newFrameIndex + newFrame.RegionSubtreeLength; + var regionChildFrameEndIndexExcl = newFrameIndex + newFrame.RegionSubtreeLengthField; while (regionChildFrameIndex < regionChildFrameEndIndexExcl) { InsertNewFrame(ref diffContext, regionChildFrameIndex); @@ -791,7 +792,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree break; } default: - throw new NotImplementedException($"Unexpected frame type during {nameof(InsertNewFrame)}: {newFrame.FrameType}"); + throw new NotImplementedException($"Unexpected frame type during {nameof(InsertNewFrame)}: {newFrame.FrameTypeField}"); } } @@ -799,21 +800,21 @@ namespace Microsoft.AspNetCore.Components.RenderTree { var oldTree = diffContext.OldTree; ref var oldFrame = ref oldTree[oldFrameIndex]; - switch (oldFrame.FrameType) + switch (oldFrame.FrameTypeField) { case RenderTreeFrameType.Attribute: { - diffContext.Edits.Append(RenderTreeEdit.RemoveAttribute(diffContext.SiblingIndex, oldFrame.AttributeName)); - if (oldFrame.AttributeEventHandlerId > 0) + diffContext.Edits.Append(RenderTreeEdit.RemoveAttribute(diffContext.SiblingIndex, oldFrame.AttributeNameField)); + if (oldFrame.AttributeEventHandlerIdField > 0) { - diffContext.BatchBuilder.DisposedEventHandlerIds.Append(oldFrame.AttributeEventHandlerId); + diffContext.BatchBuilder.DisposedEventHandlerIds.Append(oldFrame.AttributeEventHandlerIdField); } break; } case RenderTreeFrameType.Component: case RenderTreeFrameType.Element: { - var endIndexExcl = oldFrameIndex + oldFrame.ElementSubtreeLength; + var endIndexExcl = oldFrameIndex + oldFrame.ElementSubtreeLengthField; DisposeFramesInRange(diffContext.BatchBuilder, oldTree, oldFrameIndex, endIndexExcl); diffContext.Edits.Append(RenderTreeEdit.RemoveFrame(diffContext.SiblingIndex)); break; @@ -821,7 +822,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Region: { var regionChildFrameIndex = oldFrameIndex + 1; - var regionChildFrameEndIndexExcl = oldFrameIndex + oldFrame.RegionSubtreeLength; + var regionChildFrameEndIndexExcl = oldFrameIndex + oldFrame.RegionSubtreeLengthField; while (regionChildFrameIndex < regionChildFrameEndIndexExcl) { RemoveOldFrame(ref diffContext, regionChildFrameIndex); @@ -836,17 +837,17 @@ namespace Microsoft.AspNetCore.Components.RenderTree break; } default: - throw new NotImplementedException($"Unexpected frame type during {nameof(RemoveOldFrame)}: {oldFrame.FrameType}"); + throw new NotImplementedException($"Unexpected frame type during {nameof(RemoveOldFrame)}: {oldFrame.FrameTypeField}"); } } private static int GetAttributesEndIndexExclusive(RenderTreeFrame[] tree, int rootIndex) { - var descendantsEndIndexExcl = rootIndex + tree[rootIndex].ElementSubtreeLength; + var descendantsEndIndexExcl = rootIndex + tree[rootIndex].ElementSubtreeLengthField; var index = rootIndex + 1; for (; index < descendantsEndIndexExcl; index++) { - if (tree[index].FrameType != RenderTreeFrameType.Attribute) + if (tree[index].FrameTypeField != RenderTreeFrameType.Attribute) { break; } @@ -872,11 +873,11 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static void InitializeNewSubtree(ref DiffContext diffContext, int frameIndex) { var frames = diffContext.NewTree; - var endIndexExcl = frameIndex + frames[frameIndex].ElementSubtreeLength; + var endIndexExcl = frameIndex + frames[frameIndex].ElementSubtreeLengthField; for (var i = frameIndex; i < endIndexExcl; i++) { ref var frame = ref frames[i]; - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Component: InitializeNewComponentFrame(ref diffContext, i); @@ -899,14 +900,14 @@ namespace Microsoft.AspNetCore.Components.RenderTree var frames = diffContext.NewTree; ref var frame = ref frames[frameIndex]; - if (frame.ComponentState != null) + if (frame.ComponentStateField != null) { throw new InvalidOperationException($"Child component already exists during {nameof(InitializeNewComponentFrame)}"); } var parentComponentId = diffContext.ComponentId; diffContext.Renderer.InstantiateChildComponentOnFrame(ref frame, parentComponentId); - var childComponentState = frame.ComponentState; + var childComponentState = frame.ComponentStateField; // Set initial parameters var initialParametersLifetime = new ParameterViewLifetime(diffContext.BatchBuilder); @@ -920,9 +921,9 @@ namespace Microsoft.AspNetCore.Components.RenderTree // // We're following a simple heuristic here that's reflected in the ts runtime // based on the common usage of attributes for DOM events. - if ((newFrame.AttributeValue is MulticastDelegate || newFrame.AttributeValue is EventCallback) && - newFrame.AttributeName.Length >= 3 && - newFrame.AttributeName.StartsWith("on", StringComparison.Ordinal)) + if ((newFrame.AttributeValueField is MulticastDelegate || newFrame.AttributeValueField is EventCallback) && + newFrame.AttributeNameField.Length >= 3 && + newFrame.AttributeNameField.StartsWith("on", StringComparison.Ordinal)) { diffContext.Renderer.AssignEventHandlerId(ref newFrame); } @@ -931,14 +932,14 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static void InitializeNewElementReferenceCaptureFrame(ref DiffContext diffContext, ref RenderTreeFrame newFrame) { var newElementReference = ElementReference.CreateWithUniqueId(diffContext.Renderer.ElementReferenceContext); - newFrame = newFrame.WithElementReferenceCaptureId(newElementReference.Id); - newFrame.ElementReferenceCaptureAction(newElementReference); + newFrame.ElementReferenceCaptureIdField = newElementReference.Id; + newFrame.ElementReferenceCaptureActionField(newElementReference); } private static void InitializeNewComponentReferenceCaptureFrame(ref DiffContext diffContext, ref RenderTreeFrame newFrame) { - ref var parentFrame = ref diffContext.NewTree[newFrame.ComponentReferenceCaptureParentFrameIndex]; - if (parentFrame.FrameType != RenderTreeFrameType.Component) + ref var parentFrame = ref diffContext.NewTree[newFrame.ComponentReferenceCaptureParentFrameIndexField]; + if (parentFrame.FrameTypeField != RenderTreeFrameType.Component) { // Should never happen, but will help with diagnosis if it does throw new InvalidOperationException($"{nameof(RenderTreeFrameType.ComponentReferenceCapture)} frame references invalid parent index."); @@ -951,7 +952,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree throw new InvalidOperationException($"Trying to initialize {nameof(RenderTreeFrameType.ComponentReferenceCapture)} frame before parent component was assigned."); } - newFrame.ComponentReferenceCaptureAction(componentInstance); + newFrame.ComponentReferenceCaptureActionField(componentInstance); } private static void DisposeFramesInRange(RenderBatchBuilder batchBuilder, RenderTreeFrame[] frames, int startIndex, int endIndexExcl) @@ -959,13 +960,13 @@ namespace Microsoft.AspNetCore.Components.RenderTree for (var i = startIndex; i < endIndexExcl; i++) { ref var frame = ref frames[i]; - if (frame.FrameType == RenderTreeFrameType.Component && frame.ComponentState != null) + if (frame.FrameTypeField == RenderTreeFrameType.Component && frame.ComponentStateField != null) { - batchBuilder.ComponentDisposalQueue.Enqueue(frame.ComponentId); + batchBuilder.ComponentDisposalQueue.Enqueue(frame.ComponentIdField); } - else if (frame.FrameType == RenderTreeFrameType.Attribute && frame.AttributeEventHandlerId > 0) + else if (frame.FrameTypeField == RenderTreeFrameType.Attribute && frame.AttributeEventHandlerIdField > 0) { - batchBuilder.DisposedEventHandlerIds.Append(frame.AttributeEventHandlerId); + batchBuilder.DisposedEventHandlerIds.Append(frame.AttributeEventHandlerIdField); } } } diff --git a/src/Components/Components/src/RenderTree/RenderTreeFrame.cs b/src/Components/Components/src/RenderTree/RenderTreeFrame.cs index 8fc59cfc7b..ba6d2e5320 100644 --- a/src/Components/Components/src/RenderTree/RenderTreeFrame.cs +++ b/src/Components/Components/src/RenderTree/RenderTreeFrame.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree // // Represents an entry in a tree of user interface (UI) items. [StructLayout(LayoutKind.Explicit, Pack = 4)] - public readonly struct RenderTreeFrame + public struct RenderTreeFrame { // Note that the struct layout has to be valid in both 32-bit and 64-bit runtime platforms, // which means that all reference-type fields need to take up 8 bytes (except for the last @@ -48,72 +48,86 @@ namespace Microsoft.AspNetCore.Components.RenderTree // Common // -------------------------------------------------------------------------------- + [FieldOffset(0)] internal int SequenceField; + [FieldOffset(4)] internal RenderTreeFrameType FrameTypeField; + /// /// 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). /// - [FieldOffset(0)] public readonly int Sequence; + public int Sequence => SequenceField; /// /// Describes the type of this frame. /// - [FieldOffset(4)] public readonly RenderTreeFrameType FrameType; + public RenderTreeFrameType FrameType => FrameTypeField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Element // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal int ElementSubtreeLengthField; + [FieldOffset(16)] internal string ElementNameField; + [FieldOffset(24)] internal object ElementKeyField; + /// /// 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. /// - [FieldOffset(8)] public readonly int ElementSubtreeLength; + public int ElementSubtreeLength => ElementSubtreeLengthField; /// /// If the property equals , /// gets a name representing the type of the element. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string ElementName; + public string ElementName => ElementNameField; /// /// If the property equals , /// gets the element's diffing key, or null if none was specified. /// - [FieldOffset(24)] public readonly object ElementKey; + public object ElementKey => ElementKeyField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Text // -------------------------------------------------------------------------------- + [FieldOffset(16)] internal string TextContentField; + /// /// If the property equals , /// gets the content of the text frame. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string TextContent; + public string TextContent => TextContentField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Attribute // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal ulong AttributeEventHandlerIdField; + [FieldOffset(16)] internal string AttributeNameField; + [FieldOffset(24)] internal object AttributeValueField; + [FieldOffset(32)] internal string AttributeEventUpdatesAttributeNameField; + /// /// If the property equals /// gets the ID of the corresponding event handler, if any. /// - [FieldOffset(8)] public readonly ulong AttributeEventHandlerId; + public ulong AttributeEventHandlerId => AttributeEventHandlerIdField; /// /// If the property equals , /// gets the attribute name. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string AttributeName; + public string AttributeName => AttributeNameField; /// /// If the property equals , /// gets the attribute value. Otherwise, the value is undefined. /// - [FieldOffset(24)] public readonly object AttributeValue; + public object AttributeValue => AttributeValueField; /// /// If the property equals , @@ -121,80 +135,94 @@ namespace Microsoft.AspNetCore.Components.RenderTree /// can be updated to represent the UI state prior to executing the event handler. This is /// primarily used in two-way bindings. /// - [FieldOffset(32)] public readonly string AttributeEventUpdatesAttributeName; + public string AttributeEventUpdatesAttributeName => AttributeEventUpdatesAttributeNameField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Component // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal int ComponentSubtreeLengthField; + [FieldOffset(12)] internal int ComponentIdField; + [FieldOffset(16)] internal Type ComponentTypeField; + [FieldOffset(24)] internal ComponentState ComponentStateField; + [FieldOffset(32)] internal object ComponentKeyField; + /// /// 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. /// - [FieldOffset(8)] public readonly int ComponentSubtreeLength; + public int ComponentSubtreeLength => ComponentSubtreeLengthField; /// /// If the property equals , /// gets the child component instance identifier. /// - [FieldOffset(12)] public readonly int ComponentId; + public int ComponentId => ComponentIdField; /// /// If the property equals , /// gets the type of the child component. /// - [FieldOffset(16)] public readonly Type ComponentType; + public Type ComponentType => ComponentTypeField; /// /// If the property equals , /// gets the child component state object. Otherwise, the value is undefined. /// - [FieldOffset(24)] internal readonly ComponentState ComponentState; + internal ComponentState ComponentState => ComponentStateField; /// /// If the property equals , /// gets the component's diffing key, or null if none was specified. /// - [FieldOffset(32)] public readonly object ComponentKey; + public object ComponentKey => ComponentKeyField; /// /// If the property equals , /// gets the child component instance. Otherwise, the value is undefined. /// - public IComponent Component => ComponentState?.Component; + public IComponent Component => ComponentStateField?.Component; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Region // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal int RegionSubtreeLengthField; + /// /// 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. /// - [FieldOffset(8)] public readonly int RegionSubtreeLength; + public int RegionSubtreeLength => RegionSubtreeLengthField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.ElementReferenceCapture // -------------------------------------------------------------------------------- + [FieldOffset(16)] internal string ElementReferenceCaptureIdField; + [FieldOffset(24)] internal Action ElementReferenceCaptureActionField; + /// /// If the property equals , /// gets the ID of the reference capture. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string ElementReferenceCaptureId; + public string ElementReferenceCaptureId => ElementReferenceCaptureIdField; /// /// If the property equals , /// gets the action that writes the reference to its target. Otherwise, the value is undefined. /// - [FieldOffset(24)] public readonly Action ElementReferenceCaptureAction; + public Action ElementReferenceCaptureAction => ElementReferenceCaptureActionField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.ComponentReferenceCapture // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal int ComponentReferenceCaptureParentFrameIndexField; + [FieldOffset(16)] internal Action ComponentReferenceCaptureActionField; + /// /// If the property equals , /// gets the index of the parent frame representing the component being captured. Otherwise, the value is undefined. @@ -205,49 +233,51 @@ namespace Microsoft.AspNetCore.Components.RenderTree /// 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. /// - [FieldOffset(8)] public readonly int ComponentReferenceCaptureParentFrameIndex; + public int ComponentReferenceCaptureParentFrameIndex => ComponentReferenceCaptureParentFrameIndexField; /// /// If the property equals , /// gets the action that writes the reference to its target. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly Action ComponentReferenceCaptureAction; + public Action ComponentReferenceCaptureAction => ComponentReferenceCaptureActionField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Markup // -------------------------------------------------------------------------------- + [FieldOffset(16)] internal string MarkupContentField; + /// /// If the property equals , /// gets the content of the markup frame. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string MarkupContent; + public string MarkupContent => MarkupContentField; // Element constructor private RenderTreeFrame(int sequence, int elementSubtreeLength, string elementName, object elementKey) : this() { - Sequence = sequence; - FrameType = RenderTreeFrameType.Element; - ElementSubtreeLength = elementSubtreeLength; - ElementName = elementName; - ElementKey = elementKey; + SequenceField = sequence; + FrameTypeField = RenderTreeFrameType.Element; + ElementSubtreeLengthField = elementSubtreeLength; + ElementNameField = elementName; + ElementKeyField = elementKey; } // Component constructor private RenderTreeFrame(int sequence, int componentSubtreeLength, Type componentType, ComponentState componentState, object componentKey) : this() { - Sequence = sequence; - FrameType = RenderTreeFrameType.Component; - ComponentSubtreeLength = componentSubtreeLength; - ComponentType = componentType; - ComponentKey = componentKey; + SequenceField = sequence; + FrameTypeField = RenderTreeFrameType.Component; + ComponentSubtreeLengthField = componentSubtreeLength; + ComponentTypeField = componentType; + ComponentKeyField = componentKey; if (componentState != null) { - ComponentState = componentState; - ComponentId = componentState.ComponentId; + ComponentStateField = componentState; + ComponentIdField = componentState.ComponentId; } } @@ -255,25 +285,25 @@ namespace Microsoft.AspNetCore.Components.RenderTree private RenderTreeFrame(int sequence, int regionSubtreeLength) : this() { - Sequence = sequence; - FrameType = RenderTreeFrameType.Region; - RegionSubtreeLength = regionSubtreeLength; + SequenceField = sequence; + FrameTypeField = RenderTreeFrameType.Region; + RegionSubtreeLengthField = regionSubtreeLength; } // Text/markup constructor private RenderTreeFrame(int sequence, bool isMarkup, string textOrMarkup) : this() { - Sequence = sequence; + SequenceField = sequence; if (isMarkup) { - FrameType = RenderTreeFrameType.Markup; - MarkupContent = textOrMarkup; + FrameTypeField = RenderTreeFrameType.Markup; + MarkupContentField = textOrMarkup; } else { - FrameType = RenderTreeFrameType.Text; - TextContent = textOrMarkup; + FrameTypeField = RenderTreeFrameType.Text; + TextContentField = textOrMarkup; } } @@ -281,32 +311,32 @@ namespace Microsoft.AspNetCore.Components.RenderTree private RenderTreeFrame(int sequence, string attributeName, object attributeValue, ulong attributeEventHandlerId, string attributeEventUpdatesAttributeName) : this() { - FrameType = RenderTreeFrameType.Attribute; - Sequence = sequence; - AttributeName = attributeName; - AttributeValue = attributeValue; - AttributeEventHandlerId = attributeEventHandlerId; - AttributeEventUpdatesAttributeName = attributeEventUpdatesAttributeName; + FrameTypeField = RenderTreeFrameType.Attribute; + SequenceField = sequence; + AttributeNameField = attributeName; + AttributeValueField = attributeValue; + AttributeEventHandlerIdField = attributeEventHandlerId; + AttributeEventUpdatesAttributeNameField = attributeEventUpdatesAttributeName; } // Element reference capture constructor private RenderTreeFrame(int sequence, Action elementReferenceCaptureAction, string elementReferenceCaptureId) : this() { - FrameType = RenderTreeFrameType.ElementReferenceCapture; - Sequence = sequence; - ElementReferenceCaptureAction = elementReferenceCaptureAction; - ElementReferenceCaptureId = elementReferenceCaptureId; + FrameTypeField = RenderTreeFrameType.ElementReferenceCapture; + SequenceField = sequence; + ElementReferenceCaptureActionField = elementReferenceCaptureAction; + ElementReferenceCaptureIdField = elementReferenceCaptureId; } // Component reference capture constructor private RenderTreeFrame(int sequence, Action componentReferenceCaptureAction, int parentFrameIndex) : this() { - FrameType = RenderTreeFrameType.ComponentReferenceCapture; - Sequence = sequence; - ComponentReferenceCaptureAction = componentReferenceCaptureAction; - ComponentReferenceCaptureParentFrameIndex = parentFrameIndex; + FrameTypeField = RenderTreeFrameType.ComponentReferenceCapture; + SequenceField = sequence; + ComponentReferenceCaptureActionField = componentReferenceCaptureAction; + ComponentReferenceCaptureParentFrameIndexField = parentFrameIndex; } internal static RenderTreeFrame Element(int sequence, string elementName) @@ -337,61 +367,61 @@ namespace Microsoft.AspNetCore.Components.RenderTree => new RenderTreeFrame(sequence, componentReferenceCaptureAction: componentReferenceCaptureAction, parentFrameIndex: parentFrameIndex); internal RenderTreeFrame WithElementSubtreeLength(int elementSubtreeLength) - => new RenderTreeFrame(Sequence, elementSubtreeLength: elementSubtreeLength, ElementName, ElementKey); + => new RenderTreeFrame(SequenceField, elementSubtreeLength: elementSubtreeLength, ElementNameField, ElementKeyField); internal RenderTreeFrame WithComponentSubtreeLength(int componentSubtreeLength) - => new RenderTreeFrame(Sequence, componentSubtreeLength: componentSubtreeLength, ComponentType, ComponentState, ComponentKey); + => new RenderTreeFrame(SequenceField, componentSubtreeLength: componentSubtreeLength, ComponentTypeField, ComponentStateField, ComponentKeyField); internal RenderTreeFrame WithAttributeSequence(int sequence) - => new RenderTreeFrame(sequence, attributeName: AttributeName, AttributeValue, AttributeEventHandlerId, AttributeEventUpdatesAttributeName); + => new RenderTreeFrame(sequence, attributeName: AttributeNameField, AttributeValueField, AttributeEventHandlerIdField, AttributeEventUpdatesAttributeNameField); internal RenderTreeFrame WithComponent(ComponentState componentState) - => new RenderTreeFrame(Sequence, componentSubtreeLength: ComponentSubtreeLength, ComponentType, componentState, ComponentKey); + => new RenderTreeFrame(SequenceField, componentSubtreeLength: ComponentSubtreeLengthField, ComponentTypeField, componentState, ComponentKeyField); internal RenderTreeFrame WithAttributeEventHandlerId(ulong eventHandlerId) - => new RenderTreeFrame(Sequence, attributeName: AttributeName, AttributeValue, eventHandlerId, AttributeEventUpdatesAttributeName); + => new RenderTreeFrame(SequenceField, attributeName: AttributeNameField, AttributeValueField, eventHandlerId, AttributeEventUpdatesAttributeNameField); internal RenderTreeFrame WithAttributeValue(object attributeValue) - => new RenderTreeFrame(Sequence, attributeName: AttributeName, attributeValue, AttributeEventHandlerId, AttributeEventUpdatesAttributeName); + => new RenderTreeFrame(SequenceField, attributeName: AttributeNameField, attributeValue, AttributeEventHandlerIdField, AttributeEventUpdatesAttributeNameField); internal RenderTreeFrame WithAttributeEventUpdatesAttributeName(string attributeUpdatesAttributeName) - => new RenderTreeFrame(Sequence, attributeName: AttributeName, AttributeValue, AttributeEventHandlerId, attributeUpdatesAttributeName); + => new RenderTreeFrame(SequenceField, attributeName: AttributeNameField, AttributeValueField, AttributeEventHandlerIdField, attributeUpdatesAttributeName); internal RenderTreeFrame WithRegionSubtreeLength(int regionSubtreeLength) - => new RenderTreeFrame(Sequence, regionSubtreeLength: regionSubtreeLength); + => new RenderTreeFrame(SequenceField, regionSubtreeLength: regionSubtreeLength); internal RenderTreeFrame WithElementReferenceCaptureId(string elementReferenceCaptureId) - => new RenderTreeFrame(Sequence, elementReferenceCaptureAction: ElementReferenceCaptureAction, elementReferenceCaptureId); + => new RenderTreeFrame(SequenceField, elementReferenceCaptureAction: ElementReferenceCaptureActionField, elementReferenceCaptureId); internal RenderTreeFrame WithElementKey(object elementKey) - => new RenderTreeFrame(Sequence, elementSubtreeLength: ElementSubtreeLength, ElementName, elementKey); + => new RenderTreeFrame(SequenceField, elementSubtreeLength: ElementSubtreeLengthField, ElementNameField, elementKey); internal RenderTreeFrame WithComponentKey(object componentKey) - => new RenderTreeFrame(Sequence, componentSubtreeLength: ComponentSubtreeLength, ComponentType, ComponentState, componentKey); + => new RenderTreeFrame(SequenceField, componentSubtreeLength: ComponentSubtreeLengthField, ComponentTypeField, ComponentStateField, componentKey); /// // Just to be nice for debugging and unit tests. public override string ToString() { - switch (FrameType) + switch (FrameTypeField) { case RenderTreeFrameType.Attribute: return $"Attribute: (seq={Sequence}, id={AttributeEventHandlerId}) '{AttributeName}'='{AttributeValue}'"; case RenderTreeFrameType.Component: - return $"Component: (seq={Sequence}, key={ComponentKey ?? "(none)"}, len={ComponentSubtreeLength}) {ComponentType}"; + return $"Component: (seq={Sequence}, key={ComponentKeyField ?? "(none)"}, len={ComponentSubtreeLength}) {ComponentType}"; case RenderTreeFrameType.Element: - return $"Element: (seq={Sequence}, key={ElementKey ?? "(none)"}, len={ElementSubtreeLength}) {ElementName}"; + return $"Element: (seq={Sequence}, key={ElementKeyField ?? "(none)"}, len={ElementSubtreeLength}) {ElementName}"; case RenderTreeFrameType.Region: return $"Region: (seq={Sequence}, len={RegionSubtreeLength})"; case RenderTreeFrameType.Text: - return $"Text: (seq={Sequence}, len=n/a) {EscapeNewlines(TextContent)}"; + return $"Text: (seq={Sequence}, len=n/a) {EscapeNewlines(TextContentField)}"; case RenderTreeFrameType.Markup: - return $"Markup: (seq={Sequence}, len=n/a) {EscapeNewlines(TextContent)}"; + return $"Markup: (seq={Sequence}, len=n/a) {EscapeNewlines(TextContentField)}"; case RenderTreeFrameType.ElementReferenceCapture: return $"ElementReferenceCapture: (seq={Sequence}, len=n/a) {ElementReferenceCaptureAction}"; diff --git a/src/Components/Components/src/RenderTree/RenderTreeFrameArrayBuilder.cs b/src/Components/Components/src/RenderTree/RenderTreeFrameArrayBuilder.cs new file mode 100644 index 0000000000..817a0fd1a5 --- /dev/null +++ b/src/Components/Components/src/RenderTree/RenderTreeFrameArrayBuilder.cs @@ -0,0 +1,137 @@ +// 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 System; + +namespace Microsoft.AspNetCore.Components.RenderTree +{ + /// + /// A special subclass of that contains methods optimized for appending entries. + /// + internal class RenderTreeFrameArrayBuilder : ArrayBuilder + { + // You may notice a repeated block at the top of each of these methods. This is intentionally inlined into each + // method because doing so improves intensive rendering scenarios by around 1% (based on the FastGrid benchmark). + + public void AppendElement(int sequence, string elementName) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Element, + ElementNameField = elementName, + }; + } + + public void AppendText(int sequence, string textContent) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Text, + TextContentField = textContent, + }; + } + + public void AppendMarkup(int sequence, string markupContent) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Markup, + MarkupContentField = markupContent, + }; + } + + public void AppendAttribute(int sequence, string attributeName, object? attributeValue) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Attribute, + AttributeNameField = attributeName, + AttributeValueField = attributeValue, + }; + } + + public void AppendComponent(int sequence, Type componentType) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Component, + ComponentTypeField = componentType, + }; + } + + public void AppendElementReferenceCapture(int sequence, Action elementReferenceCaptureAction) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.ElementReferenceCapture, + ElementReferenceCaptureActionField = elementReferenceCaptureAction, + }; + } + + public void AppendComponentReferenceCapture(int sequence, Action componentReferenceCaptureAction, int parentFrameIndexValue) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.ComponentReferenceCapture, + ComponentReferenceCaptureActionField = componentReferenceCaptureAction, + ComponentReferenceCaptureParentFrameIndexField = parentFrameIndexValue, + }; + } + + public void AppendRegion(int sequence) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Region, + }; + } + } +} diff --git a/src/Components/Components/src/RenderTree/Renderer.cs b/src/Components/Components/src/RenderTree/Renderer.cs index 6a501d1e04..e61e46f65d 100644 --- a/src/Components/Components/src/RenderTree/Renderer.cs +++ b/src/Components/Components/src/RenderTree/Renderer.cs @@ -292,19 +292,20 @@ namespace Microsoft.AspNetCore.Components.RenderTree internal void InstantiateChildComponentOnFrame(ref RenderTreeFrame frame, int parentComponentId) { - if (frame.FrameType != RenderTreeFrameType.Component) + if (frame.FrameTypeField != RenderTreeFrameType.Component) { throw new ArgumentException($"The frame's {nameof(RenderTreeFrame.FrameType)} property must equal {RenderTreeFrameType.Component}", nameof(frame)); } - if (frame.ComponentState != null) + if (frame.ComponentStateField != null) { throw new ArgumentException($"The frame already has a non-null component instance", nameof(frame)); } - var newComponent = InstantiateComponent(frame.ComponentType); + var newComponent = InstantiateComponent(frame.ComponentTypeField); var newComponentState = AttachAndInitComponent(newComponent, parentComponentId); - frame = frame.WithComponent(newComponentState); + frame.ComponentStateField = newComponentState; + frame.ComponentIdField = newComponentState.ComponentId; } internal void AddToPendingTasks(Task task) @@ -342,7 +343,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree { var id = ++_lastEventHandlerId; - if (frame.AttributeValue is EventCallback callback) + if (frame.AttributeValueField is EventCallback callback) { // We hit this case when a EventCallback object is produced that needs an explicit receiver. // Common cases for this are "chained bind" or "chained event handler" when a component @@ -352,7 +353,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree // the receiver. _eventBindings.Add(id, callback); } - else if (frame.AttributeValue is MulticastDelegate @delegate) + else if (frame.AttributeValueField is MulticastDelegate @delegate) { // This is the common case for a delegate, where the receiver of the event // is the same as delegate.Target. In this case since the receiver is implicit we can @@ -364,7 +365,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree // NOTE: we do not to handle EventCallback here. EventCallback is only used when passing // a callback to a component, and never when used to attaching a DOM event handler. - frame = frame.WithAttributeEventHandlerId(id); + frame.AttributeEventHandlerIdField = id; } /// diff --git a/src/Components/Components/src/Rendering/RenderTreeBuilder.cs b/src/Components/Components/src/Rendering/RenderTreeBuilder.cs index 566265c988..c3d1edcd50 100644 --- a/src/Components/Components/src/Rendering/RenderTreeBuilder.cs +++ b/src/Components/Components/src/Rendering/RenderTreeBuilder.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Components.Rendering private readonly static object BoxedFalse = false; private readonly static string ComponentReferenceCaptureInvalidParentMessage = $"Component reference captures may only be added as children of frames of type {RenderTreeFrameType.Component}"; - private readonly ArrayBuilder _entries = new ArrayBuilder(); + private readonly RenderTreeFrameArrayBuilder _entries = new RenderTreeFrameArrayBuilder(); private readonly Stack _openElementIndices = new Stack(); private RenderTreeFrameType? _lastNonAttributeFrameType; private bool _hasSeenAddMultipleAttributes; @@ -53,7 +53,8 @@ namespace Microsoft.AspNetCore.Components.Rendering } _openElementIndices.Push(_entries.Count); - Append(RenderTreeFrame.Element(sequence, elementName)); + _entries.AppendElement(sequence, elementName); + _lastNonAttributeFrameType = RenderTreeFrameType.Element; } /// @@ -71,8 +72,7 @@ namespace Microsoft.AspNetCore.Components.Rendering ProcessDuplicateAttributes(first: indexOfEntryBeingClosed + 1); } - ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; - entry = entry.WithElementSubtreeLength(_entries.Count - indexOfEntryBeingClosed); + _entries.Buffer[indexOfEntryBeingClosed].ElementSubtreeLengthField = _entries.Count - indexOfEntryBeingClosed; } /// @@ -82,7 +82,8 @@ namespace Microsoft.AspNetCore.Components.Rendering /// Content for the new markup frame. public void AddMarkupContent(int sequence, string? markupContent) { - Append(RenderTreeFrame.Markup(sequence, markupContent ?? string.Empty)); + _entries.AppendMarkup(sequence, markupContent ?? string.Empty); + _lastNonAttributeFrameType = RenderTreeFrameType.Markup; } /// @@ -92,7 +93,8 @@ namespace Microsoft.AspNetCore.Components.Rendering /// Content for the new text frame. public void AddContent(int sequence, string? textContent) { - Append(RenderTreeFrame.Text(sequence, textContent ?? string.Empty)); + _entries.AppendText(sequence, textContent ?? string.Empty); + _lastNonAttributeFrameType = RenderTreeFrameType.Text; } /// @@ -161,7 +163,8 @@ namespace Microsoft.AspNetCore.Components.Rendering throw new InvalidOperationException($"Valueless attributes may only be added immediately after frames of type {RenderTreeFrameType.Element}"); } - Append(RenderTreeFrame.Attribute(sequence, name, BoxedTrue)); + + _entries.AppendAttribute(sequence, name, BoxedTrue); } /// @@ -181,13 +184,13 @@ namespace Microsoft.AspNetCore.Components.Rendering AssertCanAddAttribute(); if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { - Append(RenderTreeFrame.Attribute(sequence, name, value ? BoxedTrue : BoxedFalse)); + _entries.AppendAttribute(sequence, name, value ? BoxedTrue : BoxedFalse); } else if (value) { // Don't add 'false' attributes for elements. We want booleans to map to the presence // or absence of an attribute, and false => "False" which isn't falsy in js. - Append(RenderTreeFrame.Attribute(sequence, name, BoxedTrue)); + _entries.AppendAttribute(sequence, name, BoxedTrue); } else { @@ -212,7 +215,7 @@ namespace Microsoft.AspNetCore.Components.Rendering AssertCanAddAttribute(); if (value != null || _lastNonAttributeFrameType == RenderTreeFrameType.Component) { - Append(RenderTreeFrame.Attribute(sequence, name, value)); + _entries.AppendAttribute(sequence, name, value); } else { @@ -237,7 +240,7 @@ namespace Microsoft.AspNetCore.Components.Rendering AssertCanAddAttribute(); if (value != null || _lastNonAttributeFrameType == RenderTreeFrameType.Component) { - Append(RenderTreeFrame.Attribute(sequence, name, value)); + _entries.AppendAttribute(sequence, name, value); } else { @@ -268,19 +271,19 @@ namespace Microsoft.AspNetCore.Components.Rendering { // Since this is a component, we need to preserve the type of the EventCallback, so we have // to box. - Append(RenderTreeFrame.Attribute(sequence, name, (object)value)); + _entries.AppendAttribute(sequence, name, value); } else if (value.RequiresExplicitReceiver) { // If we need to preserve the receiver, we just box the EventCallback // so we can get it out on the other side. - Append(RenderTreeFrame.Attribute(sequence, name, (object)value)); + _entries.AppendAttribute(sequence, name, value); } else if (value.HasDelegate) { // In the common case the receiver is also the delegate's target, so we // just need to retain the delegate. This allows us to avoid an allocation. - Append(RenderTreeFrame.Attribute(sequence, name, value.Delegate)); + _entries.AppendAttribute(sequence, name, value.Delegate); } else { @@ -312,19 +315,19 @@ namespace Microsoft.AspNetCore.Components.Rendering { // Since this is a component, we need to preserve the type of the EventCallback, so we have // to box. - Append(RenderTreeFrame.Attribute(sequence, name, (object)value)); + _entries.AppendAttribute(sequence, name, value); } else if (value.RequiresExplicitReceiver) { // If we need to preserve the receiver - we convert this to an untyped EventCallback. We don't // need to preserve the type of an EventCallback when it's invoked from the DOM. - Append(RenderTreeFrame.Attribute(sequence, name, (object)value.AsUntyped())); + _entries.AppendAttribute(sequence, name, value.AsUntyped()); } else if (value.HasDelegate) { // In the common case the receiver is also the delegate's target, so we // just need to retain the delegate. This allows us to avoid an allocation. - Append(RenderTreeFrame.Attribute(sequence, name, value.Delegate)); + _entries.AppendAttribute(sequence, name, value.Delegate); } else { @@ -357,7 +360,7 @@ namespace Microsoft.AspNetCore.Components.Rendering { if (boolValue) { - Append(RenderTreeFrame.Attribute(sequence, name, BoxedTrue)); + _entries.AppendAttribute(sequence, name, BoxedTrue); } else { @@ -369,7 +372,7 @@ namespace Microsoft.AspNetCore.Components.Rendering { if (callbackValue.HasDelegate) { - Append(RenderTreeFrame.Attribute(sequence, name, callbackValue.UnpackForRenderTree())); + _entries.AppendAttribute(sequence, name, callbackValue.UnpackForRenderTree()); } else { @@ -378,18 +381,18 @@ namespace Microsoft.AspNetCore.Components.Rendering } else if (value is MulticastDelegate) { - Append(RenderTreeFrame.Attribute(sequence, name, value)); + _entries.AppendAttribute(sequence, name, value); } else { // The value is either a string, or should be treated as a string. - Append(RenderTreeFrame.Attribute(sequence, name, value.ToString())); + _entries.AppendAttribute(sequence, name, value.ToString()); } } else if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { // If this is a component, we always want to preserve the original type. - Append(RenderTreeFrame.Attribute(sequence, name, value)); + _entries.AppendAttribute(sequence, name, value); } else { @@ -408,15 +411,16 @@ namespace Microsoft.AspNetCore.Components.Rendering /// /// An integer that represents the position of the instruction in the source code. /// A holding the name and value of the attribute. - public void AddAttribute(int sequence, in RenderTreeFrame frame) + public void AddAttribute(int sequence, RenderTreeFrame frame) { - if (frame.FrameType != RenderTreeFrameType.Attribute) + if (frame.FrameTypeField != RenderTreeFrameType.Attribute) { throw new ArgumentException($"The {nameof(frame.FrameType)} must be {RenderTreeFrameType.Attribute}."); } AssertCanAddAttribute(); - Append(frame.WithAttributeSequence(sequence)); + frame.SequenceField = sequence; + _entries.Append(frame); } /// @@ -464,12 +468,12 @@ namespace Microsoft.AspNetCore.Components.Rendering } ref var prevFrame = ref _entries.Buffer[_entries.Count - 1]; - if (prevFrame.FrameType != RenderTreeFrameType.Attribute) + if (prevFrame.FrameTypeField != RenderTreeFrameType.Attribute) { - throw new InvalidOperationException($"Incorrect frame type: '{prevFrame.FrameType}'"); + throw new InvalidOperationException($"Incorrect frame type: '{prevFrame.FrameTypeField}'"); } - prevFrame = prevFrame.WithAttributeEventUpdatesAttributeName(updatesAttributeName); + prevFrame.AttributeEventUpdatesAttributeNameField = updatesAttributeName; } /// @@ -516,16 +520,16 @@ namespace Microsoft.AspNetCore.Components.Rendering var parentFrameIndexValue = parentFrameIndex.Value; ref var parentFrame = ref _entries.Buffer[parentFrameIndexValue]; - switch (parentFrame.FrameType) + switch (parentFrame.FrameTypeField) { case RenderTreeFrameType.Element: - parentFrame = parentFrame.WithElementKey(value); // It's a ref var, so this writes to the array + parentFrame.ElementKeyField = value; // It's a ref var, so this writes to the array break; case RenderTreeFrameType.Component: - parentFrame = parentFrame.WithComponentKey(value); // It's a ref var, so this writes to the array + parentFrame.ComponentKeyField = value; // It's a ref var, so this writes to the array break; default: - throw new InvalidOperationException($"Cannot set a key on a frame of type {parentFrame.FrameType}."); + throw new InvalidOperationException($"Cannot set a key on a frame of type {parentFrame.FrameTypeField}."); } } @@ -540,7 +544,8 @@ namespace Microsoft.AspNetCore.Components.Rendering } _openElementIndices.Push(_entries.Count); - Append(RenderTreeFrame.ChildComponent(sequence, componentType)); + _entries.AppendComponent(sequence, componentType); + _lastNonAttributeFrameType = RenderTreeFrameType.Component; } /// @@ -558,8 +563,7 @@ namespace Microsoft.AspNetCore.Components.Rendering ProcessDuplicateAttributes(first: indexOfEntryBeingClosed + 1); } - ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; - entry = entry.WithComponentSubtreeLength(_entries.Count - indexOfEntryBeingClosed); + _entries.Buffer[indexOfEntryBeingClosed].ComponentSubtreeLengthField = _entries.Count - indexOfEntryBeingClosed; } /// @@ -574,7 +578,8 @@ namespace Microsoft.AspNetCore.Components.Rendering throw new InvalidOperationException($"Element reference captures may only be added as children of frames of type {RenderTreeFrameType.Element}"); } - Append(RenderTreeFrame.ElementReferenceCapture(sequence, elementReferenceCaptureAction)); + _entries.AppendElementReferenceCapture(sequence, elementReferenceCaptureAction); + _lastNonAttributeFrameType = RenderTreeFrameType.ElementReferenceCapture; } /// @@ -591,12 +596,13 @@ namespace Microsoft.AspNetCore.Components.Rendering } var parentFrameIndexValue = parentFrameIndex.Value; - if (_entries.Buffer[parentFrameIndexValue].FrameType != RenderTreeFrameType.Component) + if (_entries.Buffer[parentFrameIndexValue].FrameTypeField != RenderTreeFrameType.Component) { throw new InvalidOperationException(ComponentReferenceCaptureInvalidParentMessage); } - Append(RenderTreeFrame.ComponentReferenceCapture(sequence, componentReferenceCaptureAction, parentFrameIndexValue)); + _entries.AppendComponentReferenceCapture(sequence, componentReferenceCaptureAction, parentFrameIndexValue); + _lastNonAttributeFrameType = RenderTreeFrameType.ComponentReferenceCapture; } /// @@ -614,7 +620,8 @@ namespace Microsoft.AspNetCore.Components.Rendering } _openElementIndices.Push(_entries.Count); - Append(RenderTreeFrame.Region(sequence)); + _entries.AppendRegion(sequence); + _lastNonAttributeFrameType = RenderTreeFrameType.Region; } /// @@ -624,8 +631,7 @@ namespace Microsoft.AspNetCore.Components.Rendering public void CloseRegion() { var indexOfEntryBeingClosed = _openElementIndices.Pop(); - ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; - entry = entry.WithRegionSubtreeLength(_entries.Count - indexOfEntryBeingClosed); + _entries.Buffer[indexOfEntryBeingClosed].RegionSubtreeLengthField = _entries.Count - indexOfEntryBeingClosed; } private void AssertCanAddAttribute() @@ -644,7 +650,7 @@ namespace Microsoft.AspNetCore.Components.Rendering { var parentIndex = GetCurrentParentFrameIndex(); return parentIndex.HasValue - ? _entries.Buffer[parentIndex.Value].FrameType + ? _entries.Buffer[parentIndex.Value].FrameTypeField : (RenderTreeFrameType?)null; } @@ -680,17 +686,6 @@ namespace Microsoft.AspNetCore.Components.Rendering public ArrayRange GetFrames() => _entries.ToRange(); - private void Append(in RenderTreeFrame frame) - { - var frameType = frame.FrameType; - _entries.Append(frame); - - if (frameType != RenderTreeFrameType.Attribute) - { - _lastNonAttributeFrameType = frame.FrameType; - } - } - // Internal for testing internal void ProcessDuplicateAttributes(int first) { @@ -704,7 +699,7 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var i = first; i <= last; i++) { - if (buffer[i].FrameType != RenderTreeFrameType.Attribute) + if (buffer[i].FrameTypeField != RenderTreeFrameType.Attribute) { last = i - 1; break; @@ -716,12 +711,12 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var i = last; i >= first; i--) { ref var frame = ref buffer[i]; - Debug.Assert(frame.FrameType == RenderTreeFrameType.Attribute, $"Frame type is {frame.FrameType} at {i}"); + Debug.Assert(frame.FrameTypeField == RenderTreeFrameType.Attribute, $"Frame type is {frame.FrameTypeField} at {i}"); - if (!seenAttributeNames.TryGetValue(frame.AttributeName, out var index)) + if (!seenAttributeNames.TryGetValue(frame.AttributeNameField, out var index)) { // This is the first time seeing this attribute name. Add to the dictionary and move on. - seenAttributeNames.Add(frame.AttributeName, i); + seenAttributeNames.Add(frame.AttributeNameField, i); } else if (index < i) { @@ -729,7 +724,7 @@ namespace Microsoft.AspNetCore.Components.Rendering // This is the case for a null event handler, or bool false value. // // We need to update our tracking, in case the attribute appeared 3 or more times. - seenAttributeNames[frame.AttributeName] = i; + seenAttributeNames[frame.AttributeNameField] = i; } else if (index > i) { @@ -760,7 +755,7 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var i = first; i < _entries.Count; i++) { ref var frame = ref buffer[i]; - if (frame.FrameType != RenderTreeFrameType.None) + if (frame.FrameTypeField != RenderTreeFrameType.None) { buffer[offset++] = frame; } diff --git a/src/Components/Components/src/Rendering/RenderTreeUpdater.cs b/src/Components/Components/src/Rendering/RenderTreeUpdater.cs index 139b3e09d7..2f5db8b146 100644 --- a/src/Components/Components/src/Rendering/RenderTreeUpdater.cs +++ b/src/Components/Components/src/Rendering/RenderTreeUpdater.cs @@ -24,21 +24,21 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var frameIndex = 0; frameIndex < framesLength; frameIndex++) { ref var frame = ref framesArray[frameIndex]; - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Element: closestElementFrameIndex = frameIndex; break; case RenderTreeFrameType.Attribute: - if (frame.AttributeEventHandlerId == eventHandlerId) + if (frame.AttributeEventHandlerIdField == eventHandlerId) { - if (!string.IsNullOrEmpty(frame.AttributeEventUpdatesAttributeName)) + if (!string.IsNullOrEmpty(frame.AttributeEventUpdatesAttributeNameField)) { UpdateFrameToMatchClientState( renderTreeBuilder, framesArray, closestElementFrameIndex, - frame.AttributeEventUpdatesAttributeName, + frame.AttributeEventUpdatesAttributeNameField, newFieldValue); } @@ -55,20 +55,20 @@ namespace Microsoft.AspNetCore.Components.Rendering { // Find the attribute frame ref var elementFrame = ref framesArray[elementFrameIndex]; - var elementSubtreeEndIndexExcl = elementFrameIndex + elementFrame.ElementSubtreeLength; + var elementSubtreeEndIndexExcl = elementFrameIndex + elementFrame.ElementSubtreeLengthField; for (var attributeFrameIndex = elementFrameIndex + 1; attributeFrameIndex < elementSubtreeEndIndexExcl; attributeFrameIndex++) { ref var attributeFrame = ref framesArray[attributeFrameIndex]; - if (attributeFrame.FrameType != RenderTreeFrameType.Attribute) + if (attributeFrame.FrameTypeField != RenderTreeFrameType.Attribute) { // We're now looking at the descendants not attributes, so the search is over break; } - if (attributeFrame.AttributeName == attributeName) + if (attributeFrame.AttributeNameField == attributeName) { // Found an existing attribute we can update - attributeFrame = attributeFrame.WithAttributeValue(attributeValue); + attributeFrame.AttributeValueField = attributeValue; return; } } @@ -84,25 +84,25 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var otherFrameIndex = elementFrameIndex; otherFrameIndex >= 0; otherFrameIndex--) { ref var otherFrame = ref framesArray[otherFrameIndex]; - switch (otherFrame.FrameType) + switch (otherFrame.FrameTypeField) { case RenderTreeFrameType.Element: { - var otherFrameSubtreeLength = otherFrame.ElementSubtreeLength; + var otherFrameSubtreeLength = otherFrame.ElementSubtreeLengthField; var otherFrameEndIndexExcl = otherFrameIndex + otherFrameSubtreeLength; if (otherFrameEndIndexExcl > elementFrameIndex) // i.e., contains the element we're inserting into { - otherFrame = otherFrame.WithElementSubtreeLength(otherFrameSubtreeLength + 1); + otherFrame.ElementSubtreeLengthField = otherFrameSubtreeLength + 1; } break; } case RenderTreeFrameType.Region: { - var otherFrameSubtreeLength = otherFrame.RegionSubtreeLength; + var otherFrameSubtreeLength = otherFrame.RegionSubtreeLengthField; var otherFrameEndIndexExcl = otherFrameIndex + otherFrameSubtreeLength; if (otherFrameEndIndexExcl > elementFrameIndex) // i.e., contains the element we're inserting into { - otherFrame = otherFrame.WithRegionSubtreeLength(otherFrameSubtreeLength + 1); + otherFrame.RegionSubtreeLengthField = otherFrameSubtreeLength + 1; } break; } diff --git a/src/Components/Shared/src/ArrayBuilder.cs b/src/Components/Shared/src/ArrayBuilder.cs index 8efa1c7baf..afb7b01987 100644 --- a/src/Components/Shared/src/ArrayBuilder.cs +++ b/src/Components/Shared/src/ArrayBuilder.cs @@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree internal class ArrayBuilder : IDisposable { // The following fields are memory mapped to the WASM client. Do not re-order or use auto-properties. - private T[] _items; - private int _itemsInUse; + protected T[] _items; + protected int _itemsInUse; private static readonly T[] Empty = Array.Empty(); private readonly ArrayPool _arrayPool; @@ -139,7 +139,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree ThrowIndexOutOfBoundsException(); } - // Same expansion logic as elsewhere if (_itemsInUse == _items.Length) { GrowBuffer(_items.Length * 2); @@ -162,7 +161,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree _itemsInUse = 0; } - private void GrowBuffer(int desiredCapacity) + protected void GrowBuffer(int desiredCapacity) { // When we dispose, we set the count back to zero and return the array. // From 7e11c3c2644330d6158c308ab6c5e53dbb8ef603 Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Mon, 3 Aug 2020 21:01:16 +0100 Subject: [PATCH 096/106] Cache parameter writer lookups (#24536) --- .../src/Reflection/ComponentProperties.cs | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/src/Components/Components/src/Reflection/ComponentProperties.cs b/src/Components/Components/src/Reflection/ComponentProperties.cs index e47c53eeb9..1b6e43d7ba 100644 --- a/src/Components/Components/src/Reflection/ComponentProperties.cs +++ b/src/Components/Components/src/Reflection/ComponentProperties.cs @@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Components.Reflection foreach (var parameter in parameters) { var parameterName = parameter.Name; - if (!writers.WritersByName.TryGetValue(parameterName, out var writer)) + if (!writers.TryGetValue(parameterName, out var writer)) { // Case 1: There is nowhere to put this value. ThrowForUnknownIncomingParameterName(targetType, parameterName); @@ -82,7 +82,7 @@ namespace Microsoft.AspNetCore.Components.Reflection isCaptureUnmatchedValuesParameterSetExplicitly = true; } - if (writers.WritersByName.TryGetValue(parameterName, out var writer)) + if (writers.TryGetValue(parameterName, out var writer)) { if (!writer.Cascading && parameter.Cascading) { @@ -245,9 +245,15 @@ namespace Microsoft.AspNetCore.Components.Reflection private class WritersForType { + private const int MaxCachedWriterLookups = 100; + private readonly Dictionary _underlyingWriters; + private readonly ConcurrentDictionary _referenceEqualityWritersCache; + public WritersForType(Type targetType) { - WritersByName = new Dictionary(StringComparer.OrdinalIgnoreCase); + _underlyingWriters = new Dictionary(StringComparer.OrdinalIgnoreCase); + _referenceEqualityWritersCache = new ConcurrentDictionary(ReferenceEqualityComparer.Instance); + foreach (var propertyInfo in GetCandidateBindableProperties(targetType)) { var parameterAttribute = propertyInfo.GetCustomAttribute(); @@ -267,14 +273,14 @@ namespace Microsoft.AspNetCore.Components.Reflection var propertySetter = MemberAssignment.CreatePropertySetter(targetType, propertyInfo, cascading: cascadingParameterAttribute != null); - if (WritersByName.ContainsKey(propertyName)) + if (_underlyingWriters.ContainsKey(propertyName)) { throw new InvalidOperationException( $"The type '{targetType.FullName}' declares more than one parameter matching the " + $"name '{propertyName.ToLowerInvariant()}'. Parameter names are case-insensitive and must be unique."); } - WritersByName.Add(propertyName, propertySetter); + _underlyingWriters.Add(propertyName, propertySetter); if (parameterAttribute != null && parameterAttribute.CaptureUnmatchedValues) { @@ -298,11 +304,38 @@ namespace Microsoft.AspNetCore.Components.Reflection } } - public Dictionary WritersByName { get; } - public IPropertySetter? CaptureUnmatchedValuesWriter { get; } public string? CaptureUnmatchedValuesPropertyName { get; } + + public bool TryGetValue(string parameterName, [MaybeNullWhen(false)] out IPropertySetter writer) + { + // In intensive parameter-passing scenarios, one of the most expensive things we do is the + // lookup from parameterName to writer. Pre-5.0 that was because of the string hashing. + // To optimize this, we now have a cache in front of the lookup which is keyed by parameterName's + // object identity (not its string hash). So in most cases we can resolve the lookup without + // having to hash the string. We only fall back on hashing the string if the cache gets full, + // which would only be in very unusual situations because components don't typically have many + // parameters, and the parameterName strings usually come from compile-time constants. + if (!_referenceEqualityWritersCache.TryGetValue(parameterName, out writer)) + { + _underlyingWriters.TryGetValue(parameterName, out writer); + + // Note that because we're not locking around this, it's possible we might + // actually write more than MaxCachedWriterLookups entries due to concurrent + // writes. However this won't cause any problems. + // Also note that the value we're caching might be 'null'. It's valid to cache + // lookup misses just as much as hits, since then we can more quickly identify + // incoming values that don't have a corresponding writer and thus will end up + // being passed as catch-all parameter values. + if (_referenceEqualityWritersCache.Count < MaxCachedWriterLookups) + { + _referenceEqualityWritersCache.TryAdd(parameterName, writer); + } + } + + return writer != null; + } } } } From 0335ac60a6e81645e619cc8cb72355e34c3e8b7c Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Mon, 3 Aug 2020 13:40:29 -0700 Subject: [PATCH 097/106] Check completed task in circuit termination tests (#24450) * Check completed task in circuit termination tests * Remove extraneous whitespace * Update CircuitGracefulTerminationTests.cs --- .../ServerExecutionTests/CircuitGracefulTerminationTests.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs b/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs index 8183142196..69c20cb970 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs @@ -83,9 +83,10 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests { // Arrange & Act Browser.Navigate().GoToUrl("about:blank"); - await Task.WhenAny(Task.Delay(10000), GracefulDisconnectCompletionSource.Task); + var task = await Task.WhenAny(Task.Delay(10000), GracefulDisconnectCompletionSource.Task); // Assert + Assert.Equal(GracefulDisconnectCompletionSource.Task, task); Assert.Contains((Extensions.Logging.LogLevel.Debug, "CircuitTerminatedGracefully"), Messages); Assert.Contains((Extensions.Logging.LogLevel.Debug, "CircuitDisconnectedPermanently"), Messages); } From 1885af963432ee7d66a80448cc2c24fa95c25d24 Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Mon, 3 Aug 2020 21:42:44 +0100 Subject: [PATCH 098/106] Add console runner for measuring Blazor perf on desktop interpreter (#24469) --- AspNetCore.sln | 15 ++++++ src/Components/ComponentsNoDeps.slnf | 1 + .../ConsoleHost/ConsoleHostRenderer.cs | 41 +++++++++++++++ .../ConsoleHost/NullDispatcher.cs | 30 +++++++++++ .../Wasm.Performance/ConsoleHost/Program.cs | 27 ++++++++++ .../ComponentRenderingScenarioBase.cs | 50 +++++++++++++++++++ .../ConsoleHost/Scenarios/GridScenario.cs | 39 +++++++++++++++ .../Wasm.Performance.ConsoleHost.csproj | 15 ++++++ .../TestApp/BenchmarkEvent.cs | 4 +- .../TestApp/Pages/GridRendering.razor | 20 ++++---- .../Shared/ComplexTable/TableComponent.razor | 19 ++----- .../Shared/PlainTable/TableComponent.razor | 19 ++----- 12 files changed, 237 insertions(+), 43 deletions(-) create mode 100644 src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/ConsoleHostRenderer.cs create mode 100644 src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/NullDispatcher.cs create mode 100644 src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Program.cs create mode 100644 src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Scenarios/ComponentRenderingScenarioBase.cs create mode 100644 src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Scenarios/GridScenario.cs create mode 100644 src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Wasm.Performance.ConsoleHost.csproj diff --git a/AspNetCore.sln b/AspNetCore.sln index d81f7566e4..989394fa94 100644 --- a/AspNetCore.sln +++ b/AspNetCore.sln @@ -1455,6 +1455,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropClient", "src\Grpc\t EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropWebsite", "src\Grpc\test\testassets\InteropWebsite\InteropWebsite.csproj", "{19189670-E206-471D-94F8-7D3D545E5020}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wasm.Performance.ConsoleHost", "src\Components\benchmarkapps\Wasm.Performance\ConsoleHost\Wasm.Performance.ConsoleHost.csproj", "{E9408723-E6A9-4715-B906-3B25B0238ABA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -6889,6 +6891,18 @@ Global {19189670-E206-471D-94F8-7D3D545E5020}.Release|x64.Build.0 = Release|Any CPU {19189670-E206-471D-94F8-7D3D545E5020}.Release|x86.ActiveCfg = Release|Any CPU {19189670-E206-471D-94F8-7D3D545E5020}.Release|x86.Build.0 = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x64.ActiveCfg = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x64.Build.0 = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x86.ActiveCfg = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x86.Build.0 = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|Any CPU.Build.0 = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x64.ActiveCfg = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x64.Build.0 = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x86.ActiveCfg = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -7618,6 +7632,7 @@ Global {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} = {E763DA15-8F4E-446C-99B8-309053C75598} {C3A0F425-669F-46A8-893F-CF449A6DAE56} = {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} {19189670-E206-471D-94F8-7D3D545E5020} = {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} + {E9408723-E6A9-4715-B906-3B25B0238ABA} = {6276A9A0-791B-49C1-AD8F-50AC47CDC196} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F} diff --git a/src/Components/ComponentsNoDeps.slnf b/src/Components/ComponentsNoDeps.slnf index dd08970d02..e9e921484d 100644 --- a/src/Components/ComponentsNoDeps.slnf +++ b/src/Components/ComponentsNoDeps.slnf @@ -37,6 +37,7 @@ "src\\Components\\WebAssembly\\Sdk\\integrationtests\\Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj", "src\\Components\\Web\\src\\Microsoft.AspNetCore.Components.Web.csproj", "src\\Components\\Web\\test\\Microsoft.AspNetCore.Components.Web.Tests.csproj", + "src\\Components\\benchmarkapps\\Wasm.Performance\\ConsoleHost\\Wasm.Performance.ConsoleHost.csproj", "src\\Components\\benchmarkapps\\Wasm.Performance\\Driver\\Wasm.Performance.Driver.csproj", "src\\Components\\benchmarkapps\\Wasm.Performance\\TestApp\\Wasm.Performance.TestApp.csproj", "src\\Components\\test\\E2ETest\\Microsoft.AspNetCore.Components.E2ETests.csproj", diff --git a/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/ConsoleHostRenderer.cs b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/ConsoleHostRenderer.cs new file mode 100644 index 0000000000..f29a516b1a --- /dev/null +++ b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/ConsoleHostRenderer.cs @@ -0,0 +1,41 @@ +// 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 System; +using System.Runtime.ExceptionServices; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.Extensions.Logging; + +namespace Wasm.Performance.ConsoleHost +{ + internal class ConsoleHostRenderer : Renderer + { + public ConsoleHostRenderer(IServiceProvider serviceProvider, ILoggerFactory loggerFactory) + : base(serviceProvider, loggerFactory) + { + } + + public override Dispatcher Dispatcher { get; } = new NullDispatcher(); + + protected override void HandleException(Exception exception) + { + ExceptionDispatchInfo.Capture(exception).Throw(); + } + + protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) + { + // ConsoleHost is only for profiling the .NET side of execution. + // There isn't a real display to update. + return Task.CompletedTask; + } + + // Expose some protected APIs publicly + public new int AssignRootComponentId(IComponent component) + => base.AssignRootComponentId(component); + + public new Task RenderRootComponentAsync(int componentId) + => base.RenderRootComponentAsync(componentId); + } +} diff --git a/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/NullDispatcher.cs b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/NullDispatcher.cs new file mode 100644 index 0000000000..bf600ab8f0 --- /dev/null +++ b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/NullDispatcher.cs @@ -0,0 +1,30 @@ +// 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 System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; + +namespace Wasm.Performance.ConsoleHost +{ + internal class NullDispatcher : Dispatcher + { + public override bool CheckAccess() + => true; + + public override Task InvokeAsync(Action workItem) + { + workItem(); + return Task.CompletedTask; + } + + public override Task InvokeAsync(Func workItem) + => workItem(); + + public override Task InvokeAsync(Func workItem) + => Task.FromResult(workItem()); + + public override Task InvokeAsync(Func> workItem) + => workItem(); + } +} diff --git a/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Program.cs b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Program.cs new file mode 100644 index 0000000000..c32f16eb3a --- /dev/null +++ b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Program.cs @@ -0,0 +1,27 @@ +// 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.Extensions.CommandLineUtils; +using Wasm.Performance.ConsoleHost.Scenarios; + +namespace Wasm.Performance.ConsoleHost +{ + internal class Program : CommandLineApplication + { + static void Main(string[] args) + { + new Program().Execute(args); + } + + public Program() + { + OnExecute(() => + { + ShowHelp(); + return 1; + }); + + Commands.Add(new GridScenario()); + } + } +} diff --git a/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Scenarios/ComponentRenderingScenarioBase.cs b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Scenarios/ComponentRenderingScenarioBase.cs new file mode 100644 index 0000000000..bf5cbc5d83 --- /dev/null +++ b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Scenarios/ComponentRenderingScenarioBase.cs @@ -0,0 +1,50 @@ +// 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 System; +using System.Threading.Tasks; +using Microsoft.Extensions.CommandLineUtils; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Wasm.Performance.ConsoleHost.Scenarios +{ + internal abstract class ComponentRenderingScenarioBase : CommandLineApplication + { + protected ComponentRenderingScenarioBase(string name) + { + Name = name; + + var cyclesOption = new CommandOption("--cycles", CommandOptionType.SingleValue); + Options.Add(cyclesOption); + + OnExecute(() => + { + var numCycles = cyclesOption.HasValue() ? int.Parse(cyclesOption.Value()) : 1; + + var serviceCollection = new ServiceCollection(); + PopulateServiceCollection(serviceCollection); + var serviceProvider = serviceCollection.BuildServiceProvider(); + + var loggerFactory = serviceProvider.GetRequiredService(); + var renderer = new ConsoleHostRenderer(serviceProvider, loggerFactory); + + var startTime = DateTime.Now; + ExecuteAsync(renderer, numCycles).Wait(); + + var duration = DateTime.Now - startTime; + var durationPerCycle = (duration / numCycles).TotalMilliseconds; + Console.WriteLine($"{Name}: {durationPerCycle:F1}ms per cycle (cycles tested: {numCycles})"); + + return 0; + }); + } + + protected virtual void PopulateServiceCollection(IServiceCollection serviceCollection) + { + serviceCollection.AddLogging(); + } + + protected abstract Task ExecuteAsync(ConsoleHostRenderer renderer, int numCycles); + } +} diff --git a/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Scenarios/GridScenario.cs b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Scenarios/GridScenario.cs new file mode 100644 index 0000000000..b40f09b96a --- /dev/null +++ b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Scenarios/GridScenario.cs @@ -0,0 +1,39 @@ +// 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 System; +using System.Threading.Tasks; +using Microsoft.Extensions.CommandLineUtils; +using Wasm.Performance.TestApp.Pages; + +namespace Wasm.Performance.ConsoleHost.Scenarios +{ + internal class GridScenario : ComponentRenderingScenarioBase + { + readonly CommandOption _gridTypeOption = new CommandOption("--gridtype", CommandOptionType.SingleValue); + + public GridScenario() : base("grid") + { + Options.Add(_gridTypeOption); + } + + protected override async Task ExecuteAsync(ConsoleHostRenderer renderer, int numCycles) + { + var gridType = _gridTypeOption.HasValue() + ? (GridRendering.RenderMode)Enum.Parse(typeof(GridRendering.RenderMode), _gridTypeOption.Value(), true) + : GridRendering.RenderMode.FastGrid; + + for (var i = 0; i < numCycles; i++) + { + var hostPage = new GridRendering { SelectedRenderMode = gridType }; + hostPage.Show(); + + var componentId = renderer.AssignRootComponentId(hostPage); + await renderer.RenderRootComponentAsync(componentId); + + hostPage.ChangePage(); + await renderer.RenderRootComponentAsync(componentId); + } + } + } +} diff --git a/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Wasm.Performance.ConsoleHost.csproj b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Wasm.Performance.ConsoleHost.csproj new file mode 100644 index 0000000000..e92ce06f16 --- /dev/null +++ b/src/Components/benchmarkapps/Wasm.Performance/ConsoleHost/Wasm.Performance.ConsoleHost.csproj @@ -0,0 +1,15 @@ + + + + Exe + $(DefaultNetCoreTargetFramework) + false + false + + + + + + + + diff --git a/src/Components/benchmarkapps/Wasm.Performance/TestApp/BenchmarkEvent.cs b/src/Components/benchmarkapps/Wasm.Performance/TestApp/BenchmarkEvent.cs index 81cd361dce..769f99eda4 100644 --- a/src/Components/benchmarkapps/Wasm.Performance/TestApp/BenchmarkEvent.cs +++ b/src/Components/benchmarkapps/Wasm.Performance/TestApp/BenchmarkEvent.cs @@ -9,7 +9,9 @@ namespace Wasm.Performance.TestApp { public static void Send(IJSRuntime jsRuntime, string name) { - ((IJSInProcessRuntime)jsRuntime).Invoke( + // jsRuntime will be null if we're in an environment without any + // JS runtime, e.g., the console runner + ((IJSInProcessRuntime)jsRuntime)?.Invoke( "receiveBenchmarkEvent", name); } diff --git a/src/Components/benchmarkapps/Wasm.Performance/TestApp/Pages/GridRendering.razor b/src/Components/benchmarkapps/Wasm.Performance/TestApp/Pages/GridRendering.razor index 4fa366f44c..c7dc813708 100644 --- a/src/Components/benchmarkapps/Wasm.Performance/TestApp/Pages/GridRendering.razor +++ b/src/Components/benchmarkapps/Wasm.Performance/TestApp/Pages/GridRendering.razor @@ -1,11 +1,11 @@ -@page "/gridrendering" +@page "/gridrendering" @inject IJSRuntime JSRuntime @using Wasm.Performance.TestApp.Shared.FastGrid

20 x 200 Grid

- @@ -23,7 +23,7 @@ {

(No data assigned)

} -else if (selectedRenderMode == RenderMode.FastGrid) +else if (SelectedRenderMode == RenderMode.FastGrid) {

FastGrid represents a minimal, optimized implementation of a grid.

@@ -50,13 +50,13 @@ else if (selectedRenderMode == RenderMode.FastGrid) @context.Summary } -else if (selectedRenderMode == RenderMode.PlainTable) +else if (SelectedRenderMode == RenderMode.PlainTable) {

PlainTable represents a minimal but not optimized implementation of a grid.

} -else if (selectedRenderMode == RenderMode.ComplexTable) +else if (SelectedRenderMode == RenderMode.ComplexTable) {

ComplexTable represents a maximal, not optimized implementation of a grid, using a wide range of Blazor features at once.

@@ -64,9 +64,9 @@ else if (selectedRenderMode == RenderMode.ComplexTable) } @code { - enum RenderMode { PlainTable, ComplexTable, FastGrid } + public enum RenderMode { PlainTable, ComplexTable, FastGrid } - private RenderMode selectedRenderMode = RenderMode.FastGrid; + public RenderMode SelectedRenderMode { get; set; } = RenderMode.FastGrid; private WeatherForecast[] forecasts; public List Columns { get; set; } = new List @@ -89,17 +89,17 @@ else if (selectedRenderMode == RenderMode.ComplexTable) TemperatureC = index, }; - void Show() + public void Show() { forecasts = staticSampleDataPage1; } - void Hide() + public void Hide() { forecasts = null; } - void ChangePage() + public void ChangePage() { forecasts = (forecasts == staticSampleDataPage1) ? staticSampleDataPage2 : staticSampleDataPage1; } diff --git a/src/Components/benchmarkapps/Wasm.Performance/TestApp/Shared/ComplexTable/TableComponent.razor b/src/Components/benchmarkapps/Wasm.Performance/TestApp/Shared/ComplexTable/TableComponent.razor index 70c95ec905..eccb07f4dc 100644 --- a/src/Components/benchmarkapps/Wasm.Performance/TestApp/Shared/ComplexTable/TableComponent.razor +++ b/src/Components/benchmarkapps/Wasm.Performance/TestApp/Shared/ComplexTable/TableComponent.razor @@ -1,4 +1,4 @@ -@using WeatherForecast = Pages.GridRendering.WeatherForecast +@using WeatherForecast = Pages.GridRendering.WeatherForecast @@ -13,7 +13,7 @@ + OnClick="@HandleClickEvent">
@@ -26,21 +26,8 @@ [Parameter] public List Columns { get; set; } - DateTime t1; - DateTime t2; - Task RefreshComponent(int index) + Task HandleClickEvent(int index) { - t1 = DateTime.Now; - StateHasChanged(); return Task.CompletedTask; } - protected override Task OnAfterRenderAsync(bool firstRender) - { - if (!firstRender) - { - t2 = DateTime.Now; - Console.WriteLine("Refresh Time " + (t2 - t1).TotalMilliseconds); - } - return base.OnAfterRenderAsync(firstRender); - } } diff --git a/src/Components/benchmarkapps/Wasm.Performance/TestApp/Shared/PlainTable/TableComponent.razor b/src/Components/benchmarkapps/Wasm.Performance/TestApp/Shared/PlainTable/TableComponent.razor index ea75beebc7..e22bab77b9 100644 --- a/src/Components/benchmarkapps/Wasm.Performance/TestApp/Shared/PlainTable/TableComponent.razor +++ b/src/Components/benchmarkapps/Wasm.Performance/TestApp/Shared/PlainTable/TableComponent.razor @@ -1,4 +1,4 @@ -@using WeatherForecast = Pages.GridRendering.WeatherForecast +@using WeatherForecast = Pages.GridRendering.WeatherForecast @@ -12,7 +12,7 @@ + OnClick="@HandleClickEvent">
@@ -24,21 +24,8 @@ [Parameter] public List Columns { get; set; } - DateTime t1; - DateTime t2; - Task RefreshComponent(int index) + Task HandleClickEvent(int index) { - t1 = DateTime.Now; - StateHasChanged(); return Task.CompletedTask; } - protected override Task OnAfterRenderAsync(bool firstRender) - { - if (!firstRender) - { - t2 = DateTime.Now; - Console.WriteLine("Refresh Time " + (t2 - t1).TotalMilliseconds); - } - return base.OnAfterRenderAsync(firstRender); - } } From e31998c94b3d05f89bd39d51ecbe8a60a0576dbd Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 3 Aug 2020 13:46:09 -0700 Subject: [PATCH 099/106] Update Blazor Server survey link for .NET 5 (#24507) --- .../content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor index e9706c83da..66edfb87a0 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor @@ -4,7 +4,7 @@ Please take our - brief survey + brief survey and tell us what you think. From 1f5149a663da5fcf36586f1f708a62c2cbb7bbd8 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Mon, 3 Aug 2020 14:14:42 -0700 Subject: [PATCH 100/106] Implement CopyToAsync in the FileBufferingReadStream (#24499) * Implement CopyToAsync in the FileBufferingReadStream - overrride Span and Memory overloads and implement array overloads in terms of those overloads. - Implemented CopyToAsync (but not CopyTo) - Added tests Fixes #24032 --- .../src/FileBufferingReadStream.cs | 85 ++++++++--- .../test/FileBufferingReadStreamTests.cs | 135 +++++++++++++++++- .../Formatters/JsonInputFormatterTestBase.cs | 27 +++- ...ataContractSerializerInputFormatterTest.cs | 28 +++- .../test/XmlSerializerInputFormatterTest.cs | 27 +++- 5 files changed, 268 insertions(+), 34 deletions(-) diff --git a/src/Http/WebUtilities/src/FileBufferingReadStream.cs b/src/Http/WebUtilities/src/FileBufferingReadStream.cs index 66c53f6951..f03fd29edd 100644 --- a/src/Http/WebUtilities/src/FileBufferingReadStream.cs +++ b/src/Http/WebUtilities/src/FileBufferingReadStream.cs @@ -208,39 +208,41 @@ namespace Microsoft.AspNetCore.WebUtilities FileOptions.Asynchronous | FileOptions.DeleteOnClose | FileOptions.SequentialScan); } - public override int Read(byte[] buffer, int offset, int count) + public override int Read(Span buffer) { ThrowIfDisposed(); + if (_buffer.Position < _buffer.Length || _completelyBuffered) { // Just read from the buffer - return _buffer.Read(buffer, offset, (int)Math.Min(count, _buffer.Length - _buffer.Position)); + return _buffer.Read(buffer); } - int read = _inner.Read(buffer, offset, count); + var read = _inner.Read(buffer); if (_bufferLimit.HasValue && _bufferLimit - read < _buffer.Length) { - Dispose(); throw new IOException("Buffer limit exceeded."); } - if (_inMemory && _buffer.Length + read > _memoryThreshold) + // We're about to go over the threshold, switch to a file + if (_inMemory && _memoryThreshold - read < _buffer.Length) { _inMemory = false; var oldBuffer = _buffer; _buffer = CreateTempFile(); if (_rentedBuffer == null) { + // Copy data from the in memory buffer to the file stream using a pooled buffer oldBuffer.Position = 0; var rentedBuffer = _bytePool.Rent(Math.Min((int)oldBuffer.Length, _maxRentedBufferSize)); try { - var copyRead = oldBuffer.Read(rentedBuffer, 0, rentedBuffer.Length); + var copyRead = oldBuffer.Read(rentedBuffer); while (copyRead > 0) { - _buffer.Write(rentedBuffer, 0, copyRead); - copyRead = oldBuffer.Read(rentedBuffer, 0, rentedBuffer.Length); + _buffer.Write(rentedBuffer.AsSpan(0, copyRead)); + copyRead = oldBuffer.Read(rentedBuffer); } } finally @@ -250,7 +252,7 @@ namespace Microsoft.AspNetCore.WebUtilities } else { - _buffer.Write(_rentedBuffer, 0, (int)oldBuffer.Length); + _buffer.Write(_rentedBuffer.AsSpan(0, (int)oldBuffer.Length)); _bytePool.Return(_rentedBuffer); _rentedBuffer = null; } @@ -258,7 +260,7 @@ namespace Microsoft.AspNetCore.WebUtilities if (read > 0) { - _buffer.Write(buffer, offset, read); + _buffer.Write(buffer.Slice(0, read)); } else { @@ -268,24 +270,34 @@ namespace Microsoft.AspNetCore.WebUtilities return read; } - public override async Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + public override int Read(byte[] buffer, int offset, int count) + { + return Read(buffer.AsSpan(offset, count)); + } + + public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + return ReadAsync(buffer.AsMemory(offset, count), cancellationToken).AsTask(); + } + + public override async ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken = default) { ThrowIfDisposed(); + if (_buffer.Position < _buffer.Length || _completelyBuffered) { // Just read from the buffer - return await _buffer.ReadAsync(buffer, offset, (int)Math.Min(count, _buffer.Length - _buffer.Position), cancellationToken); + return await _buffer.ReadAsync(buffer, cancellationToken); } - int read = await _inner.ReadAsync(buffer, offset, count, cancellationToken); + var read = await _inner.ReadAsync(buffer, cancellationToken); if (_bufferLimit.HasValue && _bufferLimit - read < _buffer.Length) { - Dispose(); throw new IOException("Buffer limit exceeded."); } - if (_inMemory && _buffer.Length + read > _memoryThreshold) + if (_inMemory && _memoryThreshold - read < _buffer.Length) { _inMemory = false; var oldBuffer = _buffer; @@ -297,11 +309,11 @@ namespace Microsoft.AspNetCore.WebUtilities try { // oldBuffer is a MemoryStream, no need to do async reads. - var copyRead = oldBuffer.Read(rentedBuffer, 0, rentedBuffer.Length); + var copyRead = oldBuffer.Read(rentedBuffer); while (copyRead > 0) { - await _buffer.WriteAsync(rentedBuffer, 0, copyRead, cancellationToken); - copyRead = oldBuffer.Read(rentedBuffer, 0, rentedBuffer.Length); + await _buffer.WriteAsync(rentedBuffer.AsMemory(0, copyRead), cancellationToken); + copyRead = oldBuffer.Read(rentedBuffer); } } finally @@ -311,7 +323,7 @@ namespace Microsoft.AspNetCore.WebUtilities } else { - await _buffer.WriteAsync(_rentedBuffer, 0, (int)oldBuffer.Length, cancellationToken); + await _buffer.WriteAsync(_rentedBuffer.AsMemory(0, (int)oldBuffer.Length), cancellationToken); _bytePool.Return(_rentedBuffer); _rentedBuffer = null; } @@ -319,7 +331,7 @@ namespace Microsoft.AspNetCore.WebUtilities if (read > 0) { - await _buffer.WriteAsync(buffer, offset, read, cancellationToken); + await _buffer.WriteAsync(buffer.Slice(0, read), cancellationToken); } else { @@ -349,6 +361,39 @@ namespace Microsoft.AspNetCore.WebUtilities throw new NotSupportedException(); } + public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken) + { + // If we're completed buffered then copy from the underlying source + if (_completelyBuffered) + { + return _buffer.CopyToAsync(destination, bufferSize, cancellationToken); + } + + async Task CopyToAsyncImpl() + { + // At least a 4K buffer + byte[] buffer = _bytePool.Rent(Math.Min(bufferSize, 4096)); + try + { + while (true) + { + int bytesRead = await ReadAsync(buffer, cancellationToken); + if (bytesRead == 0) + { + break; + } + await destination.WriteAsync(buffer.AsMemory(0, bytesRead), cancellationToken); + } + } + finally + { + _bytePool.Return(buffer); + } + } + + return CopyToAsyncImpl(); + } + protected override void Dispose(bool disposing) { if (!_disposed) diff --git a/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs b/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs index 1c4be62508..e00292acc1 100644 --- a/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs +++ b/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs @@ -4,6 +4,7 @@ using System; using System.Buffers; using System.IO; +using System.Linq; using System.Text; using System.Threading.Tasks; using Moq; @@ -157,7 +158,6 @@ namespace Microsoft.AspNetCore.WebUtilities Assert.Equal("Buffer limit exceeded.", exception.Message); Assert.False(stream.InMemory); Assert.NotNull(stream.TempFileName); - Assert.False(File.Exists(tempFileName)); } Assert.False(File.Exists(tempFileName)); @@ -287,7 +287,6 @@ namespace Microsoft.AspNetCore.WebUtilities Assert.Equal("Buffer limit exceeded.", exception.Message); Assert.False(stream.InMemory); Assert.NotNull(stream.TempFileName); - Assert.False(File.Exists(tempFileName)); } Assert.False(File.Exists(tempFileName)); @@ -351,6 +350,138 @@ namespace Microsoft.AspNetCore.WebUtilities Assert.False(File.Exists(tempFileName)); } + [Fact] + public async Task CopyToAsyncWorks() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).Reverse().ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + await stream.CopyToAsync(withoutBufferMs); + + var withBufferMs = new MemoryStream(); + stream.Position = 0; + await stream.CopyToAsync(withBufferMs); + + Assert.Equal(data, withoutBufferMs.ToArray()); + Assert.Equal(data, withBufferMs.ToArray()); + } + + [Fact] + public async Task CopyToAsyncWorksWithFileThreshold() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).Reverse().ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 100, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + await stream.CopyToAsync(withoutBufferMs); + + var withBufferMs = new MemoryStream(); + stream.Position = 0; + await stream.CopyToAsync(withBufferMs); + + Assert.Equal(data, withoutBufferMs.ToArray()); + Assert.Equal(data, withBufferMs.ToArray()); + } + + [Fact] + public async Task ReadAsyncThenCopyToAsyncWorks() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + await stream.ReadAsync(buffer); + await stream.CopyToAsync(withoutBufferMs); + + Assert.Equal(data.AsMemory(0, 100).ToArray(), buffer); + Assert.Equal(data.AsMemory(100).ToArray(), withoutBufferMs.ToArray()); + } + + [Fact] + public async Task ReadThenCopyToAsyncWorks() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + var read = stream.Read(buffer); + await stream.CopyToAsync(withoutBufferMs); + + Assert.Equal(100, read); + Assert.Equal(data.AsMemory(0, read).ToArray(), buffer); + Assert.Equal(data.AsMemory(read).ToArray(), withoutBufferMs.ToArray()); + } + + [Fact] + public async Task ReadThenSeekThenCopyToAsyncWorks() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + var read = stream.Read(buffer); + stream.Position = 0; + await stream.CopyToAsync(withoutBufferMs); + + Assert.Equal(100, read); + Assert.Equal(data.AsMemory(0, read).ToArray(), buffer); + Assert.Equal(data.ToArray(), withoutBufferMs.ToArray()); + } + + [Fact] + public void PartialReadThenSeekReplaysBuffer() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + var read1 = stream.Read(buffer); + stream.Position = 0; + var buffer2 = new byte[200]; + var read2 = stream.Read(buffer2); + Assert.Equal(100, read1); + Assert.Equal(100, read2); + Assert.Equal(data.AsMemory(0, read1).ToArray(), buffer); + Assert.Equal(data.AsMemory(0, read2).ToArray(), buffer2.AsMemory(0, read2).ToArray()); + } + + [Fact] + public async Task PartialReadAsyncThenSeekReplaysBuffer() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + var read1 = await stream.ReadAsync(buffer); + stream.Position = 0; + var buffer2 = new byte[200]; + var read2 = await stream.ReadAsync(buffer2); + Assert.Equal(100, read1); + Assert.Equal(100, read2); + Assert.Equal(data.AsMemory(0, read1).ToArray(), buffer); + Assert.Equal(data.AsMemory(0, read2).ToArray(), buffer2.AsMemory(0, read2).ToArray()); + } + private static string GetCurrentDirectory() { return AppContext.BaseDirectory; diff --git a/src/Mvc/Mvc.Core/test/Formatters/JsonInputFormatterTestBase.cs b/src/Mvc/Mvc.Core/test/Formatters/JsonInputFormatterTestBase.cs index 83380231e5..1333f95fcb 100644 --- a/src/Mvc/Mvc.Core/test/Formatters/JsonInputFormatterTestBase.cs +++ b/src/Mvc/Mvc.Core/test/Formatters/JsonInputFormatterTestBase.cs @@ -497,8 +497,8 @@ namespace Microsoft.AspNetCore.Mvc.Formatters var content = "{\"name\": \"Test\"}"; var contentBytes = Encoding.UTF8.GetBytes(content); var httpContext = GetHttpContext(contentBytes); - var testBufferedReadStream = new Mock(httpContext.Request.Body, 1024) { CallBase = true }; - httpContext.Request.Body = testBufferedReadStream.Object; + var testBufferedReadStream = new VerifyDisposeFileBufferingReadStream(httpContext.Request.Body, 1024); + httpContext.Request.Body = testBufferedReadStream; var formatterContext = CreateInputFormatterContext(typeof(ComplexModel), httpContext); @@ -508,8 +508,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters // Assert var userModel = Assert.IsType(result.Model); Assert.Equal("Test", userModel.Name); - - testBufferedReadStream.Verify(v => v.DisposeAsync(), Times.Never()); + Assert.False(testBufferedReadStream.Disposed); } [Fact] @@ -635,5 +634,25 @@ namespace Microsoft.AspNetCore.Mvc.Formatters public byte Small { get; set; } } + + private class VerifyDisposeFileBufferingReadStream : FileBufferingReadStream + { + public bool Disposed { get; private set; } + public VerifyDisposeFileBufferingReadStream(Stream inner, int memoryThreshold) : base(inner, memoryThreshold) + { + } + + protected override void Dispose(bool disposing) + { + Disposed = true; + base.Dispose(disposing); + } + + public override ValueTask DisposeAsync() + { + Disposed = true; + return base.DisposeAsync(); + } + } } } diff --git a/src/Mvc/Mvc.Formatters.Xml/test/XmlDataContractSerializerInputFormatterTest.cs b/src/Mvc/Mvc.Formatters.Xml/test/XmlDataContractSerializerInputFormatterTest.cs index aff89dfc78..539d755837 100644 --- a/src/Mvc/Mvc.Formatters.Xml/test/XmlDataContractSerializerInputFormatterTest.cs +++ b/src/Mvc/Mvc.Formatters.Xml/test/XmlDataContractSerializerInputFormatterTest.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Buffers; using System.IO; using System.Linq; using System.Runtime.Serialization; @@ -182,8 +183,8 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml var contentBytes = Encoding.UTF8.GetBytes(input); var httpContext = new DefaultHttpContext(); - var testBufferedReadStream = new Mock(new MemoryStream(contentBytes), 1024) { CallBase = true }; - httpContext.Request.Body = testBufferedReadStream.Object; + var testBufferedReadStream = new VerifyDisposeFileBufferingReadStream(new MemoryStream(contentBytes), 1024); + httpContext.Request.Body = testBufferedReadStream; var context = GetInputFormatterContext(httpContext, typeof(TestLevelOne)); // Act @@ -196,8 +197,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml Assert.Equal(expectedInt, model.SampleInt); Assert.Equal(expectedString, model.sampleString); - - testBufferedReadStream.Verify(v => v.DisposeAsync(), Times.Never()); + Assert.False(testBufferedReadStream.Disposed); } [Fact] @@ -773,5 +773,25 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml // do not do anything } } + + private class VerifyDisposeFileBufferingReadStream : FileBufferingReadStream + { + public bool Disposed { get; private set; } + public VerifyDisposeFileBufferingReadStream(Stream inner, int memoryThreshold) : base(inner, memoryThreshold) + { + } + + protected override void Dispose(bool disposing) + { + Disposed = true; + base.Dispose(disposing); + } + + public override ValueTask DisposeAsync() + { + Disposed = true; + return base.DisposeAsync(); + } + } } } \ No newline at end of file diff --git a/src/Mvc/Mvc.Formatters.Xml/test/XmlSerializerInputFormatterTest.cs b/src/Mvc/Mvc.Formatters.Xml/test/XmlSerializerInputFormatterTest.cs index 366e1a8dbc..9b35c9f970 100644 --- a/src/Mvc/Mvc.Formatters.Xml/test/XmlSerializerInputFormatterTest.cs +++ b/src/Mvc/Mvc.Formatters.Xml/test/XmlSerializerInputFormatterTest.cs @@ -638,8 +638,8 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml var contentBytes = Encoding.UTF8.GetBytes(input); var httpContext = new DefaultHttpContext(); - var testBufferedReadStream = new Mock(new MemoryStream(contentBytes), 1024) { CallBase = true }; - httpContext.Request.Body = testBufferedReadStream.Object; + var testBufferedReadStream = new VerifyDisposeFileBufferingReadStream(new MemoryStream(contentBytes), 1024); + httpContext.Request.Body = testBufferedReadStream; var context = GetInputFormatterContext(httpContext, typeof(TestLevelOne)); // Act @@ -652,8 +652,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml Assert.Equal(expectedInt, model.SampleInt); Assert.Equal(expectedString, model.sampleString); - - testBufferedReadStream.Verify(v => v.DisposeAsync(), Times.Never()); + Assert.False(testBufferedReadStream.Disposed); } private InputFormatterContext GetInputFormatterContext(byte[] contentBytes, Type modelType) @@ -713,5 +712,25 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml // do not do anything } } + + private class VerifyDisposeFileBufferingReadStream : FileBufferingReadStream + { + public bool Disposed { get; private set; } + public VerifyDisposeFileBufferingReadStream(Stream inner, int memoryThreshold) : base(inner, memoryThreshold) + { + } + + protected override void Dispose(bool disposing) + { + Disposed = true; + base.Dispose(disposing); + } + + public override ValueTask DisposeAsync() + { + Disposed = true; + return base.DisposeAsync(); + } + } } } From 3f15d2685115f5cb6eaf5df792a94b5a1fe6a5d5 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Mon, 3 Aug 2020 14:47:20 -0700 Subject: [PATCH 101/106] Obsolete the ResponseCookiesFeature constructor (#24546) --- src/Http/Http/src/Features/ResponseCookiesFeature.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Http/Http/src/Features/ResponseCookiesFeature.cs b/src/Http/Http/src/Features/ResponseCookiesFeature.cs index f7a6f2d401..7e3cabb28e 100644 --- a/src/Http/Http/src/Features/ResponseCookiesFeature.cs +++ b/src/Http/Http/src/Features/ResponseCookiesFeature.cs @@ -26,8 +26,13 @@ namespace Microsoft.AspNetCore.Http.Features /// and the . /// public ResponseCookiesFeature(IFeatureCollection features) - : this(features, builderPool: null) { + if (features == null) + { + throw new ArgumentNullException(nameof(features)); + } + + _features.Initalize(features); } /// @@ -38,6 +43,7 @@ namespace Microsoft.AspNetCore.Http.Features /// and the . /// /// The , if available. + [Obsolete("This constructor is obsolete and will be removed in a future version.")] public ResponseCookiesFeature(IFeatureCollection features, ObjectPool? builderPool) { if (features == null) From 4ef5e10e6d77d24fb251a8bf2f6d4b174cb31ed2 Mon Sep 17 00:00:00 2001 From: Mackinnon Buck Date: Mon, 3 Aug 2020 17:02:12 -0700 Subject: [PATCH 102/106] Virtualization support (#24179) --- .../Web.JS/dist/Release/blazor.server.js | 8 +- .../Web.JS/dist/Release/blazor.webassembly.js | 2 +- src/Components/Web.JS/src/GlobalExports.ts | 2 + src/Components/Web.JS/src/Virtualize.ts | 86 +++++ .../Virtualization/IVirtualizeJsCallbacks.cs | 11 + .../Virtualization/ItemsProviderDelegate.cs | 15 + .../Virtualization/ItemsProviderRequest.cs | 44 +++ .../src/Virtualization/ItemsProviderResult.cs | 35 ++ .../src/Virtualization/PlaceholderContext.cs | 25 ++ .../Web/src/Virtualization/Virtualize.cs | 303 ++++++++++++++++++ .../src/Virtualization/VirtualizeJsInterop.cs | 52 +++ .../Web/test/Virtualization/VirtualizeTest.cs | 146 +++++++++ .../test/E2ETest/Tests/VirtualizationTest.cs | 207 ++++++++++++ .../test/testassets/BasicTestApp/Index.razor | 1 + .../VirtualizationComponent.razor | 76 +++++ .../testassets/BasicTestApp/_Imports.razor | 1 + .../BlazorServerWeb-CSharp/_Imports.razor | 1 + .../Client/_Imports.razor | 1 + 18 files changed, 1011 insertions(+), 5 deletions(-) create mode 100644 src/Components/Web.JS/src/Virtualize.ts create mode 100644 src/Components/Web/src/Virtualization/IVirtualizeJsCallbacks.cs create mode 100644 src/Components/Web/src/Virtualization/ItemsProviderDelegate.cs create mode 100644 src/Components/Web/src/Virtualization/ItemsProviderRequest.cs create mode 100644 src/Components/Web/src/Virtualization/ItemsProviderResult.cs create mode 100644 src/Components/Web/src/Virtualization/PlaceholderContext.cs create mode 100644 src/Components/Web/src/Virtualization/Virtualize.cs create mode 100644 src/Components/Web/src/Virtualization/VirtualizeJsInterop.cs create mode 100644 src/Components/Web/test/Virtualization/VirtualizeTest.cs create mode 100644 src/Components/test/E2ETest/Tests/VirtualizationTest.cs create mode 100644 src/Components/test/testassets/BasicTestApp/VirtualizationComponent.razor diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js index 950538b8a2..f8c5623445 100644 --- a/src/Components/Web.JS/dist/Release/blazor.server.js +++ b/src/Components/Web.JS/dist/Release/blazor.server.js @@ -1,19 +1,19 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=52)}([function(e,t,n){"use strict";var r;n.d(t,"a",(function(){return r})),function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(r||(r={}))},function(e,t,n){"use strict";(function(e){n.d(t,"e",(function(){return c})),n.d(t,"a",(function(){return u})),n.d(t,"c",(function(){return l})),n.d(t,"g",(function(){return f})),n.d(t,"i",(function(){return h})),n.d(t,"j",(function(){return p})),n.d(t,"f",(function(){return d})),n.d(t,"d",(function(){return g})),n.d(t,"b",(function(){return y})),n.d(t,"h",(function(){return v}));var r=n(0),o=n(5),i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(13))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(43);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return K(this,void 0,void 0,(function(){var t,n,r;return V(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(13))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(44);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return V(this,void 0,void 0,(function(){var t,n,r;return K(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] * @license MIT */ -var r=n(53),o=n(54),i=n(55);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(8))},function(e,t,n){"use strict";var r=n(14).Buffer,o=n(56),i=n(20),a=n(69),s=n(72),c=n(73);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(58);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(59),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(37).EventEmitter},function(e,t,n){"use strict";var r=n(21);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(65).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(21);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(19);u.inherits=n(15);var l={deprecate:n(68)},f=n(38),h=n(14).Buffer,p=o.Uint8Array||function(){};var d,g=n(39);function y(){}function v(e,t){s=s||n(9),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(9),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(13),n(66).setImmediate,n(8))},function(e,t,n){"use strict";e.exports=a;var r=n(9),o=n(19);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(10).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(57); +var r=n(54),o=n(55),i=n(56);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(8))},function(e,t,n){"use strict";var r=n(14).Buffer,o=n(57),i=n(20),a=n(70),s=n(73),c=n(74);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&e.invokeMethodAsync("OnSpacerAfterVisible",r.boundingClientRect.bottom-r.intersectionRect.bottom,i)}}))}),{root:o(t),rootMargin:i+"px"});a.observe(t),a.observe(n);var s=u(t),c=u(n);function u(e){var t=new MutationObserver((function(){a.unobserve(e),a.observe(e)}));return t.observe(e,{attributes:!0}),t}r[e._id]={intersectionObserver:a,mutationObserverBefore:s,mutationObserverAfter:c}},dispose:function(e){var t=r[e._id];t&&(t.intersectionObserver.disconnect(),t.mutationObserverBefore.disconnect(),t.mutationObserverAfter.disconnect(),e.dispose(),delete r[e._id])}};var r={};function o(e){return e?"visible"!==getComputedStyle(e).overflowY?e:o(e.parentElement):null}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(59);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(60),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(38).EventEmitter},function(e,t,n){"use strict";var r=n(21);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(66).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(21);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(19);u.inherits=n(15);var l={deprecate:n(69)},f=n(39),h=n(14).Buffer,p=o.Uint8Array||function(){};var d,g=n(40);function y(){}function v(e,t){s=s||n(9),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(9),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(13),n(67).setImmediate,n(8))},function(e,t,n){"use strict";e.exports=a;var r=n(9),o=n(19);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(10).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(58); /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT - */function o(e,t){if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o=0;u--)if(l[u]!==f[u])return!1;for(u=l.length-1;u>=0;u--)if(s=l[u],!m(e[s],t[s],n,r))return!1;return!0}(e,t,n,r))}return n?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function S(e,t,n,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof n&&(r=n,n=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(n&&n.name?" ("+n.name+").":".")+(r?" "+r:"."),e&&!o&&v(o,n,"Missing expected exception"+r);var i="string"==typeof r,s=!e&&o&&!n;if((!e&&a.isError(o)&&i&&E(o,n)||s)&&v(o,n,"Got unwanted exception"+r),e&&o&&n&&!E(o,n)||!e&&o)throw o}h.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return g(y(e.actual),128)+" "+e.operator+" "+g(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,o=d(t),i=r.indexOf("\n"+o);if(i>=0){var a=r.indexOf("\n",i+1);r=r.substring(a+1)}this.stack=r}}},a.inherits(h.AssertionError,Error),h.fail=v,h.ok=b,h.equal=function(e,t,n){e!=t&&v(e,t,n,"==",h.equal)},h.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",h.notEqual)},h.deepEqual=function(e,t,n){m(e,t,!1)||v(e,t,n,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,n){m(e,t,!0)||v(e,t,n,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,n){m(e,t,!1)&&v(e,t,n,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,n,r){m(t,n,!0)&&v(t,n,r,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",h.strictEqual)},h.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",h.notStrictEqual)},h.throws=function(e,t,n){S(!0,e,t,n)},h.doesNotThrow=function(e,t,n){S(!1,e,t,n)},h.ifError=function(e){if(e)throw e},h.strict=r((function e(t,n){t||v(t,!0,n,"==",e)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict=h.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(8))},function(e,t,n){"use strict"; + */function o(e,t){if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o=0;u--)if(l[u]!==f[u])return!1;for(u=l.length-1;u>=0;u--)if(s=l[u],!m(e[s],t[s],n,r))return!1;return!0}(e,t,n,r))}return n?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function S(e,t,n,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof n&&(r=n,n=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(n&&n.name?" ("+n.name+").":".")+(r?" "+r:"."),e&&!o&&v(o,n,"Missing expected exception"+r);var i="string"==typeof r,s=!e&&o&&!n;if((!e&&a.isError(o)&&i&&E(o,n)||s)&&v(o,n,"Got unwanted exception"+r),e&&o&&n&&!E(o,n)||!e&&o)throw o}h.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return g(y(e.actual),128)+" "+e.operator+" "+g(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,o=d(t),i=r.indexOf("\n"+o);if(i>=0){var a=r.indexOf("\n",i+1);r=r.substring(a+1)}this.stack=r}}},a.inherits(h.AssertionError,Error),h.fail=v,h.ok=b,h.equal=function(e,t,n){e!=t&&v(e,t,n,"==",h.equal)},h.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",h.notEqual)},h.deepEqual=function(e,t,n){m(e,t,!1)||v(e,t,n,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,n){m(e,t,!0)||v(e,t,n,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,n){m(e,t,!1)&&v(e,t,n,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,n,r){m(t,n,!0)&&v(t,n,r,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",h.strictEqual)},h.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",h.notStrictEqual)},h.throws=function(e,t,n){S(!0,e,t,n)},h.doesNotThrow=function(e,t,n){S(!1,e,t,n)},h.ifError=function(e){if(e)throw e},h.strict=r((function e(t,n){t||v(t,!0,n,"==",e)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict=h.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(8))},function(e,t,n){"use strict"; /* object-assign (c) Sindre Sorhus @license MIT -*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(10),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(67),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(8))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(36)).Stream=t,t.Readable=t,t.Writable=n(41),t.Duplex=n(9),t.Transform=n(42),t.PassThrough=n(71)},function(e,t,n){"use strict";e.exports=i;var r=n(42),o=n(19);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(15),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(20);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(35).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(33),o=n(32),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(16),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(10),o=n(11),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="5.0.0-dev"}]); \ No newline at end of file +*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(10),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(68),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(8))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(37)).Stream=t,t.Readable=t,t.Writable=n(42),t.Duplex=n(9),t.Transform=n(43),t.PassThrough=n(72)},function(e,t,n){"use strict";e.exports=i;var r=n(43),o=n(19);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(15),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(20);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(36).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(34),o=n(33),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(16),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(10),o=n(11),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="0.0.0-DEV_BUILD"}]); \ No newline at end of file diff --git a/src/Components/Web.JS/dist/Release/blazor.webassembly.js b/src/Components/Web.JS/dist/Release/blazor.webassembly.js index 15031bc249..412133710b 100644 --- a/src/Components/Web.JS/dist/Release/blazor.webassembly.js +++ b/src/Components/Web.JS/dist/Release/blazor.webassembly.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=44)}([,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){window.DotNet=e;var t=[],n={},r={},o=1,a=null;function i(e){t.push(e)}function s(e,t,n,r){var o=l();if(o.invokeDotNetFromJS){var a=JSON.stringify(r,m),i=o.invokeDotNetFromJS(e,t,n,a);return i?f(i):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead.")}function u(e,t,r,a){if(e&&r)throw new Error("For instance method calls, assemblyName should be null. Received '"+e+"'.");var i=o++,s=new Promise((function(e,t){n[i]={resolve:e,reject:t}}));try{var u=JSON.stringify(a,m);l().beginInvokeDotNetFromJS(i,e,t,r,u)}catch(e){c(i,!1,e)}return s}function l(){if(null!==a)return a;throw new Error("No .NET call dispatcher has been set.")}function c(e,t,r){if(!n.hasOwnProperty(e))throw new Error("There is no pending async call with ID "+e+".");var o=n[e];delete n[e],t?o.resolve(r):o.reject(r)}function f(e){return e?JSON.parse(e,(function(e,n){return t.reduce((function(t,n){return n(e,t)}),n)})):null}function d(e){return e instanceof Error?e.message+"\n"+e.stack:e?e.toString():"null"}function p(e){if(Object.prototype.hasOwnProperty.call(r,e))return r[e];var t,n=window,o="window";if(e.split(".").forEach((function(e){if(!(e in n))throw new Error("Could not find '"+e+"' in '"+o+"'.");t=n,n=n[e],o+="."+e})),n instanceof Function)return n=n.bind(t),r[e]=n,n;throw new Error("The value '"+o+"' is not a function.")}e.attachDispatcher=function(e){a=e},e.attachReviver=i,e.invokeMethod=function(e,t){for(var n=[],r=2;r0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var a=e;if(e instanceof Comment&&(l(a)&&l(a).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(a))throw new Error("Not implemented: moving existing logical children");var i=l(t);if(n0;)e(r,0)}var a=r;a.parentNode.removeChild(a)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[a]||null},t.getLogicalChild=function(e,t){return l(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===c(e).namespaceURI},t.getLogicalChildrenArray=l,t.permuteLogicalChildren=function(e,t){var n=l(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,a=r;a;){var i=a.nextSibling;if(n.insertBefore(a,t),a===o)break;a=i}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=c},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(7),o=n(4),a=n(30);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:a.domFunctions}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(25),o=n(26),a=n(12),i=n(29),s=n(18),u=n(7),l=document.createElement("template"),c=document.createElementNS("http://www.w3.org/2000/svg","g"),f={submit:!0},d={},p=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){f[e.type]&&e.preventDefault();var a={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(a,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),d[e]=t},e.prototype.updateComponent=function(e,t,n,r){var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var i=d[t];if(i){var s=a.getLogicalSiblingEnd(i);delete d[t],s?function(e,t){var n=a.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=a.getLogicalChildrenArray(n),o=r.indexOf(e)+1,i=r.indexOf(t),s=o;s<=i;s++)a.removeLogicalChild(n,o);e.textContent="!"}(i,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(i)}var u=a.getClosestDomElement(o).ownerDocument,l=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),l instanceof HTMLElement&&u&&u.activeElement!==l&&l.focus()},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,i,s){for(var u,l=0,c=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(i),m=f.offset(i),y=m+f.count(i),v=m;v0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=a,t.readUint64LE=function(e,t){var n=a(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+a(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var a=e[t+o];if(n|=(127&a)<65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function s(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i};Object.defineProperty(t,"__esModule",{value:!0});var i=n(3);n(22);var s=n(17),u=n(45),l=n(4),c=n(48),f=n(34),d=n(18),p=n(49),h=n(50),m=n(51),y=!1;function v(e){return r(this,void 0,void 0,(function(){var t,n,f,v,b,g,w,E,_=this;return o(this,(function(I){switch(I.label){case 0:if(y)throw new Error("Blazor has already started.");return y=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return i.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){var n=u.monoPlatform.beginHeapLock();try{l.renderBatch(e,new c.SharedMemoryRenderBatch(t))}finally{n.release()}},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,i.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),v=null==e?void 0:e.environment,[4,m.BootConfigResult.initAsync(v)];case 1:return b=I.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=a.apply(void 0,[I.sent(),1]),w=g[0],I.label=3;case 3:return I.trys.push([3,5,,6]),[4,t.start(w)];case 4:return I.sent(),[3,6];case 5:throw E=I.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=v,f.shouldAutoStart()&&v().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function s(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var c,f;s.attachDebuggerHotkey(e),window.Browser={init:function(){}},c=function(){window.Module=function(e,t,n){var c=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var m,g=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(m=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(c,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,v(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){a=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],m&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),l.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(m),g.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),a=e.bootConfig.resources.satelliteResources;if(a){var i=Promise.all(n.filter((function(e){return a.hasOwnProperty(e)})).map((function(t){return e.loadResources(a[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(c,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(i.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return p(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>f)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*c+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return p(e+(t||0))},readStringField:function(e,t,n){var r,o=p(e+(t||0));if(0===o)return null;if(n){var a=BINDING.unbox_mono_obj(o);return"boolean"==typeof a?a?"":null:a}return d?void 0===(r=d.stringCache.get(o))&&(r=BINDING.conv_string(o),d.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return b(),d=new g},invokeWhenHeapUnlocked:function(e){d?d.enqueuePostReleaseAction(e):e()}};var h=document.createElement("a");function m(e){return e+12}function y(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function v(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function b(){if(d)throw new Error("Assertion failed - heap is currently locked")}var g=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(d!==this)throw new Error("Trying to release a lock which isn't current");for(d=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),b()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function a(){return o&&r}t.hasDebuggingEnabled=a,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";a()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i};Object.defineProperty(t,"__esModule",{value:!0});var a=n(32),i=n(33);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=a.readInt32LE(s,0);s=s.slice(4);var l=i.decodeUtf8(s.slice(0,u)),c=JSON.parse(l);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(c.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(c),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],y=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,y,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=a,this.arrayBuilderSegmentReader=i,this.diffReader=s,this.editReader=u,this.frameReader=l}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,a.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*a.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*a.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return c(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return c(e,t,l.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=c(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=c(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var a={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},i={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+i.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return c(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},l={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function c(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function s(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(7),o=n(4),i=n(30),a=n(31);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,Virtualize:a.Virtualize}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(25),o=n(26),i=n(12),a=n(29),s=n(18),u=n(7),c=document.createElement("template"),l=document.createElementNS("http://www.w3.org/2000/svg","g"),f={submit:!0},d={},p=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){f[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),d[e]=t},e.prototype.updateComponent=function(e,t,n,r){var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=d[t];if(a){var s=i.getLogicalSiblingEnd(a);delete d[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,c=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),c instanceof HTMLElement&&u&&u.activeElement!==c&&c.focus()},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),v=m+f.count(a),y=m;y0&&e.invokeMethodAsync("OnSpacerAfterVisible",r.boundingClientRect.bottom-r.intersectionRect.bottom,i)}}))}),{root:o(t),rootMargin:i+"px"});a.observe(t),a.observe(n);var s=c(t),u=c(n);function c(e){var t=new MutationObserver((function(){a.unobserve(e),a.observe(e)}));return t.observe(e,{attributes:!0}),t}r[e._id]={intersectionObserver:a,mutationObserverBefore:s,mutationObserverAfter:u}},dispose:function(e){var t=r[e._id];t&&(t.intersectionObserver.disconnect(),t.mutationObserverBefore.disconnect(),t.mutationObserverAfter.disconnect(),e.dispose(),delete r[e._id])}};var r={};function o(e){return e?"visible"!==getComputedStyle(e).overflowY?e:o(e.parentElement):null}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(22);var s=n(17),u=n(46),c=n(4),l=n(49),f=n(35),d=n(18),p=n(50),h=n(51),m=n(52),v=!1;function y(e){return r(this,void 0,void 0,(function(){var t,n,f,y,b,g,w,E,_=this;return o(this,(function(I){switch(I.label){case 0:if(v)throw new Error("Blazor has already started.");return v=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),y=null==e?void 0:e.environment,[4,m.BootConfigResult.initAsync(y)];case 1:return b=I.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[I.sent(),1]),w=g[0],I.label=3;case 3:return I.trys.push([3,5,,6]),[4,t.start(w)];case 4:return I.sent(),[3,6];case 5:throw E=I.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=y,f.shouldAutoStart()&&y().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var l,f;s.attachDebuggerHotkey(e),window.Browser={init:function(){}},l=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var m,g=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(m=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,y(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],m&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(m),g.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return p(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>f)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*l+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return p(e+(t||0))},readStringField:function(e,t,n){var r,o=p(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return d?void 0===(r=d.stringCache.get(o))&&(r=BINDING.conv_string(o),d.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return b(),d=new g},invokeWhenHeapUnlocked:function(e){d?d.enqueuePostReleaseAction(e):e()}};var h=document.createElement("a");function m(e){return e+12}function v(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function y(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function b(){if(d)throw new Error("Assertion failed - heap is currently locked")}var g=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(d!==this)throw new Error("Trying to release a lock which isn't current");for(d=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),b()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(33),a=n(34);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],v=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,v,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] { + intersectionObserver.unobserve(spacer); + intersectionObserver.observe(spacer); + }); + + mutationObserver.observe(spacer, { attributes: true }); + + return mutationObserver; + } + + function intersectionCallback(entries: IntersectionObserverEntry[]): void { + entries.forEach((entry): void => { + if (!entry.isIntersecting) { + return; + } + + const containerSize = entry.rootBounds?.height; + + if (entry.target === spacerBefore) { + dotNetHelper.invokeMethodAsync('OnSpacerBeforeVisible', entry.intersectionRect.top - entry.boundingClientRect.top, containerSize); + } else if (entry.target === spacerAfter && spacerAfter.offsetHeight > 0) { + // When we first start up, both the "before" and "after" spacers will be visible, but it's only relevant to raise a + // single event to load the initial data. To avoid raising two events, skip the one for the "after" spacer if we know + // it's meaningless to talk about any overlap into it. + dotNetHelper.invokeMethodAsync('OnSpacerAfterVisible', entry.boundingClientRect.bottom - entry.intersectionRect.bottom, containerSize); + } + }); + } +} + +function dispose(dotNetHelper: any): void { + const observers = observersByDotNetId[dotNetHelper._id]; + + if (observers) { + observers.intersectionObserver.disconnect(); + observers.mutationObserverBefore.disconnect(); + observers.mutationObserverAfter.disconnect(); + + dotNetHelper.dispose(); + + delete observersByDotNetId[dotNetHelper._id]; + } +} diff --git a/src/Components/Web/src/Virtualization/IVirtualizeJsCallbacks.cs b/src/Components/Web/src/Virtualization/IVirtualizeJsCallbacks.cs new file mode 100644 index 0000000000..f7447b9b46 --- /dev/null +++ b/src/Components/Web/src/Virtualization/IVirtualizeJsCallbacks.cs @@ -0,0 +1,11 @@ +// 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. + +namespace Microsoft.AspNetCore.Components.Web.Virtualization +{ + internal interface IVirtualizeJsCallbacks + { + void OnBeforeSpacerVisible(float spacerSize, float containerSize); + void OnAfterSpacerVisible(float spacerSize, float containerSize); + } +} diff --git a/src/Components/Web/src/Virtualization/ItemsProviderDelegate.cs b/src/Components/Web/src/Virtualization/ItemsProviderDelegate.cs new file mode 100644 index 0000000000..52bd6bf5c9 --- /dev/null +++ b/src/Components/Web/src/Virtualization/ItemsProviderDelegate.cs @@ -0,0 +1,15 @@ +// 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 System.Threading.Tasks; + +namespace Microsoft.AspNetCore.Components.Web.Virtualization +{ + /// + /// A function that provides items to a virtualized source. + /// + /// The type of the context for each item in the list. + /// The defining the request details. + /// A whose result is a upon successful completion. + public delegate ValueTask> ItemsProviderDelegate(ItemsProviderRequest request); +} diff --git a/src/Components/Web/src/Virtualization/ItemsProviderRequest.cs b/src/Components/Web/src/Virtualization/ItemsProviderRequest.cs new file mode 100644 index 0000000000..fb0e8f595f --- /dev/null +++ b/src/Components/Web/src/Virtualization/ItemsProviderRequest.cs @@ -0,0 +1,44 @@ +// 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 System.Threading; + +namespace Microsoft.AspNetCore.Components.Web.Virtualization +{ + /// + /// Represents a request to an . + /// + public readonly struct ItemsProviderRequest + { + /// + /// The start index of the data segment requested. + /// + public int StartIndex { get; } + + /// + /// The requested number of items to be provided. The actual number of provided items does not need to match + /// this value. + /// + public int Count { get; } + + /// + /// The used to relay cancellation of the request. + /// + public CancellationToken CancellationToken { get; } + + /// + /// Constructs a new instance. + /// + /// The start index of the data segment requested. + /// The requested number of items to be provided. + /// + /// The used to relay cancellation of the request. + /// + public ItemsProviderRequest(int startIndex, int count, CancellationToken cancellationToken) + { + StartIndex = startIndex; + Count = count; + CancellationToken = cancellationToken; + } + } +} diff --git a/src/Components/Web/src/Virtualization/ItemsProviderResult.cs b/src/Components/Web/src/Virtualization/ItemsProviderResult.cs new file mode 100644 index 0000000000..4b1d47fdfe --- /dev/null +++ b/src/Components/Web/src/Virtualization/ItemsProviderResult.cs @@ -0,0 +1,35 @@ +// 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 System.Collections.Generic; + +namespace Microsoft.AspNetCore.Components.Web.Virtualization +{ + /// + /// Represents the result of a . + /// + /// The type of the context for each item in the list. + public readonly struct ItemsProviderResult + { + /// + /// The items to provide. + /// + public IEnumerable Items { get; } + + /// + /// The total item count in the source generating the items provided. + /// + public int TotalItemCount { get; } + + /// + /// Instantiates a new instance. + /// + /// The items to provide. + /// The total item count in the source generating the items provided. + public ItemsProviderResult(IEnumerable items, int totalItemCount) + { + Items = items; + TotalItemCount = totalItemCount; + } + } +} diff --git a/src/Components/Web/src/Virtualization/PlaceholderContext.cs b/src/Components/Web/src/Virtualization/PlaceholderContext.cs new file mode 100644 index 0000000000..d8b73d46ab --- /dev/null +++ b/src/Components/Web/src/Virtualization/PlaceholderContext.cs @@ -0,0 +1,25 @@ +// 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. + +namespace Microsoft.AspNetCore.Components.Web.Virtualization +{ + /// + /// Contains context for a placeholder in a virtualized list. + /// + public readonly struct PlaceholderContext + { + /// + /// The item index of the placeholder. + /// + public int Index { get; } + + /// + /// Constructs a new instance. + /// + /// The item index of the placeholder. + public PlaceholderContext(int index) + { + Index = index; + } + } +} diff --git a/src/Components/Web/src/Virtualization/Virtualize.cs b/src/Components/Web/src/Virtualization/Virtualize.cs new file mode 100644 index 0000000000..97e6e04aa5 --- /dev/null +++ b/src/Components/Web/src/Virtualization/Virtualize.cs @@ -0,0 +1,303 @@ +// 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 System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.JSInterop; + +namespace Microsoft.AspNetCore.Components.Web.Virtualization +{ + /// + /// Provides functionality for rendering a virtualized list of items. + /// + /// The context type for the items being rendered. + public sealed class Virtualize : ComponentBase, IVirtualizeJsCallbacks, IAsyncDisposable + { + private VirtualizeJsInterop? _jsInterop; + + private ElementReference _spacerBefore; + + private ElementReference _spacerAfter; + + private int _itemsBefore; + + private int _visibleItemCapacity; + + private int _itemCount; + + private int _loadedItemsStartIndex; + + private IEnumerable? _loadedItems; + + private CancellationTokenSource? _refreshCts; + + private Exception? _refreshException; + + private ItemsProviderDelegate _itemsProvider = default!; + + private RenderFragment? _itemTemplate; + + private RenderFragment? _placeholder; + + [Inject] + private IJSRuntime JSRuntime { get; set; } = default!; + + /// + /// Gets or sets the item template for the list. + /// + [Parameter] + public RenderFragment? ChildContent { get; set; } + + /// + /// Gets or sets the item template for the list. + /// + [Parameter] + public RenderFragment? ItemContent { get; set; } + + /// + /// Gets or sets the template for items that have not yet been loaded in memory. + /// + [Parameter] + public RenderFragment? Placeholder { get; set; } + + /// + /// Gets the size of each item in pixels. + /// + [Parameter] + public float ItemSize { get; set; } + + /// + /// Gets or sets the function providing items to the list. + /// + [Parameter] + public ItemsProviderDelegate? ItemsProvider { get; set; } + + /// + /// Gets or sets the fixed item source. + /// + [Parameter] + public ICollection? Items { get; set; } + + /// + protected override void OnParametersSet() + { + if (ItemSize <= 0) + { + throw new InvalidOperationException( + $"{GetType()} requires a positive value for parameter '{nameof(ItemSize)}' to perform virtualization."); + } + + if (ItemsProvider != null) + { + if (Items != null) + { + throw new InvalidOperationException( + $"{GetType()} can only accept one item source from its parameters. " + + $"Do not supply both '{nameof(Items)}' and '{nameof(ItemsProvider)}'."); + } + + _itemsProvider = ItemsProvider; + } + else if (Items != null) + { + _itemsProvider = DefaultItemsProvider; + } + else + { + throw new InvalidOperationException( + $"{GetType()} requires either the '{nameof(Items)}' or '{nameof(ItemsProvider)}' parameters to be specified " + + $"and non-null."); + } + + _itemTemplate = ItemContent ?? ChildContent; + _placeholder = Placeholder ?? DefaultPlaceholder; + } + + /// + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _jsInterop = new VirtualizeJsInterop(this, JSRuntime); + await _jsInterop.InitializeAsync(_spacerBefore, _spacerAfter); + } + } + + /// + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + if (_refreshException != null) + { + var oldRefreshException = _refreshException; + _refreshException = null; + + throw oldRefreshException; + } + + builder.OpenElement(0, "div"); + builder.AddAttribute(1, "style", GetSpacerStyle(_itemsBefore)); + builder.AddElementReferenceCapture(2, elementReference => _spacerBefore = elementReference); + builder.CloseElement(); + + var lastItemIndex = Math.Min(_itemsBefore + _visibleItemCapacity, _itemCount); + var renderIndex = _itemsBefore; + var placeholdersBeforeCount = Math.Min(_loadedItemsStartIndex, lastItemIndex); + + builder.OpenRegion(3); + + // Render placeholders before the loaded items. + for (; renderIndex < placeholdersBeforeCount; renderIndex++) + { + // This is a rare case where it's valid for the sequence number to be programmatically incremented. + // This is only true because we know for certain that no other content will be alongside it. + builder.AddContent(renderIndex, _placeholder, new PlaceholderContext(renderIndex)); + } + + builder.CloseRegion(); + + // Render the loaded items. + if (_loadedItems != null && _itemTemplate != null) + { + var itemsToShow = _loadedItems + .Skip(_itemsBefore - _loadedItemsStartIndex) + .Take(lastItemIndex - _loadedItemsStartIndex); + + builder.OpenRegion(4); + + foreach (var item in itemsToShow) + { + _itemTemplate(item)(builder); + renderIndex++; + } + + builder.CloseRegion(); + } + + builder.OpenRegion(5); + + // Render the placeholders after the loaded items. + for (; renderIndex < lastItemIndex; renderIndex++) + { + builder.AddContent(renderIndex, _placeholder, new PlaceholderContext(renderIndex)); + } + + builder.CloseRegion(); + + var itemsAfter = Math.Max(0, _itemCount - _visibleItemCapacity - _itemsBefore); + + builder.OpenElement(6, "div"); + builder.AddAttribute(7, "style", GetSpacerStyle(itemsAfter)); + builder.AddElementReferenceCapture(8, elementReference => _spacerAfter = elementReference); + + builder.CloseElement(); + } + + private string GetSpacerStyle(int itemsInSpacer) + => $"height: {itemsInSpacer * ItemSize}px;"; + + void IVirtualizeJsCallbacks.OnBeforeSpacerVisible(float spacerSize, float containerSize) + { + CalcualteItemDistribution(spacerSize, containerSize, out var itemsBefore, out var visibleItemCapacity); + + UpdateItemDistribution(itemsBefore, visibleItemCapacity); + } + + void IVirtualizeJsCallbacks.OnAfterSpacerVisible(float spacerSize, float containerSize) + { + CalcualteItemDistribution(spacerSize, containerSize, out var itemsAfter, out var visibleItemCapacity); + + var itemsBefore = Math.Max(0, _itemCount - itemsAfter - visibleItemCapacity); + + UpdateItemDistribution(itemsBefore, visibleItemCapacity); + } + + private void CalcualteItemDistribution(float spacerSize, float containerSize, out int itemsInSpacer, out int visibleItemCapacity) + { + itemsInSpacer = Math.Max(0, (int)Math.Floor(spacerSize / ItemSize) - 1); + visibleItemCapacity = (int)Math.Ceiling(containerSize / ItemSize) + 2; + } + + private void UpdateItemDistribution(int itemsBefore, int visibleItemCapacity) + { + if (itemsBefore != _itemsBefore || visibleItemCapacity != _visibleItemCapacity) + { + _itemsBefore = itemsBefore; + _visibleItemCapacity = visibleItemCapacity; + var refreshTask = RefreshDataAsync(); + + if (!refreshTask.IsCompleted) + { + StateHasChanged(); + } + } + } + + private async Task RefreshDataAsync() + { + _refreshCts?.Cancel(); + _refreshCts = new CancellationTokenSource(); + + var cancellationToken = _refreshCts.Token; + var request = new ItemsProviderRequest(_itemsBefore, _visibleItemCapacity, cancellationToken); + + try + { + var result = await _itemsProvider(request); + + // Only apply result if the task was not canceled. + if (!cancellationToken.IsCancellationRequested) + { + _itemCount = result.TotalItemCount; + _loadedItems = result.Items; + _loadedItemsStartIndex = request.StartIndex; + + StateHasChanged(); + } + } + catch (Exception e) + { + if (e is OperationCanceledException oce && oce.CancellationToken == cancellationToken) + { + // No-op; we canceled the operation, so it's fine to suppress this exception. + } + else + { + // Cache this exception so the renderer can throw it. + _refreshException = e; + + // Re-render the component to throw the exception. + StateHasChanged(); + } + } + } + + private ValueTask> DefaultItemsProvider(ItemsProviderRequest request) + { + return ValueTask.FromResult(new ItemsProviderResult( + Items!.Skip(request.StartIndex).Take(request.Count), + Items!.Count)); + } + + private RenderFragment DefaultPlaceholder(PlaceholderContext context) => (builder) => + { + builder.OpenElement(0, "div"); + builder.AddAttribute(1, "style", $"height: {ItemSize}px;"); + builder.CloseElement(); + }; + + /// + public async ValueTask DisposeAsync() + { + _refreshCts?.Cancel(); + + if (_jsInterop != null) + { + await _jsInterop.DisposeAsync(); + } + } + } +} diff --git a/src/Components/Web/src/Virtualization/VirtualizeJsInterop.cs b/src/Components/Web/src/Virtualization/VirtualizeJsInterop.cs new file mode 100644 index 0000000000..2b655d1f7e --- /dev/null +++ b/src/Components/Web/src/Virtualization/VirtualizeJsInterop.cs @@ -0,0 +1,52 @@ +// 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 System; +using System.Threading.Tasks; +using Microsoft.JSInterop; + +namespace Microsoft.AspNetCore.Components.Web.Virtualization +{ + internal class VirtualizeJsInterop : IAsyncDisposable + { + private const string JsFunctionsPrefix = "Blazor._internal.Virtualize"; + + private readonly IVirtualizeJsCallbacks _owner; + + private readonly IJSRuntime _jsRuntime; + + private DotNetObjectReference? _selfReference; + + public VirtualizeJsInterop(IVirtualizeJsCallbacks owner, IJSRuntime jsRuntime) + { + _owner = owner; + _jsRuntime = jsRuntime; + } + + public async ValueTask InitializeAsync(ElementReference spacerBefore, ElementReference spacerAfter) + { + _selfReference = DotNetObjectReference.Create(this); + await _jsRuntime.InvokeVoidAsync($"{JsFunctionsPrefix}.init", _selfReference, spacerBefore, spacerAfter); + } + + [JSInvokable] + public void OnSpacerBeforeVisible(float spacerSize, float containerSize) + { + _owner.OnBeforeSpacerVisible(spacerSize, containerSize); + } + + [JSInvokable] + public void OnSpacerAfterVisible(float spacerSize, float containerSize) + { + _owner.OnAfterSpacerVisible(spacerSize, containerSize); + } + + public async ValueTask DisposeAsync() + { + if (_selfReference != null) + { + await _jsRuntime.InvokeVoidAsync($"{JsFunctionsPrefix}.dispose", _selfReference); + } + } + } +} diff --git a/src/Components/Web/test/Virtualization/VirtualizeTest.cs b/src/Components/Web/test/Virtualization/VirtualizeTest.cs new file mode 100644 index 0000000000..cf2cd2a281 --- /dev/null +++ b/src/Components/Web/test/Virtualization/VirtualizeTest.cs @@ -0,0 +1,146 @@ +// 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 System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Components.Test.Helpers; +using Microsoft.AspNetCore.Components.Web.Virtualization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.JSInterop; +using Moq; +using Xunit; + +namespace Microsoft.AspNetCore.Components.Virtualization +{ + public class VirtualizeTest + { + [Fact] + public async Task Virtualize_ThrowsWhenGivenNonPositiveItemSize() + { + var rootComponent = new VirtualizeTestHostcomponent + { + InnerContent = BuildVirtualize(0f, EmptyItemsProvider, null) + }; + + var serviceProvider = new ServiceCollection() + .AddTransient((sp) => Mock.Of()) + .BuildServiceProvider(); + + var testRenderer = new TestRenderer(serviceProvider); + var componentId = testRenderer.AssignRootComponentId(rootComponent); + + var ex = await Assert.ThrowsAsync(async () => await testRenderer.RenderRootComponentAsync(componentId)); + Assert.Contains("requires a positive value for parameter", ex.Message); + } + + [Fact] + public async Task Virtualize_ThrowsWhenGivenMultipleItemSources() + { + var rootComponent = new VirtualizeTestHostcomponent + { + InnerContent = BuildVirtualize(10f, EmptyItemsProvider, new List()) + }; + + var serviceProvider = new ServiceCollection() + .AddTransient((sp) => Mock.Of()) + .BuildServiceProvider(); + + var testRenderer = new TestRenderer(serviceProvider); + var componentId = testRenderer.AssignRootComponentId(rootComponent); + + var ex = await Assert.ThrowsAsync(async () => await testRenderer.RenderRootComponentAsync(componentId)); + Assert.Contains("can only accept one item source from its parameters", ex.Message); + } + + [Fact] + public async Task Virtualize_ThrowsWhenGivenNoItemSources() + { + var rootComponent = new VirtualizeTestHostcomponent + { + InnerContent = BuildVirtualize(10f, null, null) + }; + + var serviceProvider = new ServiceCollection() + .AddTransient((sp) => Mock.Of()) + .BuildServiceProvider(); + + var testRenderer = new TestRenderer(serviceProvider); + var componentId = testRenderer.AssignRootComponentId(rootComponent); + + var ex = await Assert.ThrowsAsync(async () => await testRenderer.RenderRootComponentAsync(componentId)); + Assert.Contains("parameters to be specified and non-null", ex.Message); + } + + [Fact] + public async Task Virtualize_DispatchesExceptionsFromItemsProviderThroughRenderer() + { + Virtualize renderedVirtualize = null; + + var rootComponent = new VirtualizeTestHostcomponent + { + InnerContent = BuildVirtualize(10f, AlwaysThrowsItemsProvider, null, virtualize => renderedVirtualize = virtualize) + }; + + var serviceProvider = new ServiceCollection() + .AddTransient((sp) => Mock.Of()) + .BuildServiceProvider(); + + var testRenderer = new TestRenderer(serviceProvider); + var componentId = testRenderer.AssignRootComponentId(rootComponent); + + // Render to populate the component reference. + await testRenderer.RenderRootComponentAsync(componentId); + + Assert.NotNull(renderedVirtualize); + + // Simulate a JS spacer callback. + ((IVirtualizeJsCallbacks)renderedVirtualize).OnAfterSpacerVisible(10f, 100f); + + // Validate that the exception is dispatched through the renderer. + var ex = await Assert.ThrowsAsync(async () => await testRenderer.RenderRootComponentAsync(componentId)); + Assert.Equal("Thrown from items provider.", ex.Message); + } + + private ValueTask> EmptyItemsProvider(ItemsProviderRequest request) + => ValueTask.FromResult(new ItemsProviderResult(Enumerable.Empty(), 0)); + + private ValueTask> AlwaysThrowsItemsProvider(ItemsProviderRequest request) + => throw new InvalidOperationException("Thrown from items provider."); + + private RenderFragment BuildVirtualize( + float itemSize, + ItemsProviderDelegate itemsProvider, + ICollection items, + Action> captureRenderedVirtualize = null) + => builder => + { + builder.OpenComponent>(0); + builder.AddAttribute(1, "ItemSize", itemSize); + builder.AddAttribute(2, "ItemsProvider", itemsProvider); + builder.AddAttribute(3, "Items", items); + + if (captureRenderedVirtualize != null) + { + builder.AddComponentReferenceCapture(4, component => captureRenderedVirtualize(component as Virtualize)); + } + + builder.CloseComponent(); + }; + + private class VirtualizeTestHostcomponent : AutoRenderComponent + { + public RenderFragment InnerContent { get; set; } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + builder.OpenElement(0, "div"); + builder.AddAttribute(1, "style", "overflow: auto; height: 800px;"); + builder.AddContent(2, InnerContent); + builder.CloseElement(); + } + } + } +} diff --git a/src/Components/test/E2ETest/Tests/VirtualizationTest.cs b/src/Components/test/E2ETest/Tests/VirtualizationTest.cs new file mode 100644 index 0000000000..de53f4ed1f --- /dev/null +++ b/src/Components/test/E2ETest/Tests/VirtualizationTest.cs @@ -0,0 +1,207 @@ +// 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 BasicTestApp; +using Microsoft.AspNetCore.Components.E2ETest; +using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; +using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; +using Microsoft.AspNetCore.E2ETesting; +using OpenQA.Selenium; +using OpenQA.Selenium.Support.Extensions; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.AspNetCore.Components.E2ETests.Tests +{ + public class VirtualizationTest : ServerTestBase> + { + public VirtualizationTest( + BrowserFixture browserFixture, + ToggleExecutionModeServerFixture serverFixture, + ITestOutputHelper output) + : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() + { + Navigate(ServerPathBase, noReload: _serverFixture.ExecutionMode == ExecutionMode.Client); + Browser.MountTestComponent(); + } + + [Fact] + public void AlwaysFillsVisibleCapacity_Sync() + { + var topSpacer = Browser.FindElement(By.Id("sync-container")).FindElement(By.TagName("div")); + var expectedInitialSpacerStyle = "height: 0px;"; + + int initialItemCount = 0; + + // Wait until items have been rendered. + Browser.True(() => (initialItemCount = GetItemCount()) > 0); + Browser.Equal(expectedInitialSpacerStyle, () => topSpacer.GetAttribute("style")); + + // Scroll halfway. + Browser.ExecuteJavaScript("const container = document.getElementById('sync-container');container.scrollTop = container.scrollHeight * 0.5;"); + + // Validate that we get the same item count after scrolling halfway. + Browser.Equal(initialItemCount, GetItemCount); + Browser.NotEqual(expectedInitialSpacerStyle, () => topSpacer.GetAttribute("style")); + + // Scroll to the bottom. + Browser.ExecuteJavaScript("const container = document.getElementById('sync-container');container.scrollTop = container.scrollHeight;"); + + // Validate that we get the same item count after scrolling to the bottom. + Browser.Equal(initialItemCount, GetItemCount); + Browser.NotEqual(expectedInitialSpacerStyle, () => topSpacer.GetAttribute("style")); + + int GetItemCount() => Browser.FindElements(By.Id("sync-item")).Count; + } + + [Fact] + public void AlwaysFillsVisibleCapacity_Async() + { + var finishLoadingButton = Browser.FindElement(By.Id("finish-loading-button")); + + // Check that no items or placeholders are visible. + // No data fetches have happened so we don't know how many items there are. + Browser.Equal(0, GetItemCount); + Browser.Equal(0, GetPlaceholderCount); + + // Load the initial set of items. + finishLoadingButton.Click(); + + var initialItemCount = 0; + + // Validate that items appear and placeholders aren't rendered. + Browser.True(() => (initialItemCount = GetItemCount()) > 0); + Browser.Equal(0, GetPlaceholderCount); + + // Scroll halfway. + Browser.ExecuteJavaScript("const container = document.getElementById('async-container');container.scrollTop = container.scrollHeight * 0.5;"); + + // Validate that items are replaced by the same number of placeholders. + Browser.Equal(0, GetItemCount); + Browser.Equal(initialItemCount, GetPlaceholderCount); + + // Load the new set of items. + finishLoadingButton.Click(); + + // Validate that the placeholders are replaced by the same number of items. + Browser.Equal(initialItemCount, GetItemCount); + Browser.Equal(0, GetPlaceholderCount); + + // Scroll to the bottom. + Browser.ExecuteJavaScript("const container = document.getElementById('async-container');container.scrollTop = container.scrollHeight;"); + + // Validate that items are replaced by the same number of placeholders. + Browser.Equal(0, GetItemCount); + Browser.Equal(initialItemCount, GetPlaceholderCount); + + // Load the new set of items. + finishLoadingButton.Click(); + + // Validate that the placeholders are replaced by the same number of items. + Browser.Equal(initialItemCount, GetItemCount); + Browser.Equal(0, GetPlaceholderCount); + + int GetItemCount() => Browser.FindElements(By.Id("async-item")).Count; + int GetPlaceholderCount() => Browser.FindElements(By.Id("async-placeholder")).Count; + } + + [Fact] + public void RerendersWhenItemSizeShrinks_Sync() + { + int initialItemCount = 0; + + // Wait until items have been rendered. + Browser.True(() => (initialItemCount = GetItemCount()) > 0); + + var itemSizeInput = Browser.FindElement(By.Id("item-size-input")); + + // Change the item size. + itemSizeInput.SendKeys("\b\b\b50\n"); + + // Validate that the list has been re-rendered to show more items. + Browser.True(() => GetItemCount() > initialItemCount); + + int GetItemCount() => Browser.FindElements(By.Id("sync-item")).Count; + } + + [Fact] + public void RerendersWhenItemSizeShrinks_Async() + { + var finishLoadingButton = Browser.FindElement(By.Id("finish-loading-button")); + + // Load the initial set of items. + finishLoadingButton.Click(); + + int initialItemCount = 0; + + // Validate that items appear and placeholders aren't rendered. + Browser.True(() => (initialItemCount = GetItemCount()) > 0); + Browser.Equal(0, GetPlaceholderCount); + + var itemSizeInput = Browser.FindElement(By.Id("item-size-input")); + + // Change the item size. + itemSizeInput.SendKeys("\b\b\b50\n"); + + // Validate that the same number of loaded items is rendered. + Browser.Equal(initialItemCount, GetItemCount); + Browser.True(() => GetPlaceholderCount() > 0); + + // Load the new set of items. + finishLoadingButton.Click(); + + // Validate that the placeholders have been replaced with more loaded items. + Browser.True(() => GetItemCount() > initialItemCount); + Browser.Equal(0, GetPlaceholderCount); + + int GetItemCount() => Browser.FindElements(By.Id("async-item")).Count; + int GetPlaceholderCount() => Browser.FindElements(By.Id("async-placeholder")).Count; + } + + [Fact] + public void CancelsOutdatedRefreshes_Async() + { + var cancellationCount = Browser.FindElement(By.Id("cancellation-count")); + var finishLoadingButton = Browser.FindElement(By.Id("finish-loading-button")); + + // Load the initial set of items. + finishLoadingButton.Click(); + + // Validate that there are no initial cancellations. + Browser.Equal("0", () => cancellationCount.Text); + + // Validate that there is no initial fetch to cancel. + Browser.ExecuteJavaScript("const container = document.getElementById('async-container');container.scrollTop = 1000;"); + Browser.Equal("0", () => cancellationCount.Text); + + // Validate that scrolling again cancels the first fetch. + Browser.ExecuteJavaScript("const container = document.getElementById('async-container');container.scrollTop = 2000;"); + Browser.Equal("1", () => cancellationCount.Text); + + // Validate that scrolling again cancels the second fetch. + Browser.ExecuteJavaScript("const container = document.getElementById('async-container');container.scrollTop = 3000;"); + Browser.Equal("2", () => cancellationCount.Text); + } + + [Fact] + public void CanUseViewportAsContainer() + { + var expectedInitialSpacerStyle = "height: 0px;"; + var topSpacer = Browser.FindElement(By.Id("viewport-as-root")).FindElement(By.TagName("div")); + + Browser.ExecuteJavaScript("const element = document.getElementById('viewport-as-root'); element.scrollIntoView();"); + + // Validate that the top spacer has a height of zero. + Browser.Equal(expectedInitialSpacerStyle, () => topSpacer.GetAttribute("style")); + + Browser.ExecuteJavaScript("window.scrollTo(0, document.body.scrollHeight);"); + + // Validate that the top spacer has expanded. + Browser.NotEqual(expectedInitialSpacerStyle, () => topSpacer.GetAttribute("style")); + } + } +} diff --git a/src/Components/test/testassets/BasicTestApp/Index.razor b/src/Components/test/testassets/BasicTestApp/Index.razor index 473cb3809c..e7b83c0034 100644 --- a/src/Components/test/testassets/BasicTestApp/Index.razor +++ b/src/Components/test/testassets/BasicTestApp/Index.razor @@ -83,6 +83,7 @@ + diff --git a/src/Components/test/testassets/BasicTestApp/VirtualizationComponent.razor b/src/Components/test/testassets/BasicTestApp/VirtualizationComponent.razor new file mode 100644 index 0000000000..29aba9ea3e --- /dev/null +++ b/src/Components/test/testassets/BasicTestApp/VirtualizationComponent.razor @@ -0,0 +1,76 @@ +

+ Item size:
+ +

+ +

+ Synchronous:
+

+ +
Item @context
+
+
+

+ +

+ Asynchronous:
+
+ Cancellation count: @asyncCancellationCount
+

+ + +
Item @context
+
+ +
Loading item @context.Index...
+
+
+
+

+ +

+ Viewport as root:
+ +

Item @context
+ +

+ +@code { + float itemSize = 100; + ICollection fixedItems = Enumerable.Range(0, 1000).ToList(); + + int asyncTotalItemCount = 200; + int asyncCancellationCount = 0; + TaskCompletionSource asyncTcs = new TaskCompletionSource(); + + HashSet cachedItems = new HashSet(); + + async ValueTask> GetItemsAsync(ItemsProviderRequest request) + { + var loadingTask = asyncTcs.Task; + + var registration = request.CancellationToken.Register(() => CancelLoadingAsync(request.CancellationToken)); + + await loadingTask; + + registration.Dispose(); + + return new ItemsProviderResult(Enumerable.Range(request.StartIndex, request.Count), asyncTotalItemCount); + } + + void FinishLoadingAsync() + { + asyncTcs.SetResult(); + asyncTcs = new TaskCompletionSource(); + } + + void CancelLoadingAsync(System.Threading.CancellationToken cancellationToken) + { + asyncTcs.TrySetCanceled(cancellationToken); + asyncTcs = new TaskCompletionSource(); + + asyncCancellationCount++; + + StateHasChanged(); + } +} diff --git a/src/Components/test/testassets/BasicTestApp/_Imports.razor b/src/Components/test/testassets/BasicTestApp/_Imports.razor index 77285129da..a71616835c 100644 --- a/src/Components/test/testassets/BasicTestApp/_Imports.razor +++ b/src/Components/test/testassets/BasicTestApp/_Imports.razor @@ -1 +1,2 @@ @using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/_Imports.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/_Imports.razor index 4fe5a889de..48dcfafe89 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/_Imports.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/_Imports.razor @@ -4,6 +4,7 @@ @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using BlazorServerWeb_CSharp @using BlazorServerWeb_CSharp.Shared diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/_Imports.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/_Imports.razor index ac695bb5b1..e4e4f5afbf 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/_Imports.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/_Imports.razor @@ -6,6 +6,7 @@ @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @*#if (!Hosted) From 1be16fb4c9942503477d185cc20e0afbcd4590dc Mon Sep 17 00:00:00 2001 From: SQL-MisterMagoo Date: Tue, 4 Aug 2020 05:14:46 +0100 Subject: [PATCH 103/106] Add delay before showing Reconnection UI (#24137) * Add CSS delay before showing Reconnection UI * rebuild yet again to try and get past the conflict --- src/Components/Web.JS/dist/Release/blazor.server.js | 2 +- .../src/Platform/Circuits/DefaultReconnectDisplay.ts | 2 ++ .../Web.JS/tests/DefaultReconnectDisplay.test.ts | 4 ++++ .../content/BlazorServerWeb-CSharp/wwwroot/css/site.css | 9 +++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js index f8c5623445..57f7a141ef 100644 --- a/src/Components/Web.JS/dist/Release/blazor.server.js +++ b/src/Components/Web.JS/dist/Release/blazor.server.js @@ -16,4 +16,4 @@ var r=n(54),o=n(55),i=n(56);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647 object-assign (c) Sindre Sorhus @license MIT -*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(10),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(68),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(8))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(37)).Stream=t,t.Readable=t,t.Writable=n(42),t.Duplex=n(9),t.Transform=n(43),t.PassThrough=n(72)},function(e,t,n){"use strict";e.exports=i;var r=n(43),o=n(19);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(15),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(20);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(36).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(34),o=n(33),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(16),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(10),o=n(11),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="0.0.0-DEV_BUILD"}]); \ No newline at end of file +*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(10),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(68),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(8))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(37)).Stream=t,t.Readable=t,t.Writable=n(42),t.Duplex=n(9),t.Transform=n(43),t.PassThrough=n(72)},function(e,t,n){"use strict";e.exports=i;var r=n(43),o=n(19);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(15),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(20);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(36).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(34),o=n(33),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(16),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(10),o=n(11),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="5.0.0-dev"}]); \ No newline at end of file diff --git a/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts b/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts index 58d9eb7e37..7e6688de83 100644 --- a/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts +++ b/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts @@ -64,6 +64,7 @@ export class DefaultReconnectDisplay implements ReconnectDisplay { this.document.body.appendChild(this.modal); } this.modal.style.display = 'block'; + this.modal.classList.add('show'); this.button.style.display = 'none'; this.reloadParagraph.style.display = 'none'; this.message.textContent = 'Attempting to reconnect to the server...'; @@ -71,6 +72,7 @@ export class DefaultReconnectDisplay implements ReconnectDisplay { hide(): void { this.modal.style.display = 'none'; + this.modal.classList.remove('show'); } failed(): void { diff --git a/src/Components/Web.JS/tests/DefaultReconnectDisplay.test.ts b/src/Components/Web.JS/tests/DefaultReconnectDisplay.test.ts index 3378ce22fc..ad0afc0b9d 100644 --- a/src/Components/Web.JS/tests/DefaultReconnectDisplay.test.ts +++ b/src/Components/Web.JS/tests/DefaultReconnectDisplay.test.ts @@ -14,6 +14,7 @@ describe('DefaultReconnectDisplay', () => { expect(element).toBeDefined(); expect(element!.id).toBe('test-dialog-id'); expect(element!.style.display).toBe('block'); + expect(element!.classList).toContain('show'); expect(display.message.textContent).toBe('Attempting to reconnect to the server...'); expect(display.button.style.display).toBe('none'); @@ -36,6 +37,7 @@ describe('DefaultReconnectDisplay', () => { display.hide(); expect(display.modal.style.display).toBe('none'); + expect(display.modal.classList).not.toContain('show'); }); it ('updates message on fail', () => { @@ -46,6 +48,7 @@ describe('DefaultReconnectDisplay', () => { display.failed(); expect(display.modal.style.display).toBe('block'); + expect(display.modal.classList).toContain('show'); expect(display.message.innerHTML).toBe('Reconnection failed. Try reloading the page if you\'re unable to reconnect.'); expect(display.button.style.display).toBe('block'); }); @@ -58,6 +61,7 @@ describe('DefaultReconnectDisplay', () => { display.rejected(); expect(display.modal.style.display).toBe('block'); + expect(display.modal.classList).toContain('show'); expect(display.message.innerHTML).toBe('Could not reconnect to the server. Reload the page to restore functionality.'); expect(display.button.style.display).toBe('none'); }); diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css index caebf2a463..af74676569 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css @@ -48,3 +48,12 @@ a, .btn-link { right: 0.75rem; top: 0.5rem; } + +#components-reconnect-modal.show { + animation: VISIBILITY 500ms linear; +} + +@keyframes VISIBILITY { + 0%,99% { visibility: hidden; } + 100% { visibility: visible; } +} From e13368391b0220ba4404f2c5f448fd5f2733a70b Mon Sep 17 00:00:00 2001 From: Doug Bunting <6431421+dougbu@users.noreply.github.com> Date: Tue, 4 Aug 2020 10:05:55 -0700 Subject: [PATCH 104/106] Keep `@(Reference)` metadata when creating `@(ProjectReference)` items (#21567) - #20818, fix e.g. references to Microsoft.Web.Xdt.Extensions in our packages - make `@(Reference)` items much more broadly applicable - emit an error when `@(ProjectReference)` is used instead of `@(Reference)` - then get rid of the errors (!!) - rename a couple of projects to match their assembly names - then regenerate the `@(ProjectReferenceProvider)` items - switch intersection approach from Exclude / Exclude to Copy / Update / Copy Projects of particular interest: - src/DefaultBuilder/src/Microsoft.AspNetCore.csproj - honouring metadata left e.g. Microsoft.AspNetCore.Components.WebAssembly.DevServer package unchanged - removed redundant metadata after that confirmation - src/Razor/tools/Microsoft.AspNetCore.Razor.Internal.Transport/ - content of this package unchanged but metadata avoids extra work - add a comment about the extra work - src/SiteExtensions/LoggingAggregate/src/Microsoft.AspNetCore.AzureAppServices.SiteExtension/ - success! removes Microsoft.Web.Xdt.Extensions dependency from the package - src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj - add a `Condition` to avoid an ordering issue I hit here - src/Tools/Extensions.ApiDescription.Server/src/ - avoid errors the new build ordering and timing caused Separately, up the timeout in the `` task - hit repeated timeouts downloading dotnet-runtime-5.0.0-rc.1.20370.4-win-x64.zip nits: - remove dupe `@(Reference)` item in Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj - remove useless `%(ProjectReference.IsImplicitlyDefined)` metadata as well as its misspellings - remove extra spaces from ProjectReferences.props - clean up a few comments in ResolveReferences.targets * !fixup! Correct other references to renamed projects --- AspNetCore.sln | 4 +- eng/CodeGen.proj | 2 +- eng/ProjectReferences.props | 310 +++++++++--------- eng/targets/CSharp.Common.props | 3 +- eng/targets/ResolveReferences.targets | 77 +++-- eng/tools/RepoTasks/DownloadFile.cs | 4 +- ...re.Components.WebAssembly.DevServer.csproj | 1 - ....BlazorWebAssembly.IntegrationTests.csproj | 12 +- ...Microsoft.NET.Sdk.BlazorWebAssembly.csproj | 1 - .../src/Microsoft.AspNetCore.csproj | 35 +- .../BlazorTemplates.Tests.csproj | 4 +- .../test/ProjectTemplates.Tests.csproj | 6 +- ...pNetCore.Razor.Tools.csproj => rzc.csproj} | 0 .../BuildServerIntegrationTest.cs | 2 +- ...soft.NET.Sdk.Razor.IntegrationTests.csproj | 6 +- .../src/Microsoft.NET.Sdk.Razor.csproj | 12 +- src/Razor/Razor.slnf | 2 +- ...AspNetCore.Razor.Internal.Transport.csproj | 1 + .../IISExpress.FunctionalTests.csproj | 2 +- ...zureAppServices.SiteExtension.Tests.csproj | 2 +- .../Microsoft.Web.Xdt.Extensions.Tests.csproj | 2 +- ...t.AspNetCore.Runtime.SiteExtension.pkgproj | 6 +- ...ensions.ApiDescription.Client.Tests.csproj | 2 +- ...ft.Extensions.ApiDescription.Server.csproj | 17 +- ...ft.Extensions.ApiDescription.Server.nuspec | 6 +- ...ider.csproj => GetDocument.Insider.csproj} | 0 src/Tools/Tools.slnf | 4 +- 27 files changed, 271 insertions(+), 252 deletions(-) rename src/Razor/Microsoft.AspNetCore.Razor.Tools/src/{Microsoft.AspNetCore.Razor.Tools.csproj => rzc.csproj} (100%) rename src/Tools/GetDocumentInsider/src/{GetDocumentInsider.csproj => GetDocument.Insider.csproj} (100%) diff --git a/AspNetCore.sln b/AspNetCore.sln index 989394fa94..9f1fe33e99 100644 --- a/AspNetCore.sln +++ b/AspNetCore.sln @@ -1063,7 +1063,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor. EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Tools", "{B9704650-5360-416C-9393-FAF707766AA8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools", "src\Razor\Microsoft.AspNetCore.Razor.Tools\src\Microsoft.AspNetCore.Razor.Tools.csproj", "{4C84173F-5C1F-49A1-895A-C0CA11DE84B1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools", "src\Razor\Microsoft.AspNetCore.Razor.Tools\src\rzc.csproj", "{4C84173F-5C1F-49A1-895A-C0CA11DE84B1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools.Test", "src\Razor\Microsoft.AspNetCore.Razor.Tools\test\Microsoft.AspNetCore.Razor.Tools.Test.csproj", "{FE095F11-4CD2-406D-A2BB-1BE569603BF0}" EndProject @@ -1295,7 +1295,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDes EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GetDocumentInsider", "GetDocumentInsider", "{A1B75FC7-A777-4412-A635-D0C9ED8FE7A0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GetDocumentInsider", "src\Tools\GetDocumentInsider\src\GetDocumentInsider.csproj", "{DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GetDocumentInsider", "src\Tools\GetDocumentInsider\src\GetDocument.Insider.csproj", "{DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDescription.Client.Tests", "src\Tools\Extensions.ApiDescription.Client\test\Microsoft.Extensions.ApiDescription.Client.Tests.csproj", "{34E40892-48C1-4D3D-AB49-FAC3C4C00B42}" EndProject diff --git a/eng/CodeGen.proj b/eng/CodeGen.proj index 4e3a1b91c5..5ddd599daf 100644 --- a/eng/CodeGen.proj +++ b/eng/CodeGen.proj @@ -33,7 +33,7 @@ --> - @(_ProjectReferenceProvider->'', '%0A ') + @(_ProjectReferenceProvider->'', '%0A ') ]]> diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props index 6dbfca4646..d0b1995a42 100644 --- a/eng/ProjectReferences.props +++ b/eng/ProjectReferences.props @@ -5,160 +5,160 @@ --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eng/targets/CSharp.Common.props b/eng/targets/CSharp.Common.props index 00aa2fa2a7..237f94bd65 100644 --- a/eng/targets/CSharp.Common.props +++ b/eng/targets/CSharp.Common.props @@ -18,9 +18,8 @@ several versions older than latest. We reference the project to ensure it's built before the other projects that use it. Since this is a project reference, we must explicitly import the props file and also specify the output location of the SDK directory. --> - diff --git a/eng/targets/ResolveReferences.targets b/eng/targets/ResolveReferences.targets index d8d30907c8..646a526c81 100644 --- a/eng/targets/ResolveReferences.targets +++ b/eng/targets/ResolveReferences.targets @@ -1,5 +1,4 @@ - <_ProjectReferenceByAssemblyName Condition="'$(UseProjectReferences)' == 'true'" - Include="@(ProjectReferenceProvider)" - Exclude="@(_UnusedProjectReferenceProvider)" /> - - - + + + <_AllProjectReference Include="@(ProjectReferenceProvider)" /> + + + <_AllProjectReference Update="@(ProjectReference->'%(Filename)')" DirectUse="1" /> + + <_AllProjectReference Update="@(Reference)" Use="1"> + + %(Reference.Aliases) + %(Reference.BuildInParallel) + %(Reference.DoNotHarvest) + %(Reference.ExcludeAssets) + %(Reference.IncludeAssets) + %(Reference.IsNativeImage) + %(Reference.LinkBase) + %(Reference.Name) + %(Reference.OutputItemType) + %(Reference.Package) + %(Reference.Private) + %(Reference.PrivateAssets) + %(Reference.Project) + %(Reference.Properties) + %(Reference.Publish) + %(Reference.ReferenceOutputAssembly) + %(Reference.SetPlatform) + %(Reference.SkipGetTargetFrameworkProperties) + %(Reference.Targets) + %(Reference.UndefineProperties) + %(Reference.Watch) + + + + + + + + + @@ -127,14 +159,15 @@ - + ContentFiles;Build All @@ -285,6 +318,8 @@ Text="Only implementation projects should set IsAspNetCoreApp=true." /> + diff --git a/eng/tools/RepoTasks/DownloadFile.cs b/eng/tools/RepoTasks/DownloadFile.cs index 7ba2602d0c..a520da4355 100644 --- a/eng/tools/RepoTasks/DownloadFile.cs +++ b/eng/tools/RepoTasks/DownloadFile.cs @@ -100,7 +100,7 @@ namespace RepoTasks Log.LogMessage(MessageImportance.High, $"Attempting download '{source}' to '{target}'"); - using (var httpClient = new HttpClient()) + using (var httpClient = new HttpClient { Timeout = TimeSpan.FromMinutes(5) }) { for (int retryNumber = 0; retryNumber < MaxRetries; retryNumber++) { @@ -146,4 +146,4 @@ namespace RepoTasks return null; } } -} \ No newline at end of file +} diff --git a/src/Components/WebAssembly/DevServer/src/Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj b/src/Components/WebAssembly/DevServer/src/Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj index 53a9f4de0b..3a4819a383 100644 --- a/src/Components/WebAssembly/DevServer/src/Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj +++ b/src/Components/WebAssembly/DevServer/src/Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj @@ -19,7 +19,6 @@ - diff --git a/src/Components/WebAssembly/Sdk/integrationtests/Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj b/src/Components/WebAssembly/Sdk/integrationtests/Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj index 4255ce7c73..27241a81b4 100644 --- a/src/Components/WebAssembly/Sdk/integrationtests/Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj +++ b/src/Components/WebAssembly/Sdk/integrationtests/Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj @@ -28,16 +28,8 @@ - - - false - true - - - - false - true - + + diff --git a/src/Components/WebAssembly/Sdk/src/Microsoft.NET.Sdk.BlazorWebAssembly.csproj b/src/Components/WebAssembly/Sdk/src/Microsoft.NET.Sdk.BlazorWebAssembly.csproj index adf7330a3f..404f147f92 100644 --- a/src/Components/WebAssembly/Sdk/src/Microsoft.NET.Sdk.BlazorWebAssembly.csproj +++ b/src/Components/WebAssembly/Sdk/src/Microsoft.NET.Sdk.BlazorWebAssembly.csproj @@ -22,7 +22,6 @@ Include="..\tools\Microsoft.NET.Sdk.BlazorWebAssembly.Tools.csproj" Targets="Publish" ReferenceOutputAssembly="false" - IsImplicityDefined="false" SkipGetTargetFrameworkProperties="true" UndefineProperties="TargetFramework;TargetFrameworks;RuntimeIdentifier;PublishDir" /> diff --git a/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj b/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj index 89f0b0ff8b..58513c6253 100644 --- a/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj +++ b/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj @@ -10,24 +10,25 @@ - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj index 77e0ab1128..232a11f3a4 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj @@ -40,9 +40,7 @@ - + diff --git a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj index ca40318bc5..c20f7f0d59 100644 --- a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj +++ b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj @@ -42,7 +42,7 @@ - + false @@ -54,9 +54,7 @@ - + diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/Microsoft.AspNetCore.Razor.Tools.csproj b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj similarity index 100% rename from src/Razor/Microsoft.AspNetCore.Razor.Tools/src/Microsoft.AspNetCore.Razor.Tools.csproj rename to src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildServerIntegrationTest.cs b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildServerIntegrationTest.cs index 041c27a955..005ac4ccf6 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildServerIntegrationTest.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildServerIntegrationTest.cs @@ -155,7 +155,7 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests var repositoryRoot = ProjectDirectory.SearchUp(AppContext.BaseDirectory, "global.json"); var solutionRoot = Path.Combine(repositoryRoot, "src", "Razor"); var toolAssemblyDirectory = Path.Combine(solutionRoot, "Microsoft.AspNetCore.Razor.Tools", "src"); - var toolAssemblyPath = Path.Combine(toolAssemblyDirectory, "Microsoft.AspNetCore.Razor.Tools.csproj"); + var toolAssemblyPath = Path.Combine(toolAssemblyDirectory, "rzc.csproj"); var projectDirectory = new TestProjectDirectory(solutionRoot, toolAssemblyDirectory, toolAssemblyPath); var publishDir = Path.Combine(Path.GetTempPath(), "Razor", Path.GetRandomFileName(), "RzcPublish"); var publishResult = await MSBuildProcessManager.RunProcessAsync(projectDirectory, $"/t:Publish /p:PublishDir=\"{publishDir}\""); diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj index 2832be128d..7733267812 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj +++ b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj @@ -30,11 +30,7 @@ - - - false - true - + diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj b/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj index 552d192460..c1f511a8ac 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj +++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj @@ -24,18 +24,14 @@ - - @@ -73,12 +69,12 @@ - + + diff --git a/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj b/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj index f5a90fc3f3..28d78f1f47 100644 --- a/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj +++ b/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/SiteExtensions/LoggingAggregate/test/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj b/src/SiteExtensions/LoggingAggregate/test/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj index e1212ece07..4711b09890 100644 --- a/src/SiteExtensions/LoggingAggregate/test/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj +++ b/src/SiteExtensions/LoggingAggregate/test/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/SiteExtensions/Microsoft.Web.Xdt.Extensions/tests/Microsoft.Web.Xdt.Extensions.Tests.csproj b/src/SiteExtensions/Microsoft.Web.Xdt.Extensions/tests/Microsoft.Web.Xdt.Extensions.Tests.csproj index b73f8dc9e1..d794280afc 100644 --- a/src/SiteExtensions/Microsoft.Web.Xdt.Extensions/tests/Microsoft.Web.Xdt.Extensions.Tests.csproj +++ b/src/SiteExtensions/Microsoft.Web.Xdt.Extensions/tests/Microsoft.Web.Xdt.Extensions.Tests.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj b/src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj index c75271f20f..0d08bab58e 100644 --- a/src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj +++ b/src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj @@ -20,11 +20,14 @@ - + + false @@ -33,7 +36,6 @@ - diff --git a/src/Tools/Extensions.ApiDescription.Client/test/Microsoft.Extensions.ApiDescription.Client.Tests.csproj b/src/Tools/Extensions.ApiDescription.Client/test/Microsoft.Extensions.ApiDescription.Client.Tests.csproj index 5b01ef6ad9..e642e7ce03 100644 --- a/src/Tools/Extensions.ApiDescription.Client/test/Microsoft.Extensions.ApiDescription.Client.Tests.csproj +++ b/src/Tools/Extensions.ApiDescription.Client/test/Microsoft.Extensions.ApiDescription.Client.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.csproj b/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.csproj index bf8942884e..db7bc7926a 100644 --- a/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.csproj +++ b/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.csproj @@ -11,18 +11,21 @@ $(MSBuildProjectName) MSBuild;Swagger;OpenAPI;code generation;Web API;service reference;document generation true + + - Build;Publish - - - - - + + + Publish + diff --git a/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.nuspec b/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.nuspec index 57a21d4cf7..a85edc2f4a 100644 --- a/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.nuspec +++ b/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.nuspec @@ -9,8 +9,8 @@ - - - + + + diff --git a/src/Tools/GetDocumentInsider/src/GetDocumentInsider.csproj b/src/Tools/GetDocumentInsider/src/GetDocument.Insider.csproj similarity index 100% rename from src/Tools/GetDocumentInsider/src/GetDocumentInsider.csproj rename to src/Tools/GetDocumentInsider/src/GetDocument.Insider.csproj diff --git a/src/Tools/Tools.slnf b/src/Tools/Tools.slnf index 813a7aa908..a49d94c1d3 100644 --- a/src/Tools/Tools.slnf +++ b/src/Tools/Tools.slnf @@ -8,7 +8,7 @@ "src\\Tools\\Extensions.ApiDescription.Server\\src\\Microsoft.Extensions.ApiDescription.Server.csproj", "src\\Tools\\FirstRunCertGenerator\\src\\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj", "src\\Tools\\FirstRunCertGenerator\\test\\Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj", - "src\\Tools\\GetDocumentInsider\\src\\GetDocumentInsider.csproj", + "src\\Tools\\GetDocumentInsider\\src\\GetDocument.Insider.csproj", "src\\Tools\\Microsoft.dotnet-openapi\\src\\Microsoft.dotnet-openapi.csproj", "src\\Tools\\Microsoft.dotnet-openapi\\test\\dotnet-microsoft.openapi.Tests.csproj", "src\\Tools\\dotnet-dev-certs\\src\\dotnet-dev-certs.csproj", @@ -20,4 +20,4 @@ "src\\Tools\\dotnet-watch\\test\\dotnet-watch.Tests.csproj" ] } -} \ No newline at end of file +} From cfd20ad2d71ff63dc9a06be8bf8628321e5bac99 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Tue, 4 Aug 2020 12:40:42 -0700 Subject: [PATCH 105/106] Fix some linker warnings, report others (#24553) * Fix some linker warnings, report others - Added RequiresUnreferencedCode to UseStartup that takes a string - Added some suppressions - Fixed ConfigureContainer calls - Fixed HostingStartupAttribute --- .../src/HostingAbstractionsWebHostBuilderExtensions.cs | 3 ++- src/Hosting/Abstractions/src/HostingStartupAttribute.cs | 8 +++++--- .../Hosting/src/GenericHost/GenericWebHostBuilder.cs | 7 ++++--- src/Hosting/Hosting/src/Internal/StartupLoader.cs | 1 + .../Server.IntegrationTesting/src/ApplicationPublisher.cs | 7 ++++--- .../src/Common/DeploymentParameters.cs | 5 +++++ .../test/FunctionalTests/LinkedApplicationTests.cs | 1 + 7 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Hosting/Abstractions/src/HostingAbstractionsWebHostBuilderExtensions.cs b/src/Hosting/Abstractions/src/HostingAbstractionsWebHostBuilderExtensions.cs index 3b14957ba4..04f9ca6d65 100644 --- a/src/Hosting/Abstractions/src/HostingAbstractionsWebHostBuilderExtensions.cs +++ b/src/Hosting/Abstractions/src/HostingAbstractionsWebHostBuilderExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; using System.Threading; @@ -47,6 +48,7 @@ namespace Microsoft.AspNetCore.Hosting /// The to configure. /// The name of the assembly containing the startup type. /// The . + [RequiresUnreferencedCode("Types and members the loaded assembly depends on might be removed.")] public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, string startupAssemblyName) { if (startupAssemblyName == null) @@ -54,7 +56,6 @@ namespace Microsoft.AspNetCore.Hosting throw new ArgumentNullException(nameof(startupAssemblyName)); } - return hostBuilder .UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName) .UseSetting(WebHostDefaults.StartupAssemblyKey, startupAssemblyName); diff --git a/src/Hosting/Abstractions/src/HostingStartupAttribute.cs b/src/Hosting/Abstractions/src/HostingStartupAttribute.cs index cb028c327b..b03ec263dc 100644 --- a/src/Hosting/Abstractions/src/HostingStartupAttribute.cs +++ b/src/Hosting/Abstractions/src/HostingStartupAttribute.cs @@ -1,7 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; +using System.Diagnostics.CodeAnalysis; using System.Reflection; namespace Microsoft.AspNetCore.Hosting @@ -16,7 +17,7 @@ namespace Microsoft.AspNetCore.Hosting /// Constructs the with the specified type. ///
/// A type that implements . - public HostingStartupAttribute(Type hostingStartupType) + public HostingStartupAttribute([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] Type hostingStartupType) { if (hostingStartupType == null) { @@ -35,6 +36,7 @@ namespace Microsoft.AspNetCore.Hosting /// The implementation of that should be loaded when /// starting an application. /// + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] public Type HostingStartupType { get; } } -} \ No newline at end of file +} diff --git a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs index d3b97ca8f1..9f97f03c4e 100644 --- a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs +++ b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs @@ -234,6 +234,7 @@ namespace Microsoft.AspNetCore.Hosting return this; } + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2006:UnrecognizedReflectionPattern", Justification = "We need to call a generic method on IHostBuilder.")] private void UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, HostBuilderContext context, IServiceCollection services, object instance = null) { var webHostBuilderContext = GetWebHostBuilderContext(context); @@ -275,12 +276,12 @@ namespace Microsoft.AspNetCore.Hosting var actionType = typeof(Action<,>).MakeGenericType(typeof(HostBuilderContext), containerType); // Get the private ConfigureContainer method on this type then close over the container type - var configureCallback = GetType().GetMethod(nameof(ConfigureContainer), BindingFlags.NonPublic | BindingFlags.Instance) + var configureCallback = typeof(GenericWebHostBuilder).GetMethod(nameof(ConfigureContainerImpl), BindingFlags.NonPublic | BindingFlags.Instance) .MakeGenericMethod(containerType) .CreateDelegate(actionType, this); // _builder.ConfigureContainer(ConfigureContainer); - typeof(IHostBuilder).GetMethods().First(m => m.Name == nameof(IHostBuilder.ConfigureContainer)) + typeof(IHostBuilder).GetMethod(nameof(IHostBuilder.ConfigureContainer)) .MakeGenericMethod(containerType) .InvokeWithoutWrappingExceptions(_builder, new object[] { configureCallback }); } @@ -310,7 +311,7 @@ namespace Microsoft.AspNetCore.Hosting }); } - private void ConfigureContainer(HostBuilderContext context, TContainer container) + private void ConfigureContainerImpl(HostBuilderContext context, TContainer container) { var instance = context.Properties[_startupKey]; var builder = (ConfigureContainerBuilder)context.Properties[typeof(ConfigureContainerBuilder)]; diff --git a/src/Hosting/Hosting/src/Internal/StartupLoader.cs b/src/Hosting/Hosting/src/Internal/StartupLoader.cs index 8e8f235eae..163c942269 100644 --- a/src/Hosting/Hosting/src/Internal/StartupLoader.cs +++ b/src/Hosting/Hosting/src/Internal/StartupLoader.cs @@ -222,6 +222,7 @@ namespace Microsoft.AspNetCore.Hosting } } + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "We're warning at the entry point. This is an implementation detail.")] public static Type FindStartupType(string startupAssemblyName, string environmentName) { if (string.IsNullOrEmpty(startupAssemblyName)) diff --git a/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs b/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs index 5ef431c2ce..5f64d971c2 100644 --- a/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs +++ b/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs @@ -79,8 +79,9 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting // https://stackoverflow.com/a/37983587/102052 // // 2. If "dotnet publish" does hang indefinitely for some reason, tests should fail fast with an error message. - const int timeoutMinutes = 5; - if (hostProcess.WaitForExit(milliseconds: timeoutMinutes * 60 * 1000)) + var timeout = deploymentParameters.PublishTimeout ?? TimeSpan.FromMinutes(5); + + if (hostProcess.WaitForExit(milliseconds: (int)timeout.TotalMilliseconds)) { if (hostProcess.ExitCode != 0) { @@ -91,7 +92,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting } else { - var message = $"{DotnetCommandName} publish failed to exit after {timeoutMinutes} minutes"; + var message = $"{DotnetCommandName} publish failed to exit after {timeout.TotalMinutes} minutes"; logger.LogError(message); throw new Exception(message); } diff --git a/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs b/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs index 5002e8f530..0e26e772a0 100644 --- a/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs +++ b/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs @@ -179,6 +179,11 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting /// public Action UserAdditionalCleanup { get; set; } + /// + /// Timeout for publish + /// + public TimeSpan? PublishTimeout { get; set; } + public override string ToString() { return string.Format( diff --git a/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs b/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs index 8bce9c2b42..7b2de2b17b 100644 --- a/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs +++ b/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs @@ -37,6 +37,7 @@ namespace Microsoft.AspNetCore.Hosting.FunctionalTests ApplicationType = ApplicationType.Standalone, PublishApplicationBeforeDeployment = true, RestoreDependencies = true, + PublishTimeout = TimeSpan.FromMinutes(10), // Machines are slow (these tests restore) StatusMessagesEnabled = false }; From 29ceed2b2a6bcd9f3064f51cc78858e22c8544c4 Mon Sep 17 00:00:00 2001 From: Tanay Parikh Date: Tue, 4 Aug 2020 13:06:42 -0700 Subject: [PATCH 106/106] Razor TagHelperDescriptor Hashing (#24551) * Razor TagHelperDescriptor Hashing and Caching 1/2 PRs for https://github.com/dotnet/aspnetcore/issues/23170 The other PR will be in aspnetcore-tooling to utilize these changes. https://github.com/dotnet/aspnetcore-tooling/pull/2307 --- .../src/BoundAttributeDescriptorComparer.cs | 16 +- ...undAttributeParameterDescriptorComparer.cs | 6 +- .../src/DirectiveDescriptorComparer.cs | 18 +- .../src/DirectiveTokenDescriptorComparer.cs | 2 +- ...Microsoft.AspNetCore.Razor.Language.csproj | 2 +- .../RequiredAttributeDescriptorComparer.cs | 3 +- .../src/TagHelperDescriptorComparer.cs | 44 +- .../src/TagMatchingRuleDescriptorComparer.cs | 13 +- ...soft.AspNetCore.Razor.Language.Test.csproj | 26 +- .../test/TagHelperDescriptorComparerTest.cs | 208 +++++ .../src/DiscoverCommand.cs | 5 +- .../src/GenerateCommand.cs | 3 +- .../src/rzc.csproj | 5 +- ...rosoft.AspNetCore.Razor.Performance.csproj | 15 +- .../RazorTagHelperParsingBenchmark.cs | 3 +- .../RazorShared/JsonReaderExtensions.cs | 58 ++ .../RazorDiagnosticJsonConverter.cs | 2 +- .../TagHelperDescriptorJsonConverter.cs | 856 +++++++++++++----- .../RazorShared}/taghelpers.json | 0 19 files changed, 1028 insertions(+), 257 deletions(-) create mode 100644 src/Razor/Microsoft.AspNetCore.Razor.Language/test/TagHelperDescriptorComparerTest.cs create mode 100644 src/Shared/RazorShared/JsonReaderExtensions.cs rename src/{Razor/perf/Microsoft.AspNetCore.Razor.Performance => Shared/RazorShared}/taghelpers.json (100%) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeDescriptorComparer.cs index 54154a7aaa..4b3ae0503c 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -56,10 +56,20 @@ namespace Microsoft.AspNetCore.Razor.Language } var hash = HashCodeCombiner.Start(); - hash.Add(descriptor.Kind); + hash.Add(descriptor.Kind, StringComparer.Ordinal); hash.Add(descriptor.Name, StringComparer.Ordinal); + if (descriptor.BoundAttributeParameters != null) + { + for (var i = 0; i < descriptor.BoundAttributeParameters.Count; i++) + { + hash.Add(descriptor.BoundAttributeParameters[i]); + } + } + + hash.Add(descriptor.Metadata.Count); + return hash.CombinedHash; } } -} \ No newline at end of file +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeParameterDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeParameterDescriptorComparer.cs index 6cbc01017c..8896c341d3 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeParameterDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeParameterDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -51,8 +51,10 @@ namespace Microsoft.AspNetCore.Razor.Language } var hash = HashCodeCombiner.Start(); - hash.Add(descriptor.Kind); + hash.Add(descriptor.Kind, StringComparer.Ordinal); hash.Add(descriptor.Name, StringComparer.Ordinal); + hash.Add(descriptor.TypeName, StringComparer.Ordinal); + hash.Add(descriptor.Metadata?.Count); return hash.CombinedHash; } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveDescriptorComparer.cs index c3a9590231..42bff25217 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -39,11 +39,19 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(descriptor)); } - var hashCodeCombiner = HashCodeCombiner.Start(); - hashCodeCombiner.Add(descriptor.Directive, StringComparer.Ordinal); - hashCodeCombiner.Add(descriptor.Kind); + var hash = HashCodeCombiner.Start(); + hash.Add(descriptor.Directive, StringComparer.Ordinal); + hash.Add(descriptor.Kind); - return hashCodeCombiner.CombinedHash; + if (descriptor.Tokens != null) + { + for (var i = 0; i < descriptor.Tokens.Count; i++) + { + hash.Add(descriptor.Tokens[i]); + } + } + + return hash.CombinedHash; } } } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveTokenDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveTokenDescriptorComparer.cs index 4ec1ba70d6..8d3d4bc24e 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveTokenDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveTokenDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Microsoft.AspNetCore.Razor.Language.csproj b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Microsoft.AspNetCore.Razor.Language.csproj index fbda167142..38d03b2a1d 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Microsoft.AspNetCore.Razor.Language.csproj +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Microsoft.AspNetCore.Razor.Language.csproj @@ -1,4 +1,4 @@ - + Razor is a markup syntax for adding server-side logic to web pages. This package contains the Razor parser and code generation infrastructure. diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/RequiredAttributeDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/RequiredAttributeDescriptorComparer.cs index 2883797e4f..6467803ee9 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/RequiredAttributeDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/RequiredAttributeDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -57,6 +57,7 @@ namespace Microsoft.AspNetCore.Razor.Language var hash = HashCodeCombiner.Start(); hash.Add(descriptor.Name, StringComparer.Ordinal); + hash.Add(descriptor.Value, StringComparer.Ordinal); return hash.CombinedHash; } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagHelperDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagHelperDescriptorComparer.cs index a078fc0630..275ee11cea 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagHelperDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagHelperDescriptorComparer.cs @@ -120,8 +120,50 @@ namespace Microsoft.AspNetCore.Razor.Language hash.Add(descriptor.Kind, StringComparer.Ordinal); hash.Add(descriptor.AssemblyName, StringComparer.Ordinal); hash.Add(descriptor.Name, StringComparer.Ordinal); + hash.Add(descriptor.DisplayName, StringComparer.Ordinal); + hash.Add(descriptor.CaseSensitive ? 1 : 0); + + if (descriptor.BoundAttributes != null) + { + for (var i = 0; i < descriptor.BoundAttributes.Count; i++) + { + hash.Add(descriptor.BoundAttributes[i]); + } + } + + if (descriptor.TagMatchingRules != null) + { + for (var i = 0; i < descriptor.TagMatchingRules.Count; i++) + { + hash.Add(descriptor.TagMatchingRules[i]); + } + } + + if (descriptor.AllowedChildTags != null) + { + for (var i = 0; i < descriptor.AllowedChildTags.Count; i++) + { + hash.Add(descriptor.AllowedChildTags[i]); + } + } + + if (descriptor.Diagnostics != null) + { + for (var i = 0; i < descriptor.Diagnostics.Count; i++) + { + hash.Add(descriptor.Diagnostics[i]); + } + } + + if (descriptor.Metadata != null) + { + foreach (var kvp in descriptor.Metadata) + { + hash.Add(kvp.Value, StringComparer.Ordinal); + } + } return hash.CombinedHash; } } -} \ No newline at end of file +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagMatchingRuleDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagMatchingRuleDescriptorComparer.cs index 4ed8805e92..1b9a2a7589 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagMatchingRuleDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagMatchingRuleDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -48,8 +48,17 @@ namespace Microsoft.AspNetCore.Razor.Language var hash = HashCodeCombiner.Start(); hash.Add(rule.TagName, StringComparer.Ordinal); + hash.Add(rule.ParentTag, StringComparer.Ordinal); + + if (rule.Attributes != null) + { + for (var i = 0; i < rule.Attributes.Count; ++i) + { + hash.Add(rule.Attributes[i]); + } + } return hash.CombinedHash; } } -} \ No newline at end of file +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Microsoft.AspNetCore.Razor.Language.Test.csproj b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Microsoft.AspNetCore.Razor.Language.Test.csproj index f60d341f39..d90b125693 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Microsoft.AspNetCore.Razor.Language.Test.csproj +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Microsoft.AspNetCore.Razor.Language.Test.csproj @@ -13,15 +13,31 @@ false - - - - - + + + + Shared\TagHelperDescriptorJsonConverter.cs + + + Shared\RazorDiagnosticJsonConverter.cs + + + Shared\JsonReaderExtensions.cs + + + TestFiles\taghelpers.json + + + + + + + + diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/TagHelperDescriptorComparerTest.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/TagHelperDescriptorComparerTest.cs new file mode 100644 index 0000000000..d2302ef4e4 --- /dev/null +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/TagHelperDescriptorComparerTest.cs @@ -0,0 +1,208 @@ +// 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 System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Microsoft.CodeAnalysis.Razor.Serialization; +using Newtonsoft.Json; +using Xunit; + +namespace Microsoft.AspNetCore.Razor.Language +{ + public class TagHelperDescriptorComparerTest + { + private static readonly TestFile TagHelpersTestFile = TestFile.Create("TestFiles/taghelpers.json", typeof(TagHelperDescriptorComparerTest)); + + [Fact] + public void GetHashCode_SameTagHelperDescriptors_HashCodeMatches() + { + // Arrange + var descriptor1 = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + var descriptor2 = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + + // Act + var hashCode1 = descriptor1.GetHashCode(); + var hashCode2 = descriptor2.GetHashCode(); + + // Assert + Assert.Equal(hashCode1, hashCode2); + } + + [Fact] + public void GetHashCode_FQNAndNameTagHelperDescriptors_HashCodeDoesNotMatch() + { + // Arrange + var descriptorName = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + tagMatchingRuleName: "Input", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + var descriptorFQN = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + tagMatchingRuleName: "Microsoft.AspNetCore.Components.Forms.Input", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + + // Act + var hashCodeName = descriptorName.GetHashCode(); + var hashCodeFQN = descriptorFQN.GetHashCode(); + + // Assert + Assert.NotEqual(hashCodeName, hashCodeFQN); + } + + [Fact] + public void GetHashCode_DifferentTagHelperDescriptors_HashCodeDoesNotMatch() + { + // Arrange + var counterTagHelper = CreateTagHelperDescriptor( + tagName: "Counter", + typeName: "CounterTagHelper", + assemblyName: "Components.Component", + tagMatchingRuleName: "Input", + attributes: new Action[] + { + builder => builder + .Name("IncrementBy") + .PropertyName("IncrementBy") + .TypeName("System.Int32"), + }); + var inputTagHelper = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + tagMatchingRuleName: "Microsoft.AspNetCore.Components.Forms.Input", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + + // Act + var hashCodeCounter = counterTagHelper.GetHashCode(); + var hashCodeInput = inputTagHelper.GetHashCode(); + + // Assert + Assert.NotEqual(hashCodeCounter, hashCodeInput); + } + + [Fact] + public void GetHashCode_AllTagHelpers_NoHashCodeCollisions() + { + // Arrange + var tagHelpers = ReadTagHelpers(TagHelpersTestFile.OpenRead()); + + // Act + var hashes = new HashSet(tagHelpers.Select(t => t.GetHashCode())); + + // Assert + Assert.Equal(hashes.Count(), tagHelpers.Count); + } + + [Fact] + public void GetHashCode_DuplicateTagHelpers_NoHashCodeCollisions() + { + // Arrange + var tagHelpers = new List(); + var tagHelpersPerBatch = -1; + + // Reads 5 copies of the TagHelpers (with 5x references) + // This ensures we don't have any dependencies on reference based GetHashCode + for (var i = 0; i < 5; ++i) + { + var tagHelpersBatch = ReadTagHelpers(TagHelpersTestFile.OpenRead()); + tagHelpers.AddRange(tagHelpersBatch); + tagHelpersPerBatch = tagHelpersBatch.Count; + } + + // Act + var hashes = new HashSet(tagHelpers.Select(t => t.GetHashCode())); + + // Assert + // Only 1 batch of taghelpers should remain after we filter by hash + Assert.Equal(hashes.Count(), tagHelpersPerBatch); + } + + private static TagHelperDescriptor CreateTagHelperDescriptor( + string tagName, + string typeName, + string assemblyName, + string tagMatchingRuleName = null, + IEnumerable> attributes = null) + { + var builder = TagHelperDescriptorBuilder.Create(typeName, assemblyName) as DefaultTagHelperDescriptorBuilder; + builder.TypeName(typeName); + + if (attributes != null) + { + foreach (var attributeBuilder in attributes) + { + builder.BoundAttributeDescriptor(attributeBuilder); + } + } + + builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagMatchingRuleName ?? tagName)); + + var descriptor = builder.Build(); + + return descriptor; + } + + private IReadOnlyList ReadTagHelpers(Stream stream) + { + var serializer = new JsonSerializer(); + serializer.Converters.Add(new RazorDiagnosticJsonConverter()); + serializer.Converters.Add(new TagHelperDescriptorJsonConverter()); + + IReadOnlyList result; + + using var streamReader = new StreamReader(stream); + using (var reader = new JsonTextReader(streamReader)) + { + result = serializer.Deserialize>(reader); + } + + stream.Dispose(); + + return result; + } + } +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/DiscoverCommand.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/DiscoverCommand.cs index 1c96b83e85..7ac1ea23c7 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/DiscoverCommand.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/DiscoverCommand.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -13,7 +13,6 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Serialization; using Microsoft.Extensions.CommandLineUtils; -using Microsoft.VisualStudio.LanguageServices.Razor.Serialization; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.Tools @@ -223,4 +222,4 @@ namespace Microsoft.AspNetCore.Razor.Tools } } } -} \ No newline at end of file +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs index 658b9d2263..229d62a040 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -12,7 +12,6 @@ using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Serialization; using Microsoft.Extensions.CommandLineUtils; -using Microsoft.VisualStudio.LanguageServices.Razor.Serialization; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.Tools diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj index 0e4954984b..590e785d0e 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj @@ -1,4 +1,4 @@ - + Razor is a markup syntax for adding server-side logic to web pages. This assembly contains infrastructure supporting Razor MSBuild integration. @@ -33,6 +33,9 @@ Shared\RazorDiagnosticJsonConverter.cs + + Shared\JsonReaderExtensions.cs + diff --git a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj b/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj index 31cc0f16bd..75bf91f96d 100644 --- a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj +++ b/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj @@ -1,4 +1,4 @@ - + netcoreapp2.1 @@ -16,15 +16,22 @@ - - - + Shared\TagHelperDescriptorJsonConverter.cs Shared\RazorDiagnosticJsonConverter.cs + + Shared\JsonReaderExtensions.cs + + + + + taghelpers.json + + diff --git a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/RazorTagHelperParsingBenchmark.cs b/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/RazorTagHelperParsingBenchmark.cs index 56e80f62fb..89e3c291f7 100644 --- a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/RazorTagHelperParsingBenchmark.cs +++ b/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/RazorTagHelperParsingBenchmark.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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 System; @@ -8,7 +8,6 @@ using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Mvc.Razor.Extensions; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.Razor.Serialization; -using Microsoft.VisualStudio.LanguageServices.Razor.Serialization; using Newtonsoft.Json; using static Microsoft.AspNetCore.Razor.Language.DefaultRazorTagHelperBinderPhase; diff --git a/src/Shared/RazorShared/JsonReaderExtensions.cs b/src/Shared/RazorShared/JsonReaderExtensions.cs new file mode 100644 index 0000000000..2cf37b12d5 --- /dev/null +++ b/src/Shared/RazorShared/JsonReaderExtensions.cs @@ -0,0 +1,58 @@ +// 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 System; +using System.Collections.Generic; +using System.Diagnostics; +using Newtonsoft.Json; + +namespace Microsoft.CodeAnalysis.Razor.Serialization +{ + internal static class JsonReaderExtensions + { + public static bool ReadTokenAndAdvance(this JsonReader reader, JsonToken expectedTokenType, out object value) + { + value = reader.Value; + return reader.TokenType == expectedTokenType && reader.Read(); + } + + public static void ReadProperties(this JsonReader reader, Action onProperty) + { + while (reader.Read()) + { + switch (reader.TokenType) + { + case JsonToken.PropertyName: + var propertyName = reader.Value.ToString(); + onProperty(propertyName); + break; + case JsonToken.EndObject: + return; + } + } + } + + public static string ReadNextStringProperty(this JsonReader reader, string propertyName) + { + while (reader.Read()) + { + switch (reader.TokenType) + { + case JsonToken.PropertyName: + Debug.Assert(reader.Value.ToString() == propertyName); + if (reader.Read()) + { + var value = (string)reader.Value; + return value; + } + else + { + return null; + } + } + } + + throw new JsonSerializationException($"Could not find string property '{propertyName}'."); + } + } +} diff --git a/src/Shared/RazorShared/RazorDiagnosticJsonConverter.cs b/src/Shared/RazorShared/RazorDiagnosticJsonConverter.cs index 4bfba23eed..3d34a8e344 100644 --- a/src/Shared/RazorShared/RazorDiagnosticJsonConverter.cs +++ b/src/Shared/RazorShared/RazorDiagnosticJsonConverter.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Razor.Language; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.VisualStudio.LanguageServices.Razor.Serialization +namespace Microsoft.CodeAnalysis.Razor.Serialization { internal class RazorDiagnosticJsonConverter : JsonConverter { diff --git a/src/Shared/RazorShared/TagHelperDescriptorJsonConverter.cs b/src/Shared/RazorShared/TagHelperDescriptorJsonConverter.cs index 3e610c08c7..85763bf559 100644 --- a/src/Shared/RazorShared/TagHelperDescriptorJsonConverter.cs +++ b/src/Shared/RazorShared/TagHelperDescriptorJsonConverter.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Razor.Language; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace Microsoft.CodeAnalysis.Razor.Serialization { @@ -25,56 +24,54 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization return null; } - var descriptor = JObject.Load(reader); - var descriptorKind = descriptor[nameof(TagHelperDescriptor.Kind)].Value(); - var typeName = descriptor[nameof(TagHelperDescriptor.Name)].Value(); - var assemblyName = descriptor[nameof(TagHelperDescriptor.AssemblyName)].Value(); - var tagMatchingRules = descriptor[nameof(TagHelperDescriptor.TagMatchingRules)].Value(); - var boundAttributes = descriptor[nameof(TagHelperDescriptor.BoundAttributes)].Value(); - var childTags = descriptor[nameof(TagHelperDescriptor.AllowedChildTags)].Value(); - var documentation = descriptor[nameof(TagHelperDescriptor.Documentation)].Value(); - var tagOutputHint = descriptor[nameof(TagHelperDescriptor.TagOutputHint)].Value(); - var caseSensitive = descriptor[nameof(TagHelperDescriptor.CaseSensitive)].Value(); - var diagnostics = descriptor[nameof(TagHelperDescriptor.Diagnostics)].Value(); - var metadata = descriptor[nameof(TagHelperDescriptor.Metadata)].Value(); - + // Required tokens (order matters) + var descriptorKind = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.Kind)); + var typeName = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.Name)); + var assemblyName = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.AssemblyName)); var builder = TagHelperDescriptorBuilder.Create(descriptorKind, typeName, assemblyName); - builder.Documentation = documentation; - builder.TagOutputHint = tagOutputHint; - builder.CaseSensitive = caseSensitive; - - foreach (var tagMatchingRule in tagMatchingRules) + reader.ReadProperties(propertyName => { - var rule = tagMatchingRule.Value(); - builder.TagMatchingRule(b => ReadTagMatchingRule(b, rule, serializer)); - } - - foreach (var boundAttribute in boundAttributes) - { - var attribute = boundAttribute.Value(); - builder.BindAttribute(b => ReadBoundAttribute(b, attribute, serializer)); - } - - foreach (var childTag in childTags) - { - var tag = childTag.Value(); - builder.AllowChildTag(childTagBuilder => ReadAllowedChildTag(childTagBuilder, tag, serializer)); - } - - foreach (var diagnostic in diagnostics) - { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); - } - - var metadataReader = metadata.CreateReader(); - var metadataValue = serializer.Deserialize>(metadataReader); - foreach (var item in metadataValue) - { - builder.Metadata[item.Key] = item.Value; - } + switch (propertyName) + { + case nameof(TagHelperDescriptor.Documentation): + if (reader.Read()) + { + var documentation = (string)reader.Value; + builder.Documentation = documentation; + } + break; + case nameof(TagHelperDescriptor.TagOutputHint): + if (reader.Read()) + { + var tagOutputHint = (string)reader.Value; + builder.TagOutputHint = tagOutputHint; + } + break; + case nameof(TagHelperDescriptor.CaseSensitive): + if (reader.Read()) + { + var caseSensitive = (bool)reader.Value; + builder.CaseSensitive = caseSensitive; + } + break; + case nameof(TagHelperDescriptor.TagMatchingRules): + ReadTagMatchingRules(reader, builder); + break; + case nameof(TagHelperDescriptor.BoundAttributes): + ReadBoundAttributes(reader, builder); + break; + case nameof(TagHelperDescriptor.AllowedChildTags): + ReadAllowedChildTags(reader, builder); + break; + case nameof(TagHelperDescriptor.Diagnostics): + ReadDiagnostics(reader, builder.Diagnostics); + break; + case nameof(TagHelperDescriptor.Metadata): + ReadMetadata(reader, builder.Metadata); + break; + } + }); return builder.Build(); } @@ -94,11 +91,17 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization writer.WritePropertyName(nameof(TagHelperDescriptor.AssemblyName)); writer.WriteValue(tagHelper.AssemblyName); - writer.WritePropertyName(nameof(TagHelperDescriptor.Documentation)); - writer.WriteValue(tagHelper.Documentation); + if (tagHelper.Documentation != null) + { + writer.WritePropertyName(nameof(TagHelperDescriptor.Documentation)); + writer.WriteValue(tagHelper.Documentation); + } - writer.WritePropertyName(nameof(TagHelperDescriptor.TagOutputHint)); - writer.WriteValue(tagHelper.TagOutputHint); + if (tagHelper.TagOutputHint != null) + { + writer.WritePropertyName(nameof(TagHelperDescriptor.TagOutputHint)); + writer.WriteValue(tagHelper.TagOutputHint); + } writer.WritePropertyName(nameof(TagHelperDescriptor.CaseSensitive)); writer.WriteValue(tagHelper.CaseSensitive); @@ -111,24 +114,33 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization } writer.WriteEndArray(); - writer.WritePropertyName(nameof(TagHelperDescriptor.BoundAttributes)); - writer.WriteStartArray(); - foreach (var boundAttribute in tagHelper.BoundAttributes) + if (tagHelper.BoundAttributes != null && tagHelper.BoundAttributes.Count > 0) { - WriteBoundAttribute(writer, boundAttribute, serializer); + writer.WritePropertyName(nameof(TagHelperDescriptor.BoundAttributes)); + writer.WriteStartArray(); + foreach (var boundAttribute in tagHelper.BoundAttributes) + { + WriteBoundAttribute(writer, boundAttribute, serializer); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - writer.WritePropertyName(nameof(TagHelperDescriptor.AllowedChildTags)); - writer.WriteStartArray(); - foreach (var allowedChildTag in tagHelper.AllowedChildTags) + if (tagHelper.AllowedChildTags != null && tagHelper.AllowedChildTags.Count > 0) { - WriteAllowedChildTags(writer, allowedChildTag, serializer); + writer.WritePropertyName(nameof(TagHelperDescriptor.AllowedChildTags)); + writer.WriteStartArray(); + foreach (var allowedChildTag in tagHelper.AllowedChildTags) + { + WriteAllowedChildTags(writer, allowedChildTag, serializer); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - writer.WritePropertyName(nameof(TagHelperDescriptor.Diagnostics)); - serializer.Serialize(writer, tagHelper.Diagnostics); + if (tagHelper.Diagnostics != null && tagHelper.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(TagHelperDescriptor.Diagnostics)); + serializer.Serialize(writer, tagHelper.Diagnostics); + } writer.WritePropertyName(nameof(TagHelperDescriptor.Metadata)); WriteMetadata(writer, tagHelper.Metadata); @@ -165,31 +177,49 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization writer.WritePropertyName(nameof(BoundAttributeDescriptor.TypeName)); writer.WriteValue(boundAttribute.TypeName); - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IsEnum)); - writer.WriteValue(boundAttribute.IsEnum); + if (boundAttribute.IsEnum) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.IsEnum)); + writer.WriteValue(boundAttribute.IsEnum); + } - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerNamePrefix)); - writer.WriteValue(boundAttribute.IndexerNamePrefix); + if (boundAttribute.IndexerNamePrefix != null) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerNamePrefix)); + writer.WriteValue(boundAttribute.IndexerNamePrefix); + } - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerTypeName)); - writer.WriteValue(boundAttribute.IndexerTypeName); + if (boundAttribute.IndexerTypeName != null) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerTypeName)); + writer.WriteValue(boundAttribute.IndexerTypeName); + } - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Documentation)); - writer.WriteValue(boundAttribute.Documentation); + if (boundAttribute.Documentation != null) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.Documentation)); + writer.WriteValue(boundAttribute.Documentation); + } - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Diagnostics)); - serializer.Serialize(writer, boundAttribute.Diagnostics); + if (boundAttribute.Diagnostics != null && boundAttribute.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.Diagnostics)); + serializer.Serialize(writer, boundAttribute.Diagnostics); + } writer.WritePropertyName(nameof(BoundAttributeDescriptor.Metadata)); WriteMetadata(writer, boundAttribute.Metadata); - writer.WritePropertyName(nameof(BoundAttributeDescriptor.BoundAttributeParameters)); - writer.WriteStartArray(); - foreach (var boundAttributeParameter in boundAttribute.BoundAttributeParameters) + if (boundAttribute.BoundAttributeParameters != null && boundAttribute.BoundAttributeParameters.Count > 0) { - WriteBoundAttributeParameter(writer, boundAttributeParameter, serializer); + writer.WritePropertyName(nameof(BoundAttributeDescriptor.BoundAttributeParameters)); + writer.WriteStartArray(); + foreach (var boundAttributeParameter in boundAttribute.BoundAttributeParameters) + { + WriteBoundAttributeParameter(writer, boundAttributeParameter, serializer); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); writer.WriteEndObject(); } @@ -198,23 +228,29 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization { writer.WriteStartObject(); - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Kind)); - writer.WriteValue(boundAttributeParameter.Kind); - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Name)); writer.WriteValue(boundAttributeParameter.Name); writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.TypeName)); writer.WriteValue(boundAttributeParameter.TypeName); - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.IsEnum)); - writer.WriteValue(boundAttributeParameter.IsEnum); + if (boundAttributeParameter.IsEnum != default) + { + writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.IsEnum)); + writer.WriteValue(boundAttributeParameter.IsEnum); + } - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Documentation)); - writer.WriteValue(boundAttributeParameter.Documentation); + if (boundAttributeParameter.Documentation != null) + { + writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Documentation)); + writer.WriteValue(boundAttributeParameter.Documentation); + } - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Diagnostics)); - serializer.Serialize(writer, boundAttributeParameter.Diagnostics); + if (boundAttributeParameter.Diagnostics != null && boundAttributeParameter.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Diagnostics)); + serializer.Serialize(writer, boundAttributeParameter.Diagnostics); + } writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Metadata)); WriteMetadata(writer, boundAttributeParameter.Metadata); @@ -240,22 +276,34 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.TagName)); writer.WriteValue(ruleDescriptor.TagName); - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.ParentTag)); - writer.WriteValue(ruleDescriptor.ParentTag); - - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.TagStructure)); - writer.WriteValue(ruleDescriptor.TagStructure); - - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Attributes)); - writer.WriteStartArray(); - foreach (var requiredAttribute in ruleDescriptor.Attributes) + if (ruleDescriptor.ParentTag != null) { - WriteRequiredAttribute(writer, requiredAttribute, serializer); + writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.ParentTag)); + writer.WriteValue(ruleDescriptor.ParentTag); } - writer.WriteEndArray(); - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Diagnostics)); - serializer.Serialize(writer, ruleDescriptor.Diagnostics); + if (ruleDescriptor.TagStructure != default) + { + writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.TagStructure)); + writer.WriteValue(ruleDescriptor.TagStructure); + } + + if (ruleDescriptor.Attributes != null && ruleDescriptor.Attributes.Count > 0) + { + writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Attributes)); + writer.WriteStartArray(); + foreach (var requiredAttribute in ruleDescriptor.Attributes) + { + WriteRequiredAttribute(writer, requiredAttribute, serializer); + } + writer.WriteEndArray(); + } + + if (ruleDescriptor.Diagnostics != null && ruleDescriptor.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Diagnostics)); + serializer.Serialize(writer, ruleDescriptor.Diagnostics); + } writer.WriteEndObject(); } @@ -267,176 +315,538 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Name)); writer.WriteValue(requiredAttribute.Name); - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.NameComparison)); - writer.WriteValue(requiredAttribute.NameComparison); + if (requiredAttribute.NameComparison != default) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.NameComparison)); + writer.WriteValue(requiredAttribute.NameComparison); + } - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Value)); - writer.WriteValue(requiredAttribute.Value); + if (requiredAttribute.Value != null) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Value)); + writer.WriteValue(requiredAttribute.Value); + } - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.ValueComparison)); - writer.WriteValue(requiredAttribute.ValueComparison); + if (requiredAttribute.ValueComparison != default) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.ValueComparison)); + writer.WriteValue(requiredAttribute.ValueComparison); + } - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Diagnostics)); - serializer.Serialize(writer, requiredAttribute.Diagnostics); + if (requiredAttribute.Diagnostics != null && requiredAttribute.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Diagnostics)); + serializer.Serialize(writer, requiredAttribute.Diagnostics); + } - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Metadata)); - WriteMetadata(writer, requiredAttribute.Metadata); + if (requiredAttribute.Metadata != null && requiredAttribute.Metadata.Count > 0) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Metadata)); + WriteMetadata(writer, requiredAttribute.Metadata); + } writer.WriteEndObject(); } - private static void ReadTagMatchingRule(TagMatchingRuleDescriptorBuilder builder, JObject rule, JsonSerializer serializer) + private static void ReadBoundAttributes(JsonReader reader, TagHelperDescriptorBuilder builder) { - var tagName = rule[nameof(TagMatchingRuleDescriptor.TagName)].Value(); - var attributes = rule[nameof(TagMatchingRuleDescriptor.Attributes)].Value(); - var parentTag = rule[nameof(TagMatchingRuleDescriptor.ParentTag)].Value(); - var tagStructure = rule[nameof(TagMatchingRuleDescriptor.TagStructure)].Value(); - var diagnostics = rule[nameof(TagMatchingRuleDescriptor.Diagnostics)].Value(); - - builder.TagName = tagName; - builder.ParentTag = parentTag; - builder.TagStructure = (TagStructure)tagStructure; - - foreach (var attribute in attributes) + if (!reader.Read()) { - var attibuteValue = attribute.Value(); - builder.Attribute(b => ReadRequiredAttribute(b, attibuteValue, serializer)); + return; } - foreach (var diagnostic in diagnostics) + if (reader.TokenType != JsonToken.StartArray) { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); + return; } + + do + { + ReadBoundAttribute(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); } - private static void ReadRequiredAttribute(RequiredAttributeDescriptorBuilder builder, JObject attribute, JsonSerializer serializer) + private static void ReadBoundAttribute(JsonReader reader, TagHelperDescriptorBuilder builder) { - var name = attribute[nameof(RequiredAttributeDescriptor.Name)].Value(); - var nameComparison = attribute[nameof(RequiredAttributeDescriptor.NameComparison)].Value(); - var value = attribute[nameof(RequiredAttributeDescriptor.Value)].Value(); - var valueComparison = attribute[nameof(RequiredAttributeDescriptor.ValueComparison)].Value(); - var diagnostics = attribute[nameof(RequiredAttributeDescriptor.Diagnostics)].Value(); - var metadata = attribute[nameof(RequiredAttributeDescriptor.Metadata)].Value(); - - builder.Name = name; - builder.NameComparisonMode = (RequiredAttributeDescriptor.NameComparisonMode)nameComparison; - builder.Value = value; - builder.ValueComparisonMode = (RequiredAttributeDescriptor.ValueComparisonMode)valueComparison; - - foreach (var diagnostic in diagnostics) + if (!reader.Read()) { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); + return; } - var metadataReader = metadata.CreateReader(); - var metadataValue = serializer.Deserialize>(metadataReader); - foreach (var item in metadataValue) + if (reader.TokenType != JsonToken.StartObject) { - builder.Metadata[item.Key] = item.Value; + return; } + + builder.BindAttribute(attribute => + { + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(BoundAttributeDescriptor.Name): + if (reader.Read()) + { + var name = (string)reader.Value; + attribute.Name = name; + } + break; + case nameof(BoundAttributeDescriptor.TypeName): + if (reader.Read()) + { + var typeName = (string)reader.Value; + attribute.TypeName = typeName; + } + break; + case nameof(BoundAttributeDescriptor.Documentation): + if (reader.Read()) + { + var documentation = (string)reader.Value; + attribute.Documentation = documentation; + } + break; + case nameof(BoundAttributeDescriptor.IndexerNamePrefix): + if (reader.Read()) + { + var indexerNamePrefix = (string)reader.Value; + if (indexerNamePrefix != null) + { + attribute.IsDictionary = true; + attribute.IndexerAttributeNamePrefix = indexerNamePrefix; + } + } + break; + case nameof(BoundAttributeDescriptor.IndexerTypeName): + if (reader.Read()) + { + var indexerTypeName = (string)reader.Value; + if (indexerTypeName != null) + { + attribute.IsDictionary = true; + attribute.IndexerValueTypeName = indexerTypeName; + } + } + break; + case nameof(BoundAttributeDescriptor.IsEnum): + if (reader.Read()) + { + var isEnum = (bool)reader.Value; + attribute.IsEnum = isEnum; + } + break; + case nameof(BoundAttributeDescriptor.BoundAttributeParameters): + ReadBoundAttributeParameters(reader, attribute); + break; + case nameof(BoundAttributeDescriptor.Diagnostics): + ReadDiagnostics(reader, attribute.Diagnostics); + break; + case nameof(BoundAttributeDescriptor.Metadata): + ReadMetadata(reader, attribute.Metadata); + break; + } + }); + }); } - private static void ReadAllowedChildTag(AllowedChildTagDescriptorBuilder builder, JObject childTag, JsonSerializer serializer) + private static void ReadBoundAttributeParameters(JsonReader reader, BoundAttributeDescriptorBuilder builder) { - var name = childTag[nameof(AllowedChildTagDescriptor.Name)].Value(); - var displayName = childTag[nameof(AllowedChildTagDescriptor.DisplayName)].Value(); - var diagnostics = childTag[nameof(AllowedChildTagDescriptor.Diagnostics)].Value(); - - builder.Name = name; - builder.DisplayName = displayName; - - foreach (var diagnostic in diagnostics) + if (!reader.Read()) { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); + return; } + + if (reader.TokenType != JsonToken.StartArray) + { + return; + } + + do + { + ReadBoundAttributeParameter(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); } - private static void ReadBoundAttribute(BoundAttributeDescriptorBuilder builder, JObject attribute, JsonSerializer serializer) + private static void ReadBoundAttributeParameter(JsonReader reader, BoundAttributeDescriptorBuilder builder) { - var descriptorKind = attribute[nameof(BoundAttributeDescriptor.Kind)].Value(); - var name = attribute[nameof(BoundAttributeDescriptor.Name)].Value(); - var typeName = attribute[nameof(BoundAttributeDescriptor.TypeName)].Value(); - var isEnum = attribute[nameof(BoundAttributeDescriptor.IsEnum)].Value(); - var indexerNamePrefix = attribute[nameof(BoundAttributeDescriptor.IndexerNamePrefix)].Value(); - var indexerTypeName = attribute[nameof(BoundAttributeDescriptor.IndexerTypeName)].Value(); - var documentation = attribute[nameof(BoundAttributeDescriptor.Documentation)].Value(); - var diagnostics = attribute[nameof(BoundAttributeDescriptor.Diagnostics)].Value(); - var metadata = attribute[nameof(BoundAttributeDescriptor.Metadata)].Value(); - var boundAttributeParameters = attribute[nameof(BoundAttributeDescriptor.BoundAttributeParameters)].Value(); - - builder.Name = name; - builder.TypeName = typeName; - builder.Documentation = documentation; - - if (indexerNamePrefix != null) + if (!reader.Read()) { - builder.AsDictionary(indexerNamePrefix, indexerTypeName); + return; } - if (isEnum) + if (reader.TokenType != JsonToken.StartObject) { - builder.IsEnum = true; + return; } - foreach (var diagnostic in diagnostics) + builder.BindAttributeParameter(parameter => { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); - } - - var metadataReader = metadata.CreateReader(); - var metadataValue = serializer.Deserialize>(metadataReader); - foreach (var item in metadataValue) - { - builder.Metadata[item.Key] = item.Value; - } - - foreach (var boundAttributeParameter in boundAttributeParameters) - { - var parameter = boundAttributeParameter.Value(); - builder.BindAttributeParameter(b => ReadBoundAttributeParameter(b, parameter, serializer)); - } + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(BoundAttributeParameterDescriptor.Name): + if (reader.Read()) + { + var name = (string)reader.Value; + parameter.Name = name; + } + break; + case nameof(BoundAttributeParameterDescriptor.TypeName): + if (reader.Read()) + { + var typeName = (string)reader.Value; + parameter.TypeName = typeName; + } + break; + case nameof(BoundAttributeParameterDescriptor.IsEnum): + if (reader.Read()) + { + var isEnum = (bool)reader.Value; + parameter.IsEnum = isEnum; + } + break; + case nameof(BoundAttributeParameterDescriptor.Documentation): + if (reader.Read()) + { + var documentation = (string)reader.Value; + parameter.Documentation = documentation; + } + break; + case nameof(BoundAttributeParameterDescriptor.Metadata): + ReadMetadata(reader, parameter.Metadata); + break; + case nameof(BoundAttributeParameterDescriptor.Diagnostics): + ReadDiagnostics(reader, parameter.Diagnostics); + break; + } + }); + }); } - private static void ReadBoundAttributeParameter(BoundAttributeParameterDescriptorBuilder builder, JObject parameter, JsonSerializer serializer) + private static void ReadTagMatchingRules(JsonReader reader, TagHelperDescriptorBuilder builder) { - var descriptorKind = parameter[nameof(BoundAttributeParameterDescriptor.Kind)].Value(); - var name = parameter[nameof(BoundAttributeParameterDescriptor.Name)].Value(); - var typeName = parameter[nameof(BoundAttributeParameterDescriptor.TypeName)].Value(); - var isEnum = parameter[nameof(BoundAttributeParameterDescriptor.IsEnum)].Value(); - var documentation = parameter[nameof(BoundAttributeParameterDescriptor.Documentation)].Value(); - var diagnostics = parameter[nameof(BoundAttributeParameterDescriptor.Diagnostics)].Value(); - var metadata = parameter[nameof(BoundAttributeParameterDescriptor.Metadata)].Value(); - - builder.Name = name; - builder.TypeName = typeName; - builder.Documentation = documentation; - - if (isEnum) + if (!reader.Read()) { - builder.IsEnum = true; + return; } - foreach (var diagnostic in diagnostics) + if (reader.TokenType != JsonToken.StartArray) { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); + return; } - var metadataReader = metadata.CreateReader(); - var metadataValue = serializer.Deserialize>(metadataReader); - foreach (var item in metadataValue) + do { - builder.Metadata[item.Key] = item.Value; + ReadTagMatchingRule(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); + } + + private static void ReadTagMatchingRule(JsonReader reader, TagHelperDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + builder.TagMatchingRule(rule => + { + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(TagMatchingRuleDescriptor.TagName): + if (reader.Read()) + { + var tagName = (string)reader.Value; + rule.TagName = tagName; + } + break; + case nameof(TagMatchingRuleDescriptor.ParentTag): + if (reader.Read()) + { + var parentTag = (string)reader.Value; + rule.ParentTag = parentTag; + } + break; + case nameof(TagMatchingRuleDescriptor.TagStructure): + rule.TagStructure = (TagStructure)reader.ReadAsInt32(); + break; + case nameof(TagMatchingRuleDescriptor.Attributes): + ReadRequiredAttributeValues(reader, rule); + break; + case nameof(TagMatchingRuleDescriptor.Diagnostics): + ReadDiagnostics(reader, rule.Diagnostics); + break; + } + }); + }); + } + + private static void ReadRequiredAttributeValues(JsonReader reader, TagMatchingRuleDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartArray) + { + return; + } + + do + { + ReadRequiredAttribute(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); + } + + private static void ReadRequiredAttribute(JsonReader reader, TagMatchingRuleDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + builder.Attribute(attribute => + { + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(RequiredAttributeDescriptor.Name): + if (reader.Read()) + { + var name = (string)reader.Value; + attribute.Name = name; + } + break; + case nameof(RequiredAttributeDescriptor.NameComparison): + var nameComparison = (RequiredAttributeDescriptor.NameComparisonMode)reader.ReadAsInt32(); + attribute.NameComparisonMode = nameComparison; + break; + case nameof(RequiredAttributeDescriptor.Value): + if (reader.Read()) + { + var value = (string)reader.Value; + attribute.Value = value; + } + break; + case nameof(RequiredAttributeDescriptor.ValueComparison): + var valueComparison = (RequiredAttributeDescriptor.ValueComparisonMode)reader.ReadAsInt32(); + attribute.ValueComparisonMode = valueComparison; + break; + case nameof(RequiredAttributeDescriptor.Diagnostics): + ReadDiagnostics(reader, attribute.Diagnostics); + break; + case nameof(RequiredAttributeDescriptor.Metadata): + ReadMetadata(reader, attribute.Metadata); + break; + } + }); + }); + } + + private static void ReadAllowedChildTags(JsonReader reader, TagHelperDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartArray) + { + return; + } + + do + { + ReadAllowedChildTag(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); + } + + private static void ReadAllowedChildTag(JsonReader reader, TagHelperDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + builder.AllowChildTag(childTag => + { + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(AllowedChildTagDescriptor.Name): + if (reader.Read()) + { + var name = (string)reader.Value; + childTag.Name = name; + } + break; + case nameof(AllowedChildTagDescriptor.DisplayName): + if (reader.Read()) + { + var displayName = (string)reader.Value; + childTag.DisplayName = displayName; + } + break; + case nameof(AllowedChildTagDescriptor.Diagnostics): + ReadDiagnostics(reader, childTag.Diagnostics); + break; + } + }); + }); + } + + private static void ReadMetadata(JsonReader reader, IDictionary metadata) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + reader.ReadProperties(propertyName => + { + if (reader.Read()) + { + var value = (string)reader.Value; + metadata[propertyName] = value; + } + }); + } + + private static void ReadDiagnostics(JsonReader reader, RazorDiagnosticCollection diagnostics) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartArray) + { + return; + } + + do + { + ReadDiagnostic(reader, diagnostics); + } while (reader.TokenType != JsonToken.EndArray); + } + + private static void ReadDiagnostic(JsonReader reader, RazorDiagnosticCollection diagnostics) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + string id = default; + int severity = default; + string message = default; + SourceSpan sourceSpan = default; + + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(RazorDiagnostic.Id): + if (reader.Read()) + { + id = (string)reader.Value; + } + break; + case nameof(RazorDiagnostic.Severity): + severity = reader.ReadAsInt32().Value; + break; + case "Message": + if (reader.Read()) + { + message = (string)reader.Value; + } + break; + case nameof(RazorDiagnostic.Span): + sourceSpan = ReadSourceSpan(reader); + break; + } + }); + + var descriptor = new RazorDiagnosticDescriptor(id, () => message, (RazorDiagnosticSeverity)severity); + + var diagnostic = RazorDiagnostic.Create(descriptor, sourceSpan); + diagnostics.Add(diagnostic); + } + + private static SourceSpan ReadSourceSpan(JsonReader reader) + { + if (!reader.Read()) + { + return SourceSpan.Undefined; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return SourceSpan.Undefined; + } + + string filePath = default; + int absoluteIndex = default; + int lineIndex = default; + int characterIndex = default; + int length = default; + + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(SourceSpan.FilePath): + if (reader.Read()) + { + filePath = (string)reader.Value; + } + break; + case nameof(SourceSpan.AbsoluteIndex): + absoluteIndex = reader.ReadAsInt32().Value; + break; + case nameof(SourceSpan.LineIndex): + lineIndex = reader.ReadAsInt32().Value; + break; + case nameof(SourceSpan.CharacterIndex): + characterIndex = reader.ReadAsInt32().Value; + break; + case nameof(SourceSpan.Length): + length = reader.ReadAsInt32().Value; + break; + } + }); + + var sourceSpan = new SourceSpan(filePath, absoluteIndex, lineIndex, characterIndex, length); + return sourceSpan; } } } diff --git a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/taghelpers.json b/src/Shared/RazorShared/taghelpers.json similarity index 100% rename from src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/taghelpers.json rename to src/Shared/RazorShared/taghelpers.json