-
Notifications
You must be signed in to change notification settings - Fork 1
/
graphql_grammar.js
432 lines (409 loc) · 25.3 KB
/
graphql_grammar.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
// Generated automatically by nearley, version 2.19.6
// http://github.com/Hardmath123/nearley
(function () {
function id(x) { return x[0]; }
const moo = require('moo')
let lexer = moo.states({
root: {
ws: /[ \t,]+/,
nl: { match: "\n", lineBreaks: true },
pound_comment: {
match: /(?:#[^\n]*[\n\r]*)+/,
value: s => s.substring(1).trim()
},
ml_comment: {
match: /\"\"\"[\s\S]*?\"\"\"/,
value: s => s.substring(3, s.length-3).trim()
},
kunion: "union",
kscalar: "scalar",
kschema: "schema",
ktype: "type",
kinterface: "interface",
kenum: "enum",
kinput: "input",
kimplements: "implements",
kdirective: "directive",
kon: "on",
lbrace: { match: "{", push: 'block' },
at: "@",
lparen: { match: "(", push: 'block' },
or: "|",
and: "&",
equals: "=",
type_system_directive_location: [
'SCHEMA', 'SCALAR', 'OBJECT', 'FIELD_DEFINITION',
'ARGUMENT_DEFINITION', 'INTERFACE', 'UNION', 'ENUM',
'ENUM_VALUE', 'INPUT_OBJECT', 'INPUT_FIELD_DEFINITION'
],
executable_directive_location: [
'QUERY', 'MUTATION', 'SUBSCRIPTION', 'FIELD',
'FRAGMENT_DEFINITION', 'FRAGMENT_SPREAD', 'INLINE_FRAGMENT'
],
name: {
match: /[a-zA-Z_][a-zA-Z_0-9]*/,
}
},
block: {
ws: /[ \t,]+/,
nl: { match: "\n", lineBreaks: true },
pound_comment: {
match: /#[^\n]*/,
value: s => s.substring(1).trim()
},
ml_comment: {
match: /\"\"\"[\s\S]*?\"\"\"/,
value: s => s.substring(3, s.length-3).trim()
},
string_literal: {
match: /"(?:[^\n\\"]|\\["\\ntbfr])*"/,
value: s => JSON.parse(s)
},
ktrue: "true",
kfalse: "false",
name: {
match: /[a-zA-Z_][a-zA-Z_0-9]*/, type: moo.keywords({
kquery: "query",
kmutation: "mutation",
ksubscription: "subscription",
})},
number_literal: {
match: /[0-9]+(?:\.[0-9]+)?/,
value: s => JSON.parse(s)
},
colon: ":",
or: "|",
exclamation: "!",
at: "@",
rbrace: { match: '}', pop: 1 },
lparen: { match: "(", push: 'block' },
rparen: { match: ")", pop: 1 },
lbracket: "[",
rbracket: "]",
equals: "="
}
})
var grammar = {
Lexer: lexer,
ParserRules: [
{"name": "Document", "symbols": ["_ml", "Definitions"], "postprocess": d => d[1]},
{"name": "Definitions", "symbols": ["Definition", "Definitions"], "postprocess": d => d[1].concat([d[0]])},
{"name": "Definitions", "symbols": ["Definition"], "postprocess": d => [d[0]]},
{"name": "Definition", "symbols": ["TypeSystemDefinition"], "postprocess": d => d[0]},
{"name": "TypeSystemDefinition", "symbols": ["TypeDefinition"], "postprocess": d => d[0]},
{"name": "TypeSystemDefinition", "symbols": ["SchemaDefinition"], "postprocess": d => d[0]},
{"name": "TypeSystemDefinition", "symbols": ["DirectiveDefinition"], "postprocess": d => d[0]},
{"name": "DirectiveDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "DirectiveDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "DirectiveDefinition$ebnf$2", "symbols": ["ArgumentsDefinition"], "postprocess": id},
{"name": "DirectiveDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "DirectiveDefinition", "symbols": ["DirectiveDefinition$ebnf$1", (lexer.has("kdirective") ? {type: "kdirective"} : kdirective), "_ml", (lexer.has("at") ? {type: "at"} : at), "Name", "DirectiveDefinition$ebnf$2", (lexer.has("kon") ? {type: "kon"} : kon), "_ml", "DirectiveLocations"], "postprocess":
d => {
const r = {
"type": "DirectiveDefinition",
"name": d[4]
}
if(d[0]) r.description = d[0]
if(d[5]) r.argumentsDefinition = d[5]
if(d[8]) r.on = d[8]
return r
}
},
{"name": "DirectiveLocations", "symbols": ["DirectiveLocation", (lexer.has("or") ? {type: "or"} : or), "_ml", "DirectiveLocations"], "postprocess": d => [d[0]].concat(d[3])},
{"name": "DirectiveLocations", "symbols": ["DirectiveLocation"], "postprocess": d => [d[0]]},
{"name": "DirectiveLocation", "symbols": [(lexer.has("executable_directive_location") ? {type: "executable_directive_location"} : executable_directive_location), "_ml"], "postprocess": d => d[0].value},
{"name": "DirectiveLocation", "symbols": [(lexer.has("type_system_directive_location") ? {type: "type_system_directive_location"} : type_system_directive_location), "_ml"], "postprocess": d => d[0].value},
{"name": "SchemaDefinition$ebnf$1", "symbols": ["Directives"], "postprocess": id},
{"name": "SchemaDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "SchemaDefinition", "symbols": [(lexer.has("kschema") ? {type: "kschema"} : kschema), "_ml", "SchemaDefinition$ebnf$1", (lexer.has("lbrace") ? {type: "lbrace"} : lbrace), "_ml", "RootOperationTypeDefinitions", (lexer.has("rbrace") ? {type: "rbrace"} : rbrace), "_ml"], "postprocess":
d => {
const r = {
"type": "SchemaDefinition",
"operations": d[5]
}
if(d[2]) r.directives = d[2]
return r
}
},
{"name": "RootOperationTypeDefinitions", "symbols": ["RootOperationTypeDefinition", "RootOperationTypeDefinitions"], "postprocess": d => [d[0]].concat(d[1])},
{"name": "RootOperationTypeDefinitions", "symbols": ["RootOperationTypeDefinition"], "postprocess": d => [d[0]]},
{"name": "RootOperationTypeDefinition", "symbols": ["OperationType", (lexer.has("colon") ? {type: "colon"} : colon), "_ml", "NamedType"], "postprocess":
d => {
return {
"operation": d[0],
"type": d[3]
}
}
},
{"name": "OperationType", "symbols": [(lexer.has("kquery") ? {type: "kquery"} : kquery), "_ml"], "postprocess": d => d[0].value},
{"name": "OperationType", "symbols": [(lexer.has("kmutation") ? {type: "kmutation"} : kmutation), "_ml"], "postprocess": d => d[0].value},
{"name": "OperationType", "symbols": [(lexer.has("ksubscription") ? {type: "ksubscription"} : ksubscription), "_ml"], "postprocess": d => d[0].value},
{"name": "TypeDefinition", "symbols": ["ScalarTypeDefinition"], "postprocess": d => d[0]},
{"name": "TypeDefinition", "symbols": ["ObjectTypeDefinition"], "postprocess": d => d[0]},
{"name": "TypeDefinition", "symbols": ["InterfaceTypeDefinition"], "postprocess": d => d[0]},
{"name": "TypeDefinition", "symbols": ["UnionTypeDefinition"], "postprocess": d => d[0]},
{"name": "TypeDefinition", "symbols": ["EnumTypeDefinition"], "postprocess": d => d[0]},
{"name": "TypeDefinition", "symbols": ["InputObjectTypeDefinition"], "postprocess": d => d[0]},
{"name": "ScalarTypeDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "ScalarTypeDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ScalarTypeDefinition$ebnf$2", "symbols": ["Directives"], "postprocess": id},
{"name": "ScalarTypeDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ScalarTypeDefinition", "symbols": ["ScalarTypeDefinition$ebnf$1", (lexer.has("kscalar") ? {type: "kscalar"} : kscalar), "_ml", "Name", "ScalarTypeDefinition$ebnf$2"], "postprocess":
d => {
const r = {
"type": "ScalarTypeDefinition",
"name": d[3]
}
if(d[0]) r.description = d[0]
if(d[4]) r.directives = d[4]
return r
}
},
{"name": "ObjectTypeDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "ObjectTypeDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ObjectTypeDefinition$ebnf$2", "symbols": ["ImplementsInterfaces"], "postprocess": id},
{"name": "ObjectTypeDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ObjectTypeDefinition$ebnf$3", "symbols": ["Directives"], "postprocess": id},
{"name": "ObjectTypeDefinition$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ObjectTypeDefinition$ebnf$4", "symbols": ["FieldsDefinition"], "postprocess": id},
{"name": "ObjectTypeDefinition$ebnf$4", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ObjectTypeDefinition", "symbols": ["ObjectTypeDefinition$ebnf$1", (lexer.has("ktype") ? {type: "ktype"} : ktype), "_ml", "Name", "ObjectTypeDefinition$ebnf$2", "ObjectTypeDefinition$ebnf$3", "ObjectTypeDefinition$ebnf$4"], "postprocess":
d => {
const r = {
"type": "ObjectTypeDefinition",
"name": d[3]
}
if(d[0]) r.description = d[0]
if(d[4]) r.implements = d[4]
if(d[5]) r.directives = d[5]
if(d[6]) r.fields = d[6]
return r;
}
},
{"name": "InterfaceTypeDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "InterfaceTypeDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "InterfaceTypeDefinition$ebnf$2", "symbols": ["Directives"], "postprocess": id},
{"name": "InterfaceTypeDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "InterfaceTypeDefinition$ebnf$3", "symbols": ["FieldsDefinition"], "postprocess": id},
{"name": "InterfaceTypeDefinition$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "InterfaceTypeDefinition", "symbols": ["InterfaceTypeDefinition$ebnf$1", (lexer.has("kinterface") ? {type: "kinterface"} : kinterface), "_ml", "Name", "InterfaceTypeDefinition$ebnf$2", "InterfaceTypeDefinition$ebnf$3"], "postprocess":
d => {
const r = {
"type": "InterfaceTypeDefinition",
"name": d[3]
}
if(d[0]) r.description = d[0]
if(d[4]) r.directives = d[4]
if(d[5]) r.fields = d[5]
return r;
}
},
{"name": "UnionTypeDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "UnionTypeDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "UnionTypeDefinition$ebnf$2", "symbols": ["Directives"], "postprocess": id},
{"name": "UnionTypeDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "UnionTypeDefinition$ebnf$3", "symbols": ["UnionMemberTypes"], "postprocess": id},
{"name": "UnionTypeDefinition$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "UnionTypeDefinition", "symbols": ["UnionTypeDefinition$ebnf$1", (lexer.has("kunion") ? {type: "kunion"} : kunion), "_ml", "Name", "UnionTypeDefinition$ebnf$2", "UnionTypeDefinition$ebnf$3"], "postprocess":
d => {
const r = {
"type": "UnionTypeDefinition",
"name": d[3]
}
if(d[0]) r.description = d[0]
if(d[4]) r.directives = d[4]
if(d[5]) r.members = d[5]
return r;
}
},
{"name": "EnumTypeDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "EnumTypeDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "EnumTypeDefinition$ebnf$2", "symbols": ["Directives"], "postprocess": id},
{"name": "EnumTypeDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "EnumTypeDefinition$ebnf$3", "symbols": ["EnumValuesDefinition"], "postprocess": id},
{"name": "EnumTypeDefinition$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "EnumTypeDefinition", "symbols": ["EnumTypeDefinition$ebnf$1", (lexer.has("kenum") ? {type: "kenum"} : kenum), "_ml", "Name", "EnumTypeDefinition$ebnf$2", "EnumTypeDefinition$ebnf$3"], "postprocess":
d => {
const r = {
"type": "EnumTypeDefinition",
"name": d[3]
}
if(d[0]) r.description = d[0]
if(d[4]) r.directives = d[4]
if(d[5]) r.values = d[5]
return r
}
},
{"name": "InputObjectTypeDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "InputObjectTypeDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "InputObjectTypeDefinition$ebnf$2", "symbols": ["Directives"], "postprocess": id},
{"name": "InputObjectTypeDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "InputObjectTypeDefinition$ebnf$3", "symbols": ["InputFieldsDefinition"], "postprocess": id},
{"name": "InputObjectTypeDefinition$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "InputObjectTypeDefinition", "symbols": ["InputObjectTypeDefinition$ebnf$1", (lexer.has("kinput") ? {type: "kinput"} : kinput), "_ml", "Name", "InputObjectTypeDefinition$ebnf$2", "InputObjectTypeDefinition$ebnf$3"], "postprocess":
d => {
const r = {
"type": "InputObjectTypeDefinition",
"name": d[3]
}
if(d[0]) r.description = d[0]
if(d[4]) r.directives = d[4]
if(d[5]) r.fields = d[5]
return r
}
},
{"name": "InputFieldsDefinition$ebnf$1", "symbols": ["InputValueDefinition"], "postprocess": id},
{"name": "InputFieldsDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "InputFieldsDefinition", "symbols": [(lexer.has("lbrace") ? {type: "lbrace"} : lbrace), "_ml", "InputFieldsDefinition$ebnf$1", (lexer.has("rbrace") ? {type: "rbrace"} : rbrace), "_ml"], "postprocess": d => d[2]},
{"name": "EnumValuesDefinition", "symbols": [(lexer.has("lbrace") ? {type: "lbrace"} : lbrace), "_ml", "EnumValueDefinitions", (lexer.has("rbrace") ? {type: "rbrace"} : rbrace), "_ml"], "postprocess": d => d[2]},
{"name": "EnumValueDefinitions", "symbols": ["EnumValueDefinition", "EnumValueDefinitions"], "postprocess": d => [d[0]].concat(d[1])},
{"name": "EnumValueDefinitions", "symbols": ["EnumValueDefinition"], "postprocess": d => [d[0]]},
{"name": "EnumValueDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "EnumValueDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "EnumValueDefinition$ebnf$2", "symbols": ["Directives"], "postprocess": id},
{"name": "EnumValueDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "EnumValueDefinition", "symbols": ["EnumValueDefinition$ebnf$1", "EnumValue", "EnumValueDefinition$ebnf$2"], "postprocess":
d => {
const r = {
"value": d[1]
}
if(d[0]) r.description = d[0]
if(d[2]) r.directives = d[2]
return r
}
},
{"name": "UnionMemberTypes", "symbols": [(lexer.has("equals") ? {type: "equals"} : equals), "_ml", "ListOfMemberTypes"], "postprocess": d => d[2]},
{"name": "ListOfMemberTypes", "symbols": ["NamedType", (lexer.has("or") ? {type: "or"} : or), "_ml", "ListOfMemberTypes"], "postprocess": d => [d[0]].concat(d[3])},
{"name": "ListOfMemberTypes", "symbols": ["NamedType"], "postprocess": d => [d[0]]},
{"name": "NamedType", "symbols": ["Name"], "postprocess": d => d[0]},
{"name": "EnumValue", "symbols": ["Name"], "postprocess": d => d[0]},
{"name": "Name", "symbols": [(lexer.has("name") ? {type: "name"} : name), "_ml"], "postprocess": d => d[0].value},
{"name": "ImplementsInterfaces", "symbols": [(lexer.has("kimplements") ? {type: "kimplements"} : kimplements), "_ml", "Interfaces"], "postprocess": d => d[2]},
{"name": "Interfaces", "symbols": ["Name", (lexer.has("and") ? {type: "and"} : and), "_ml", "Interfaces"], "postprocess": d => [d[0]].concat(d[3])},
{"name": "Interfaces", "symbols": ["Name"], "postprocess": d => [d[0]]},
{"name": "FieldsDefinition$ebnf$1", "symbols": ["Fields"], "postprocess": id},
{"name": "FieldsDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "FieldsDefinition", "symbols": [(lexer.has("lbrace") ? {type: "lbrace"} : lbrace), "_ml", "FieldsDefinition$ebnf$1", (lexer.has("rbrace") ? {type: "rbrace"} : rbrace), "_ml"], "postprocess": d => d[2]},
{"name": "Fields", "symbols": ["Field", "Fields"], "postprocess": d => [d[0]].concat(d[1])},
{"name": "Fields", "symbols": ["Field"], "postprocess": d => [d[0]]},
{"name": "Field$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "Field$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "Field$ebnf$2", "symbols": ["ArgumentsDefinition"], "postprocess": id},
{"name": "Field$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "Field$ebnf$3", "symbols": ["Directives"], "postprocess": id},
{"name": "Field$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "Field", "symbols": ["Field$ebnf$1", (lexer.has("name") ? {type: "name"} : name), "_ml", "Field$ebnf$2", (lexer.has("colon") ? {type: "colon"} : colon), "_ml", "Type", "Field$ebnf$3"], "postprocess":
d => {
const r = {
"name": d[1].text,
"type": d[6]
};
if(d[0]) r.description = d[0]
if(d[3]) r.argumentsDefinition = d[3]
if(d[7]) r.directives = d[7]
return r;
}
},
{"name": "Type$ebnf$1", "symbols": ["Mandatory"], "postprocess": id},
{"name": "Type$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "Type", "symbols": ["Name", "Type$ebnf$1"], "postprocess":
d => {
return {
"name": d[0],
"nullable": d[1] ? false : true
}
}
},
{"name": "Type$ebnf$2", "symbols": ["Mandatory"], "postprocess": id},
{"name": "Type$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "Type", "symbols": [(lexer.has("lbracket") ? {type: "lbracket"} : lbracket), "_ml", "Type", (lexer.has("rbracket") ? {type: "rbracket"} : rbracket), "_ml", "Type$ebnf$2"], "postprocess":
d => {
return {
"listOf": d[2],
"nullable": d[5] ? false : true
}
}
},
{"name": "Mandatory", "symbols": [(lexer.has("exclamation") ? {type: "exclamation"} : exclamation), "_ml"]},
{"name": "Directives", "symbols": ["Directive", "Directives"], "postprocess": d => [d[0]].concat(d[1])},
{"name": "Directives", "symbols": ["Directive"], "postprocess": d => [d[0]]},
{"name": "Directive$ebnf$1", "symbols": ["Arguments"], "postprocess": id},
{"name": "Directive$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "Directive", "symbols": [(lexer.has("at") ? {type: "at"} : at), (lexer.has("name") ? {type: "name"} : name), "_ml", "Directive$ebnf$1"], "postprocess":
d => {
const r = {
"name": d[1].value
};
if(d[3]) r.arguments = d[3];
return r;
}
},
{"name": "Arguments$ebnf$1", "symbols": ["ListOfArguments"], "postprocess": id},
{"name": "Arguments$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "Arguments", "symbols": [(lexer.has("lparen") ? {type: "lparen"} : lparen), "_ml", "Arguments$ebnf$1", (lexer.has("rparen") ? {type: "rparen"} : rparen), "_ml"], "postprocess": d => d[2] ? d[2] : null},
{"name": "ListOfArguments", "symbols": ["Argument", "ListOfArguments"], "postprocess": d => [d[0]].concat(d[1])},
{"name": "ListOfArguments", "symbols": ["Argument"], "postprocess": d => [d[0]]},
{"name": "Argument", "symbols": [(lexer.has("name") ? {type: "name"} : name), "_ml", (lexer.has("colon") ? {type: "colon"} : colon), "_ml", "Value", "_ml"], "postprocess":
d => {
return {
"name": d[0].value,
"value": d[4]
}
}
},
{"name": "ArgumentsDefinition$ebnf$1", "symbols": ["InputValueDefinition"], "postprocess": id},
{"name": "ArgumentsDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ArgumentsDefinition", "symbols": [(lexer.has("lparen") ? {type: "lparen"} : lparen), "_ml", "ArgumentsDefinition$ebnf$1", (lexer.has("rparen") ? {type: "rparen"} : rparen), "_ml"], "postprocess": d => d[2] ? d[2] : null},
{"name": "InputValueDefinition", "symbols": ["ArgumentDefinition", "InputValueDefinition"], "postprocess": d => [d[0]].concat(d[1])},
{"name": "InputValueDefinition", "symbols": ["ArgumentDefinition"], "postprocess": d => [d[0]]},
{"name": "ArgumentDefinition$ebnf$1", "symbols": ["Description"], "postprocess": id},
{"name": "ArgumentDefinition$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ArgumentDefinition$ebnf$2", "symbols": ["DefaultValue"], "postprocess": id},
{"name": "ArgumentDefinition$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ArgumentDefinition$ebnf$3", "symbols": ["Directives"], "postprocess": id},
{"name": "ArgumentDefinition$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}},
{"name": "ArgumentDefinition", "symbols": ["ArgumentDefinition$ebnf$1", (lexer.has("name") ? {type: "name"} : name), "_ml", (lexer.has("colon") ? {type: "colon"} : colon), "_ml", "Type", "ArgumentDefinition$ebnf$2", "ArgumentDefinition$ebnf$3"], "postprocess":
d => {
const r = {
"name": d[1].value,
"type": d[5]
}
if(d[0]) r.description = d[0]
if(d[6]) r.defaultValue = d[6]
if(d[7]) r.directives = d[7]
return r
}
},
{"name": "DefaultValue", "symbols": [(lexer.has("equals") ? {type: "equals"} : equals), "_ml", "Value", "_ml"], "postprocess": d => d[2]},
{"name": "Value", "symbols": [(lexer.has("number_literal") ? {type: "number_literal"} : number_literal)], "postprocess": d => d[0].value},
{"name": "Value", "symbols": [(lexer.has("string_literal") ? {type: "string_literal"} : string_literal)], "postprocess": d => d[0].value},
{"name": "Value", "symbols": [(lexer.has("ktrue") ? {type: "ktrue"} : ktrue)], "postprocess": d => true},
{"name": "Value", "symbols": [(lexer.has("kfalse") ? {type: "kfalse"} : kfalse)], "postprocess": d => false},
{"name": "Value", "symbols": [(lexer.has("lbracket") ? {type: "lbracket"} : lbracket), "ListOfValues", (lexer.has("rbracket") ? {type: "rbracket"} : rbracket)], "postprocess": d => d[1]},
{"name": "ListOfValues", "symbols": ["Value", "ListOfValues"], "postprocess": d => [d[0]].concat(d[1])},
{"name": "ListOfValues", "symbols": ["Value"], "postprocess": d => [d[0]]},
{"name": "_ml$ebnf$1", "symbols": []},
{"name": "_ml$ebnf$1", "symbols": ["_ml$ebnf$1", "multi_line_ws_char"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
{"name": "_ml", "symbols": ["_ml$ebnf$1"]},
{"name": "multi_line_ws_char", "symbols": [(lexer.has("ws") ? {type: "ws"} : ws)]},
{"name": "multi_line_ws_char", "symbols": [{"literal":"\n"}]},
{"name": "__$ebnf$1", "symbols": [(lexer.has("ws") ? {type: "ws"} : ws)]},
{"name": "__$ebnf$1", "symbols": ["__$ebnf$1", (lexer.has("ws") ? {type: "ws"} : ws)], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
{"name": "__", "symbols": ["__$ebnf$1"]},
{"name": "_$ebnf$1", "symbols": []},
{"name": "_$ebnf$1", "symbols": ["_$ebnf$1", (lexer.has("ws") ? {type: "ws"} : ws)], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
{"name": "_", "symbols": ["_$ebnf$1"]},
{"name": "Description", "symbols": ["comment", "Description"], "postprocess": d => d[0] + '\n' + d[1]},
{"name": "Description", "symbols": ["comment", "_ml"], "postprocess": d => d[0]},
{"name": "comment", "symbols": [(lexer.has("pound_comment") ? {type: "pound_comment"} : pound_comment)], "postprocess": d => d[0].value},
{"name": "comment", "symbols": [(lexer.has("ml_comment") ? {type: "ml_comment"} : ml_comment)], "postprocess": d => d[0].value},
{"name": "comment", "symbols": [(lexer.has("string_literal") ? {type: "string_literal"} : string_literal)], "postprocess": d => d[0].value}
]
, ParserStart: "Document"
}
if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') {
module.exports = grammar;
} else {
window.grammar = grammar;
}
})();