diff --git a/spec/Appendix B -- Grammar Summary.md b/spec/Appendix B -- Grammar Summary.md index 56b7d1676..a1783c3bc 100644 --- a/spec/Appendix B -- Grammar Summary.md +++ b/spec/Appendix B -- Grammar Summary.md @@ -96,6 +96,7 @@ Document : Definition+ Definition : - ExecutableDefinition - TypeSystemDefinition + - TypeSystemExtension ExecutableDefinition : - OperationDefinition @@ -187,11 +188,18 @@ Directive[Const] : @ Name Arguments[?Const]? TypeSystemDefinition : - SchemaDefinition - TypeDefinition - - TypeExtension - DirectiveDefinition +TypeSystemExtension : + - SchemaExtension + - TypeExtension + SchemaDefinition : schema Directives[Const]? { OperationTypeDefinition+ } +SchemaExtension : + - extend schema Directives[Const]? { OperationTypeDefinition+ } + - extend schema Directives[Const] + OperationTypeDefinition : OperationType : NamedType Description : StringValue diff --git a/spec/Section 2 -- Language.md b/spec/Section 2 -- Language.md index c523b780d..253f8eb64 100644 --- a/spec/Section 2 -- Language.md +++ b/spec/Section 2 -- Language.md @@ -171,6 +171,7 @@ Document : Definition+ Definition : - ExecutableDefinition - TypeSystemDefinition + - TypeSystemExtension ExecutableDefinition : - OperationDefinition @@ -181,9 +182,9 @@ by a GraphQL service or client. A document contains multiple definitions, either executable or representative of a GraphQL type system. Documents are only executable by a GraphQL service if they contain an -{OperationDefinition}, only contain {ExecutableDefinition} and do not contain -{TypeSystemDefinition}. However documents which do not contain -{OperationDefinition} or do contain {TypeSystemDefinition} may still be parsed +{OperationDefinition} and otherwise only contain {ExecutableDefinition}. +However documents which do not contain {OperationDefinition} or do contain +{TypeSystemDefinition} or {TypeSystemExtension} may still be parsed and validated to allow client tools to represent many GraphQL uses which may appear across many individual files. @@ -195,8 +196,8 @@ multiple operations to a GraphQL service, the name of the desired operation to be executed must also be provided. GraphQL services which only seek to provide GraphQL query execution may choose -to only include {ExecutableDefinition} and omit the {TypeSystemDefinition} rule -from {Definition}. +to only include {ExecutableDefinition} and omit the {TypeSystemDefinition} and +{TypeSystemExtension} rules from {Definition}. ## Operations diff --git a/spec/Section 3 -- Type System.md b/spec/Section 3 -- Type System.md index 22137b82e..2e8d57b1e 100644 --- a/spec/Section 3 -- Type System.md +++ b/spec/Section 3 -- Type System.md @@ -8,7 +8,6 @@ are valid. TypeSystemDefinition : - SchemaDefinition - TypeDefinition - - TypeExtension - DirectiveDefinition The GraphQL language includes an @@ -27,6 +26,18 @@ Note: The type system definition language is used throughout the remainder of this specification document when illustrating example type systems. +## Type System Extensions + +TypeSystemExtension : + - SchemaExtension + - TypeExtension + +Type system extensions are used to represent a GraphQL type system which has been +extended from some original type system. For example, this might be used by a +local service to represent data a GraphQL client only accesses locally, or by a +GraphQL service which is itself an extension of another GraphQL service. + + ## Schema SchemaDefinition : schema Directives[Const]? { RootOperationTypeDefinition+ } @@ -139,6 +150,16 @@ type Query { } ``` +### Schema Extension + +SchemaExtension : + - extend schema Directives[Const]? { OperationTypeDefinition+ } + - extend schema Directives[Const] + +Schema extensions are used to represent a schema which has been extended from +an original schema. For example, this might be used by a GraphQL service which +adds additional operation types, or additional directives to an existing schema. + ## Descriptions @@ -261,10 +282,9 @@ TypeExtension : - EnumTypeExtension - InputObjectTypeExtension -Type extensions are used to represent a GraphQL type system which has been -extended from some original type system. For example, this might be used by a -local service to represent data a GraphQL client only accesses locally, or by a -GraphQL service which is itself an extension of another GraphQL service. +Type extensions are used to represent a GraphQL type which has been extended +from some original type. For example, this might be used by a local service to +represent additional fields a GraphQL client only accesses locally. ## Scalars