diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index f45c71accfb..454d8852ff1 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -87,6 +87,11 @@
https://github.com/dotnet/roslyn
f6725f6f04ce03574fcf89faa4b20b72ef83e4dd
+
+ https://github.com/dotnet/source-build-externals
+ 50600f7fcd6e56a496233a859ed7d4d90c173b0d
+
+
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/RazorCodeDocumentExtensions.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/RazorCodeDocumentExtensions.cs
index 556368e1d96..a0a0a006154 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/RazorCodeDocumentExtensions.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/RazorCodeDocumentExtensions.cs
@@ -20,6 +20,7 @@ public static class RazorCodeDocumentExtensions
private static readonly char[] NamespaceSeparators = new char[] { '.' };
private static readonly object CssScopeKey = new object();
private static readonly object NamespaceKey = new object();
+ private static readonly object NoNamespaceToken = new object();
public static TagHelperDocumentContext GetTagHelperContext(this RazorCodeDocument document)
{
@@ -282,6 +283,16 @@ public static void SetCssScope(this RazorCodeDocument document, string cssScope)
document.Items[CssScopeKey] = cssScope;
}
+ internal static void SetNamespace(this RazorCodeDocument document, string @namespace)
+ {
+ if (document == null)
+ {
+ throw new ArgumentNullException(nameof(document));
+ }
+
+ document.Items[NamespaceKey] = @namespace;
+ }
+
#nullable enable
public static bool TryComputeClassName(this RazorCodeDocument codeDocument, [NotNullWhen(true)] out string? className)
{
@@ -303,12 +314,22 @@ public static bool TryComputeClassName(this RazorCodeDocument codeDocument, [Not
// However all kinds of thing are possible in tools. We shouldn't barf here if the document isn't
// set up correctly.
public static bool TryComputeNamespace(this RazorCodeDocument document, bool fallbackToRootNamespace, out string @namespace)
+ => TryComputeNamespace(document, fallbackToRootNamespace, check: true, out @namespace);
+
+ internal static bool TryComputeNamespace(this RazorCodeDocument document, bool fallbackToRootNamespace, bool check, out string @namespace)
{
if (document == null)
{
throw new ArgumentNullException(nameof(document));
}
+ var namespaceValue = document.Items[NamespaceKey];
+ if (namespaceValue == NoNamespaceToken)
+ {
+ @namespace = null;
+ return false;
+ }
+
@namespace = (string)document.Items[NamespaceKey];
if (@namespace is null)
{
@@ -318,11 +339,14 @@ public static bool TryComputeNamespace(this RazorCodeDocument document, bool fal
}
#if DEBUG
- // In debug mode, even if we're cached, lets take the hit to run this again and make sure the cached value is correct.
- // This is to help us find issues with caching logic during development.
- var validateResult = TryComputeNamespaceCore(document, fallbackToRootNamespace, out var validateNamespace);
- Debug.Assert(validateResult, "We couldn't compute the namespace, but have a cached value, so something has gone wrong");
- Debug.Assert(validateNamespace == @namespace, $"We cached a namespace of {@namespace} but calculated that it should be {validateNamespace}");
+ if (check)
+ {
+ // In debug mode, even if we're cached, lets take the hit to run this again and make sure the cached value is correct.
+ // This is to help us find issues with caching logic during development.
+ var validateResult = TryComputeNamespaceCore(document, fallbackToRootNamespace, out var validateNamespace);
+ Debug.Assert(validateResult, "We couldn't compute the namespace, but have a cached value, so something has gone wrong");
+ Debug.Assert(validateNamespace == @namespace, $"We cached a namespace of {@namespace} but calculated that it should be {validateNamespace}");
+ }
#endif
return true;
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.Transport/Microsoft.NET.Sdk.Razor.SourceGenerators.Transport.csproj b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.Transport/Microsoft.NET.Sdk.Razor.SourceGenerators.Transport.csproj
index 00ad96c79b1..bffbb49fb8d 100644
--- a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.Transport/Microsoft.NET.Sdk.Razor.SourceGenerators.Transport.csproj
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.Transport/Microsoft.NET.Sdk.Razor.SourceGenerators.Transport.csproj
@@ -14,6 +14,7 @@
+
@@ -24,6 +25,7 @@
+
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.csproj b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.csproj
index c3c9ec50c7d..63dd799384a 100644
--- a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.csproj
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.csproj
@@ -14,11 +14,18 @@
false
+
+
+
+
+
+
+
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/RazorSourceGenerator.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/RazorSourceGenerator.cs
index f555839bcf0..22991076afc 100644
--- a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/RazorSourceGenerator.cs
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/RazorSourceGenerator.cs
@@ -271,6 +271,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
{
var (filePath, document) = pair;
var hintName = GetIdentifierFromPath(filePath);
+ context.AddOutput(hintName + ".rsg.json", RazorCodeDocumentSerializer.Instance.Serialize(document));
context.AddOutput(hintName + ".rsg.cs", document.GetCSharpDocument().GeneratedCode);
context.AddOutput(hintName + ".rsg.html", document.GetHtmlDocument().GeneratedCode);
});
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DelegateCreationConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DelegateCreationConverter.cs
new file mode 100644
index 00000000000..b8ac05391fc
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DelegateCreationConverter.cs
@@ -0,0 +1,19 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using Newtonsoft.Json.Converters;
+using System;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class DelegateCreationConverter : CustomCreationConverter
+{
+ private readonly Func _factory;
+
+ public DelegateCreationConverter(Func factory)
+ {
+ _factory = factory;
+ }
+
+ public override T Create(Type objectType) => _factory(objectType);
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DirectiveDescriptorConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DirectiveDescriptorConverter.cs
new file mode 100644
index 00000000000..55232e12308
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DirectiveDescriptorConverter.cs
@@ -0,0 +1,73 @@
+using Microsoft.AspNetCore.Razor.Language;
+using Microsoft.CodeAnalysis.Razor.Serialization;
+using Newtonsoft.Json;
+using System;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class DirectiveDescriptorConverter : JsonConverter
+{
+ private const string ValuePropertyName = "_";
+
+ public override DirectiveDescriptor? ReadJson(JsonReader reader, Type objectType, DirectiveDescriptor? existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ if (reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ var directive = reader.ReadPropertyName(nameof(DirectiveDescriptor.Directive)).ReadAsString();
+ if (!Enum.TryParse(reader.ReadPropertyName(nameof(DirectiveDescriptor.Kind)).ReadAsString(), out var kind))
+ {
+ return null;
+ }
+
+ reader.ReadPropertyName(ValuePropertyName).Read();
+ var result = DirectiveDescriptor.CreateDirective(directive, kind, builder => serializer.Populate(reader, builder));
+ reader.AssertTokenAndAdvance(JsonToken.EndObject);
+ return result;
+ }
+
+ public override void WriteJson(JsonWriter writer, DirectiveDescriptor? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteNull();
+ return;
+ }
+
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(DirectiveDescriptor.Directive));
+ writer.WriteValue(value.Directive);
+ writer.WritePropertyName(nameof(DirectiveDescriptor.Kind));
+ writer.WriteValue(value.Kind.ToString());
+ writer.WritePropertyName(ValuePropertyName);
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(DirectiveDescriptor.Description));
+ writer.WriteValue(value.Description);
+ writer.WritePropertyName(nameof(DirectiveDescriptor.DisplayName));
+ writer.WriteValue(value.DisplayName);
+ writer.WritePropertyName(nameof(DirectiveDescriptor.Usage));
+ writer.WriteValue(value.Usage.ToString());
+ writer.WritePropertyName(nameof(DirectiveDescriptor.Tokens));
+ writer.WriteStartArray();
+
+ foreach (var token in value.Tokens)
+ {
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(DirectiveTokenDescriptor.Kind));
+ writer.WriteValue(token.Kind.ToString());
+ writer.WritePropertyName(nameof(DirectiveTokenDescriptor.Optional));
+ writer.WriteValue(token.Optional);
+ writer.WritePropertyName(nameof(DirectiveTokenDescriptor.Name));
+ writer.WriteValue(token.Name);
+ writer.WritePropertyName(nameof(DirectiveTokenDescriptor.Description));
+ writer.WriteValue(token.Description);
+ writer.WriteEndObject();
+ }
+
+ writer.WriteEndArray();
+ writer.WriteEndObject();
+ writer.WriteEndObject();
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DirectiveTokenDescriptorConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DirectiveTokenDescriptorConverter.cs
new file mode 100644
index 00000000000..bec16f643d8
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/DirectiveTokenDescriptorConverter.cs
@@ -0,0 +1,36 @@
+using Microsoft.AspNetCore.Razor.Language;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class DirectiveTokenDescriptorConverter : JsonConverter
+{
+ public override DirectiveTokenDescriptor? ReadJson(JsonReader reader, Type objectType, DirectiveTokenDescriptor? existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ var obj = JObject.Load(reader);
+
+ if (obj == null || !Enum.TryParse(obj[nameof(DirectiveTokenDescriptor.Kind)]!.Value(), out var kind))
+ {
+ return null;
+ }
+
+ return DirectiveTokenDescriptor.CreateToken(
+ kind: kind,
+ optional: obj[nameof(DirectiveTokenDescriptor.Optional)]!.Value(),
+ name: obj[nameof(DirectiveTokenDescriptor.Name)]!.Value(),
+ description: obj[nameof(DirectiveTokenDescriptor.Description)]!.Value());
+ }
+
+ public override void WriteJson(JsonWriter writer, DirectiveTokenDescriptor? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteNull();
+ return;
+ }
+
+ JObject.FromObject(value).WriteTo(writer);
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/EncodingConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/EncodingConverter.cs
new file mode 100644
index 00000000000..38f5b3ee5e5
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/EncodingConverter.cs
@@ -0,0 +1,19 @@
+using Newtonsoft.Json;
+using System;
+using System.Text;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class EncodingConverter : JsonConverter
+{
+ public override Encoding? ReadJson(JsonReader reader, Type objectType, Encoding? existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ var name = reader.ReadAsString();
+ return name is null ? null : Encoding.GetEncoding(name);
+ }
+
+ public override void WriteJson(JsonWriter writer, Encoding? value, JsonSerializer serializer)
+ {
+ writer.WriteValue(value?.WebName);
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/ItemCollectionConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/ItemCollectionConverter.cs
new file mode 100644
index 00000000000..3569a9b1aae
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/ItemCollectionConverter.cs
@@ -0,0 +1,54 @@
+using Microsoft.AspNetCore.Razor.Language;
+using Newtonsoft.Json;
+using System;
+using System.Diagnostics;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class ItemCollectionConverter : JsonConverter
+{
+ public override ItemCollection? ReadJson(JsonReader reader, Type objectType, ItemCollection? existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ if (reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ var result = existingValue ?? new ItemCollection();
+ while (reader.Read() && reader.TokenType == JsonToken.PropertyName)
+ {
+ var propertyName = (string)reader.Value!;
+ var value = reader.ReadAsString();
+ result.Add(propertyName, value);
+ }
+
+ Debug.Assert(reader.TokenType == JsonToken.EndObject);
+ return result;
+ }
+
+ public override void WriteJson(JsonWriter writer, ItemCollection? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteNull();
+ return;
+ }
+
+ writer.WriteStartObject();
+
+ foreach (var pair in value)
+ {
+ if (pair.Key is string k && pair.Value is string v)
+ {
+ writer.WritePropertyName(k);
+ writer.WriteValue(v);
+ }
+ else
+ {
+ Debug.Assert(false, $"Cannot serialize non-string annotation {pair}");
+ }
+ }
+
+ writer.WriteEndObject();
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorCodeDocumentSerializer.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorCodeDocumentSerializer.cs
new file mode 100644
index 00000000000..644d6d57868
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorCodeDocumentSerializer.cs
@@ -0,0 +1,362 @@
+// 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.Razor.Language;
+using Microsoft.AspNetCore.Razor.Language.CodeGeneration;
+using Microsoft.AspNetCore.Razor.Language.Intermediate;
+using Microsoft.CodeAnalysis.Razor.Serialization;
+using Newtonsoft.Json;
+using System.Collections.Generic;
+using System.IO;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class RazorCodeDocumentSerializer
+{
+ private const string TagHelperContext = nameof(TagHelperContext);
+ private const string ParserOptions = nameof(ParserOptions);
+ private const string SyntaxTree = nameof(SyntaxTree);
+ private const string DocumentIntermediateNode = nameof(DocumentIntermediateNode);
+ private const string FileKind = nameof(FileKind);
+ private const string CssScope = nameof(CssScope);
+ private const string CSharpDocument = nameof(CSharpDocument);
+ private const string HtmlDocument = nameof(HtmlDocument);
+ private const string Namespace = nameof(Namespace);
+
+ private readonly JsonSerializer _serializer;
+
+ public static readonly RazorCodeDocumentSerializer Instance = new(Formatting.None);
+
+ // internal for testing
+ internal RazorCodeDocumentSerializer(Formatting formatting)
+ {
+ _serializer = new JsonSerializer
+ {
+ Formatting = formatting,
+ Converters =
+ {
+ RazorDiagnosticJsonConverter.Instance,
+ TagHelperDescriptorJsonConverter.Instance,
+ new EncodingConverter(),
+ new RazorCodeGenerationOptionsConverter(),
+ new SourceSpanConverter(),
+ new RazorParserOptionsConverter(),
+ new DirectiveDescriptorConverter(),
+ new DirectiveTokenDescriptorConverter(),
+ new ItemCollectionConverter(),
+ new RazorSourceDocumentConverter(),
+ },
+ ContractResolver = new RazorContractResolver(),
+ TypeNameHandling = TypeNameHandling.Auto,
+ SerializationBinder = new RazorSerializationBinder(),
+ DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate,
+ };
+ }
+
+ public RazorCodeDocument? Deserialize(string json, RazorSourceDocument source)
+ {
+ using var textReader = new StringReader(json);
+ using var jsonReader = new JsonTextReader(textReader);
+ return Deserialize(jsonReader, source);
+ }
+
+ public RazorCodeDocument? Deserialize(JsonReader reader, RazorSourceDocument source)
+ {
+ if (!reader.Read() || reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ var document = RazorCodeDocument.Create(source);
+
+ reader.ReadProperties(propertyName =>
+ {
+ switch (propertyName)
+ {
+ case nameof(FileKind):
+ document.SetFileKind(reader.ReadAsString());
+ break;
+ case nameof(CssScope):
+ document.SetCssScope(reader.ReadAsString());
+ break;
+ case nameof(TagHelperContext):
+ if (reader.Read() && reader.TokenType == JsonToken.StartObject)
+ {
+ string? prefix = null;
+ IReadOnlyList? tagHelpers = null;
+ reader.ReadProperties(propertyName =>
+ {
+ switch (propertyName)
+ {
+ case nameof(TagHelperDocumentContext.Prefix):
+ reader.Read();
+ prefix = (string?)reader.Value;
+ break;
+ case nameof(TagHelperDocumentContext.TagHelpers):
+ reader.Read();
+ tagHelpers = _serializer.Deserialize?>(reader);
+ break;
+ }
+ });
+ if (tagHelpers != null)
+ {
+ document.SetTagHelperContext(TagHelperDocumentContext.Create(prefix, tagHelpers));
+ }
+ }
+ break;
+ case nameof(ParserOptions):
+ reader.Read();
+ document.SetParserOptions(_serializer.Deserialize(reader));
+ break;
+ case nameof(DocumentIntermediateNode):
+ reader.Read();
+ document.SetDocumentIntermediateNode(_serializer.Deserialize(reader));
+ break;
+ case nameof(SyntaxTree):
+ if (reader.Read() && DeserializeSyntaxTree(reader, document) is { } syntaxTree)
+ {
+ document.SetSyntaxTree(syntaxTree);
+ }
+ break;
+ case nameof(CSharpDocument):
+ if (reader.Read() && DeserializeCSharpDocument(reader, document) is { } cSharpDocument)
+ {
+ document.SetCSharpDocument(cSharpDocument);
+ }
+ break;
+ case nameof(HtmlDocument):
+ if (reader.Read() && DeserializeHtmlDocument(reader, document) is { } htmlDocument)
+ {
+ document.Items[typeof(RazorHtmlDocument)] = htmlDocument;
+ }
+ break;
+ case nameof(Namespace):
+ document.SetNamespace(reader.ReadAsString());
+ break;
+ }
+ });
+
+ return document;
+ }
+
+ public string Serialize(RazorCodeDocument? document)
+ {
+ using var textWriter = new StringWriter();
+ using var jsonWriter = new JsonTextWriter(textWriter);
+ Serialize(jsonWriter, document);
+ return textWriter.ToString();
+ }
+
+ public void Serialize(JsonWriter writer, RazorCodeDocument? document)
+ {
+ if (document == null)
+ {
+ writer.WriteNull();
+ return;
+ }
+
+ writer.WriteStartObject();
+
+ if (document.GetFileKind() is { } fileKind)
+ {
+ writer.WritePropertyName(nameof(FileKind));
+ writer.WriteValue(fileKind);
+ }
+
+ if (document.GetCssScope() is { } cssScope)
+ {
+ writer.WritePropertyName(nameof(CssScope));
+ writer.WriteValue(cssScope);
+ }
+
+ if (document.GetDocumentIntermediateNode() is { } intermediateNode)
+ {
+ writer.WritePropertyName(DocumentIntermediateNode);
+ _serializer.Serialize(writer, intermediateNode);
+ }
+
+ if (document.GetTagHelperContext() is { } tagHelperContext)
+ {
+ writer.WritePropertyName(TagHelperContext);
+ writer.WriteStartObject();
+
+ if (tagHelperContext.Prefix is { } prefix)
+ {
+ writer.WritePropertyName(nameof(TagHelperDocumentContext.Prefix));
+ writer.WriteValue(prefix);
+ }
+
+ if (tagHelperContext.TagHelpers is { Count: > 0 } tagHelpers)
+ {
+ writer.WritePropertyName(nameof(TagHelperDocumentContext.TagHelpers));
+ _serializer.Serialize(writer, tagHelpers);
+ }
+
+ writer.WriteEndObject();
+ }
+
+ if (document.GetSyntaxTree() is { } syntaxTree)
+ {
+ writer.WritePropertyName(SyntaxTree);
+ SerializeSyntaxTree(writer, document, syntaxTree);
+ }
+
+ if (document.GetCSharpDocument() is { } cSharpDocument)
+ {
+ writer.WritePropertyName(CSharpDocument);
+ SerializeCSharpDocument(writer, cSharpDocument);
+ }
+
+ if (document.GetHtmlDocument() is { } htmlDocument)
+ {
+ writer.WritePropertyName(HtmlDocument);
+ SerializeHtmlDocument(writer, htmlDocument);
+ }
+
+ document.TryComputeNamespace(fallbackToRootNamespace: true, check: false, out var @namespace);
+ writer.WritePropertyName(Namespace);
+ writer.WriteValue(@namespace);
+
+ writer.WriteEndObject();
+ }
+
+ private void SerializeSyntaxTree(JsonWriter writer, RazorCodeDocument owner, RazorSyntaxTree syntaxTree)
+ {
+ writer.WriteStartObject();
+
+ writer.WritePropertyName(nameof(RazorSyntaxTree.Options));
+ _serializer.Serialize(writer, syntaxTree.Options);
+
+ if (syntaxTree.Source != owner.Source)
+ {
+ writer.WritePropertyName(nameof(RazorSyntaxTree.Source));
+ _serializer.Serialize(writer, syntaxTree.Source);
+ }
+
+ writer.WriteEndObject();
+ }
+
+ private RazorSyntaxTree? DeserializeSyntaxTree(JsonReader reader, RazorCodeDocument owner)
+ {
+ if (reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ RazorParserOptions? options = null;
+ RazorSourceDocument source = owner.Source;
+ reader.ReadProperties(propertyName =>
+ {
+ switch (propertyName)
+ {
+ case nameof(RazorSyntaxTree.Options):
+ reader.Read();
+ options = _serializer.Deserialize(reader);
+ break;
+ case nameof(RazorSyntaxTree.Source):
+ reader.Read();
+ source = _serializer.Deserialize(reader)!;
+ break;
+ }
+ });
+ return RazorSyntaxTree.Parse(source, options);
+ }
+
+ private void SerializeCSharpDocument(JsonWriter writer, RazorCSharpDocument document)
+ {
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(RazorCSharpDocument.GeneratedCode));
+ writer.WriteValue(document.GeneratedCode);
+ writer.WritePropertyName(nameof(RazorCSharpDocument.Options));
+ _serializer.Serialize(writer, document.Options);
+ writer.WritePropertyName(nameof(RazorCSharpDocument.Diagnostics));
+ _serializer.Serialize(writer, document.Diagnostics);
+ writer.WritePropertyName(nameof(RazorCSharpDocument.SourceMappings));
+ _serializer.Serialize(writer, document.SourceMappings);
+ writer.WritePropertyName(nameof(RazorCSharpDocument.LinePragmas));
+ _serializer.Serialize(writer, document.LinePragmas);
+ writer.WriteEndObject();
+ }
+
+ private RazorCSharpDocument? DeserializeCSharpDocument(JsonReader reader, RazorCodeDocument owner)
+ {
+ if (reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ string? generatedCode = null;
+ RazorCodeGenerationOptions? options = null;
+ IReadOnlyList? diagnostics = null;
+ IReadOnlyList? sourceMappings = null;
+ IReadOnlyList? linePragmas = null;
+ reader.ReadProperties((propertyName) =>
+ {
+ switch (propertyName)
+ {
+ case nameof(RazorCSharpDocument.GeneratedCode):
+ generatedCode = reader.ReadAsString();
+ break;
+ case nameof(RazorCSharpDocument.Options):
+ reader.Read();
+ options = _serializer.Deserialize(reader);
+ break;
+ case nameof(RazorCSharpDocument.Diagnostics):
+ reader.Read();
+ diagnostics = _serializer.Deserialize>(reader);
+ break;
+ case nameof(RazorCSharpDocument.SourceMappings):
+ reader.Read();
+ sourceMappings = _serializer.Deserialize>(reader);
+ break;
+ case nameof(RazorCSharpDocument.LinePragmas):
+ reader.Read();
+ linePragmas = _serializer.Deserialize>(reader);
+ break;
+ }
+ });
+ return RazorCSharpDocument.Create(owner, generatedCode, options, diagnostics, sourceMappings, linePragmas);
+ }
+
+ private void SerializeHtmlDocument(JsonWriter writer, RazorHtmlDocument document)
+ {
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(RazorHtmlDocument.GeneratedCode));
+ writer.WriteValue(document.GeneratedCode);
+ writer.WritePropertyName(nameof(RazorHtmlDocument.Options));
+ _serializer.Serialize(writer, document.Options);
+ writer.WritePropertyName(nameof(RazorHtmlDocument.SourceMappings));
+ _serializer.Serialize(writer, document.SourceMappings);
+ writer.WriteEndObject();
+ }
+
+ private RazorHtmlDocument? DeserializeHtmlDocument(JsonReader reader, RazorCodeDocument owner)
+ {
+ if (reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ string? generatedCode = null;
+ RazorCodeGenerationOptions? options = null;
+ SourceMapping[]? sourceMappings = null;
+ reader.ReadProperties((propertyName) =>
+ {
+ switch (propertyName)
+ {
+ case nameof(RazorCSharpDocument.GeneratedCode):
+ generatedCode = reader.ReadAsString();
+ break;
+ case nameof(RazorCSharpDocument.Options):
+ reader.Read();
+ options = _serializer.Deserialize(reader);
+ break;
+ case nameof(RazorCSharpDocument.SourceMappings):
+ reader.Read();
+ sourceMappings = _serializer.Deserialize(reader);
+ break;
+ }
+ });
+ return RazorHtmlDocument.Create(owner, generatedCode, options, sourceMappings);
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorCodeGenerationOptionsConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorCodeGenerationOptionsConverter.cs
new file mode 100644
index 00000000000..67db1dfb15d
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorCodeGenerationOptionsConverter.cs
@@ -0,0 +1,51 @@
+using Microsoft.AspNetCore.Razor.Language;
+using Microsoft.CodeAnalysis.Razor.Serialization;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class RazorCodeGenerationOptionsConverter : JsonConverter
+{
+ private const string ValuePropertyName = "_";
+
+ public override RazorCodeGenerationOptions? ReadJson(JsonReader reader, Type objectType, RazorCodeGenerationOptions? existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ if (reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ var designTime = reader.ReadPropertyName(nameof(RazorCodeGenerationOptions.DesignTime)).ReadAsBoolean().GetValueOrDefault();
+ reader.ReadPropertyName(ValuePropertyName).Read();
+ var result = designTime ? RazorCodeGenerationOptions.CreateDesignTime(factory) : RazorCodeGenerationOptions.Create(factory);
+ reader.AssertTokenAndAdvance(JsonToken.EndObject);
+ return result;
+
+ void factory(RazorCodeGenerationOptionsBuilder builder)
+ {
+ serializer.Populate(reader, builder);
+ }
+ }
+
+ public override void WriteJson(JsonWriter writer, RazorCodeGenerationOptions? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteNull();
+ return;
+ }
+
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(RazorCodeGenerationOptions.DesignTime));
+ writer.WriteValue(value.DesignTime);
+ writer.WritePropertyName(ValuePropertyName);
+
+ var jObject = JObject.FromObject(value);
+ jObject.Remove(nameof(RazorCodeGenerationOptions.DesignTime));
+ jObject.WriteTo(writer);
+
+ writer.WriteEndObject();
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorContractResolver.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorContractResolver.cs
new file mode 100644
index 00000000000..e28847598e8
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorContractResolver.cs
@@ -0,0 +1,59 @@
+using Microsoft.AspNetCore.Razor.Language.Intermediate;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using System;
+using System.Reflection;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class RazorContractResolver : DefaultContractResolver
+{
+ protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
+ {
+ var property = base.CreateProperty(member, memberSerialization);
+
+ if (property.DeclaringType == typeof(LazyIntermediateToken))
+ {
+ if (property.PropertyName == nameof(LazyIntermediateToken.Content))
+ {
+ property.Writable = true;
+ property.ValueProvider = new DelegateValueProvider(
+ static token => token.Content,
+ static (token, content) => token.Content = content);
+ }
+ else
+ {
+ property.Ignored = true;
+ }
+ }
+
+ if (property.DeclaringType == typeof(DocumentIntermediateNode) && property.PropertyName == nameof(DocumentIntermediateNode.Target))
+ {
+ property.Ignored = true;
+ }
+
+ return property;
+ }
+
+ private class DelegateValueProvider : IValueProvider
+ {
+ private readonly Func _getter;
+ private readonly Action _setter;
+
+ public DelegateValueProvider(Func getter, Action setter)
+ {
+ _getter = getter;
+ _setter = setter;
+ }
+
+ public object? GetValue(object target)
+ {
+ return _getter((TTarget)target);
+ }
+
+ public void SetValue(object target, object? value)
+ {
+ _setter((TTarget)target, (TValue?)value);
+ }
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorParserOptionsConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorParserOptionsConverter.cs
new file mode 100644
index 00000000000..7f216dd6f73
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorParserOptionsConverter.cs
@@ -0,0 +1,63 @@
+using Microsoft.AspNetCore.Razor.Language;
+using Microsoft.CodeAnalysis.Razor.Serialization;
+using Newtonsoft.Json;
+using System;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class RazorParserOptionsConverter : JsonConverter
+{
+ private const string ValuePropertyName = "_";
+
+ public override RazorParserOptions? ReadJson(JsonReader reader, Type objectType, RazorParserOptions? existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ if (reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ var designTime = reader.ReadPropertyName(nameof(RazorParserOptions.DesignTime)).ReadAsBoolean().GetValueOrDefault();
+ var fileKind = reader.ReadPropertyName(nameof(RazorParserOptions.FileKind)).ReadAsString();
+ reader.ReadPropertyName(ValuePropertyName).Read();
+ var result = designTime ? RazorParserOptions.CreateDesignTime(factory, fileKind) : RazorParserOptions.Create(factory, fileKind);
+ reader.AssertTokenAndAdvance(JsonToken.EndObject);
+ return result;
+
+ void factory(RazorParserOptionsBuilder builder)
+ {
+ serializer.Populate(reader, builder);
+ }
+ }
+
+ public override void WriteJson(JsonWriter writer, RazorParserOptions? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteNull();
+ return;
+ }
+
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(RazorParserOptions.DesignTime));
+ writer.WriteValue(value.DesignTime);
+ writer.WritePropertyName(nameof(RazorParserOptions.FileKind));
+ writer.WriteValue(value.FileKind);
+ writer.WritePropertyName(ValuePropertyName);
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(RazorParserOptions.ParseLeadingDirectives));
+ writer.WriteValue(value.ParseLeadingDirectives);
+ writer.WritePropertyName(nameof(RazorParserOptions.Version));
+ writer.WriteValue(value.Version.ToString());
+ writer.WritePropertyName(nameof(RazorParserOptions.Directives));
+ writer.WriteStartArray();
+
+ foreach (var directive in value.Directives)
+ {
+ serializer.Serialize(writer, directive);
+ }
+
+ writer.WriteEndArray();
+ writer.WriteEndObject();
+ writer.WriteEndObject();
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorSerializationBinder.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorSerializationBinder.cs
new file mode 100644
index 00000000000..ddc11e85859
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorSerializationBinder.cs
@@ -0,0 +1,28 @@
+using Microsoft.AspNetCore.Razor.Language.Intermediate;
+using Newtonsoft.Json.Serialization;
+using System;
+using System.Reflection;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class RazorSerializationBinder : DefaultSerializationBinder
+{
+ private readonly Assembly _assembly = typeof(IntermediateNode).Assembly;
+
+ public override void BindToName(Type serializedType, out string? assemblyName, out string? typeName)
+ {
+ assemblyName = null;
+ typeName = null;
+
+ if (typeof(IntermediateNode).IsAssignableFrom(serializedType))
+ {
+ typeName = serializedType.Name;
+ }
+ }
+
+ public override Type BindToType(string? assemblyName, string typeName)
+ {
+ return _assembly.GetType("Microsoft.AspNetCore.Razor.Language.Intermediate." + typeName) ??
+ _assembly.GetType("Microsoft.AspNetCore.Razor.Language.Extensions." + typeName);
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorSourceDocumentConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorSourceDocumentConverter.cs
new file mode 100644
index 00000000000..176433d9548
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/RazorSourceDocumentConverter.cs
@@ -0,0 +1,78 @@
+using Microsoft.AspNetCore.Razor.Language;
+using Microsoft.AspNetCore.Razor.PooledObjects;
+using Microsoft.CodeAnalysis.Razor.Serialization;
+using Newtonsoft.Json;
+using System;
+using System.Buffers;
+using System.Text;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class RazorSourceDocumentConverter : JsonConverter
+{
+ private const string ContentPropertyName = "Content";
+
+ public override RazorSourceDocument? ReadJson(JsonReader reader, Type objectType, RazorSourceDocument? existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ if (reader.TokenType != JsonToken.StartObject)
+ {
+ return null;
+ }
+
+ Encoding? encoding = null;
+ string? filePath = null;
+ string? relativePath = null;
+ string? content = null;
+ reader.ReadProperties(propertyName =>
+ {
+ switch (propertyName)
+ {
+ case nameof(RazorSourceDocument.Encoding):
+ encoding = serializer.Deserialize(reader);
+ break;
+ case nameof(RazorSourceDocument.FilePath):
+ filePath = reader.ReadAsString();
+ break;
+ case nameof(RazorSourceDocument.RelativePath):
+ relativePath = reader.ReadAsString();
+ break;
+ case nameof(ContentPropertyName):
+ content = reader.ReadAsString();
+ break;
+ }
+ });
+ return RazorSourceDocument.Create(content, encoding, new RazorSourceDocumentProperties(filePath, relativePath));
+ }
+
+ public override void WriteJson(JsonWriter writer, RazorSourceDocument? value, JsonSerializer serializer)
+ {
+ if (value is null)
+ {
+ writer.WriteNull();
+ return;
+ }
+
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(RazorSourceDocument.Encoding));
+ serializer.Serialize(writer, value.Encoding);
+ writer.WritePropertyName(nameof(RazorSourceDocument.FilePath));
+ writer.WriteValue(value.FilePath);
+ writer.WritePropertyName(nameof(RazorSourceDocument.RelativePath));
+ writer.WriteValue(value.RelativePath);
+ writer.WritePropertyName(ContentPropertyName);
+
+ var content = ArrayPool.Shared.Rent(value.Length);
+ value.CopyTo(0, content, 0, value.Length);
+
+ using (StringBuilderPool.GetPooledObject(out var stringBuilder))
+ {
+ stringBuilder.EnsureCapacity(value.Length);
+ stringBuilder.Append(content);
+ writer.WriteValue(stringBuilder.ToString());
+ }
+
+ ArrayPool.Shared.Return(content);
+
+ writer.WriteEndObject();
+ }
+}
diff --git a/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/SourceSpanConverter.cs b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/SourceSpanConverter.cs
new file mode 100644
index 00000000000..3f7d71d12b8
--- /dev/null
+++ b/src/Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators/Serialization/SourceSpanConverter.cs
@@ -0,0 +1,54 @@
+using Microsoft.AspNetCore.Razor.Language;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+
+namespace Microsoft.NET.Sdk.Razor.SourceGenerators;
+
+internal sealed class SourceSpanConverter : JsonConverter
+{
+ public override SourceSpan? ReadJson(JsonReader reader, Type objectType, SourceSpan? existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ var span = JObject.Load(reader);
+
+ if (span == null)
+ {
+ return null;
+ }
+
+ return new SourceSpan(
+ filePath: span[nameof(SourceSpan.FilePath)]!.Value(),
+ absoluteIndex: span[nameof(SourceSpan.AbsoluteIndex)]!.Value(),
+ lineIndex: span[nameof(SourceSpan.LineIndex)]!.Value(),
+ characterIndex: span[nameof(SourceSpan.CharacterIndex)]!.Value(),
+ length: span[nameof(SourceSpan.Length)]!.Value(),
+ lineCount: span[nameof(SourceSpan.LineCount)]!.Value(),
+ endCharacterIndex: span[nameof(SourceSpan.EndCharacterIndex)]!.Value());
+ }
+
+ public override void WriteJson(JsonWriter writer, SourceSpan? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteNull();
+ return;
+ }
+
+ writer.WriteStartObject();
+ writer.WritePropertyName(nameof(SourceSpan.FilePath));
+ writer.WriteValue(value.Value.FilePath);
+ writer.WritePropertyName(nameof(SourceSpan.AbsoluteIndex));
+ writer.WriteValue(value.Value.AbsoluteIndex);
+ writer.WritePropertyName(nameof(SourceSpan.LineIndex));
+ writer.WriteValue(value.Value.LineIndex);
+ writer.WritePropertyName(nameof(SourceSpan.CharacterIndex));
+ writer.WriteValue(value.Value.CharacterIndex);
+ writer.WritePropertyName(nameof(SourceSpan.Length));
+ writer.WriteValue(value.Value.Length);
+ writer.WritePropertyName(nameof(SourceSpan.LineCount));
+ writer.WriteValue(value.Value.LineCount);
+ writer.WritePropertyName(nameof(SourceSpan.EndCharacterIndex));
+ writer.WriteValue(value.Value.EndCharacterIndex);
+ writer.WriteEndObject();
+ }
+}
diff --git a/src/Compiler/Microsoft.Net.Compilers.Razor.Toolset/Microsoft.Net.Compilers.Razor.Toolset.csproj b/src/Compiler/Microsoft.Net.Compilers.Razor.Toolset/Microsoft.Net.Compilers.Razor.Toolset.csproj
index 5b692f61c6d..b5529432174 100644
--- a/src/Compiler/Microsoft.Net.Compilers.Razor.Toolset/Microsoft.Net.Compilers.Razor.Toolset.csproj
+++ b/src/Compiler/Microsoft.Net.Compilers.Razor.Toolset/Microsoft.Net.Compilers.Razor.Toolset.csproj
@@ -24,6 +24,7 @@
+
@@ -39,6 +40,7 @@
+
diff --git a/src/Compiler/shared/JsonReaderExtensions.cs b/src/Compiler/shared/JsonReaderExtensions.cs
index 20fb9f408c5..aae60bf93a2 100644
--- a/src/Compiler/shared/JsonReaderExtensions.cs
+++ b/src/Compiler/shared/JsonReaderExtensions.cs
@@ -18,6 +18,12 @@ public static bool ReadTokenAndAdvance(this JsonReader reader, JsonToken expecte
return reader.TokenType == expectedTokenType && reader.Read();
}
+ public static bool AssertTokenAndAdvance(this JsonReader reader, JsonToken expectedTokenType)
+ {
+ Debug.Assert(reader.TokenType == expectedTokenType);
+ return reader.Read();
+ }
+
public static void ReadProperties(this JsonReader reader, Action onProperty)
{
while (reader.Read())
@@ -56,4 +62,26 @@ public static string ReadNextStringProperty(this JsonReader reader, string prope
throw new JsonSerializationException($"Could not find string property '{propertyName}'.");
}
+
+ public static JsonReader ReadPropertyName(this JsonReader reader, string propertyName)
+ {
+ string found;
+ if (!reader.Read())
+ {
+ found = "EOF";
+ }
+ else if (reader.TokenType != JsonToken.PropertyName)
+ {
+ found = reader.TokenType.ToString();
+ }
+ else if ((string)reader.Value != propertyName)
+ {
+ found = $"'{reader.Value}'";
+ }
+ else
+ {
+ return reader;
+ }
+ throw new JsonSerializationException($"Expected property '{propertyName}' at '{reader.Path}', found {found}.");
+ }
}
diff --git a/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/RazorSourceGeneratorTests.cs b/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/RazorSourceGeneratorTests.cs
index b98a89d8fde..1efacde93ed 100644
--- a/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/RazorSourceGeneratorTests.cs
+++ b/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/RazorSourceGeneratorTests.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
#nullable enable
@@ -9,10 +9,14 @@
using System.Text;
using System.Threading;
using System.Threading.Tasks;
+using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.Test.Common;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler;
using Microsoft.CodeAnalysis.Text;
+using Newtonsoft.Json;
+using Roslyn.Test.Utilities;
using Xunit;
namespace Microsoft.NET.Sdk.Razor.SourceGenerators
@@ -143,7 +147,11 @@ protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.
";
result.VerifyPageOutput(pageOutput);
+ const string jsonName = "Pages_Index_razor.rsg.json";
+ var json = result.GetHostOutputs()[0].Value;
+
result.VerifyHostOutput(
+ (jsonName, json),
(@"Pages_Index_razor.rsg.cs", @"//
#pragma warning disable 1591
namespace MyApp.Pages
@@ -188,6 +196,15 @@ protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.
Assert.Empty(result.Diagnostics);
Assert.Single(result.GeneratedSources);
+
+ var document = RazorCodeDocumentSerializer.Instance.Deserialize(json, RazorSourceDocument.Create("", ""));
+ Assert.NotNull(document);
+
+ var json2 = RazorCodeDocumentSerializer.Instance.Serialize(document);
+ AssertEx.EqualOrDiff(json, json2);
+
+ var formattedJson = new RazorCodeDocumentSerializer(Formatting.Indented).Serialize(document);
+ Extensions.VerifyTextMatchesBaseline(formattedJson, jsonName);
}
[Fact]
diff --git a/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/RazorSourceGeneratorTestsBase.cs b/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/RazorSourceGeneratorTestsBase.cs
index 1c4da81ea38..96467cd3077 100644
--- a/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/RazorSourceGeneratorTestsBase.cs
+++ b/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/RazorSourceGeneratorTestsBase.cs
@@ -223,8 +223,7 @@ protected static async Task VerifyRazorPageMatchesBaselineAsync(Compilation comp
var html = await RenderRazorPageAsync(compilation, name);
Extensions.VerifyTextMatchesBaseline(
actualText: html,
- fileName: name,
- extension: "html",
+ fileName: $"{name}.html",
testPath: testPath,
testName: testName);
}
@@ -481,14 +480,14 @@ public static GeneratorRunResult VerifyOutputsMatchBaseline(this GeneratorRunRes
return result;
}
- public static void VerifyTextMatchesBaseline(string actualText, string fileName, string extension,
+ public static void VerifyTextMatchesBaseline(string actualText, string fileName,
[CallerFilePath] string testPath = "", [CallerMemberName] string testName = "")
{
// Create output directory.
var baselineDirectory = CreateBaselineDirectory(testPath, testName);
// Generate baseline if enabled.
- var baselinePath = Path.Join(baselineDirectory, $"{fileName}.{extension}");
+ var baselinePath = Path.Join(baselineDirectory, fileName);
GenerateOutputBaseline(baselinePath, actualText);
// Verify actual against baseline.
diff --git a/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/TestFiles/RazorSourceGeneratorTests/SourceGenerator_RazorFiles_DesignTime/Pages_Index_razor.rsg.json b/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/TestFiles/RazorSourceGeneratorTests/SourceGenerator_RazorFiles_DesignTime/Pages_Index_razor.rsg.json
new file mode 100644
index 00000000000..8ed12b577cd
--- /dev/null
+++ b/src/Compiler/test/Microsoft.NET.Sdk.Razor.SourceGenerators.Tests/TestFiles/RazorSourceGeneratorTests/SourceGenerator_RazorFiles_DesignTime/Pages_Index_razor.rsg.json
@@ -0,0 +1,3382 @@
+{"FileKind":"component","DocumentIntermediateNode": {
+ "Children": [
+ {
+ "$type": "NamespaceDeclarationIntermediateNode",
+ "Children": [
+ {
+ "$type": "UsingDirectiveIntermediateNode",
+ "Children": [],
+ "Content": "global::System",
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": null,
+ "AbsoluteIndex": 3,
+ "LineIndex": 1,
+ "CharacterIndex": 1,
+ "Length": 20,
+ "LineCount": 0,
+ "EndCharacterIndex": 21
+ }
+ },
+ {
+ "$type": "UsingDirectiveIntermediateNode",
+ "Children": [],
+ "Content": "global::System.Collections.Generic",
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": null,
+ "AbsoluteIndex": 26,
+ "LineIndex": 2,
+ "CharacterIndex": 1,
+ "Length": 40,
+ "LineCount": 0,
+ "EndCharacterIndex": 41
+ }
+ },
+ {
+ "$type": "UsingDirectiveIntermediateNode",
+ "Children": [],
+ "Content": "global::System.Linq",
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": null,
+ "AbsoluteIndex": 69,
+ "LineIndex": 3,
+ "CharacterIndex": 1,
+ "Length": 25,
+ "LineCount": 0,
+ "EndCharacterIndex": 26
+ }
+ },
+ {
+ "$type": "UsingDirectiveIntermediateNode",
+ "Children": [],
+ "Content": "global::System.Threading.Tasks",
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": null,
+ "AbsoluteIndex": 97,
+ "LineIndex": 4,
+ "CharacterIndex": 1,
+ "Length": 36,
+ "LineCount": 0,
+ "EndCharacterIndex": 37
+ }
+ },
+ {
+ "$type": "UsingDirectiveIntermediateNode",
+ "Children": [],
+ "Content": "global::Microsoft.AspNetCore.Components",
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": null,
+ "AbsoluteIndex": 136,
+ "LineIndex": 5,
+ "CharacterIndex": 1,
+ "Length": 45,
+ "LineCount": 0,
+ "EndCharacterIndex": 46
+ }
+ },
+ {
+ "$type": "ClassDeclarationIntermediateNode",
+ "Children": [
+ {
+ "$type": "DesignTimeDirectiveIntermediateNode",
+ "Children": [],
+ "Annotations": {},
+ "Diagnostics": []
+ },
+ {
+ "$type": "CSharpCodeIntermediateNode",
+ "Children": [
+ {
+ "$type": "IntermediateToken",
+ "Children": [],
+ "Content": "#pragma warning disable 0414",
+ "IsCSharp": true,
+ "Kind": 1,
+ "Annotations": {},
+ "Diagnostics": []
+ }
+ ],
+ "Annotations": {},
+ "Diagnostics": []
+ },
+ {
+ "$type": "CSharpCodeIntermediateNode",
+ "Children": [
+ {
+ "$type": "IntermediateToken",
+ "Children": [],
+ "Content": "private static object __o = null;",
+ "IsCSharp": true,
+ "Kind": 1,
+ "Annotations": {},
+ "Diagnostics": []
+ }
+ ],
+ "Annotations": {},
+ "Diagnostics": []
+ },
+ {
+ "$type": "CSharpCodeIntermediateNode",
+ "Children": [
+ {
+ "$type": "IntermediateToken",
+ "Children": [],
+ "Content": "#pragma warning restore 0414",
+ "IsCSharp": true,
+ "Kind": 1,
+ "Annotations": {},
+ "Diagnostics": []
+ }
+ ],
+ "Annotations": {},
+ "Diagnostics": []
+ },
+ {
+ "$type": "MethodDeclarationIntermediateNode",
+ "Children": [
+ {
+ "$type": "MarkupElementIntermediateNode",
+ "Attributes": {
+ "$type": "",
+ "$values": []
+ },
+ "Captures": {
+ "$type": "",
+ "$values": []
+ },
+ "SetKeys": {
+ "$type": "",
+ "$values": []
+ },
+ "Body": {
+ "$type": "",
+ "$values": [
+ {
+ "$type": "HtmlContentIntermediateNode",
+ "Children": [
+ {
+ "$type": "LazyIntermediateToken",
+ "Content": "Hello world",
+ "Children": [],
+ "IsHtml": true,
+ "Kind": 2,
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": "Pages/Index.razor",
+ "AbsoluteIndex": 4,
+ "LineIndex": 0,
+ "CharacterIndex": 4,
+ "Length": 11,
+ "LineCount": 0,
+ "EndCharacterIndex": 15
+ }
+ }
+ ],
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": "Pages/Index.razor",
+ "AbsoluteIndex": 4,
+ "LineIndex": 0,
+ "CharacterIndex": 4,
+ "Length": 11,
+ "LineCount": 0,
+ "EndCharacterIndex": 15
+ }
+ }
+ ]
+ },
+ "Children": [
+ {
+ "$type": "HtmlContentIntermediateNode",
+ "Children": [
+ {
+ "$type": "LazyIntermediateToken",
+ "Content": "Hello world",
+ "Children": [],
+ "IsHtml": true,
+ "Kind": 2,
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": "Pages/Index.razor",
+ "AbsoluteIndex": 4,
+ "LineIndex": 0,
+ "CharacterIndex": 4,
+ "Length": 11,
+ "LineCount": 0,
+ "EndCharacterIndex": 15
+ }
+ }
+ ],
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": "Pages/Index.razor",
+ "AbsoluteIndex": 4,
+ "LineIndex": 0,
+ "CharacterIndex": 4,
+ "Length": 11,
+ "LineCount": 0,
+ "EndCharacterIndex": 15
+ }
+ }
+ ],
+ "TagName": "h1",
+ "Annotations": {},
+ "Diagnostics": [],
+ "Source": {
+ "FilePath": "Pages/Index.razor",
+ "AbsoluteIndex": 0,
+ "LineIndex": 0,
+ "CharacterIndex": 0,
+ "Length": 20,
+ "LineCount": 0,
+ "EndCharacterIndex": 20
+ }
+ }
+ ],
+ "Modifiers": [
+ "protected",
+ "override"
+ ],
+ "MethodName": "BuildRenderTree",
+ "Parameters": [
+ {
+ "Modifiers": [],
+ "TypeName": "global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder",
+ "ParameterName": "__builder"
+ }
+ ],
+ "ReturnType": "void",
+ "Annotations": {
+ "PrimaryMethod": "PrimaryMethod"
+ },
+ "Diagnostics": []
+ }
+ ],
+ "Modifiers": [
+ "public",
+ "partial"
+ ],
+ "ClassName": "Index",
+ "BaseType": "global::Microsoft.AspNetCore.Components.ComponentBase",
+ "Interfaces": [],
+ "TypeParameters": [],
+ "Annotations": {
+ "PrimaryClass": "PrimaryClass"
+ },
+ "Diagnostics": []
+ }
+ ],
+ "Content": "MyApp.Pages",
+ "Annotations": {
+ "PrimaryNamespace": "PrimaryNamespace"
+ },
+ "Diagnostics": []
+ }
+ ],
+ "DocumentKind": "component.1.0",
+ "Options": {
+ "DesignTime": true,
+ "_": {
+ "IndentWithTabs": false,
+ "IndentSize": 4,
+ "RootNamespace": "MyApp",
+ "SuppressChecksum": true,
+ "SuppressNullabilityEnforcement": false,
+ "OmitMinimizedComponentAttributeValues": true,
+ "UseEnhancedLinePragma": true,
+ "SuppressMetadataAttributes": true,
+ "SuppressPrimaryMethodBody": false,
+ "SupportLocalizedComponentNames": false
+ }
+ },
+ "Annotations": {},
+ "Diagnostics": []
+ },"TagHelperContext":{"TagHelpers": [
+ {
+ "Kind": "Components.Component",
+ "Name": "MyApp.Pages.Index",
+ "AssemblyName": "TestProject",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Index"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "MyApp.Pages.Index",
+ "Common.TypeNameIdentifier": "Index",
+ "Common.TypeNamespace": "MyApp.Pages",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "MyApp.Pages.Index",
+ "AssemblyName": "TestProject",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "MyApp.Pages.Index"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "MyApp.Pages.Index",
+ "Common.TypeNameIdentifier": "Index",
+ "Common.TypeNamespace": "MyApp.Pages",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "NotAuthorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "NotAuthorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorizing",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "Authorizing",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Resource",
+ "TypeName": "System.Object",
+ "Metadata": {
+ "Common.PropertyName": "Resource",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "RouteData",
+ "TypeName": "Microsoft.AspNetCore.Components.RouteData",
+ "IsEditorRequired": true,
+ "Metadata": {
+ "Common.PropertyName": "RouteData",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DefaultLayout",
+ "TypeName": "System.Type",
+ "Metadata": {
+ "Common.PropertyName": "DefaultLayout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotAuthorized",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorizing",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Policy",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Policy",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Roles",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Roles",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "NotAuthorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "NotAuthorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "Authorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorizing",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "Authorizing",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Resource",
+ "TypeName": "System.Object",
+ "Metadata": {
+ "Common.PropertyName": "Resource",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotAuthorized",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorized",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'Authorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorizing",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
+ "Common.TypeNameIdentifier": "CascadingAuthenticationState",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
+ "Common.TypeNameIdentifier": "CascadingAuthenticationState",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.CascadingValue",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.CascadingValue"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.CascadingValue component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "IsFixed",
+ "TypeName": "System.Boolean",
+ "Metadata": {
+ "Common.PropertyName": "IsFixed",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue",
+ "Common.TypeNameIdentifier": "CascadingValue",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.CascadingValue"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
+ "Common.TypeNameIdentifier": "CascadingValue",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.DynamicComponent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.DynamicComponent"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Type",
+ "TypeName": "System.Type",
+ "IsEditorRequired": true,
+ "Metadata": {
+ "Common.PropertyName": "Type",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Parameters",
+ "TypeName": "System.Collections.Generic.IDictionary",
+ "Metadata": {
+ "Common.PropertyName": "Parameters",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.DynamicComponent",
+ "Common.TypeNameIdentifier": "DynamicComponent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.LayoutView",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.LayoutView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Layout",
+ "TypeName": "System.Type",
+ "Metadata": {
+ "Common.PropertyName": "Layout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView",
+ "Common.TypeNameIdentifier": "LayoutView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.LayoutView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
+ "Common.TypeNameIdentifier": "LayoutView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.RouteView",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.RouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "RouteData",
+ "TypeName": "Microsoft.AspNetCore.Components.RouteData",
+ "IsEditorRequired": true,
+ "Metadata": {
+ "Common.PropertyName": "RouteData",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DefaultLayout",
+ "TypeName": "System.Type",
+ "Metadata": {
+ "Common.PropertyName": "DefaultLayout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.RouteView",
+ "Common.TypeNameIdentifier": "RouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Routing.Router"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AppAssembly",
+ "TypeName": "System.Reflection.Assembly",
+ "IsEditorRequired": true,
+ "Metadata": {
+ "Common.PropertyName": "AppAssembly",
+ "Common.GloballyQualifiedTypeName": "global::System.Reflection.Assembly"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAssemblies",
+ "TypeName": "System.Collections.Generic.IEnumerable",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAssemblies",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IEnumerable"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "NotFound",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "IsEditorRequired": true,
+ "Metadata": {
+ "Common.PropertyName": "NotFound",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Found",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "IsEditorRequired": true,
+ "Metadata": {
+ "Common.PropertyName": "Found",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Navigating",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "Navigating",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnNavigateAsync",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "OnNavigateAsync",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "PreferExactMatches",
+ "TypeName": "System.Boolean",
+ "Metadata": {
+ "Common.PropertyName": "PreferExactMatches",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotFound",
+ "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.Found",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Found",
+ "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'Found' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Found",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Navigating",
+ "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Splat",
+ "Name": "Attributes",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "Merges a collection of attributes into the current element or component.",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "*",
+ "Attributes": [
+ {
+ "Name": "@attributes",
+ "Metadata": {
+ "Common.DirectiveAttribute": "True"
+ }
+ }
+ ]
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Splat",
+ "Name": "@attributes",
+ "TypeName": "System.Object",
+ "Documentation": "Merges a collection of attributes into the current element or component.",
+ "Metadata": {
+ "Common.PropertyName": "Attributes",
+ "Common.DirectiveAttribute": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.ClassifyAttributesOnly": "True",
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Attributes",
+ "Components.IsSpecialKind": "Components.Splat",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Ref",
+ "Name": "Ref",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "Populates the specified field or property with a reference to the element or component.",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "*",
+ "Attributes": [
+ {
+ "Name": "@ref",
+ "Metadata": {
+ "Common.DirectiveAttribute": "True"
+ }
+ }
+ ]
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Ref",
+ "Name": "@ref",
+ "TypeName": "System.Object",
+ "Documentation": "Populates the specified field or property with a reference to the element or component.",
+ "Metadata": {
+ "Common.PropertyName": "Ref",
+ "Common.DirectiveAttribute": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.ClassifyAttributesOnly": "True",
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Ref",
+ "Components.IsSpecialKind": "Components.Ref",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Key",
+ "Name": "Key",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "Ensures that the component or element will be preserved across renders if (and only if) the supplied key value matches.",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "*",
+ "Attributes": [
+ {
+ "Name": "@key",
+ "Metadata": {
+ "Common.DirectiveAttribute": "True"
+ }
+ }
+ ]
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Key",
+ "Name": "@key",
+ "TypeName": "System.Object",
+ "Documentation": "Ensures that the component or element will be preserved across renders if (and only if) the supplied key value matches.",
+ "Metadata": {
+ "Common.PropertyName": "Key",
+ "Common.DirectiveAttribute": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.ClassifyAttributesOnly": "True",
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Key",
+ "Components.IsSpecialKind": "Components.Key",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Forms",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
+ "Common.TypeNameIdentifier": "DataAnnotationsValidator",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.EditForm",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.EditForm"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "EditContext",
+ "TypeName": "Microsoft.AspNetCore.Components.Forms.EditContext",
+ "Metadata": {
+ "Common.PropertyName": "EditContext",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.EditContext"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Model",
+ "TypeName": "System.Object",
+ "Metadata": {
+ "Common.PropertyName": "Model",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "OnSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnValidSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "OnValidSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnInvalidSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "OnInvalidSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm",
+ "Common.TypeNameIdentifier": "EditForm",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Forms.EditForm"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
+ "Common.TypeNameIdentifier": "EditForm",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputCheckbox"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "System.Boolean",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "ValueChanged",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
+ "Common.TypeNameIdentifier": "InputCheckbox",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputDate",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputDate"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputDate component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Type",
+ "TypeName": "Microsoft.AspNetCore.Components.Forms.InputDateType",
+ "IsEnum": true,
+ "Metadata": {
+ "Common.PropertyName": "Type",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.InputDateType"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ParsingErrorMessage",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "ParsingErrorMessage",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputDate",
+ "Common.TypeNameIdentifier": "InputDate",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputFile",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputFile"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "OnChange",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "OnChange",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputFile",
+ "Common.TypeNameIdentifier": "InputFile",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputNumber",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputNumber"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputNumber component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ParsingErrorMessage",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "ParsingErrorMessage",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputNumber",
+ "Common.TypeNameIdentifier": "InputNumber",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadio",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputRadio"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadio component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadio",
+ "Common.TypeNameIdentifier": "InputRadio",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadioGroup component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup",
+ "Common.TypeNameIdentifier": "InputRadioGroup",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup.ChildContent",
+ "Common.TypeNameIdentifier": "InputRadioGroup",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputSelect",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputSelect"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputSelect component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputSelect",
+ "Common.TypeNameIdentifier": "InputSelect",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputSelect.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Forms.InputSelect"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputSelect.ChildContent",
+ "Common.TypeNameIdentifier": "InputSelect",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputText",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputText"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "ValueChanged",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputText",
+ "Common.TypeNameIdentifier": "InputText",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputTextArea",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputTextArea"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "ValueChanged",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputTextArea",
+ "Common.TypeNameIdentifier": "InputTextArea",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.ValidationMessage",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.ValidationMessage"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.ValidationMessage component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "For",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Metadata": {
+ "Common.PropertyName": "For",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.ValidationMessage",
+ "Common.TypeNameIdentifier": "ValidationMessage",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.ValidationSummary",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.ValidationSummary"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Model",
+ "TypeName": "System.Object",
+ "Metadata": {
+ "Common.PropertyName": "Model",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.ValidationSummary",
+ "Common.TypeNameIdentifier": "ValidationSummary",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Routing.FocusOnNavigate",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Routing.FocusOnNavigate"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "RouteData",
+ "TypeName": "Microsoft.AspNetCore.Components.RouteData",
+ "Metadata": {
+ "Common.PropertyName": "RouteData",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Selector",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Selector",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.FocusOnNavigate",
+ "Common.TypeNameIdentifier": "FocusOnNavigate",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Routing.NavigationLock",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Routing.NavigationLock"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "OnBeforeInternalNavigation",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Metadata": {
+ "Common.PropertyName": "OnBeforeInternalNavigation",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ConfirmExternalNavigation",
+ "TypeName": "System.Boolean",
+ "Metadata": {
+ "Common.PropertyName": "ConfirmExternalNavigation",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.NavigationLock",
+ "Common.TypeNameIdentifier": "NavigationLock",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Routing.NavLink",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Routing.NavLink"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ActiveClass",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "ActiveClass",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Match",
+ "TypeName": "Microsoft.AspNetCore.Components.Routing.NavLinkMatch",
+ "IsEnum": true,
+ "Metadata": {
+ "Common.PropertyName": "Match",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Routing.NavLinkMatch"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.NavLink",
+ "Common.TypeNameIdentifier": "NavLink",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.NavLink.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Routing.NavLink"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.NavLink.ChildContent",
+ "Common.TypeNameIdentifier": "NavLink",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Web.HeadContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Web.HeadContent"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.HeadContent",
+ "Common.TypeNameIdentifier": "HeadContent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Web.HeadContent.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Web.HeadContent"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.HeadContent.ChildContent",
+ "Common.TypeNameIdentifier": "HeadContent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Web.HeadOutlet",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Web.HeadOutlet"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.HeadOutlet",
+ "Common.TypeNameIdentifier": "HeadOutlet",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Web.PageTitle",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Web.PageTitle"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.PageTitle",
+ "Common.TypeNameIdentifier": "PageTitle",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Web.PageTitle.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Web.PageTitle"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.PageTitle.ChildContent",
+ "Common.TypeNameIdentifier": "PageTitle",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Web.ErrorBoundary",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Web.ErrorBoundary"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ErrorContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ErrorContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "MaximumErrorCount",
+ "TypeName": "System.Int32",
+ "Metadata": {
+ "Common.PropertyName": "MaximumErrorCount",
+ "Common.GloballyQualifiedTypeName": "global::System.Int32"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.ErrorBoundary",
+ "Common.TypeNameIdentifier": "ErrorBoundary",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Web.ErrorBoundary.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Web.ErrorBoundary"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.ErrorBoundary.ChildContent",
+ "Common.TypeNameIdentifier": "ErrorBoundary",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Web.ErrorBoundary.ErrorContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ErrorContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Web.ErrorBoundary"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ErrorContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.ErrorBoundary.ErrorContent",
+ "Common.TypeNameIdentifier": "ErrorBoundary",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TItem",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TItem for the Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize component.",
+ "Metadata": {
+ "Common.PropertyName": "TItem",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Common.PropertyName": "ChildContent",
+ "Components.ChildContent": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ItemContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Common.PropertyName": "ItemContent",
+ "Components.ChildContent": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Placeholder",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "Placeholder",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ItemSize",
+ "TypeName": "System.Single",
+ "Metadata": {
+ "Common.PropertyName": "ItemSize",
+ "Common.GloballyQualifiedTypeName": "global::System.Single"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ItemsProvider",
+ "TypeName": "Microsoft.AspNetCore.Components.Web.Virtualization.ItemsProviderDelegate",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Web.Virtualization.ItemsProviderDelegate",
+ "Common.PropertyName": "ItemsProvider",
+ "Components.DelegateSignature": "True",
+ "Components.GenericTyped": "True",
+ "Components.IsDelegateAwaitableResult": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Items",
+ "TypeName": "System.Collections.Generic.ICollection",
+ "Metadata": {
+ "Common.PropertyName": "Items",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.ICollection",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OverscanCount",
+ "TypeName": "System.Int32",
+ "Metadata": {
+ "Common.PropertyName": "OverscanCount",
+ "Common.GloballyQualifiedTypeName": "global::System.Int32"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "SpacerElement",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "SpacerElement",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize",
+ "Common.TypeNameIdentifier": "Virtualize",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web.Virtualization",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize.ChildContent",
+ "Common.TypeNameIdentifier": "Virtualize",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web.Virtualization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize.ItemContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ItemContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ItemContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize.ItemContent",
+ "Common.TypeNameIdentifier": "Virtualize",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web.Virtualization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize.Placeholder",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Placeholder",
+ "ParentTag": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'Placeholder' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize.Placeholder",
+ "Common.TypeNameIdentifier": "Virtualize",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Web.Virtualization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.CascadingValue",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "CascadingValue"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.CascadingValue component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "IsFixed",
+ "TypeName": "System.Boolean",
+ "Metadata": {
+ "Common.PropertyName": "IsFixed",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue",
+ "Common.TypeNameIdentifier": "CascadingValue",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.GenericTyped": "True",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "CascadingValue"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
+ "Common.TypeNameIdentifier": "CascadingValue",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.DynamicComponent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "DynamicComponent"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Type",
+ "TypeName": "System.Type",
+ "IsEditorRequired": true,
+ "Metadata": {
+ "Common.PropertyName": "Type",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Parameters",
+ "TypeName": "System.Collections.Generic.IDictionary",
+ "Metadata": {
+ "Common.PropertyName": "Parameters",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.DynamicComponent",
+ "Common.TypeNameIdentifier": "DynamicComponent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.LayoutView",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "LayoutView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Layout",
+ "TypeName": "System.Type",
+ "Metadata": {
+ "Common.PropertyName": "Layout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView",
+ "Common.TypeNameIdentifier": "LayoutView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "LayoutView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
+ "Common.TypeNameIdentifier": "LayoutView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.RouteView",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "RouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "RouteData",
+ "TypeName": "Microsoft.AspNetCore.Components.RouteData",
+ "IsEditorRequired": true,
+ "Metadata": {
+ "Common.PropertyName": "RouteData",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DefaultLayout",
+ "TypeName": "System.Type",
+ "Metadata": {
+ "Common.PropertyName": "DefaultLayout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.RouteView",
+ "Common.TypeNameIdentifier": "RouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "Kind": "Components.Bind",
+ "Name": "Bind",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "Binds the provided expression to an attribute and a change event, based on the naming of the bind attribute. For example: @bind-value=\"...\"
and @bind-value:event=\"onchange\"
will assign the current value of the expression to the 'value' attribute, and assign a delegate that attempts to set the value to the 'onchange' attribute.",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "*",
+ "Attributes": [
+ {
+ "Name": "@bind-",
+ "NameComparison": 1,
+ "Metadata": {
+ "Common.DirectiveAttribute": "True"
+ }
+ }
+ ]
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Bind",
+ "Name": "@bind-...",
+ "TypeName": "System.Collections.Generic.Dictionary",
+ "IndexerNamePrefix": "@bind-",
+ "IndexerTypeName": "System.Object",
+ "Documentation": "Binds the provided expression to an attribute and a change event, based on the naming of the bind attribute. For example: @bind-value=\"...\"
and @bind-value:event=\"onchange\"
will assign the current value of the expression to the 'value' attribute, and assign a delegate that attempts to set the value to the 'onchange' attribute.",
+ "Metadata": {
+ "Common.PropertyName": "Bind",
+ "Common.DirectiveAttribute": "True"
+ },
+ "BoundAttributeParameters": [
+ {
+ "Name": "format",
+ "TypeName": "System.String",
+ "Documentation": "Specifies a format to convert the value specified by the corresponding bind attribute. For example: @bind-value:format=\"...\"
will apply a format string to the value specified in @bind-value=\"...\"
. The format string can currently only be used with expressions of type DateTime
.",
+ "Metadata": {
+ "Common.PropertyName": "Format"
+ }
+ },
+ {
+ "Name": "event",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the event handler name to attach for change notifications for the value provided by the '@bind-...' attribute.",
+ "Metadata": {
+ "Common.PropertyName": "Event"
+ }
+ },
+ {
+ "Name": "culture",
+ "TypeName": "System.Globalization.CultureInfo",
+ "Documentation": "Specifies the culture to use for conversions.",
+ "Metadata": {
+ "Common.PropertyName": "Culture"
+ }
+ },
+ {
+ "Name": "get",
+ "TypeName": "System.Object",
+ "Documentation": "Specifies the expression to use for binding the value to the attribute.",
+ "Metadata": {
+ "Common.PropertyName": "Get",
+ "Components.Bind.AlternativeNotation": "True"
+ }
+ },
+ {
+ "Name": "set",
+ "TypeName": "System.Delegate",
+ "Documentation": "Specifies the expression to use for updating the bound value when a new value is available.",
+ "Metadata": {
+ "Common.PropertyName": "Set"
+ }
+ },
+ {
+ "Name": "after",
+ "TypeName": "System.Delegate",
+ "Documentation": "Specifies an action to run after the new value has been set.",
+ "Metadata": {
+ "Common.PropertyName": "After"
+ }
+ }
+ ]
+ }
+ ],
+ "Metadata": {
+ "Common.ClassifyAttributesOnly": "True",
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Bind",
+ "Common.TypeNameIdentifier": "Bind",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.Bind.Fallback": "True",
+ "Components.IsSpecialKind": "Components.Bind",
+ "Runtime.Name": "Components.None"
+ }
+ }
+ ]},"SyntaxTree":{"Options": {
+ "DesignTime": true,
+ "FileKind": "component",
+ "_": {
+ "ParseLeadingDirectives": false,
+ "Version": "8.0",
+ "Directives": [
+ {
+ "Directive": "functions",
+ "Kind": "CodeBlock",
+ "_": {
+ "Description": "Specify a C# code block.",
+ "DisplayName": null,
+ "Usage": "Unrestricted",
+ "Tokens": []
+ }
+ },
+ {
+ "Directive": "implements",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Declares an interface implementation for the current class.",
+ "DisplayName": null,
+ "Usage": "FileScopedMultipleOccurring",
+ "Tokens": [
+ {
+ "Kind": "Type",
+ "Optional": false,
+ "Name": "TypeName",
+ "Description": "The interface type implemented by the current class."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "inherits",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Specify the base class for the current document.",
+ "DisplayName": null,
+ "Usage": "FileScopedSinglyOccurring",
+ "Tokens": [
+ {
+ "Kind": "Type",
+ "Optional": false,
+ "Name": "TypeName",
+ "Description": "The base type that the current page inherits."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "namespace",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Specify the base namespace for the document.",
+ "DisplayName": null,
+ "Usage": "FileScopedSinglyOccurring",
+ "Tokens": [
+ {
+ "Kind": "Namespace",
+ "Optional": false,
+ "Name": "Namespace",
+ "Description": "The namespace for the document."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "attribute",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Specifies the C# attribute that will be applied to the current class.",
+ "DisplayName": null,
+ "Usage": "FileScopedMultipleOccurring",
+ "Tokens": [
+ {
+ "Kind": "Attribute",
+ "Optional": false,
+ "Name": "Attribute",
+ "Description": "The C# attribute that will be applied to the current class."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "code",
+ "Kind": "CodeBlock",
+ "_": {
+ "Description": "Specify a C# code block.",
+ "DisplayName": null,
+ "Usage": "Unrestricted",
+ "Tokens": []
+ }
+ },
+ {
+ "Directive": "inject",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Inject a service from the application's service container into a property.",
+ "DisplayName": null,
+ "Usage": "FileScopedMultipleOccurring",
+ "Tokens": [
+ {
+ "Kind": "Type",
+ "Optional": false,
+ "Name": "TypeName",
+ "Description": "The type of the service to inject."
+ },
+ {
+ "Kind": "Member",
+ "Optional": false,
+ "Name": "PropertyName",
+ "Description": "The name of the property."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "layout",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Declares a layout type for the current document.",
+ "DisplayName": null,
+ "Usage": "FileScopedSinglyOccurring",
+ "Tokens": [
+ {
+ "Kind": "Type",
+ "Optional": false,
+ "Name": "TypeName",
+ "Description": "The interface type implemented by the current document."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "page",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Mark the page as a routable component.",
+ "DisplayName": null,
+ "Usage": "FileScopedMultipleOccurring",
+ "Tokens": [
+ {
+ "Kind": "String",
+ "Optional": false,
+ "Name": "route template",
+ "Description": "An optional route template for the component."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "typeparam",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Declares a generic type parameter for the generated component class.",
+ "DisplayName": null,
+ "Usage": "FileScopedMultipleOccurring",
+ "Tokens": [
+ {
+ "Kind": "Member",
+ "Optional": false,
+ "Name": "type parameter",
+ "Description": "The name of the type parameter."
+ },
+ {
+ "Kind": "GenericTypeConstraint",
+ "Optional": true,
+ "Name": "type parameter constraint",
+ "Description": "The constraints applied to the type parameter."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "preservewhitespace",
+ "Kind": "SingleLine",
+ "_": {
+ "Description": "Specifies whether or not whitespace should be preserved exactly. Defaults to false for better performance.",
+ "DisplayName": null,
+ "Usage": "FileScopedSinglyOccurring",
+ "Tokens": [
+ {
+ "Kind": "Boolean",
+ "Optional": false,
+ "Name": "Preserve",
+ "Description": "True if whitespace should be preserved, otherwise false."
+ }
+ ]
+ }
+ },
+ {
+ "Directive": "section",
+ "Kind": "RazorBlock",
+ "_": {
+ "Description": "Define a section to be rendered in the configured layout page.",
+ "DisplayName": null,
+ "Usage": "Unrestricted",
+ "Tokens": [
+ {
+ "Kind": "Member",
+ "Optional": false,
+ "Name": "SectionName",
+ "Description": "The name of the section."
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }},"CSharpDocument":{"GeneratedCode":"// \r\n#pragma warning disable 1591\r\nnamespace MyApp.Pages\r\n{\r\n #line hidden\r\n using global::System;\r\n using global::System.Collections.Generic;\r\n using global::System.Linq;\r\n using global::System.Threading.Tasks;\r\n using global::Microsoft.AspNetCore.Components;\r\n public partial class Index : global::Microsoft.AspNetCore.Components.ComponentBase\r\n {\r\n #pragma warning disable 219\r\n private void __RazorDirectiveTokenHelpers__() {\r\n }\r\n #pragma warning restore 219\r\n #pragma warning disable 0414\r\n private static object __o = null;\r\n #pragma warning restore 0414\r\n #pragma warning disable 1998\r\n protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder)\r\n {\r\n }\r\n #pragma warning restore 1998\r\n }\r\n}\r\n#pragma warning restore 1591\r\n","Options": {
+ "DesignTime": true,
+ "_": {
+ "IndentWithTabs": false,
+ "IndentSize": 4,
+ "RootNamespace": "MyApp",
+ "SuppressChecksum": true,
+ "SuppressNullabilityEnforcement": false,
+ "OmitMinimizedComponentAttributeValues": true,
+ "UseEnhancedLinePragma": true,
+ "SuppressMetadataAttributes": true,
+ "SuppressPrimaryMethodBody": false,
+ "SupportLocalizedComponentNames": false
+ }
+ },"Diagnostics": [],"SourceMappings": [],"LinePragmas": []},"HtmlDocument":{"GeneratedCode":"Hello world
","Options": {
+ "DesignTime": true,
+ "_": {
+ "IndentWithTabs": false,
+ "IndentSize": 4,
+ "RootNamespace": "MyApp",
+ "SuppressChecksum": true,
+ "SuppressNullabilityEnforcement": false,
+ "OmitMinimizedComponentAttributeValues": true,
+ "UseEnhancedLinePragma": true,
+ "SuppressMetadataAttributes": true,
+ "SuppressPrimaryMethodBody": false,
+ "SupportLocalizedComponentNames": false
+ }
+ },"SourceMappings": [
+ {
+ "OriginalSpan": {
+ "FilePath": "Pages/Index.razor",
+ "AbsoluteIndex": 0,
+ "LineIndex": 0,
+ "CharacterIndex": 0,
+ "Length": 20,
+ "LineCount": 0,
+ "EndCharacterIndex": 20
+ },
+ "GeneratedSpan": {
+ "FilePath": null,
+ "AbsoluteIndex": 0,
+ "LineIndex": 0,
+ "CharacterIndex": 0,
+ "Length": 20,
+ "LineCount": 1,
+ "EndCharacterIndex": 20
+ }
+ }
+ ]},"Namespace":"MyApp.Pages"}
\ No newline at end of file