Completed
Pull Request — master (#19)
by Christoffer
03:06
created

buildSchema()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 8
nc 2
nop 2
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Digia\GraphQL\Language;
4
5
use Digia\GraphQL\Cache\RuntimeCache;
6
use Digia\GraphQL\Language\AST\Node\DocumentNode;
7
use Digia\GraphQL\Language\AST\Node\NamedTypeNode;
8
use Digia\GraphQL\Language\AST\Schema\DefinitionBuilder;
9
use Digia\GraphQL\Language\AST\Schema\SchemaBuilder;
10
use Digia\GraphQL\Type\SchemaInterface;
11
12
/**
13
 * @param string $source
14
 * @param array  $options
15
 * @return SchemaInterface
16
 * @throws \Digia\GraphQL\Error\GraphQLError
17
 * @throws \Exception
18
 * @throws \TypeError
19
 */
20
function buildSchema(string $source, array $options = []): SchemaInterface
21
{
22
    static $instance = null;
23
24
    /** @var DocumentNode $documentNode */
25
    $documentNode = parse($source, $options);
26
27
    if (null === $instance) {
28
        $resolveType = function (NamedTypeNode $node) {
29
            throw new \Exception(sprintf('Type "%s" not found in document.', $node->getNameValue()));
30
        };
31
32
        $definitionBuilder = new DefinitionBuilder($resolveType, new RuntimeCache());
33
        $instance          = new SchemaBuilder($definitionBuilder);
34
    }
35
36
    return $instance->build($documentNode, $options);
37
}
38