Skip to content

Commit

Permalink
Add ISchemaNodeVisitor.PostVisitSchema (#3951)
Browse files Browse the repository at this point in the history
  • Loading branch information
Shane32 committed Jun 2, 2024
1 parent dfd5bf1 commit 29bbd00
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 0 deletions.
9 changes: 9 additions & 0 deletions docs2/site/docs/migrations/migration8.md
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,10 @@ for schema-first schemas where the CLR type is not defined while the resolver is
`IsTypeOf` to be set automatically for other use cases. Schema-first schemas will automatically set this
property to `true` for all object graph types to retain the existing behavior.

### 12. `ISchemaNodeVisitor.PostVisitSchema` method added

Allows to revisit the schema after all other methods (types/fields/etc) have been visited.

## Breaking Changes

### 1. Query type is required
Expand Down Expand Up @@ -559,3 +563,8 @@ and override only the methods you need to implement.

See the new features section for details on the new properties added to these interfaces.
Unless you directly implement these interfaces, you should not be impacted by these changes.

### 14. `ISchemaNodeVisitor.PostVisitSchema` method added

See the new features section for details on the new method added to this interface.
Unless you directly implement this interface, you should not be impacted by this change.
3 changes: 3 additions & 0 deletions src/GraphQL.ApiTests/net50/GraphQL.approved.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2833,6 +2833,7 @@ namespace GraphQL.Utilities
public sealed class AppliedDirectivesValidationVisitor : GraphQL.Utilities.ISchemaNodeVisitor
{
public static readonly GraphQL.Utilities.AppliedDirectivesValidationVisitor Instance;
public void PostVisitSchema(GraphQL.Types.ISchema schema) { }
public void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema) { }
Expand All @@ -2859,6 +2860,7 @@ namespace GraphQL.Utilities
public abstract class BaseSchemaNodeVisitor : GraphQL.Utilities.ISchemaNodeVisitor
{
protected BaseSchemaNodeVisitor() { }
public virtual void PostVisitSchema(GraphQL.Types.ISchema schema) { }
public virtual void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public virtual void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public virtual void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema) { }
Expand Down Expand Up @@ -2896,6 +2898,7 @@ namespace GraphQL.Utilities
}
public interface ISchemaNodeVisitor
{
void PostVisitSchema(GraphQL.Types.ISchema schema);
void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema);
void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema);
void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema);
Expand Down
3 changes: 3 additions & 0 deletions src/GraphQL.ApiTests/net60/GraphQL.approved.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2847,6 +2847,7 @@ namespace GraphQL.Utilities
public sealed class AppliedDirectivesValidationVisitor : GraphQL.Utilities.ISchemaNodeVisitor
{
public static readonly GraphQL.Utilities.AppliedDirectivesValidationVisitor Instance;
public void PostVisitSchema(GraphQL.Types.ISchema schema) { }
public void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema) { }
Expand All @@ -2873,6 +2874,7 @@ namespace GraphQL.Utilities
public abstract class BaseSchemaNodeVisitor : GraphQL.Utilities.ISchemaNodeVisitor
{
protected BaseSchemaNodeVisitor() { }
public virtual void PostVisitSchema(GraphQL.Types.ISchema schema) { }
public virtual void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public virtual void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public virtual void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema) { }
Expand Down Expand Up @@ -2910,6 +2912,7 @@ namespace GraphQL.Utilities
}
public interface ISchemaNodeVisitor
{
void PostVisitSchema(GraphQL.Types.ISchema schema);
void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema);
void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema);
void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2761,6 +2761,7 @@ namespace GraphQL.Utilities
public sealed class AppliedDirectivesValidationVisitor : GraphQL.Utilities.ISchemaNodeVisitor
{
public static readonly GraphQL.Utilities.AppliedDirectivesValidationVisitor Instance;
public void PostVisitSchema(GraphQL.Types.ISchema schema) { }
public void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema) { }
Expand All @@ -2787,6 +2788,7 @@ namespace GraphQL.Utilities
public abstract class BaseSchemaNodeVisitor : GraphQL.Utilities.ISchemaNodeVisitor
{
protected BaseSchemaNodeVisitor() { }
public virtual void PostVisitSchema(GraphQL.Types.ISchema schema) { }
public virtual void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public virtual void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema) { }
public virtual void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema) { }
Expand Down Expand Up @@ -2824,6 +2826,7 @@ namespace GraphQL.Utilities
}
public interface ISchemaNodeVisitor
{
void PostVisitSchema(GraphQL.Types.ISchema schema);
void VisitDirective(GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema);
void VisitDirectiveArgumentDefinition(GraphQL.Types.QueryArgument argument, GraphQL.Types.Directive directive, GraphQL.Types.ISchema schema);
void VisitEnum(GraphQL.Types.EnumerationGraphType type, GraphQL.Types.ISchema schema);
Expand Down
2 changes: 2 additions & 0 deletions src/GraphQL/Extensions/SchemaExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,8 @@ public static void Run(this ISchemaNodeVisitor visitor, ISchema schema)
break;
}
}

visitor.PostVisitSchema(schema);
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ private AppliedDirectivesValidationVisitor()
/// <inheritdoc/>
public void VisitSchema(ISchema schema) => ValidateAppliedDirectives(schema, null, null, schema, DirectiveLocation.Schema);

/// <inheritdoc/>
public void PostVisitSchema(ISchema schema) { }

/// <inheritdoc/>
public void VisitUnion(UnionGraphType type, ISchema schema) => ValidateAppliedDirectives(type, null, null, schema, DirectiveLocation.Union);

Expand Down
5 changes: 5 additions & 0 deletions src/GraphQL/Utilities/Visitors/BaseSchemaNodeVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ public virtual void VisitSchema(ISchema schema)
{
}

/// <inheritdoc />
public virtual void PostVisitSchema(ISchema schema)
{
}

/// <inheritdoc />
public virtual void VisitDirective(Directive directive, ISchema schema)
{
Expand Down
5 changes: 5 additions & 0 deletions src/GraphQL/Utilities/Visitors/ISchemaNodeVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ public interface ISchemaNodeVisitor
/// </summary>
void VisitSchema(ISchema schema);

/// <summary>
/// Visits <see cref="Schema"/> after all other definitions have been visited.
/// </summary>
void PostVisitSchema(ISchema schema);

/// <summary>
/// Visits registered within the schema <see cref="Directive"/>.
/// </summary>
Expand Down

0 comments on commit 29bbd00

Please sign in to comment.