@@ -1025,10 +1025,31 @@ func parseExtensionDefinition(lexer: Lexer) throws -> TypeSystemDefinition {
1025
1025
func parseTypeExtensionDefinition( lexer: Lexer ) throws -> TypeExtensionDefinition {
1026
1026
let start = lexer. token
1027
1027
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
+ }
1029
1045
return TypeExtensionDefinition (
1030
1046
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
+ )
1032
1053
)
1033
1054
}
1034
1055
@@ -1047,11 +1068,7 @@ func parseSchemaExtensionDefinition(lexer: Lexer) throws -> SchemaExtensionDefin
1047
1068
parse: parseOperationTypeDefinition
1048
1069
)
1049
1070
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)
1055
1072
}
1056
1073
return SchemaExtensionDefinition (
1057
1074
loc: loc ( lexer: lexer, startToken: start) ,
@@ -1070,10 +1087,31 @@ func parseSchemaExtensionDefinition(lexer: Lexer) throws -> SchemaExtensionDefin
1070
1087
func parseInterfaceExtensionDefinition( lexer: Lexer ) throws -> InterfaceExtensionDefinition {
1071
1088
let start = lexer. token
1072
1089
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
+ }
1074
1107
return InterfaceExtensionDefinition (
1075
1108
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
+ )
1077
1115
)
1078
1116
}
1079
1117
@@ -1083,10 +1121,18 @@ func parseInterfaceExtensionDefinition(lexer: Lexer) throws -> InterfaceExtensio
1083
1121
func parseScalarExtensionDefinition( lexer: Lexer ) throws -> ScalarExtensionDefinition {
1084
1122
let start = lexer. token
1085
1123
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
+ }
1087
1130
return ScalarExtensionDefinition (
1088
1131
loc: loc ( lexer: lexer, startToken: start) ,
1089
- definition: scalarDefinition
1132
+ definition: ScalarTypeDefinition (
1133
+ name: name,
1134
+ directives: directives
1135
+ )
1090
1136
)
1091
1137
}
1092
1138
@@ -1096,10 +1142,24 @@ func parseScalarExtensionDefinition(lexer: Lexer) throws -> ScalarExtensionDefin
1096
1142
func parseUnionExtensionDefinition( lexer: Lexer ) throws -> UnionExtensionDefinition {
1097
1143
let start = lexer. token
1098
1144
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
+ }
1100
1155
return UnionExtensionDefinition (
1101
1156
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
+ )
1103
1163
)
1104
1164
}
1105
1165
@@ -1109,10 +1169,29 @@ func parseUnionExtensionDefinition(lexer: Lexer) throws -> UnionExtensionDefinit
1109
1169
func parseEnumExtensionDefinition( lexer: Lexer ) throws -> EnumExtensionDefinition {
1110
1170
let start = lexer. token
1111
1171
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
+ }
1113
1187
return EnumExtensionDefinition (
1114
1188
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
+ )
1116
1195
)
1117
1196
}
1118
1197
@@ -1122,10 +1201,29 @@ func parseEnumExtensionDefinition(lexer: Lexer) throws -> EnumExtensionDefinitio
1122
1201
func parseInputObjectExtensionDefinition( lexer: Lexer ) throws -> InputObjectExtensionDefinition {
1123
1202
let start = lexer. token
1124
1203
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
+ }
1126
1219
return InputObjectExtensionDefinition (
1127
1220
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
+ )
1129
1227
)
1130
1228
}
1131
1229
0 commit comments