Completed
Push — master ( 98de10...b9da50 )
by Christoffer
04:31 queued 02:35
created

parseType()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 1
nop 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Digia\GraphQL\Language;
4
5
use Digia\GraphQL\Error\GraphQLError;
6
use Digia\GraphQL\Language\AST\Builder\ArgumentBuilder;
7
use Digia\GraphQL\Language\AST\Builder\BooleanBuilder;
8
use Digia\GraphQL\Language\AST\Builder\DirectiveBuilder;
9
use Digia\GraphQL\Language\AST\Builder\DocumentBuilder;
10
use Digia\GraphQL\Language\AST\Builder\EnumBuilder;
11
use Digia\GraphQL\Language\AST\Builder\EnumTypeDefinitionBuilder;
12
use Digia\GraphQL\Language\AST\Builder\EnumValueDefinitionBuilder;
13
use Digia\GraphQL\Language\AST\Builder\FieldBuilder;
14
use Digia\GraphQL\Language\AST\Builder\FieldDefinitionBuilder;
15
use Digia\GraphQL\Language\AST\Builder\FloatBuilder;
16
use Digia\GraphQL\Language\AST\Builder\FragmentDefinitionBuilder;
17
use Digia\GraphQL\Language\AST\Builder\FragmentSpreadBuilder;
18
use Digia\GraphQL\Language\AST\Builder\InlineFragmentBuilder;
19
use Digia\GraphQL\Language\AST\Builder\InputObjectTypeDefinitionBuilder;
20
use Digia\GraphQL\Language\AST\Builder\InputValueDefinitionBuilder;
21
use Digia\GraphQL\Language\AST\Builder\IntBuilder;
22
use Digia\GraphQL\Language\AST\Builder\InterfaceTypeDefinitionBuilder;
23
use Digia\GraphQL\Language\AST\Builder\ListBuilder;
24
use Digia\GraphQL\Language\AST\Builder\ListTypeBuilder;
25
use Digia\GraphQL\Language\AST\Builder\NameBuilder;
26
use Digia\GraphQL\Language\AST\Builder\NamedTypeBuilder;
27
use Digia\GraphQL\Language\AST\Builder\NonNullTypeBuilder;
28
use Digia\GraphQL\Language\AST\Builder\NullBuilder;
29
use Digia\GraphQL\Language\AST\Builder\ObjectBuilder;
30
use Digia\GraphQL\Language\AST\Builder\ObjectFieldBuilder;
31
use Digia\GraphQL\Language\AST\Builder\ObjectTypeDefinitionBuilder;
32
use Digia\GraphQL\Language\AST\Builder\ObjectTypeExtensionBuilder;
33
use Digia\GraphQL\Language\AST\Builder\OperationDefinitionBuilder;
34
use Digia\GraphQL\Language\AST\Builder\ScalarTypeDefinitionBuilder;
35
use Digia\GraphQL\Language\AST\Builder\SelectionSetBuilder;
36
use Digia\GraphQL\Language\AST\Builder\StringBuilder;
37
use Digia\GraphQL\Language\AST\Builder\UnionTypeDefinitionBuilder;
38
use Digia\GraphQL\Language\AST\Builder\VariableBuilder;
39
use Digia\GraphQL\Language\AST\Builder\VariableDefinitionBuilder;
40
use Digia\GraphQL\Language\AST\Node\Contract\NodeInterface;
41
use Digia\GraphQL\Language\Contract\ParserInterface;
42
use Digia\GraphQL\Language\Reader\AmpReader;
43
use Digia\GraphQL\Language\Reader\AtReader;
44
use Digia\GraphQL\Language\Reader\BangReader;
45
use Digia\GraphQL\Language\Reader\BlockStringReader;
46
use Digia\GraphQL\Language\Reader\BraceReader;
47
use Digia\GraphQL\Language\Reader\BracketReader;
48
use Digia\GraphQL\Language\Reader\ColonReader;
49
use Digia\GraphQL\Language\Reader\CommentReader;
50
use Digia\GraphQL\Language\Reader\DollarReader;
51
use Digia\GraphQL\Language\Reader\EqualsReader;
52
use Digia\GraphQL\Language\Reader\NameReader;
53
use Digia\GraphQL\Language\Reader\NumberReader;
54
use Digia\GraphQL\Language\Reader\ParenthesisReader;
55
use Digia\GraphQL\Language\Reader\PipeReader;
56
use Digia\GraphQL\Language\Reader\SpreadReader;
57
use Digia\GraphQL\Language\Reader\StringReader;
58
59
/**
60
 * @return ParserInterface
61
 */
