public InlineFragment InlineFragment(GraphQLInlineFragment source)
        {
            var frag = new InlineFragment().WithLocation(source, _body);

            frag.Type = source.TypeCondition != null?NamedType(source.TypeCondition) : null;

            frag.Directives   = Directives(source.Directives);
            frag.SelectionSet = SelectionSet(source.SelectionSet);
            return(frag);
        }
Пример #2
0
 /// <summary>
 /// Converts an inline fragment node and its children.
 /// </summary>
 private static InlineFragment InlineFragment(GraphQLInlineFragment source)
 {
     return(new InlineFragment
     {
         SourceLocation = Convert(source.Location),
         CommentNode = Comment(source.Comment),
         Type = source.TypeCondition != null?NamedType(source.TypeCondition) : null,
                    Directives = Directives(source.Directives),
                    SelectionSet = SelectionSet(source.SelectionSet)
     });
 }
        public override GraphQLInlineFragment BeginVisitInlineFragment(GraphQLInlineFragment inlineFragment)
        {
            if (inlineFragment.TypeCondition != null)
            {
                this.typeStack.Push(this.SchemaRepository.GetSchemaOutputTypeByName(inlineFragment.TypeCondition.Name.Value));
            }
            else
            {
                this.typeStack.Push(this.GetLastType());
            }

            return(base.BeginVisitInlineFragment(inlineFragment));
        }
Пример #4
0
        private bool DoesFragmentConditionMatch(GraphQLObjectType runtimeType, GraphQLInlineFragment fragment)
        {
            if (fragment.TypeCondition == null)
            {
                return(true);
            }

            if (fragment.TypeCondition.Name.Value == runtimeType.Name)
            {
                return(true);
            }

            return(false);
        }
        public override GraphQLInlineFragment BeginVisitInlineFragment(GraphQLInlineFragment inlineFragment)
        {
            if (inlineFragment.TypeCondition != null)
            {
                var type = this.schemaRepository.GetSchemaInputTypeByName(inlineFragment.TypeCondition.Name.Value);

                if (type != null)
                {
                    var errorMessage = this.ComposeInlineFragmentOnNonCompositeErrorMessage(type);
                    this.Errors.Add(new GraphQLException(errorMessage, new[] { inlineFragment.TypeCondition }));
                }
            }

            return(base.BeginVisitInlineFragment(inlineFragment));
        }
Пример #6
0
        private string PrintInlineFragment(GraphQLInlineFragment node)
        {
            var typeCondition = PrintNamedType(node.TypeCondition);
            var directives    = node.Directives?.Select(PrintDirective);
            var selectionSet  = PrintSelectionSet(node.SelectionSet);

            return(Join(new[]
            {
                "...",
                Wrap("on ", typeCondition),
                Join(directives, " "),
                selectionSet
            },
                        " "));
        }
Пример #7
0
        private void CollectFragmentFields(GraphQLObjectType runtimeType, GraphQLInlineFragment fragment, Dictionary <string, IList <GraphQLFieldSelection> > fields)
        {
            if (!this.ShouldIncludeNode(fragment.Directives))
            {
                return;
            }

            if (!this.DoesFragmentConditionMatch(runtimeType, fragment))
            {
                return;
            }

            this.CollectFields(runtimeType, fragment.SelectionSet)
            .ToList().ForEach(e => fields.Add(e.Key, e.Value));
        }
Пример #8
0
        private bool DoesFragmentConditionMatch(GraphQLComplexType runtimeType, GraphQLInlineFragment fragment)
        {
            if (fragment.TypeCondition == null)
            {
                return(true);
            }

            var type = this.schemaRepository.GetSchemaOutputTypeByName(fragment.TypeCondition.Name.Value);

            if (type == runtimeType || TypeComparators.IsPossibleType(runtimeType, type, this.schemaRepository))
            {
                return(true);
            }

            return(false);
        }
Пример #9
0
        public override GraphQLInlineFragment BeginVisitInlineFragment(
            GraphQLInlineFragment inlineFragment)
        {
            {
                Tracker.EnterInlineFragment?.Invoke(inlineFragment);
            }

            var _ = base.BeginVisitInlineFragment(inlineFragment);


            {
                Tracker.LeaveInlineFragment?.Invoke(inlineFragment);
            }

            return(_);
        }
Пример #10
0
 public virtual GraphQLInlineFragment BeginVisitInlineFragment(
     GraphQLInlineFragment inlineFragment)
 {
     if (inlineFragment.TypeCondition != null)
     {
         BeginVisitNode(inlineFragment.TypeCondition);
     }
     if (inlineFragment.Directives != null)
     {
         BeginVisitDirectives(inlineFragment.Directives);
     }
     if (inlineFragment.SelectionSet != null)
     {
         BeginVisitSelectionSet(inlineFragment.SelectionSet);
     }
     return(inlineFragment);
 }
Пример #11
0
        private void ValidateInlineFragmentTypes(GraphQLInlineFragment node, GraphQLBaseType fragmentType, GraphQLBaseType parentType)
        {
            if (parentType is GraphQLList)
            {
                parentType = ((GraphQLList)parentType).MemberType;

                this.ValidateInlineFragmentTypes(node, fragmentType, parentType);
            }
            else if (fragmentType != null &&
                     parentType != null &&
                     !this.DoTypesOverlap(fragmentType, parentType))
            {
                this.Errors.Add(
                    new GraphQLException(
                        this.GetIncompatibleTypeInAnonymousFragmentMessage(fragmentType, parentType),
                        new[] { node }));
            }
        }
 /// <summary>
 /// Initializes a new instance with the specified properties.
 /// </summary>
 public FragmentsOnCompositeTypesError(ValidationContext context, GraphQLInlineFragment node)
     : base(context.Document.Source, NUMBER, InlineFragmentOnNonCompositeErrorMessage(node.TypeCondition !.Type.Print()), node.TypeCondition !.Type)
 public virtual GraphQLInlineFragment EndVisitInlineFragment(GraphQLInlineFragment inlineFragment)
 {
     return(inlineFragment);
 }
Пример #14
0
 public SetSelection(GraphQLInlineFragment op)
     : this(op.SelectionSet)
 {
     this.TypeCondition = op.TypeCondition;
 }
 /// <summary>
 /// Initializes a new instance with the specified properties.
 /// </summary>
 public PossibleFragmentSpreadsError(ValidationContext context, GraphQLInlineFragment node, IGraphType parentType, IGraphType fragType)
     : base(context.Document.Source, NUMBER, TypeIncompatibleAnonSpreadMessage(parentType.ToString() !, fragType.ToString() !), node)
        public override GraphQLInlineFragment EndVisitInlineFragment(GraphQLInlineFragment inlineFragment)
        {
            this.typeStack.Pop();

            return(base.EndVisitInlineFragment(inlineFragment));
        }
Пример #17
0
 protected override ValueTask VisitInlineFragmentAsync(GraphQLInlineFragment inlineFragment, GetRecursivelyReferencedFragmentsVisitorContext context)
 {
     return(VisitAsync(inlineFragment.SelectionSet, context));
 }