/// <summary> /// Parse schema definition extension. /// <see cref="SchemaExtensionNode" />: /// * - extend schema Directives[Const]? { OperationTypeDefinition+ } /// * - extend schema Directives[Const] /// </summary> /// <param name="context">The parser context.</param> private SchemaExtensionNode ParseSchemaExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectSchemaKeyword(); List <DirectiveNode> directives = ParseDirectives(context, true); List <OperationTypeDefinitionNode> operationTypeDefinitions = ParseOperationTypeDefinitions(context); if (directives.Count == 0 && operationTypeDefinitions.Count == 0) { throw context.Unexpected(start); } Location location = context.CreateLocation(start); return(new SchemaExtensionNode ( location, directives, operationTypeDefinitions )); }
private InputObjectTypeExtensionNode ParseInputObjectTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectInputKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); List <InputValueDefinitionNode> fields = ParseInputFieldsDefinition(context); Location location = context.CreateLocation(start); if (directives.Count == 0 && fields.Count == 0) { throw context.Unexpected(start); } return(new InputObjectTypeExtensionNode ( location, name, directives, fields )); }
private EnumTypeExtensionNode ParseEnumTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectEnumKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); List <EnumValueDefinitionNode> values = ParseEnumValuesDefinition(context); Location location = context.CreateLocation(start); if (directives.Count == 0 && values.Count == 0) { throw context.Unexpected(start); } return(new EnumTypeExtensionNode ( location, name, directives, values )); }
private UnionTypeExtensionNode ParseUnionTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectUnionKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); List <NamedTypeNode> types = ParseUnionMemberTypes(context); Location location = context.CreateLocation(start); if (directives.Count == 0 && types.Count == 0) { throw context.Unexpected(start); } return(new UnionTypeExtensionNode ( location, name, directives, types )); }
private ObjectTypeExtensionNode ParseObjectTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectTypeKeyword(); NameNode name = context.ParseName(); List <NamedTypeNode> interfaces = ParseImplementsInterfaces(context); List <DirectiveNode> directives = ParseDirectives(context, true); List <FieldDefinitionNode> fields = ParseFieldsDefinition(context); Location location = context.CreateLocation(start); if (interfaces.Count == 0 && directives.Count == 0 && fields.Count == 0) { throw context.Unexpected(start); } return(new ObjectTypeExtensionNode ( location, name, directives, interfaces, fields )); }
private ScalarTypeExtensionNode ParseScalarTypeExtension( ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectScalarKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); if (directives.Count == 0) { throw context.Unexpected(start); } Location location = context.CreateLocation(start); return(new ScalarTypeExtensionNode ( location, name, directives )); }