Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Passed
Pull Request — master (#685)
by
unknown
06:00
created

Executor::setMaxQueryComplexity()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 5
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Overblog\GraphQLBundle\Request;
6
7
use GraphQL\Executor\ExecutionResult;
8
use GraphQL\Executor\Promise\PromiseAdapter;
9
use GraphQL\GraphQL;
10
use GraphQL\Type\Schema;
11
use GraphQL\Validator\DocumentValidator;
12
use GraphQL\Validator\Rules\DisableIntrospection;
13
use GraphQL\Validator\Rules\QueryComplexity;
14
use GraphQL\Validator\Rules\QueryDepth;
15
use Overblog\GraphQLBundle\Event\Events;
16
use Overblog\GraphQLBundle\Event\ExecutorArgumentsEvent;
17
use Overblog\GraphQLBundle\Event\ExecutorContextEvent;
18
use Overblog\GraphQLBundle\Event\ExecutorResultEvent;
19
use Overblog\GraphQLBundle\Executor\ExecutorInterface;
20
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
21
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
22
23
class Executor
24
{
25
    public const PROMISE_ADAPTER_SERVICE_ID = 'overblog_graphql.promise_adapter';
26
27
    private $schemas = [];
28
29
    private $dispatcher;
30
31
    private $promiseAdapter;
32
33
    private $executor;
34
35
    private $defaultFieldResolver;
36
37
    private $useExperimentalExecutor;
38
39 123
    public function __construct(
40
        ExecutorInterface $executor,
41
        PromiseAdapter $promiseAdapter,
42
        EventDispatcherInterface $dispatcher,
43
        ?callable $defaultFieldResolver = null,
44
        bool $useExperimental = false
45
    ) {
46 123
        $this->executor = $executor;
47 123
        $this->promiseAdapter = $promiseAdapter;
48 123
        $this->dispatcher = $dispatcher;
49 123
        $this->defaultFieldResolver = $defaultFieldResolver;
50 123
        $this->useExperimentalExecutor = $useExperimental;
51 123
    }
52
53
    public function setExecutor(ExecutorInterface $executor): self
54
    {
55
        $this->executor = $executor;
56
57
        return $this;
58
    }
59
60 115
    public function addSchemaBuilder(string $name, \Closure $builder): self
61
    {
62 115
        $this->schemas[$name] = $builder;
63
64 115
        return $this;
65
    }
66
67 106
    public function addSchema(string $name, Schema $schema): self
68
    {
69 106
        $this->schemas[$name] = $schema;
70
71 106
        return $this;
72
    }
73
74 109
    public function getSchema(?string $name = null): Schema
75
    {
76 109
        if (empty($this->schemas)) {
77 1
            throw new \RuntimeException('At least one schema should be declare.');
78
        }
79
80 108
        if (null === $name) {
81
            // TODO(mcg-web): Replace by array_key_first PHP 7 >= 7.3.0.
82 102
            foreach ($this->schemas as $name => $schema) {
83 102
                break;
84
            }
85
        }
86 108
        if (!isset($this->schemas[$name])) {
87 1
            throw new NotFoundHttpException(\sprintf('Could not found "%s" schema.', $name));
88
        }
89 107
        $schema = $this->schemas[$name];
90 107
        if (\is_callable($schema)) {
91 107
            $schema = $schema();
92 106
            $this->addSchema($name, $schema);
93
        }
94
95 106
        return $schema;
96
    }
97
98 122
    public function setMaxQueryDepth($maxQueryDepth): void
99
    {
100
        /** @var QueryDepth $queryDepth */
101 122
        $queryDepth = DocumentValidator::getRule('QueryDepth');
102 122
        $queryDepth->setMaxQueryDepth($maxQueryDepth);
103 122
    }
104
105 122
    public function setMaxQueryComplexity($maxQueryComplexity): void
106
    {
107
        /** @var QueryComplexity $queryComplexity */
108 122
        $queryComplexity = DocumentValidator::getRule('QueryComplexity');
109 122
        $queryComplexity->setMaxQueryComplexity($maxQueryComplexity);
110 122
    }
111
112 121
    public function enableIntrospectionQuery(): void
113
    {
114 121
        DocumentValidator::addRule(new DisableIntrospection(DisableIntrospection::DISABLED));
115 121
    }
116
117 1
    public function disableIntrospectionQuery(): void
118
    {
119 1
        DocumentValidator::addRule(new DisableIntrospection());
120 1
    }
121
122
    /**
123
     * @param array|\ArrayObject|object|null $rootValue
124
     */
125 105
    public function execute(?string $schemaName, array $request, $rootValue = null): ExecutionResult
126
    {
127 105
        $this->useExperimentalExecutor ? GraphQL::useExperimentalExecutor() : GraphQL::useReferenceExecutor();
128
129 105
        $executorArgumentsEvent = $this->preExecute(
130 105
            $this->getSchema($schemaName),
131 103
            $request[ParserInterface::PARAM_QUERY] ?? null,
132 103
            new \ArrayObject(),
133
            $rootValue,
134 103
            $request[ParserInterface::PARAM_VARIABLES],
135 103
            $request[ParserInterface::PARAM_OPERATION_NAME] ?? null
136
        );
137
138 103
        $executorArgumentsEvent->getSchema()->processExtensions();
139
140 103
        $result = $this->executor->execute(
141 103
            $this->promiseAdapter,
142 103
            $executorArgumentsEvent->getSchema(),
143 103
            $executorArgumentsEvent->getRequestString(),
144 103
            $executorArgumentsEvent->getRootValue(),
145 103
            $executorArgumentsEvent->getContextValue(),
0 ignored issues
show
Bug introduced by
$executorArgumentsEvent->getContextValue() of type ArrayObject is incompatible with the type array|null expected by parameter $contextValue of Overblog\GraphQLBundle\E...torInterface::execute(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

145
            /** @scrutinizer ignore-type */ $executorArgumentsEvent->getContextValue(),
Loading history...
146 103
            $executorArgumentsEvent->getVariableValue(),
147 103
            $executorArgumentsEvent->getOperationName(),
148 103
            $this->defaultFieldResolver
149
        );
150
151 103
        $result = $this->postExecute($result);
152
153 102
        return $result;
154
    }
155
156 103
    private function preExecute(
157
        Schema $schema,
158
        ?string $requestString,
159
        \ArrayObject $contextValue,
160
        $rootValue = null,
161
        ?array $variableValue = null,
162
        ?string $operationName = null
163
    ): ExecutorArgumentsEvent {
164 103
        $this->dispatcher->dispatch(
165 103
            new ExecutorContextEvent($contextValue),
166 103
            Events::EXECUTOR_CONTEXT
167
        );
168
169 103
        return $this->dispatcher->dispatch(
170 103
            ExecutorArgumentsEvent::create($schema, $requestString, $contextValue, $rootValue, $variableValue, $operationName),
171 103
            Events::PRE_EXECUTOR
172
        );
173
    }
174
175 103
    private function postExecute(ExecutionResult $result): ExecutionResult
176
    {
177 103
        return $this->dispatcher->dispatch(
178 103
            new ExecutorResultEvent($result),
179 103
            Events::POST_EXECUTOR
180 102
        )->getResult();
181
    }
182
}
183