コード例 #1
0
        protected virtual void VisitTypeExtensionDefinition(IDefinitionNode node)
        {
            switch (node)
            {
            case ScalarTypeExtensionNode value:
                VisitScalarTypeExtension(value);
                break;

            case ObjectTypeExtensionNode value:
                VisitObjectTypeExtension(value);
                break;

            case InterfaceTypeExtensionNode value:
                VisitInterfaceTypeExtension(value);
                break;

            case UnionTypeExtensionNode value:
                VisitUnionTypeExtension(value);
                break;

            case EnumTypeExtensionNode value:
                VisitEnumTypeExtension(value);
                break;

            case InputObjectTypeExtensionNode value:
                VisitInputObjectTypeExtension(value);
                break;
            }
        }
コード例 #2
0
        public void Validate(IDocumentValidatorContext context, DocumentNode document)
        {
            if (context is null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (document is null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            IDefinitionNode?typeSystemNode = null;

            for (var i = 0; i < document.Definitions.Count; i++)
            {
                IDefinitionNode node = document.Definitions[i];
                if (node.Kind is not SyntaxKind.OperationDefinition
                    and not SyntaxKind.FragmentDefinition)
                {
                    typeSystemNode = node;
                    break;
                }
            }

            if (typeSystemNode is not null)
            {
                context.Errors.Add(context.TypeSystemDefinitionNotAllowed(typeSystemNode));
            }
        }
コード例 #3
0
        protected override ISyntaxVisitorAction Enter(
            DocumentNode node,
            IDocumentValidatorContext context)
        {
            context.Names.Clear();

            for (int i = 0; i < node.Definitions.Count; i++)
            {
                IDefinitionNode definition = node.Definitions[i];
                if (definition.Kind == NodeKind.FragmentDefinition)
                {
                    string fragmentName = ((FragmentDefinitionNode)definition).Name.Value;
                    if (!context.Names.Add(fragmentName))
                    {
                        context.Errors.Add(
                            ErrorBuilder.New()
                            .SetMessage(
                                "There are multiple fragments with the name " +
                                $"`{fragmentName}`.")
                            .AddLocation(definition)
                            .SetExtension("fragment", fragmentName)
                            .SpecifiedBy("sec-Fragment-Name-Uniqueness")
                            .Build());
                    }
                }
            }

            context.Names.Clear();

            return(Continue);
        }
コード例 #4
0
        public void Validate(IDocumentValidatorContext context, DocumentNode document)
        {
            if (context is null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (document is null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            IDefinitionNode?typeSystemNode = null;

            for (int i = 0; i < document.Definitions.Count; i++)
            {
                IDefinitionNode node = document.Definitions[i];
                if (node.Kind != NodeKind.OperationDefinition &&
                    node.Kind != NodeKind.FragmentDefinition)
                {
                    typeSystemNode = node;
                    break;
                }
            }

            if (typeSystemNode is { })
コード例 #5
0
        private void PrepareContext(
            ISchema schema,
            DocumentNode document,
            DocumentValidatorContext context,
            IEnumerable <KeyValuePair <string, object?> >?contextData)
        {
            context.Schema = schema;

            for (var i = 0; i < document.Definitions.Count; i++)
            {
                IDefinitionNode definitionNode = document.Definitions[i];
                if (definitionNode.Kind == SyntaxKind.FragmentDefinition)
                {
                    var fragmentDefinition = (FragmentDefinitionNode)definitionNode;
                    context.Fragments[fragmentDefinition.Name.Value] = fragmentDefinition;
                }
            }

            if (contextData is not null)
            {
                foreach (KeyValuePair <string, object?> entry in contextData)
                {
                    context.ContextData[entry.Key] = entry.Value;
                }
            }
        }
コード例 #6
0
 public static IError TypeSystemDefinitionNotAllowed(
     this IDocumentValidatorContext context,
     IDefinitionNode node)
 {
     return(ErrorBuilder.New()
            .SetMessage(Resources.ErrorHelper_TypeSystemDefinitionNotAllowed)
            .AddLocation(node)
            .SpecifiedBy("sec-Executable-Definitions")
            .Build());
 }
コード例 #7
0
 protected virtual void VisitDefinition(IDefinitionNode node)
 {
     if (node is ITypeExtensionNode)
     {
         VisitTypeExtensionDefinition(node);
     }
     else
     {
         VisitTypeDefinition(node);
     }
 }
コード例 #8
0
 protected virtual void VisitDefinition(
     IDefinitionNode node,
     TContext context)
 {
     if (node is ITypeSystemExtensionNode)
     {
         VisitTypeExtensionDefinition(node, context);
     }
     else
     {
         VisitTypeDefinition(node, context);
     }
 }
コード例 #9
0
        public static void Prepare(this IDocumentValidatorContext context, DocumentNode document)
        {
            context.Fragments.Clear();

            for (var i = 0; i < document.Definitions.Count; i++)
            {
                IDefinitionNode definitionNode = document.Definitions[i];
                if (definitionNode.Kind == SyntaxKind.FragmentDefinition)
                {
                    var fragmentDefinition = (FragmentDefinitionNode)definitionNode;
                    context.Fragments[fragmentDefinition.Name.Value] = fragmentDefinition;
                }
            }
        }
コード例 #10
0
        protected virtual void VisitDefinition(IDefinitionNode node)
        {
            switch (node)
            {
            case OperationDefinitionNode value:
                VisitOperationDefinition(value);
                break;

            case FragmentDefinitionNode value:
                VisitFragmentDefinition(value);
                break;

            default:
                throw new NotSupportedException();
            }
        }
コード例 #11
0
        private void PrepareContext(
            ISchema schema,
            DocumentNode document,
            DocumentValidatorContext context)
        {
            context.Schema = schema;

            for (int i = 0; i < document.Definitions.Count; i++)
            {
                IDefinitionNode definitionNode = document.Definitions[i];
                if (definitionNode.Kind == NodeKind.FragmentDefinition)
                {
                    var fragmentDefinition = (FragmentDefinitionNode)definitionNode;
                    context.Fragments[fragmentDefinition.Name.Value] = fragmentDefinition;
                }
            }
        }
コード例 #12
0
        protected virtual IDefinitionNode RewriteDefinition(
            IDefinitionNode node,
            TContext context)
        {
            switch (node)
            {
            case OperationDefinitionNode value:
                return(RewriteOperationDefinition(value, context));

            case FragmentDefinitionNode value:
                return(VisitFragmentDefinitions
                        ? RewriteFragmentDefinition(value, context)
                        : value);

            default:
                return(node);
            }
        }
コード例 #13
0
        protected virtual void VisitTypeDefinition(
            IDefinitionNode node,
            TContext context)
        {
            switch (node)
            {
            case SchemaDefinitionNode value:
                VisitSchemaDefinition(value, context);
                break;

            case DirectiveDefinitionNode value:
                VisitDirectiveDefinition(value, context);
                break;

            case ScalarTypeDefinitionNode value:
                VisitScalarTypeDefinition(value, context);
                break;

            case ObjectTypeDefinitionNode value:
                VisitObjectTypeDefinition(value, context);
                break;

            case InputObjectTypeDefinitionNode value:
                VisitInputObjectTypeDefinition(value, context);
                break;

            case InterfaceTypeDefinitionNode value:
                VisitInterfaceTypeDefinition(value, context);
                break;

            case UnionTypeDefinitionNode value:
                VisitUnionTypeDefinition(value, context);
                break;

            case EnumTypeDefinitionNode value:
                VisitEnumTypeDefinition(value, context);
                break;

            default:
                throw new NotSupportedException();
            }
        }
コード例 #14
0
        protected virtual void VisitDefinition(IDefinitionNode node)
        {
            switch (node)
            {
            case OperationDefinitionNode value:
                VisitOperationDefinition(value);
                break;

            case FragmentDefinitionNode value:
                if (VisitFragmentDefinitions)
                {
                    VisitFragmentDefinition(value);
                }
                break;

            default:
                VisitUnsupportedDefinitions(node);
                break;
            }
        }
コード例 #15
0
    private void PrepareContext(
        ISchema schema,
        DocumentNode document,
        DocumentValidatorContext context,
        IDictionary <string, object?> contextData)
    {
        context.Schema = schema;

        for (var i = 0; i < document.Definitions.Count; i++)
        {
            IDefinitionNode definitionNode = document.Definitions[i];
            if (definitionNode.Kind is SyntaxKind.FragmentDefinition)
            {
                var fragmentDefinition = (FragmentDefinitionNode)definitionNode;
                context.Fragments[fragmentDefinition.Name.Value] = fragmentDefinition;
            }
        }

        context.ContextData = contextData;
    }
コード例 #16
0
    protected override ISyntaxVisitorAction Enter(
        DocumentNode node,
        IDocumentValidatorContext context)
    {
        bool hasAnonymousOp = false;
        int  opCount        = 0;
        OperationDefinitionNode?anonymousOp = null;

        context.Names.Clear();

        for (int i = 0; i < node.Definitions.Count; i++)
        {
            IDefinitionNode definition = node.Definitions[i];
            if (definition.Kind == SyntaxKind.OperationDefinition)
            {
                opCount++;

                var operation = (OperationDefinitionNode)definition;

                if (operation.Name is null)
                {
                    hasAnonymousOp = true;
                    anonymousOp    = operation;
                }
                else if (!context.Names.Add(operation.Name.Value))
                {
                    context.Errors.Add(context.OperationNameNotUnique(
                                           operation, operation.Name.Value));
                }
            }
        }

        if (hasAnonymousOp && opCount > 1)
        {
            context.Errors.Add(context.OperationAnonymousMoreThanOne(anonymousOp !, opCount));
        }

        return(Continue);
    }
コード例 #17
0
        protected override ISyntaxVisitorAction Enter(
            DocumentNode node,
            IDocumentValidatorContext context)
        {
            context.Names.Clear();

            for (int i = 0; i < node.Definitions.Count; i++)
            {
                IDefinitionNode definition = node.Definitions[i];
                if (definition.Kind == NodeKind.FragmentDefinition)
                {
                    FragmentDefinitionNode fragment = (FragmentDefinitionNode)definition;
                    if (!context.Names.Add(fragment.Name.Value))
                    {
                        context.Errors.Add(context.FragmentNameNotUnique(fragment));
                    }
                }
            }

            context.Names.Clear();

            return(Continue);
        }
コード例 #18
0
        public QueryValidationResult Validate(
            ISchema schema,
            DocumentNode queryDocument)
        {
            if (schema == null)
            {
                throw new ArgumentNullException(nameof(schema));
            }

            if (queryDocument == null)
            {
                throw new ArgumentNullException(nameof(queryDocument));
            }

            IDefinitionNode typeSystemNode = null;

            for (int i = 0; i < queryDocument.Definitions.Count; i++)
            {
                IDefinitionNode node = queryDocument.Definitions[i];
                if (node is ITypeSystemDefinitionNode ||
                    node is ITypeSystemExtensionNode)
                {
                    typeSystemNode = node;
                    break;
                }
            }

            if (typeSystemNode is null)
            {
                return(QueryValidationResult.OK);
            }

            return(new QueryValidationResult(
                       new ValidationError(
                           "A document containing TypeSystemDefinition " +
                           "is invalid for execution.", typeSystemNode)));
        }
コード例 #19
0
        protected virtual void VisitTypeExtensionDefinition(
            IDefinitionNode node)
        {
            switch (node)
            {
            case SchemaExtensionNode value:
                VisitSchemaExtension(value);
                break;

            case ScalarTypeExtensionNode value:
                VisitScalarTypeExtension(value);
                break;

            case ObjectTypeExtensionNode value:
                VisitObjectTypeExtension(value);
                break;

            case InterfaceTypeExtensionNode value:
                VisitInterfaceTypeExtension(value);
                break;

            case UnionTypeExtensionNode value:
                VisitUnionTypeExtension(value);
                break;

            case EnumTypeExtensionNode value:
                VisitEnumTypeExtension(value);
                break;

            case InputObjectTypeExtensionNode value:
                VisitInputObjectTypeExtension(value);
                break;

            default:
                throw new NotSupportedException();
            }
        }
コード例 #20
0
 protected virtual void VisitDefinition(
     IDefinitionNode node,
     TypeDefinitionItem context)
 {
     VisitTypeDefinition(node, context);
 }
コード例 #21
0
ファイル: Visitor.cs プロジェクト: CSRedRat/pascalabcnet
 public void visit(IDefinitionNode value)
 {
     throw new System.NotSupportedException(value.GetType().ToString());
 }
コード例 #22
0
 public static PathRequest <TPath> Create <TPath>(IDefinitionNode start, IDefinitionNode end, PathfindaxCollisionCategory collisionCategory = PathfindaxCollisionCategory.None, byte agentSize = 1)
     where TPath : IPath
 {
     return(new PathRequest <TPath>(start, end, collisionCategory, agentSize));
 }
コード例 #23
0
 protected virtual void VisitUnsupportedDefinitions(
     IDefinitionNode node,
     TContext context)
 {
 }
コード例 #24
0
 protected virtual void VisitUnsupportedDefinitions(
     IDefinitionNode node)
 {
 }
コード例 #25
0
ファイル: Visitor.cs プロジェクト: lisiynos/pascalabcnet
 public void visit(IDefinitionNode value)
 {
 }
コード例 #26
0
 public virtual void visit(IDefinitionNode value)
 {
 }
コード例 #27
0
        private void VisitDefinition(IDefinitionNode node, ISyntaxWriter writer)
        {
            switch (node.Kind)
            {
            case SyntaxKind.OperationDefinition:
                VisitOperationDefinition((OperationDefinitionNode)node, writer);
                break;

            case SyntaxKind.FragmentDefinition:
                VisitFragmentDefinition((FragmentDefinitionNode)node, writer);
                break;

            case SyntaxKind.SchemaDefinition:
                VisitSchemaDefinition((SchemaDefinitionNode)node, writer);
                break;

            case SyntaxKind.DirectiveDefinition:
                VisitDirectiveDefinition((DirectiveDefinitionNode)node, writer);
                break;

            case SyntaxKind.ScalarTypeDefinition:
                VisitScalarTypeDefinition((ScalarTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.ObjectTypeDefinition:
                VisitObjectTypeDefinition((ObjectTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.InputObjectTypeDefinition:
                VisitInputObjectTypeDefinition((InputObjectTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.InterfaceTypeDefinition:
                VisitInterfaceTypeDefinition((InterfaceTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.UnionTypeDefinition:
                VisitUnionTypeDefinition((UnionTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.EnumTypeDefinition:
                VisitEnumTypeDefinition((EnumTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.SchemaExtension:
                VisitSchemaExtension((SchemaExtensionNode)node, writer);
                break;

            case SyntaxKind.ScalarTypeExtension:
                VisitScalarTypeExtension((ScalarTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.ObjectTypeExtension:
                VisitObjectTypeExtension((ObjectTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.InterfaceTypeExtension:
                VisitInterfaceTypeExtension((InterfaceTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.UnionTypeExtension:
                VisitUnionTypeExtension((UnionTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.EnumTypeExtension:
                VisitEnumTypeExtension((EnumTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.InputObjectTypeExtension:
                VisitInputObjectTypeExtension((InputObjectTypeExtensionNode)node, writer);
                break;

            default:
                ThrowHelper.NodeKindIsNotSupported(node.Kind);
                break;
            }
        }