@@ -1025,10 +1025,31 @@ func parseExtensionDefinition(lexer: Lexer) throws -> TypeSystemDefinition {
10251025func parseTypeExtensionDefinition( lexer: Lexer ) throws -> TypeExtensionDefinition {
10261026 let start = lexer. token
10271027 try expectKeyword ( lexer: lexer, value: " extend " )
1028- let definition = try parseObjectTypeDefinition ( lexer: lexer)
1028+ try expectKeyword ( lexer: lexer, value: " type " )
1029+ let name = try parseName ( lexer: lexer)
1030+ let interfaces = try parseImplementsInterfaces ( lexer: lexer)
1031+ let directives = try parseDirectives ( lexer: lexer)
1032+ let fields = try optionalMany (
1033+ lexer: lexer,
1034+ openKind: . openingBrace,
1035+ closeKind: . closingBrace,
1036+ parse: parseFieldDefinition
1037+ )
1038+ if
1039+ interfaces. isEmpty,
1040+ directives. isEmpty,
1041+ fields. isEmpty
1042+ {
1043+ throw unexpected ( lexer: lexer)
1044+ }
10291045 return TypeExtensionDefinition (
10301046 loc: loc ( lexer: lexer, startToken: start) ,
1031- definition: definition
1047+ definition: ObjectTypeDefinition (
1048+ name: name,
1049+ interfaces: interfaces,
1050+ directives: directives,
1051+ fields: fields
1052+ )
10321053 )
10331054}
10341055
@@ -1047,11 +1068,7 @@ func parseSchemaExtensionDefinition(lexer: Lexer) throws -> SchemaExtensionDefin
10471068 parse: parseOperationTypeDefinition
10481069 )
10491070 if directives. isEmpty, operationTypes. isEmpty {
1050- throw syntaxError (
1051- source: lexer. source,
1052- position: lexer. token. start,
1053- description: " expected schema extend to have directive or operation "
1054- )
1071+ throw unexpected ( lexer: lexer)
10551072 }
10561073 return SchemaExtensionDefinition (
10571074 loc: loc ( lexer: lexer, startToken: start) ,
@@ -1070,10 +1087,31 @@ func parseSchemaExtensionDefinition(lexer: Lexer) throws -> SchemaExtensionDefin
10701087func parseInterfaceExtensionDefinition( lexer: Lexer ) throws -> InterfaceExtensionDefinition {
10711088 let start = lexer. token
10721089 try expectKeyword ( lexer: lexer, value: " extend " )
1073- let interfaceDefinition = try parseInterfaceTypeDefinition ( lexer: lexer)
1090+ try expectKeyword ( lexer: lexer, value: " interface " )
1091+ let name = try parseName ( lexer: lexer)
1092+ let interfaces = try parseImplementsInterfaces ( lexer: lexer)
1093+ let directives = try parseDirectives ( lexer: lexer)
1094+ let fields = try optionalMany (
1095+ lexer: lexer,
1096+ openKind: . openingBrace,
1097+ closeKind: . closingBrace,
1098+ parse: parseFieldDefinition
1099+ )
1100+ if
1101+ interfaces. isEmpty,
1102+ directives. isEmpty,
1103+ fields. isEmpty
1104+ {
1105+ throw unexpected ( lexer: lexer)
1106+ }
10741107 return InterfaceExtensionDefinition (
10751108 loc: loc ( lexer: lexer, startToken: start) ,
1076- definition: interfaceDefinition
1109+ definition: InterfaceTypeDefinition (
1110+ name: name,
1111+ interfaces: interfaces,
1112+ directives: directives,
1113+ fields: fields
1114+ )
10771115 )
10781116}
10791117
@@ -1083,10 +1121,18 @@ func parseInterfaceExtensionDefinition(lexer: Lexer) throws -> InterfaceExtensio
10831121func parseScalarExtensionDefinition( lexer: Lexer ) throws -> ScalarExtensionDefinition {
10841122 let start = lexer. token
10851123 try expectKeyword ( lexer: lexer, value: " extend " )
1086- let scalarDefinition = try parseScalarTypeDefinition ( lexer: lexer)
1124+ try expectKeyword ( lexer: lexer, value: " scalar " )
1125+ let name = try parseName ( lexer: lexer)
1126+ let directives = try parseDirectives ( lexer: lexer)
1127+ if ( directives. isEmpty) {
1128+ throw unexpected ( lexer: lexer)
1129+ }
10871130 return ScalarExtensionDefinition (
10881131 loc: loc ( lexer: lexer, startToken: start) ,
1089- definition: scalarDefinition
1132+ definition: ScalarTypeDefinition (
1133+ name: name,
1134+ directives: directives
1135+ )
10901136 )
10911137}
10921138
@@ -1096,10 +1142,24 @@ func parseScalarExtensionDefinition(lexer: Lexer) throws -> ScalarExtensionDefin
10961142func parseUnionExtensionDefinition( lexer: Lexer ) throws -> UnionExtensionDefinition {
10971143 let start = lexer. token
10981144 try expectKeyword ( lexer: lexer, value: " extend " )
1099- let definition = try parseUnionTypeDefinition ( lexer: lexer)
1145+ try expectKeyword ( lexer: lexer, value: " union " )
1146+ let name = try parseName ( lexer: lexer)
1147+ let directives = try parseDirectives ( lexer: lexer)
1148+ let types = try parseUnionMembers ( lexer: lexer)
1149+ if
1150+ directives. isEmpty,
1151+ types. isEmpty
1152+ {
1153+ throw unexpected ( lexer: lexer)
1154+ }
11001155 return UnionExtensionDefinition (
11011156 loc: loc ( lexer: lexer, startToken: start) ,
1102- definition: definition
1157+ definition: UnionTypeDefinition (
1158+ loc: loc ( lexer: lexer, startToken: start) ,
1159+ name: name,
1160+ directives: directives,
1161+ types: types
1162+ )
11031163 )
11041164}
11051165
@@ -1109,10 +1169,29 @@ func parseUnionExtensionDefinition(lexer: Lexer) throws -> UnionExtensionDefinit
11091169func parseEnumExtensionDefinition( lexer: Lexer ) throws -> EnumExtensionDefinition {
11101170 let start = lexer. token
11111171 try expectKeyword ( lexer: lexer, value: " extend " )
1112- let definition = try parseEnumTypeDefinition ( lexer: lexer)
1172+ try expectKeyword ( lexer: lexer, value: " enum " )
1173+ let name = try parseName ( lexer: lexer)
1174+ let directives = try parseDirectives ( lexer: lexer)
1175+ let values = try optionalMany (
1176+ lexer: lexer,
1177+ openKind: . openingBrace,
1178+ closeKind: . closingBrace,
1179+ parse: parseEnumValueDefinition
1180+ )
1181+ if
1182+ directives. isEmpty,
1183+ values. isEmpty
1184+ {
1185+ throw unexpected ( lexer: lexer)
1186+ }
11131187 return EnumExtensionDefinition (
11141188 loc: loc ( lexer: lexer, startToken: start) ,
1115- definition: definition
1189+ definition: EnumTypeDefinition (
1190+ loc: loc ( lexer: lexer, startToken: start) ,
1191+ name: name,
1192+ directives: directives,
1193+ values: values
1194+ )
11161195 )
11171196}
11181197
@@ -1122,10 +1201,29 @@ func parseEnumExtensionDefinition(lexer: Lexer) throws -> EnumExtensionDefinitio
11221201func parseInputObjectExtensionDefinition( lexer: Lexer ) throws -> InputObjectExtensionDefinition {
11231202 let start = lexer. token
11241203 try expectKeyword ( lexer: lexer, value: " extend " )
1125- let definition = try parseInputObjectTypeDefinition ( lexer: lexer)
1204+ try expectKeyword ( lexer: lexer, value: " input " )
1205+ let name = try parseName ( lexer: lexer)
1206+ let directives = try parseDirectives ( lexer: lexer)
1207+ let fields = try optionalMany (
1208+ lexer: lexer,
1209+ openKind: . openingBrace,
1210+ closeKind: . closingBrace,
1211+ parse: parseInputValueDef
1212+ )
1213+ if
1214+ directives. isEmpty,
1215+ fields. isEmpty
1216+ {
1217+ throw unexpected ( lexer: lexer)
1218+ }
11261219 return InputObjectExtensionDefinition (
11271220 loc: loc ( lexer: lexer, startToken: start) ,
1128- definition: definition
1221+ definition: InputObjectTypeDefinition (
1222+ loc: loc ( lexer: lexer, startToken: start) ,
1223+ name: name,
1224+ directives: directives,
1225+ fields: fields
1226+ )
11291227 )
11301228}
11311229
0 commit comments