@@ -1190,7 +1190,7 @@ func parseInputObjectExtensionDefinition(lexer: Lexer) throws -> InputObjectExte
1190
1190
1191
1191
/**
1192
1192
* DirectiveDefinition :
1193
- * - directive @ Name ArgumentsDefinition? on DirectiveLocations
1193
+ * - directive @ Name ArgumentsDefinition? repeatable? on DirectiveLocations
1194
1194
*/
1195
1195
func parseDirectiveDefinition( lexer: Lexer ) throws -> DirectiveDefinition {
1196
1196
let start = lexer. token
@@ -1199,15 +1199,30 @@ func parseDirectiveDefinition(lexer: Lexer) throws -> DirectiveDefinition {
1199
1199
try expect ( lexer: lexer, kind: . at)
1200
1200
let name = try parseName ( lexer: lexer)
1201
1201
let args = try parseArgumentDefs ( lexer: lexer)
1202
- try expectKeyword ( lexer: lexer, value: " on " )
1203
- let locations = try parseDirectiveLocations ( lexer: lexer)
1204
- return DirectiveDefinition (
1205
- loc: loc ( lexer: lexer, startToken: start) ,
1206
- description: description,
1207
- name: name,
1208
- arguments: args,
1209
- locations: locations
1210
- )
1202
+
1203
+ do {
1204
+ try expectKeyword ( lexer: lexer, value: " repeatable " )
1205
+ try expectKeyword ( lexer: lexer, value: " on " )
1206
+ let locations = try parseDirectiveLocations ( lexer: lexer)
1207
+ return DirectiveDefinition (
1208
+ loc: loc ( lexer: lexer, startToken: start) ,
1209
+ description: description,
1210
+ name: name,
1211
+ arguments: args,
1212
+ locations: locations,
1213
+ repeatable: true
1214
+ )
1215
+ } catch {
1216
+ try expectKeyword ( lexer: lexer, value: " on " )
1217
+ let locations = try parseDirectiveLocations ( lexer: lexer)
1218
+ return DirectiveDefinition (
1219
+ loc: loc ( lexer: lexer, startToken: start) ,
1220
+ description: description,
1221
+ name: name,
1222
+ arguments: args,
1223
+ locations: locations
1224
+ )
1225
+ }
1211
1226
}
1212
1227
1213
1228
/**
0 commit comments