Passed
Pull Request — master (#109)
by Christoffer
02:24
created

LanguageProvider   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 1
dl 0
loc 43
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
B register() 0 26 1
1
<?php
2
3
namespace Digia\GraphQL\Language;
4
5
use Digia\GraphQL\Error\InvalidTypeException;
6
use Digia\GraphQL\Language\Node\NamedTypeNode;
7
use Digia\GraphQL\Language\NodeBuilder\NodeBuilder;
8
use Digia\GraphQL\Language\NodeBuilder\NodeBuilderInterface;
9
use Digia\GraphQL\Language\NodeBuilder\SupportedBuilders;
10
use Digia\GraphQL\Language\Reader\SupportedReaders;
11
use Digia\GraphQL\Language\SchemaBuilder\DefinitionBuilder;
12
use Digia\GraphQL\Language\SchemaBuilder\DefinitionBuilderInterface;
13
use Digia\GraphQL\Language\SchemaBuilder\SchemaBuilder;
14
use Digia\GraphQL\Language\SchemaBuilder\SchemaBuilderInterface;
15
use Digia\GraphQL\Language\Writer\SupportedWriters;
16
use League\Container\ServiceProvider\AbstractServiceProvider;
17
use Psr\SimpleCache\CacheInterface;
18
19
class LanguageProvider extends AbstractServiceProvider
20
{
21
    /**
22
     * @var array
23
     */
24
    protected $provides = [
25
        NodeBuilderInterface::class,
26
        LexerInterface::class,
27
        ParserInterface::class,
28
        PrinterInterface::class,
29
        DefinitionBuilderInterface::class,
30
        SchemaBuilderInterface::class,
31
    ];
32
33
    /**
34
     * @inheritdoc
35
     */
36
    public function register()
37
    {
38
        $this->container->add(NodeBuilderInterface::class, function () {
39
            return new NodeBuilder(SupportedBuilders::get());
40
        });
41
42
        $this->container->add(ParserInterface::class, Parser::class, true/* $shared */)
43
            ->withArgument(NodeBuilderInterface::class);
44
45
        $this->container->add(LexerInterface::class, function () {
46
            return new Lexer(SupportedReaders::get());
47
        });
48
49
        $this->container->add(PrinterInterface::class, Printer::class, true/* $shared */)
50
            ->withArgument(SupportedWriters::get());
51
52
        $this->container->add(DefinitionBuilderInterface::class, DefinitionBuilder::class, true/* $shared */)
53
            ->withArguments([
54
                function (NamedTypeNode $node) {
55
                    throw new InvalidTypeException(sprintf('Type "%s" not found in document.', $node->getNameValue()));
56
                },
57
                CacheInterface::class,
58
            ]);
59
60
        $this->container->add(SchemaBuilderInterface::class, SchemaBuilder::class, true/* $shared */)
61
            ->withArgument(DefinitionBuilderInterface::class);
62
    }
63
}
64