62
function parser(): ParserInterface
63
{
64
    static $instance = null;
65
66
    if (null === $instance) {
67
        $builders = [
68
            // Standard
69
            new ArgumentBuilder(),
70
            new BooleanBuilder(),
71
            new DirectiveBuilder(),
72
            new DocumentBuilder(),
73
            new EnumBuilder(),
74
            new FieldBuilder(),
75
            new FloatBuilder(),
76
            new FragmentDefinitionBuilder(),
77
            new FragmentSpreadBuilder(),
78
            new InlineFragmentBuilder(),
79
            new IntBuilder(),
80
            new ListBuilder(),
81
            new ListTypeBuilder(),
82
            new NameBuilder(),
83
            new NamedTypeBuilder(),
84
            new NonNullTypeBuilder(),
85
            new NullBuilder(),
86
            new ObjectBuilder(),
87
            new ObjectFieldBuilder(),
88
            new OperationDefinitionBuilder(),
89
            new SelectionSetBuilder(),
90
            new StringBuilder(),
91
            new VariableBuilder(),
92
            new VariableDefinitionBuilder(),
93
            // Schema Definition Language (SDL)
94
            new FieldDefinitionBuilder(),
95
            new ObjectTypeDefinitionBuilder(),
96
            new ObjectTypeExtensionBuilder(),
97
            new EnumTypeDefinitionBuilder(),
98
            new EnumValueDefinitionBuilder(),
99
            new InterfaceTypeDefinitionBuilder(),
100
            new InputValueDefinitionBuilder(),
101
            new UnionTypeDefinitionBuilder(),
102
            new ScalarTypeDefinitionBuilder(),
103
            new InputObjectTypeDefinitionBuilder(),
104
        ];
105
106
        $readers = [
107
            new AmpReader(),
108
            new AtReader(),
109
            new BangReader(),
110
            new BlockStringReader(),
111
            new BraceReader(),
112
            new BracketReader(),
113
            new ColonReader(),
114
            new CommentReader(),
115
            new DollarReader(),
116
            new EqualsReader(),
117
            new NameReader(),
118
            new NumberReader(),
119
            new ParenthesisReader(),
120
            new PipeReader(),
121
            new SpreadReader(),
122
            new StringReader(),
123
        ];
124
125
        $instance = new ASTParser($builders, $readers);
126
    }
127
128
    return $instance;
129
}
130
131
/**
132
 * @param string|Source $source
133
 * @param array         $options
134
 * @return NodeInterface
135
 * @throws GraphQLError
136
 * @throws \Exception
137
 */
138
function parse($source, array $options = [])
139
{
140
    return parser()
141
        ->parse($source instanceof Source ? $source : new Source($source), $options);
142
}
143
144
/**
145
 * @param string|Source $source
146
 * @param array         $options
147
 * @return NodeInterface
148
 * @throws GraphQLError
149
 * @throws \Exception
150
 */
151
function parseValue($source, array $options = [])
152
{
153
    return parser()
154
        ->parseValue($source instanceof Source ? $source : new Source($source), $options);
155
}
156
157
/**
158
 * @param string|Source $source
159
 * @param array         $options
160
 * @return NodeInterface
161
 * @throws GraphQLError
162
 * @throws \Exception
163
 */
164
function parseType($source, array $options = [])
165
{
166
    return parser()
167
        ->parseType($source instanceof Source ? $source : new Source($source), $options);
168
}
169