Passed
Pull Request — master (#196)
by Christoffer
03:10
created

NodeBuilder::buildNodes()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.2
c 0
b 0
f 0
cc 4
eloc 5
nc 2
nop 2
1
<?php
2
3
namespace Digia\GraphQL\Language;
4
5
use Digia\GraphQL\Error\LanguageException;
6
use Digia\GraphQL\Language\Node\ArgumentNode;
7
use Digia\GraphQL\Language\Node\BooleanValueNode;
8
use Digia\GraphQL\Language\Node\DirectiveDefinitionNode;
9
use Digia\GraphQL\Language\Node\DirectiveNode;
10
use Digia\GraphQL\Language\Node\DocumentNode;
11
use Digia\GraphQL\Language\Node\EnumTypeDefinitionNode;
12
use Digia\GraphQL\Language\Node\EnumTypeExtensionNode;
13
use Digia\GraphQL\Language\Node\EnumValueDefinitionNode;
14
use Digia\GraphQL\Language\Node\EnumValueNode;
15
use Digia\GraphQL\Language\Node\FieldDefinitionNode;
16
use Digia\GraphQL\Language\Node\FieldNode;
17
use Digia\GraphQL\Language\Node\FloatValueNode;
18
use Digia\GraphQL\Language\Node\FragmentDefinitionNode;
19
use Digia\GraphQL\Language\Node\FragmentSpreadNode;
20
use Digia\GraphQL\Language\Node\InlineFragmentNode;
21
use Digia\GraphQL\Language\Node\InputObjectTypeDefinitionNode;
22
use Digia\GraphQL\Language\Node\InputObjectTypeExtensionNode;
23
use Digia\GraphQL\Language\Node\InputValueDefinitionNode;
24
use Digia\GraphQL\Language\Node\InterfaceTypeDefinitionNode;
25
use Digia\GraphQL\Language\Node\InterfaceTypeExtensionNode;
26
use Digia\GraphQL\Language\Node\IntValueNode;
27
use Digia\GraphQL\Language\Node\ListTypeNode;
28
use Digia\GraphQL\Language\Node\ListValueNode;
29
use Digia\GraphQL\Language\Node\NamedTypeNode;
30
use Digia\GraphQL\Language\Node\NameNode;
31
use Digia\GraphQL\Language\Node\NodeInterface;
32
use Digia\GraphQL\Language\Node\NodeKindEnum;
33
use Digia\GraphQL\Language\Node\NonNullTypeNode;
34
use Digia\GraphQL\Language\Node\NullValueNode;
35
use Digia\GraphQL\Language\Node\ObjectFieldNode;
36
use Digia\GraphQL\Language\Node\ObjectTypeDefinitionNode;
37
use Digia\GraphQL\Language\Node\ObjectTypeExtensionNode;
38
use Digia\GraphQL\Language\Node\ObjectValueNode;
39
use Digia\GraphQL\Language\Node\OperationDefinitionNode;
40
use Digia\GraphQL\Language\Node\OperationTypeDefinitionNode;
41
use Digia\GraphQL\Language\Node\ScalarTypeDefinitionNode;
42
use Digia\GraphQL\Language\Node\ScalarTypeExtensionNode;
43
use Digia\GraphQL\Language\Node\SchemaDefinitionNode;
44
use Digia\GraphQL\Language\Node\SelectionSetNode;
45
use Digia\GraphQL\Language\Node\StringValueNode;
46
use Digia\GraphQL\Language\Node\UnionTypeDefinitionNode;
47
use Digia\GraphQL\Language\Node\UnionTypeExtensionNode;
48
use Digia\GraphQL\Language\Node\VariableDefinitionNode;
49
use Digia\GraphQL\Language\Node\VariableNode;
50
51
class NodeBuilder implements NodeBuilderInterface
52
{
53
//    /**
54
//     * @param array $ast
55
//     * @return NodeInterface
56
//     * @throws LanguageException
57
//     */
58
//    public function build(array $ast): NodeInterface
59
//    {
60
//        if (!isset($ast['kind'])) {
61
//            throw new LanguageException(sprintf('Nodes must specify a kind, got %s', json_encode($ast)));
62
//        }
63
//
64
//        ['kind' => $kind] = $ast;
65
//
66
//        switch ($kind) {
67
//            case NodeKindEnum::ARGUMENT:
68
//                return $this->buildArgument($ast);
69
//            case NodeKindEnum::BOOLEAN:
70
//                return $this->buildBoolean($ast);
71
//            case NodeKindEnum::DIRECTIVE_DEFINITION:
72
//                return $this->buildDirectiveDefinition($ast);
73
//            case NodeKindEnum::DIRECTIVE:
74
//                return $this->buildDirective($ast);
75
//            case NodeKindEnum::DOCUMENT:
76
//                return $this->buildDocument($ast);
77
//            case NodeKindEnum::ENUM:
78
//                return $this->buildEnum($ast);
79
//            case NodeKindEnum::ENUM_TYPE_DEFINITION:
80
//                return $this->buildEnumTypeDefinition($ast);
81
//            case NodeKindEnum::ENUM_TYPE_EXTENSION:
82
//                return $this->buildEnumTypeExtension($ast);
83
//            case NodeKindEnum::ENUM_VALUE_DEFINITION:
84
//                return $this->buildEnumValueDefinition($ast);
85
//            case NodeKindEnum::FIELD:
86
//                return $this->buildField($ast);
87
//            case NodeKindEnum::FIELD_DEFINITION:
88
//                return $this->buildFieldDefinition($ast);
89
//            case NodeKindEnum::FLOAT:
90
//                return $this->buildFloat($ast);
91
//            case NodeKindEnum::FRAGMENT_DEFINITION:
92
//                return $this->buildFragmentDefinition($ast);
93
//            case NodeKindEnum::FRAGMENT_SPREAD:
94
//                return $this->buildFragmentSpread($ast);
95
//            case NodeKindEnum::INLINE_FRAGMENT:
96
//                return $this->buildInlineFragment($ast);
97
//            case NodeKindEnum::INPUT_OBJECT_TYPE_DEFINITION:
98
//                return $this->buildInputObjectTypeDefinition($ast);
99
//            case NodeKindEnum::INPUT_OBJECT_TYPE_EXTENSION:
100
//                return $this->buildInputObjectTypeExtension($ast);
101
//            case NodeKindEnum::INPUT_VALUE_DEFINITION:
102
//                return $this->buildInputValueDefinition($ast);
103
//            case NodeKindEnum::INTERFACE_TYPE_DEFINITION:
104
//                return $this->buildInterfaceTypeDefinition($ast);
105
//            case NodeKindEnum::INTERFACE_TYPE_EXTENSION:
106
//                return $this->buildInterfaceTypeExtension($ast);
107
//            case NodeKindEnum::INT:
108
//                return $this->buildInt($ast);
109
//            case NodeKindEnum::LIST_TYPE:
110
//                return $this->buildListType($ast);
111
//            case NodeKindEnum::LIST:
112
//                return $this->buildList($ast);
113
//            case NodeKindEnum::NAMED_TYPE:
114
//                return $this->buildNamedType($ast);
115
//            case NodeKindEnum::NAME:
116
//                return $this->buildName($ast);
117
//            case NodeKindEnum::NON_NULL_TYPE:
118
//                return $this->buildNonNullType($ast);
119
//            case NodeKindEnum::NULL:
120
//                return $this->buildNull($ast);
121
//            case NodeKindEnum::OBJECT_FIELD:
122
//                return $this->buildObjectField($ast);
123
//            case NodeKindEnum::OBJECT_TYPE_DEFINITION:
124
//                return $this->buildObjectTypeDefinition($ast);
125
//            case NodeKindEnum::OBJECT_TYPE_EXTENSION:
126
//                return $this->buildObjectTypeExtension($ast);
127
//            case NodeKindEnum::OBJECT:
128
//                return $this->buildObject($ast);
129
//            case NodeKindEnum::OPERATION_DEFINITION:
130
//                return $this->buildOperationDefinition($ast);
131
//            case NodeKindEnum::OPERATION_TYPE_DEFINITION:
132
//                return $this->buildOperationTypeDefinition($ast);
133
//            case NodeKindEnum::SCALAR_TYPE_DEFINITION:
134
//                return $this->buildScalarTypeDefinition($ast);
135
//            case NodeKindEnum::SCALAR_TYPE_EXTENSION:
136
//                return $this->buildScalarTypeExtension($ast);
137
//            case NodeKindEnum::SCHEMA_DEFINITION:
138
//                return $this->buildSchemaDefinition($ast);
139
//            case NodeKindEnum::SELECTION_SET:
140
//                return $this->buildSelectionSet($ast);
141
//            case NodeKindEnum::STRING:
142
//                return $this->buildString($ast);
143
//            case NodeKindEnum::UNION_TYPE_DEFINITION:
144
//                return $this->buildUnionTypeDefinition($ast);
145
//            case NodeKindEnum::UNION_TYPE_EXTENSION:
146
//                return $this->buildUnionTypeExtension($ast);
147
//            case NodeKindEnum::VARIABLE_DEFINITION:
148
//                return $this->buildVariableDefinition($ast);
149
//            case NodeKindEnum::VARIABLE:
150
//                return $this->buildVariable($ast);
151
//        }
152
//
153
//        throw new LanguageException(sprintf('Node of kind "%s" not supported.', $kind));
154
//    }
155
//
156
//    /**
157
//     * @param array $ast
158
//     * @return ArgumentNode
159
//     * @throws LanguageException
160
//     */
161
//    protected function buildArgument(array $ast): ArgumentNode
162
//    {
163
//        return new ArgumentNode([
164
//            'name'     => $this->buildNode($ast, 'name'),
165
//            'value'    => $this->buildNode($ast, 'value'),
166
//            'location' => $this->createLocation($ast),
167
//        ]);
168
//    }
169
//
170
//    /**
171
//     * @param array $ast
172
//     * @return BooleanValueNode
173
//     */
174
//    protected function buildBoolean(array $ast): BooleanValueNode
175
//    {
176
//        return new BooleanValueNode([
177
//            'value'    => $this->getValue($ast, 'value'),
178
//            'location' => $this->createLocation($ast),
179
//        ]);
180
//    }
181
//
182
//    /**
183
//     * @param array $ast
184
//     * @return DirectiveDefinitionNode
185
//     * @throws LanguageException
186
//     */
187
//    protected function buildDirectiveDefinition(array $ast): DirectiveDefinitionNode
188
//    {
189
//        return new DirectiveDefinitionNode([
190
//            'description' => $this->buildNode($ast, 'description'),
191
//            'name'        => $this->buildNode($ast, 'name'),
192
//            'arguments'   => $this->buildNodes($ast, 'arguments'),
193
//            'locations'   => $this->buildNodes($ast, 'locations'),
194
//            'location'    => $this->createLocation($ast),
195
//        ]);
196
//    }
197
//
198
//    /**
199
//     * @param array $ast
200
//     * @return DirectiveNode
201
//     * @throws LanguageException
202
//     */
203
//    protected function buildDirective(array $ast): DirectiveNode
204
//    {
205
//        return new DirectiveNode([
206
//            'name'      => $this->buildNode($ast, 'name'),
207
//            'arguments' => $this->buildNodes($ast, 'arguments'),
208
//            'location'  => $this->createLocation($ast),
209
//        ]);
210
//    }
211
//
212
//    /**
213
//     * @param array $ast
214
//     * @return DocumentNode
215
//     * @throws LanguageException
216
//     */
217
//    protected function buildDocument(array $ast): DocumentNode
218
//    {
219
//        return new DocumentNode([
220
//            'definitions' => $this->buildNodes($ast, 'definitions'),
221
//            'location'    => $this->createLocation($ast),
222
//        ]);
223
//    }
224
//
225
//    /**
226
//     * @param array $ast
227
//     * @return EnumValueNode
228
//     */
229
//    protected function buildEnum(array $ast): EnumValueNode
230
//    {
231
//        return new EnumValueNode([
232
//            'value'    => $this->getValue($ast, 'value'),
233
//            'location' => $this->createLocation($ast),
234
//        ]);
235
//    }
236
//
237
//    /**
238
//     * @param array $ast
239
//     * @return EnumTypeDefinitionNode
240
//     * @throws LanguageException
241
//     */
242
//    protected function buildEnumTypeDefinition(array $ast): EnumTypeDefinitionNode
243
//    {
244
//        return new EnumTypeDefinitionNode([
245
//            'description' => $this->buildNode($ast, 'description'),
246
//            'name'        => $this->buildNode($ast, 'name'),
247
//            'directives'  => $this->buildNodes($ast, 'directives'),
248
//            'values'      => $this->buildNodes($ast, 'values'),
249
//            'location'    => $this->createLocation($ast),
250
//        ]);
251
//    }
252
//
253
//    /**
254
//     * @param array $ast
255
//     * @return EnumTypeExtensionNode
256
//     * @throws LanguageException
257
//     */
258
//    protected function buildEnumTypeExtension(array $ast): EnumTypeExtensionNode
259
//    {
260
//        return new EnumTypeExtensionNode([
261
//            'name'       => $this->buildNode($ast, 'name'),
262
//            'directives' => $this->buildNodes($ast, 'directives'),
263
//            'values'     => $this->buildNodes($ast, 'values'),
264
//            'location'   => $this->createLocation($ast),
265
//        ]);
266
//    }
267
//
268
//    /**
269
//     * @param array $ast
270
//     * @return EnumValueDefinitionNode
271
//     * @throws LanguageException
272
//     */
273
//    protected function buildEnumValueDefinition(array $ast): EnumValueDefinitionNode
274
//    {
275
//        return new EnumValueDefinitionNode([
276
//            'description' => $this->buildNode($ast, 'description'),
277
//            'name'        => $this->buildNode($ast, 'name'),
278
//            'directives'  => $this->buildNodes($ast, 'directives'),
279
//            'location'    => $this->createLocation($ast),
280
//        ]);
281
//    }
282
//
283
//    /**
284
//     * @param array $ast
285
//     * @return FieldDefinitionNode
286
//     * @throws LanguageException
287
//     */
288
//    protected function buildFieldDefinition(array $ast): FieldDefinitionNode
289
//    {
290
//        return new FieldDefinitionNode([
291
//            'description' => $this->buildNode($ast, 'description'),
292
//            'name'        => $this->buildNode($ast, 'name'),
293
//            'arguments'   => $this->buildNodes($ast, 'arguments'),
294
//            'type'        => $this->buildNode($ast, 'type'),
295
//            'directives'  => $this->buildNodes($ast, 'directives'),
296
//            'location'    => $this->createLocation($ast),
297
//        ]);
298
//    }
299
//
300
//    /**
301
//     * @param array $ast
302
//     * @return FieldNode
303
//     * @throws LanguageException
304
//     */
305
//    protected function buildField(array $ast): FieldNode
306
//    {
307
//        return new FieldNode([
308
//            'alias'        => $this->buildNode($ast, 'alias'),
309
//            'name'         => $this->buildNode($ast, 'name'),
310
//            'arguments'    => $this->buildNodes($ast, 'arguments'),
311
//            'directives'   => $this->buildNodes($ast, 'directives'),
312
//            'selectionSet' => $this->buildNode($ast, 'selectionSet'),
313
//            'location'     => $this->createLocation($ast),
314
//        ]);
315
//    }
316
//
317
//    /**
318
//     * @param array $ast
319
//     * @return FloatValueNode
320
//     */
321
//    protected function buildFloat(array $ast): FloatValueNode
322
//    {
323
//        return new FloatValueNode([
324
//            'value'    => $this->getValue($ast, 'value'),
325
//            'location' => $this->createLocation($ast),
326
//        ]);
327
//    }
328
//
329
//    /**
330
//     * @param array $ast
331
//     * @return FragmentDefinitionNode
332
//     * @throws LanguageException
333
//     */
334
//    protected function buildFragmentDefinition(array $ast): FragmentDefinitionNode
335
//    {
336
//        return new FragmentDefinitionNode([
337
//            'name'                => $this->buildNode($ast, 'name'),
338
//            'variableDefinitions' => $this->buildNodes($ast, 'variableDefinitions'),
339
//            'typeCondition'       => $this->buildNode($ast, 'typeCondition'),
340
//            'directives'          => $this->buildNodes($ast, 'directives'),
341
//            'selectionSet'        => $this->buildNode($ast, 'selectionSet'),
342
//            'location'            => $this->createLocation($ast),
343
//        ]);
344
//    }
345
//
346
//    /**
347
//     * @param array $ast
348
//     * @return FragmentSpreadNode
349
//     * @throws LanguageException
350
//     */
351
//    protected function buildFragmentSpread(array $ast): FragmentSpreadNode
352
//    {
353
//        return new FragmentSpreadNode([
354
//            'name'         => $this->buildNode($ast, 'name'),
355
//            'directives'   => $this->buildNodes($ast, 'directives'),
356
//            'selectionSet' => $this->buildNode($ast, 'selectionSet'),
357
//            'location'     => $this->createLocation($ast),
358
//        ]);
359
//    }
360
//
361
//    /**
362
//     * @param array $ast
363
//     * @return InlineFragmentNode
364
//     * @throws LanguageException
365
//     */
366
//    protected function buildInlineFragment(array $ast): InlineFragmentNode
367
//    {
368
//        return new InlineFragmentNode([
369
//            'typeCondition' => $this->buildNode($ast, 'typeCondition'),
370
//            'directives'    => $this->buildNodes($ast, 'directives'),
371
//            'selectionSet'  => $this->buildNode($ast, 'selectionSet'),
372
//            'location'      => $this->createLocation($ast),
373
//        ]);
374
//    }
375
//
376
//    /**
377
//     * @param array $ast
378
//     * @return InputObjectTypeDefinitionNode
379
//     * @throws LanguageException
380
//     */
381
//    protected function buildInputObjectTypeDefinition(array $ast): InputObjectTypeDefinitionNode
382
//    {
383
//        return new InputObjectTypeDefinitionNode([
384
//            'description' => $this->buildNode($ast, 'description'),
385
//            'name'        => $this->buildNode($ast, 'name'),
386
//            'directives'  => $this->buildNodes($ast, 'directives'),
387
//            'fields'      => $this->buildNodes($ast, 'fields'),
388
//            'location'    => $this->createLocation($ast),
389
//        ]);
390
//    }
391
//
392
//    /**
393
//     * @param array $ast
394
//     * @return InputObjectTypeExtensionNode
395
//     * @throws LanguageException
396
//     */
397
//    protected function buildInputObjectTypeExtension(array $ast): InputObjectTypeExtensionNode
398
//    {
399
//        return new InputObjectTypeExtensionNode([
400
//            'name'       => $this->buildNode($ast, 'name'),
401
//            'directives' => $this->buildNodes($ast, 'directives'),
402
//            'fields'     => $this->buildNodes($ast, 'fields'),
403
//            'location'   => $this->createLocation($ast),
404
//        ]);
405
//    }
406
//
407
//    /**
408
//     * @param array $ast
409
//     * @return InputValueDefinitionNode
410
//     * @throws LanguageException
411
//     */
412
//    protected function buildInputValueDefinition(array $ast): InputValueDefinitionNode
413
//    {
414
//        return new InputValueDefinitionNode([
415
//            'description'  => $this->buildNode($ast, 'description'),
416
//            'name'         => $this->buildNode($ast, 'name'),
417
//            'type'         => $this->buildNode($ast, 'type'),
418
//            'defaultValue' => $this->buildNode($ast, 'defaultValue'),
419
//            'directives'   => $this->buildNodes($ast, 'directives'),
420
//            'location'     => $this->createLocation($ast),
421
//        ]);
422
//    }
423
//
424
//    /**
425
//     * @param array $ast
426
//     * @return InterfaceTypeDefinitionNode
427
//     * @throws LanguageException
428
//     */
429
//    protected function buildInterfaceTypeDefinition(array $ast): InterfaceTypeDefinitionNode
430
//    {
431
//        return new InterfaceTypeDefinitionNode([
432
//            'description' => $this->buildNode($ast, 'description'),
433
//            'name'        => $this->buildNode($ast, 'name'),
434
//            'directives'  => $this->buildNodes($ast, 'directives'),
435
//            'fields'      => $this->buildNodes($ast, 'fields'),
436
//            'location'    => $this->createLocation($ast),
437
//        ]);
438
//    }
439
//
440
//    /**
441
//     * @param array $ast
442
//     * @return InterfaceTypeExtensionNode
443
//     * @throws LanguageException
444
//     */
445
//    protected function buildInterfaceTypeExtension(array $ast): InterfaceTypeExtensionNode
446
//    {
447
//        return new InterfaceTypeExtensionNode([
448
//            'name'       => $this->buildNode($ast, 'name'),
449
//            'directives' => $this->buildNodes($ast, 'directives'),
450
//            'fields'     => $this->buildNodes($ast, 'fields'),
451
//            'location'   => $this->createLocation($ast),
452
//        ]);
453
//    }
454
//
455
//    /**
456
//     * @param array $ast
457
//     * @return IntValueNode
458
//     */
459
//    protected function buildInt(array $ast): IntValueNode
460
//    {
461
//        return new IntValueNode([
462
//            'value'    => $this->getValue($ast, 'value'),
463
//            'location' => $this->createLocation($ast),
464
//        ]);
465
//    }
466
//
467
//    /**
468
//     * @param array $ast
469
//     * @return ListTypeNode
470
//     * @throws LanguageException
471
//     */
472
//    protected function buildListType(array $ast): ListTypeNode
473
//    {
474
//        return new ListTypeNode([
475
//            'type'     => $this->buildNode($ast, 'type'),
476
//            'location' => $this->createLocation($ast),
477
//        ]);
478
//    }
479
//
480
//    /**
481
//     * @param array $ast
482
//     * @return ListValueNode
483
//     * @throws LanguageException
484
//     */
485
//    protected function buildList(array $ast): ListValueNode
486
//    {
487
//        return new ListValueNode([
488
//            'values'   => $this->buildNodes($ast, 'values'),
489
//            'location' => $this->createLocation($ast),
490
//        ]);
491
//    }
492
//
493
//    /**
494
//     * @param array $ast
495
//     * @return NamedTypeNode
496
//     * @throws LanguageException
497
//     */
498
//    protected function buildNamedType(array $ast): NamedTypeNode
499
//    {
500
//        return new NamedTypeNode([
501
//            'name'     => $this->buildNode($ast, 'name'),
502
//            'location' => $this->createLocation($ast),
503
//        ]);
504
//    }
505
//
506
//    /**
507
//     * @param array $ast
508
//     * @return NameNode
509
//     */
510
//    protected function buildName(array $ast): NameNode
511
//    {
512
//        return new NameNode([
513
//            'value'    => $this->getValue($ast, 'value'),
514
//            'location' => $this->createLocation($ast),
515
//        ]);
516
//    }
517
//
518
//    /**
519
//     * @param array $ast
520
//     * @return NonNullTypeNode
521
//     * @throws LanguageException
522
//     */
523
//    protected function buildNonNullType(array $ast): NonNullTypeNode
524
//    {
525
//        return new NonNullTypeNode([
526
//            'type'     => $this->buildNode($ast, 'type'),
527
//            'location' => $this->createLocation($ast),
528
//        ]);
529
//    }
530
//
531
//    /**
532
//     * @param array $ast
533
//     * @return NullValueNode
534
//     */
535
//    protected function buildNull(array $ast): NullValueNode
536
//    {
537
//        return new NullValueNode([
538
//            'location' => $this->createLocation($ast),
539
//        ]);
540
//    }
541
//
542
//    /**
543
//     * @param array $ast
544
//     * @return ObjectFieldNode
545
//     * @throws LanguageException
546
//     */
547
//    protected function buildObjectField(array $ast): ObjectFieldNode
548
//    {
549
//        return new ObjectFieldNode([
550
//            'name'     => $this->buildNode($ast, 'name'),
551
//            'value'    => $this->buildNode($ast, 'value'),
552
//            'location' => $this->createLocation($ast),
553
//        ]);
554
//    }
555
//
556
//    /**
557
//     * @param array $ast
558
//     * @return ObjectTypeDefinitionNode
559
//     * @throws LanguageException
560
//     */
561
//    protected function buildObjectTypeDefinition(array $ast): ObjectTypeDefinitionNode
562
//    {
563
//        return new ObjectTypeDefinitionNode([
564
//            'description' => $this->buildNode($ast, 'description'),
565
//            'name'        => $this->buildNode($ast, 'name'),
566
//            'interfaces'  => $this->buildNodes($ast, 'interfaces'),
567
//            'directives'  => $this->buildNodes($ast, 'directives'),
568
//            'fields'      => $this->buildNodes($ast, 'fields'),
569
//            'location'    => $this->createLocation($ast),
570
//        ]);
571
//    }
572
//
573
//    /**
574
//     * @param array $ast
575
//     * @return ObjectTypeExtensionNode
576
//     * @throws LanguageException
577
//     */
578
//    protected function buildObjectTypeExtension(array $ast): ObjectTypeExtensionNode
579
//    {
580
//        return new ObjectTypeExtensionNode([
581
//            'name'       => $this->buildNode($ast, 'name'),
582
//            'interfaces' => $this->buildNodes($ast, 'interfaces'),
583
//            'directives' => $this->buildNodes($ast, 'directives'),
584
//            'fields'     => $this->buildNodes($ast, 'fields'),
585
//            'location'   => $this->createLocation($ast),
586
//        ]);
587
//    }
588
//
589
//    /**
590
//     * @param array $ast
591
//     * @return ObjectValueNode
592
//     * @throws LanguageException
593
//     */
594
//    protected function buildObject(array $ast): ObjectValueNode
595
//    {
596
//        return new ObjectValueNode([
597
//            'fields'   => $this->buildNodes($ast, 'fields'),
598
//            'location' => $this->createLocation($ast),
599
//        ]);
600
//    }
601
//
602
//    /**
603
//     * @param array $ast
604
//     * @return OperationDefinitionNode
605
//     * @throws LanguageException
606
//     */
607
//    protected function buildOperationDefinition(array $ast): OperationDefinitionNode
608
//    {
609
//        return new OperationDefinitionNode([
610
//            'operation'           => $this->getValue($ast, 'operation'),
611
//            'name'                => $this->buildNode($ast, 'name'),
612
//            'variableDefinitions' => $this->buildNodes($ast, 'variableDefinitions'),
613
//            'directives'          => $this->buildNodes($ast, 'directives'),
614
//            'selectionSet'        => $this->buildNode($ast, 'selectionSet'),
615
//            'location'            => $this->createLocation($ast),
616
//        ]);
617
//    }
618
//
619
//    /**
620
//     * @param array $ast
621
//     * @return OperationTypeDefinitionNode
622
//     * @throws LanguageException
623
//     */
624
//    protected function buildOperationTypeDefinition(array $ast): OperationTypeDefinitionNode
625
//    {
626
//        return new OperationTypeDefinitionNode([
627
//            'operation' => $this->getValue($ast, 'operation'),
628
//            'type'      => $this->buildNode($ast, 'type'),
629
//            'location'  => $this->createLocation($ast),
630
//        ]);
631
//    }
632
//
633
//    /**
634
//     * @param array $ast
635
//     * @return ScalarTypeDefinitionNode
636
//     * @throws LanguageException
637
//     */
638
//    protected function buildScalarTypeDefinition(array $ast): ScalarTypeDefinitionNode
639
//    {
640
//        return new ScalarTypeDefinitionNode([
641
//            'description' => $this->buildNode($ast, 'description'),
642
//            'name'        => $this->buildNode($ast, 'name'),
643
//            'directives'  => $this->buildNodes($ast, 'directives'),
644
//            'location'    => $this->createLocation($ast),
645
//        ]);
646
//    }
647
//
648
//    /**
649
//     * @param array $ast
650
//     * @return ScalarTypeExtensionNode
651
//     * @throws LanguageException
652
//     */
653
//    protected function buildScalarTypeExtension(array $ast): ScalarTypeExtensionNode
654
//    {
655
//        return new ScalarTypeExtensionNode([
656
//            'name'       => $this->buildNode($ast, 'name'),
657
//            'directives' => $this->buildNodes($ast, 'directives'),
658
//            'location'   => $this->createLocation($ast),
659
//        ]);
660
//    }
661
//
662
//    /**
663
//     * @param array $ast
664
//     * @return SchemaDefinitionNode
665
//     * @throws LanguageException
666
//     */
667
//    protected function buildSchemaDefinition(array $ast): SchemaDefinitionNode
668
//    {
669
//        return new SchemaDefinitionNode([
670
//            'directives'     => $this->buildNodes($ast, 'directives'),
671
//            'operationTypes' => $this->buildNodes($ast, 'operationTypes'),
672
//            'location'       => $this->createLocation($ast),
673
//        ]);
674
//    }
675
//
676
//    /**
677
//     * @param array $ast
678
//     * @return SelectionSetNode
679
//     * @throws LanguageException
680
//     */
681
//    protected function buildSelectionSet(array $ast): SelectionSetNode
682
//    {
683
//        return new SelectionSetNode([
684
//            'selections' => $this->buildNodes($ast, 'selections'),
685
//            'location'   => $this->createLocation($ast),
686
//        ]);
687
//    }
688
//
689
//    /**
690
//     * @param array $ast
691
//     * @return StringValueNode
692
//     */
693
//    protected function buildString(array $ast): StringValueNode
694
//    {
695
//        return new StringValueNode([
696
//            'value'    => $this->getValue($ast, 'value'),
697
//            'block'    => $this->getValue($ast, 'block', false),
698
//            'location' => $this->createLocation($ast),
699
//        ]);
700
//    }
701
//
702
//    /**
703
//     * @param array $ast
704
//     * @return UnionTypeDefinitionNode
705
//     * @throws LanguageException
706
//     */
707
//    protected function buildUnionTypeDefinition(array $ast): UnionTypeDefinitionNode
708
//    {
709
//        return new UnionTypeDefinitionNode([
710
//            'description' => $this->buildNode($ast, 'description'),
711
//            'name'        => $this->buildNode($ast, 'name'),
712
//            'directives'  => $this->buildNodes($ast, 'directives'),
713
//            'types'       => $this->buildNodes($ast, 'types'),
714
//            'location'    => $this->createLocation($ast),
715
//        ]);
716
//    }
717
//
718
//    /**
719
//     * @param array $ast
720
//     * @return UnionTypeExtensionNode
721
//     * @throws LanguageException
722
//     */
723
//    protected function buildUnionTypeExtension(array $ast): UnionTypeExtensionNode
724
//    {
725
//        return new UnionTypeExtensionNode([
726
//            'name'       => $this->buildNode($ast, 'name'),
727
//            'directives' => $this->buildNodes($ast, 'directives'),
728
//            'types'      => $this->buildNodes($ast, 'types'),
729
//            'location'   => $this->createLocation($ast),
730
//        ]);
731
//    }
732
//
733
//    /**
734
//     * @param array $ast
735
//     * @return VariableDefinitionNode
736
//     * @throws LanguageException
737
//     */
738
//    protected function buildVariableDefinition(array $ast): VariableDefinitionNode
739
//    {
740
//        return new VariableDefinitionNode([
741
//            'variable'     => $this->buildNode($ast, 'variable'),
742
//            'type'         => $this->buildNode($ast, 'type'),
743
//            'defaultValue' => $this->buildNode($ast, 'defaultValue'),
744
//            'location'     => $this->createLocation($ast),
745
//        ]);
746
//    }
747
//
748
//    /**
749
//     * @param array $ast
750
//     * @return VariableNode
751
//     * @throws LanguageException
752
//     */
753
//    protected function buildVariable(array $ast): VariableNode
754
//    {
755
//        return new VariableNode([
756
//            'name'     => $this->buildNode($ast, 'name'),
757
//            'location' => $this->createLocation($ast),
758
//        ]);
759
//    }
760
//
761
//    /**
762
//     * Creates a location object.
763
//     *
764
//     * @param array $ast
765
//     * @return Location|null
766
//     */
767
//    protected function createLocation(array $ast): ?Location
768
//    {
769
//        return isset($ast['loc']['start'], $ast['loc']['end'])
770
//            ? new Location($ast['loc']['start'], $ast['loc']['end'], $ast['loc']['source'] ?? null)
771
//            : null;
772
//    }
773
//
774
//    /**
775
//     * Returns the value of a single property in the given AST.
776
//     *
777
//     * @param array  $ast
778
//     * @param string $propertyName
779
//     * @param null   $defaultValue
780
//     * @return mixed|null
781
//     */
782
//    protected function getValue(array $ast, string $propertyName, $defaultValue = null)
783
//    {
784
//        return $ast[$propertyName] ?? $defaultValue;
785
//    }
786
//
787
//    /**
788
//     * Builds a single item from the given AST.
789
//     *
790
//     * @param array  $ast
791
//     * @param string $propertyName
792
//     * @return mixed|null
793
//     * @throws LanguageException
794
//     */
795
//    protected function buildNode(array $ast, string $propertyName)
796
//    {
797
//        return isset($ast[$propertyName]) ? $this->build($ast[$propertyName]) : null;
798
//    }
799
//
800
//    /**
801
//     * Builds many items from the given AST.
802
//     *
803
//     * @param array  $ast
804
//     * @param string $propertyName
805
//     * @return array
806
//     * @throws LanguageException
807
//     */
808
//    protected function buildNodes(array $ast, string $propertyName): array
809
//    {
810
//        $array = [];
811
//
812
//        if (isset($ast[$propertyName]) && \is_array($ast[$propertyName])) {
813
//            foreach ($ast[$propertyName] as $subAst) {
814
//                $array[] = $this->build($subAst);
815
//            }
816
//        }
817
//
818
//        return $array;
819
//    }
820
}
821