private string PrintFragmentSpread(GraphQLFragmentSpread node) { var name = PrintName(node.Name); var directives = node.Directives?.Select(PrintDirective); return($"...{name}{Wrap(string.Empty, Join(directives, " "))}"); }
protected override async ValueTask VisitFragmentSpreadAsync(GraphQLFragmentSpread fragmentSpread, AnalysisContext context) { var fragmentComplexity = context.FragmentMap[fragmentSpread.FragmentName.Name.StringValue]; context.RecordFieldComplexity(fragmentSpread, context.CurrentSubSelectionImpact / context.AvgImpact * fragmentComplexity.Complexity); context.Result.TotalQueryDepth += fragmentComplexity.Depth; await base.VisitFragmentSpreadAsync(fragmentSpread, context).ConfigureAwait(false); }
public override GraphQLFragmentSpread BeginVisitFragmentSpread(GraphQLFragmentSpread node) { if (this.GetFragment(node.Name.Value) == null) { this.Errors.Add(new GraphQLException(this.GetErrorMessage(node.Name.Value), new[] { node.Name })); } return(base.BeginVisitFragmentSpread(node)); }
public FragmentSpread FragmentSpread(GraphQLFragmentSpread source) { var name = source.Name != null?Name(source.Name) : null; var spread = new FragmentSpread(name).WithLocation(source, _body); spread.Directives = Directives(source.Directives); return(spread); }
/// <summary> /// Converts a fragment spread node and its children. /// </summary> private static FragmentSpread FragmentSpread(GraphQLFragmentSpread source) { return(new FragmentSpread(Name(source.Name)) { SourceLocation = Convert(source.Location), CommentNode = Comment(source.Comment), Directives = Directives(source.Directives) }); }
public override GraphQLFragmentSpread BeginVisitFragmentSpread( GraphQLFragmentSpread fragmentSpread) { { Tracker.EnterFragmentSpread?.Invoke(fragmentSpread); } return(base.BeginVisitFragmentSpread(fragmentSpread)); }
private void CollectFragmentSpreadFields(GraphQLComplexType runtimeType, GraphQLFragmentSpread fragmentSpread, Dictionary <string, IList <GraphQLFieldSelection> > fields) { if (!this.ShouldIncludeNode(fragmentSpread.Directives, DirectiveLocation.FRAGMENT_SPREAD)) { return; } var fragment = this.fragments[fragmentSpread.Name.Value]; this.CollectFragmentFields(runtimeType, fragment, fields); }
public virtual GraphQLFragmentSpread BeginVisitFragmentSpread(GraphQLFragmentSpread fragmentSpread) { this.BeginVisitNode(fragmentSpread.Name); if (fragmentSpread.Directives != null) { this.BeginVisitNodeCollection(fragmentSpread.Directives); } return(fragmentSpread); }
protected override async ValueTask VisitFragmentSpreadAsync(GraphQLFragmentSpread fragmentSpread, GetRecursivelyReferencedFragmentsVisitorContext context) { if (!Contains(fragmentSpread, context)) { var fragmentDefinition = context.ValidationContext.Document.FindFragmentDefinition(fragmentSpread.FragmentName.Name); if (fragmentDefinition != null) { context.AddFragment(fragmentDefinition); await VisitSelectionSetAsync(fragmentDefinition.SelectionSet, context).ConfigureAwait(false); } } }
public override GraphQLFragmentSpread BeginVisitFragmentSpread(GraphQLFragmentSpread fragmentSpread) { if (this.fragments.ContainsKey(fragmentSpread.Name.Value)) { var fragment = this.fragments[fragmentSpread.Name.Value]; this.fragments.Remove(fragmentSpread.Name.Value); this.BeginVisitFragmentDefinition(fragment); } return(base.BeginVisitFragmentSpread(fragmentSpread)); }
public override GraphQLFragmentSpread BeginVisitFragmentSpread(GraphQLFragmentSpread fragmentSpread) { var key = fragmentSpread.Name.Value; if (this.fragmentDefinitions.ContainsKey(key)) { var definition = this.fragmentDefinitions[key]; this.fragmentDefinitions.Remove(key); base.BeginVisitFragmentDefinition(definition); } return(base.BeginVisitFragmentSpread(fragmentSpread)); }
private bool Contains(GraphQLFragmentSpread fragmentSpread, GetRecursivelyReferencedFragmentsVisitorContext context) { var fragments = context.GetFragments(reset: false); if (fragments == null) { return(false); } foreach (var frag in fragments) { if (frag.FragmentName.Name == fragmentSpread.FragmentName.Name) { return(true); } } return(false); }
public override GraphQLFragmentSpread BeginVisitFragmentSpread(GraphQLFragmentSpread fragmentSpread) { if (this.Fragments.ContainsKey(fragmentSpread.Name.Value)) { var fragmentDefinition = this.Fragments[fragmentSpread.Name.Value]; var fragmentType = this.GetFragmentType(fragmentDefinition); var parentType = this.GetUnderlyingType(this.GetLastType()); if (fragmentType != null && parentType != null && !this.DoTypesOverlap(fragmentType, parentType)) { this.Errors.Add( new GraphQLException( this.GetIncompatibleTypeInFragmentMessage( fragmentType, parentType, fragmentSpread.Name.Value), new[] { fragmentSpread })); } } return(base.BeginVisitFragmentSpread(fragmentSpread)); }
public virtual GraphQLFragmentSpread BeginVisitFragmentSpread(GraphQLFragmentSpread fragmentSpread) { BeginVisitNode(fragmentSpread.Name); return(fragmentSpread); }
private void CollectFragmentSpreadFields(GraphQLObjectType runtimeType, GraphQLFragmentSpread fragmentSpread, Dictionary <string, IList <GraphQLFieldSelection> > fields) { var fragment = this.fragments[fragmentSpread.Name.Value]; this.CollectFragmentFields(runtimeType, fragment, fields); }
/// <summary> /// Initializes a new instance with the specified properties. /// </summary> public KnownFragmentNamesError(ValidationContext context, GraphQLFragmentSpread node, string fragmentName) : base(context.Document.Source, NUMBER, UnknownFragmentMessage(fragmentName), node) { }
protected override ValueTask VisitFragmentSpreadAsync(GraphQLFragmentSpread fragmentSpread, FragmentBelongsToOperationVisitorContext context) { context.Found = context.Fragment.FragmentName.Name == fragmentSpread.FragmentName.Name; return(default);
public void MergeFieldAndFragment() { var fragmentSelection = new GraphQLSelectionSet { Selections = new List <ASTNode> { FirstTestField } }; var fragment = new GraphQLFragmentDefinition { FragmentName = new GraphQLFragmentName { Name = new GraphQLName("fragment") }, TypeCondition = new GraphQLTypeCondition { Type = new GraphQLNamedType { Name = new GraphQLName("Query") } }, SelectionSet = fragmentSelection }; var document = new GraphQLDocument { Definitions = new List <ASTNode> { fragment } }; var query = new ObjectGraphType { Name = "Query" }; query.Fields.Add(new FieldType { Name = "test", ResolvedType = new StringGraphType() }); var schema = new Schema { Query = query }; var context = new ExecutionContext { Document = document, Schema = schema }; var fragSpread = new GraphQLFragmentSpread { FragmentName = new GraphQLFragmentName { Name = new GraphQLName("fragment") } }; var outerSelection = new GraphQLSelectionSet { Selections = new List <ASTNode> { fragSpread, SecondTestField } }; var fields = CollectFrom(context, query, outerSelection); fields.ShouldHaveSingleItem(); fields["test"].Field.SelectionSet.Selections.ShouldContain(x => x == FirstInnerField); fields["test"].Field.SelectionSet.Selections.ShouldContain(x => x == SecondInnerField); }