Skip to content

Commit f85624e

Browse files
author
github-actions
committed
Documentation update
1 parent 4f6596a commit f85624e

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

docs/migrations/migration8/index.html

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,6 +1187,58 @@ <h3 id="33-added-capability-to-reference-object-graph-types-from-their-implement
11871187
<span class="token punctuation">{</span>
11881188
<span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">string</span></span> Name <span class="token punctuation">{</span> <span class="token keyword">get</span><span class="token punctuation">;</span> <span class="token keyword">set</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
11891189
<span class="token punctuation">}</span></code></pre></div>
1190+
<h3 id="34-deprecated-element-detection-and-validation-support-v86" style="position:relative;"><a href="#34-deprecated-element-detection-and-validation-support-v86" aria-label="34 deprecated element detection and validation support v86 permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>34. Deprecated element detection and validation support (v8.6+)</h3>
1191+
<p>Two new classes have been added to help manage deprecated schema elements more effectively:
1192+
<a href="src/GraphQL/Utilities/Visitors/Custom/DeprecatedTypeReferenceVisitor.cs"><code class="language-text">DeprecatedTypeReferenceVisitor</code></a> and
1193+
<a href="src/GraphQL/Validation/Rules.Custom/DeprecatedElementsValidationRule.cs"><code class="language-text">DeprecatedElementsValidationRule</code></a>.
1194+
These classes work together to provide comprehensive deprecation management at both the schema and query validation levels.</p>
1195+
<p>The <a href="src/GraphQL/Utilities/Visitors/Custom/DeprecatedTypeReferenceVisitor.cs"><code class="language-text">DeprecatedTypeReferenceVisitor</code></a> is a schema visitor that identifies non-deprecated fields that directly reference deprecated types during schema initialization. This helps maintain schema consistency by flagging potential issues where deprecated types are still being referenced by active fields.</p>
1196+
<p>The <a href="src/GraphQL/Validation/Rules.Custom/DeprecatedElementsValidationRule.cs"><code class="language-text">DeprecatedElementsValidationRule</code></a> is an abstract validation rule that identifies deprecated fields, arguments, and types referenced in GraphQL documents during query validation. It provides abstract methods that can be overridden to implement custom handling of deprecated element usage, such as logging warnings or collecting metrics.</p>
1197+
<div class="gatsby-highlight" data-language="csharp"><pre class="language-csharp"><code class="language-csharp"><span class="token comment">// Create a custom validation rule to handle deprecated element usage during query validation</span>
1198+
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">LoggingDeprecatedElementsRule</span> <span class="token punctuation">:</span> <span class="token type-list"><span class="token class-name">DeprecatedElementsValidationRule</span></span>
1199+
<span class="token punctuation">{</span>
1200+
<span class="token keyword">private</span> <span class="token keyword">readonly</span> <span class="token class-name">ILogger<span class="token punctuation">&lt;</span>LoggingDeprecatedElementsRule<span class="token punctuation">></span></span> _logger<span class="token punctuation">;</span>
1201+
1202+
<span class="token keyword">public</span> <span class="token function">LoggingDeprecatedElementsRule</span><span class="token punctuation">(</span><span class="token class-name">ILogger<span class="token punctuation">&lt;</span>LoggingDeprecatedElementsRule<span class="token punctuation">></span></span> logger<span class="token punctuation">)</span>
1203+
<span class="token punctuation">{</span>
1204+
_logger <span class="token operator">=</span> logger<span class="token punctuation">;</span>
1205+
<span class="token punctuation">}</span>
1206+
1207+
<span class="token keyword">protected</span> <span class="token keyword">override</span> <span class="token return-type class-name">ValueTask</span> <span class="token function">OnDeprecatedFieldReferencedAsync</span><span class="token punctuation">(</span><span class="token class-name">ValidationContext</span> context<span class="token punctuation">,</span> <span class="token class-name">GraphQLField</span> fieldNode<span class="token punctuation">,</span> <span class="token class-name">FieldType</span> fieldDefinition<span class="token punctuation">,</span> <span class="token class-name">IGraphType</span> parentType<span class="token punctuation">)</span>
1208+
<span class="token punctuation">{</span>
1209+
_logger<span class="token punctuation">.</span><span class="token function">LogWarning</span><span class="token punctuation">(</span><span class="token string">"Deprecated field '{ParentType}.{FieldName}' was used: {DeprecationReason}"</span><span class="token punctuation">,</span>
1210+
parentType<span class="token punctuation">.</span>Name<span class="token punctuation">,</span> fieldDefinition<span class="token punctuation">.</span>Name<span class="token punctuation">,</span> fieldDefinition<span class="token punctuation">.</span>DeprecationReason<span class="token punctuation">)</span><span class="token punctuation">;</span>
1211+
<span class="token keyword">return</span> <span class="token keyword">default</span><span class="token punctuation">;</span>
1212+
<span class="token punctuation">}</span>
1213+
1214+
<span class="token keyword">protected</span> <span class="token keyword">override</span> <span class="token return-type class-name">ValueTask</span> <span class="token function">OnDeprecatedFieldArgumentReferencedAsync</span><span class="token punctuation">(</span><span class="token class-name">ValidationContext</span> context<span class="token punctuation">,</span> <span class="token class-name">GraphQLArgument</span> argumentNode<span class="token punctuation">,</span> <span class="token class-name">QueryArgument</span> argumentDefinition<span class="token punctuation">,</span> <span class="token class-name">FieldType</span> fieldDefinition<span class="token punctuation">,</span> <span class="token class-name">IGraphType</span> parentType<span class="token punctuation">)</span>
1215+
<span class="token punctuation">{</span>
1216+
_logger<span class="token punctuation">.</span><span class="token function">LogWarning</span><span class="token punctuation">(</span><span class="token string">"Deprecated argument '{ParentType}.{FieldName}.{ArgumentName}' was used: {DeprecationReason}"</span><span class="token punctuation">,</span>
1217+
parentType<span class="token punctuation">.</span>Name<span class="token punctuation">,</span> fieldDefinition<span class="token punctuation">.</span>Name<span class="token punctuation">,</span> argumentDefinition<span class="token punctuation">.</span>Name<span class="token punctuation">,</span> argumentDefinition<span class="token punctuation">.</span>DeprecationReason<span class="token punctuation">)</span><span class="token punctuation">;</span>
1218+
<span class="token keyword">return</span> <span class="token keyword">default</span><span class="token punctuation">;</span>
1219+
<span class="token punctuation">}</span>
1220+
1221+
<span class="token keyword">protected</span> <span class="token keyword">override</span> <span class="token return-type class-name">ValueTask</span> <span class="token function">OnDeprecatedDirectiveArgumentReferencedAsync</span><span class="token punctuation">(</span><span class="token class-name">ValidationContext</span> context<span class="token punctuation">,</span> <span class="token class-name">GraphQLArgument</span> argumentNode<span class="token punctuation">,</span> <span class="token class-name">QueryArgument</span> argumentDefinition<span class="token punctuation">,</span> <span class="token class-name">Directive</span> directiveDefinition<span class="token punctuation">)</span>
1222+
<span class="token punctuation">{</span>
1223+
_logger<span class="token punctuation">.</span><span class="token function">LogWarning</span><span class="token punctuation">(</span><span class="token string">"Deprecated directive argument '@{DirectiveName}.{ArgumentName}' was used: {DeprecationReason}"</span><span class="token punctuation">,</span>
1224+
directiveDefinition<span class="token punctuation">.</span>Name<span class="token punctuation">,</span> argumentDefinition<span class="token punctuation">.</span>Name<span class="token punctuation">,</span> argumentDefinition<span class="token punctuation">.</span>DeprecationReason<span class="token punctuation">)</span><span class="token punctuation">;</span>
1225+
<span class="token keyword">return</span> <span class="token keyword">default</span><span class="token punctuation">;</span>
1226+
<span class="token punctuation">}</span>
1227+
1228+
<span class="token keyword">protected</span> <span class="token keyword">override</span> <span class="token return-type class-name">ValueTask</span> <span class="token function">OnDeprecatedTypeReferencedAsync</span><span class="token punctuation">(</span><span class="token class-name">ValidationContext</span> context<span class="token punctuation">,</span> <span class="token class-name">GraphQLNamedType</span> typeConditionNode<span class="token punctuation">,</span> <span class="token class-name">IGraphType</span> typeDefinition<span class="token punctuation">)</span>
1229+
<span class="token punctuation">{</span>
1230+
_logger<span class="token punctuation">.</span><span class="token function">LogWarning</span><span class="token punctuation">(</span><span class="token string">"Deprecated type '{TypeName}' was used: {DeprecationReason}"</span><span class="token punctuation">,</span>
1231+
typeDefinition<span class="token punctuation">.</span>Name<span class="token punctuation">,</span> typeDefinition<span class="token punctuation">.</span>DeprecationReason<span class="token punctuation">)</span><span class="token punctuation">;</span>
1232+
<span class="token keyword">return</span> <span class="token keyword">default</span><span class="token punctuation">;</span>
1233+
<span class="token punctuation">}</span>
1234+
<span class="token punctuation">}</span>
1235+
1236+
<span class="token comment">// Register the schema visitor and validation rule</span>
1237+
services<span class="token punctuation">.</span><span class="token function">AddGraphQL</span><span class="token punctuation">(</span>b <span class="token operator">=></span> b
1238+
<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">AddSchema</span><span class="token generic class-name"><span class="token punctuation">&lt;</span>MySchema<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span>
1239+
<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">AddSchemaVisitor</span><span class="token generic class-name"><span class="token punctuation">&lt;</span>DeprecatedTypeReferenceVisitor<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span>
1240+
<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">AddValidationRule</span><span class="token generic class-name"><span class="token punctuation">&lt;</span>LoggingDeprecatedElementsRule<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span>
1241+
<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre></div>
11901242
<h2 id="breaking-changes" style="position:relative;"><a href="#breaking-changes" aria-label="breaking changes permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Breaking Changes</h2>
11911243
<h3 id="1-query-type-is-required" style="position:relative;"><a href="#1-query-type-is-required" aria-label="1 query type is required permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>1. Query type is required</h3>
11921244
<p>Pursuant to the GraphQL specification, a query type is required for any schema.

page-data/docs/migrations/migration8/page-data.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)