Beispiel #1
0
        private string PrintFragmentSpread(GraphQLFragmentSpread node)
        {
            var name       = PrintName(node.Name);
            var directives = node.Directives?.Select(PrintDirective);

            return($"...{name}{Wrap(string.Empty, Join(directives, " "))}");
        }
Beispiel #2
0
        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);
        }
Beispiel #5
0
 /// <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)
     });
 }
Beispiel #6
0
        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);
        }
Beispiel #9
0
 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);
         }
     }
 }
Beispiel #10
0
        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));
        }
Beispiel #12
0
            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);
            }
Beispiel #13
0
        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));
        }
Beispiel #14
0
 public virtual GraphQLFragmentSpread BeginVisitFragmentSpread(GraphQLFragmentSpread fragmentSpread)
 {
     BeginVisitNode(fragmentSpread.Name);
     return(fragmentSpread);
 }
Beispiel #15
0
        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)
 {
 }
Beispiel #17
0
 protected override ValueTask VisitFragmentSpreadAsync(GraphQLFragmentSpread fragmentSpread, FragmentBelongsToOperationVisitorContext context)
 {
     context.Found = context.Fragment.FragmentName.Name == fragmentSpread.FragmentName.Name;
     return(default);
Beispiel #18
0
    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);
    }