mirror of
https://github.com/retailcrm/graphql-php.git
synced 2024-11-21 20:36:05 +03:00
Upgrade Doctrine CS
This commit is contained in:
parent
b088720d40
commit
06529e1924
@ -14,7 +14,7 @@
|
||||
"ext-mbstring": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^5.0",
|
||||
"doctrine/coding-standard": "^6.0",
|
||||
"phpbench/phpbench": "^0.14.0",
|
||||
"phpstan/phpstan": "^0.11.4",
|
||||
"phpstan/phpstan-phpunit": "^0.11.0",
|
||||
|
@ -122,13 +122,13 @@ class Error extends Exception implements JsonSerializable, ClientAware
|
||||
|
||||
if ($previous instanceof ClientAware) {
|
||||
$this->isClientSafe = $previous->isClientSafe();
|
||||
$this->category = $previous->getCategory() ?: static::CATEGORY_INTERNAL;
|
||||
$this->category = $previous->getCategory() ?: self::CATEGORY_INTERNAL;
|
||||
} elseif ($previous) {
|
||||
$this->isClientSafe = false;
|
||||
$this->category = static::CATEGORY_INTERNAL;
|
||||
$this->category = self::CATEGORY_INTERNAL;
|
||||
} else {
|
||||
$this->isClientSafe = true;
|
||||
$this->category = static::CATEGORY_GRAPHQL;
|
||||
$this->category = self::CATEGORY_GRAPHQL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,10 +148,10 @@ class Error extends Exception implements JsonSerializable, ClientAware
|
||||
if ($error instanceof self) {
|
||||
if ($error->path && $error->nodes) {
|
||||
return $error;
|
||||
} else {
|
||||
$nodes = $nodes ?: $error->nodes;
|
||||
$path = $path ?: $error->path;
|
||||
}
|
||||
|
||||
$nodes = $nodes ?: $error->nodes;
|
||||
$path = $path ?: $error->path;
|
||||
}
|
||||
|
||||
$source = $positions = $originalError = null;
|
||||
|
@ -7,8 +7,6 @@ namespace GraphQL\Error;
|
||||
use LogicException;
|
||||
|
||||
/**
|
||||
* Class InvariantVoilation
|
||||
*
|
||||
* Note:
|
||||
* This exception should not inherit base Error exception as it is raised when there is an error somewhere in
|
||||
* user-land code
|
||||
|
@ -7,8 +7,6 @@ namespace GraphQL\Error;
|
||||
use RuntimeException;
|
||||
|
||||
/**
|
||||
* Class UserError
|
||||
*
|
||||
* Error caused by actions of GraphQL clients. Can be safely displayed to a client...
|
||||
*/
|
||||
class UserError extends RuntimeException implements ClientAware
|
||||
|
@ -13,8 +13,6 @@ use function is_object;
|
||||
use function method_exists;
|
||||
|
||||
/**
|
||||
* Class SyncPromise
|
||||
*
|
||||
* Simplistic (yet full-featured) implementation of Promises A+ spec for regular PHP `sync` mode
|
||||
* (using queue to defer promises execution)
|
||||
*/
|
||||
|
@ -160,7 +160,9 @@ class SyncPromiseAdapter implements PromiseAdapter
|
||||
|
||||
if ($syncPromise->state === SyncPromise::FULFILLED) {
|
||||
return $syncPromise->result;
|
||||
} elseif ($syncPromise->state === SyncPromise::REJECTED) {
|
||||
}
|
||||
|
||||
if ($syncPromise->state === SyncPromise::REJECTED) {
|
||||
throw $syncPromise->result;
|
||||
}
|
||||
|
||||
|
@ -182,6 +182,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
}
|
||||
Utils::invariant($operation, 'Has operation if no errors.');
|
||||
Utils::invariant($variableValues !== null, 'Has variables if no errors.');
|
||||
|
||||
return new ExecutionContext(
|
||||
$schema,
|
||||
$fragments,
|
||||
@ -206,6 +207,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
// resolved Promise.
|
||||
$data = $this->executeOperation($this->exeContext->operation, $this->exeContext->rootValue);
|
||||
$result = $this->buildResponse($data);
|
||||
|
||||
// Note: we deviate here from the reference implementation a bit by always returning promise
|
||||
// But for the "sync" case it is always fulfilled
|
||||
return $this->isPromise($result)
|
||||
@ -228,6 +230,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
if ($data !== null) {
|
||||
$data = (array) $data;
|
||||
}
|
||||
|
||||
return new ExecutionResult($data, $this->exeContext->errors);
|
||||
}
|
||||
|
||||
@ -257,13 +260,16 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
null,
|
||||
function ($error) {
|
||||
$this->exeContext->addError($error);
|
||||
|
||||
return $this->exeContext->promises->createFulfilled(null);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return $result;
|
||||
} catch (Error $error) {
|
||||
$this->exeContext->addError($error);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -286,6 +292,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
[$operation]
|
||||
);
|
||||
}
|
||||
|
||||
return $queryType;
|
||||
case 'mutation':
|
||||
$mutationType = $schema->getMutationType();
|
||||
@ -295,6 +302,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
[$operation]
|
||||
);
|
||||
}
|
||||
|
||||
return $mutationType;
|
||||
case 'subscription':
|
||||
$subscriptionType = $schema->getSubscriptionType();
|
||||
@ -304,6 +312,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
[$operation]
|
||||
);
|
||||
}
|
||||
|
||||
return $subscriptionType;
|
||||
default:
|
||||
throw new Error(
|
||||
@ -378,6 +387,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
@ -407,10 +417,8 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
$node,
|
||||
$variableValues
|
||||
);
|
||||
if (isset($include['if']) && $include['if'] === false) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
return ! isset($include['if']) || $include['if'] !== false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -445,6 +453,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
if ($conditionalType instanceof AbstractType) {
|
||||
return $this->exeContext->schema->isPossibleType($conditionalType, $type);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -474,10 +483,12 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
if ($promise) {
|
||||
return $promise->then(static function ($resolvedResult) use ($responseName, $results) {
|
||||
$results[$responseName] = $resolvedResult;
|
||||
|
||||
return $results;
|
||||
});
|
||||
}
|
||||
$results[$responseName] = $result;
|
||||
|
||||
return $results;
|
||||
},
|
||||
[]
|
||||
@ -487,6 +498,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
return self::fixResultsIfEmptyArray($resolvedResults);
|
||||
});
|
||||
}
|
||||
|
||||
return self::fixResultsIfEmptyArray($result);
|
||||
}
|
||||
|
||||
@ -554,6 +566,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
$path,
|
||||
$result
|
||||
);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@ -578,12 +591,17 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
$typeNameMetaFieldDef = $typeNameMetaFieldDef ?: Introspection::typeNameMetaFieldDef();
|
||||
if ($fieldName === $schemaMetaFieldDef->name && $schema->getQueryType() === $parentType) {
|
||||
return $schemaMetaFieldDef;
|
||||
} elseif ($fieldName === $typeMetaFieldDef->name && $schema->getQueryType() === $parentType) {
|
||||
}
|
||||
|
||||
if ($fieldName === $typeMetaFieldDef->name && $schema->getQueryType() === $parentType) {
|
||||
return $typeMetaFieldDef;
|
||||
} elseif ($fieldName === $typeNameMetaFieldDef->name) {
|
||||
}
|
||||
|
||||
if ($fieldName === $typeNameMetaFieldDef->name) {
|
||||
return $typeNameMetaFieldDef;
|
||||
}
|
||||
$tmp = $parentType->getFields();
|
||||
|
||||
return $tmp[$fieldName] ?? null;
|
||||
}
|
||||
|
||||
@ -610,6 +628,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
$fieldNode,
|
||||
$this->exeContext->variableValues
|
||||
);
|
||||
|
||||
return $resolveFn($source, $args, $context, $info);
|
||||
} catch (Exception $error) {
|
||||
return $error;
|
||||
@ -663,15 +682,18 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
null,
|
||||
function ($error) use ($exeContext) {
|
||||
$exeContext->addError($error);
|
||||
|
||||
return $this->exeContext->promises->createFulfilled(null);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return $completed;
|
||||
} catch (Error $err) {
|
||||
// If `completeValueWithLocatedError` returned abruptly (threw an error), log the error
|
||||
// and return null.
|
||||
$exeContext->addError($err);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -716,6 +738,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return $completed;
|
||||
} catch (Exception $error) {
|
||||
throw Error::createLocatedError($error, $fieldNodes, $path);
|
||||
@ -786,6 +809,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
'Cannot return null for non-nullable field ' . $info->parentType . '.' . $info->fieldName . '.'
|
||||
);
|
||||
}
|
||||
|
||||
return $completed;
|
||||
}
|
||||
// If result is null-like, return null.
|
||||
@ -863,8 +887,10 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
Utils::printSafe($promise)
|
||||
));
|
||||
}
|
||||
|
||||
return $promise;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -891,6 +917,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
return $callback($resolved, $value);
|
||||
});
|
||||
}
|
||||
|
||||
return $callback($previous, $value);
|
||||
},
|
||||
$initialValue
|
||||
@ -928,6 +955,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
}
|
||||
$completedItems[] = $completedItem;
|
||||
}
|
||||
|
||||
return $containsPromise ? $this->exeContext->promises->all($completedItems) : $completedItems;
|
||||
}
|
||||
|
||||
@ -1001,6 +1029,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
return $this->completeObjectValue(
|
||||
$this->ensureValidRuntimeType(
|
||||
$runtimeType,
|
||||
@ -1076,9 +1105,11 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
return $possibleTypes[$index];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -1111,6 +1142,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
if (! $isTypeOfResult) {
|
||||
throw $this->invalidReturnTypeError($returnType, $result, $fieldNodes);
|
||||
}
|
||||
|
||||
return $this->collectAndExecuteSubfields(
|
||||
$returnType,
|
||||
$fieldNodes,
|
||||
@ -1123,6 +1155,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
throw $this->invalidReturnTypeError($returnType, $result, $fieldNodes);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->collectAndExecuteSubfields(
|
||||
$returnType,
|
||||
$fieldNodes,
|
||||
@ -1164,6 +1197,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
&$result
|
||||
) {
|
||||
$subFieldNodes = $this->collectSubFields($returnType, $fieldNodes);
|
||||
|
||||
return $this->executeFields($returnType, $result, $path, $subFieldNodes);
|
||||
}
|
||||
|
||||
@ -1189,6 +1223,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
}
|
||||
$this->subFieldCache[$returnType][$fieldNodes] = $subFieldNodes;
|
||||
}
|
||||
|
||||
return $this->subFieldCache[$returnType][$fieldNodes];
|
||||
}
|
||||
|
||||
@ -1222,6 +1257,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
if (! $containsPromise) {
|
||||
return self::fixResultsIfEmptyArray($finalResults);
|
||||
}
|
||||
|
||||
// Otherwise, results is a map from field name to the result
|
||||
// of resolving that field, which is possibly a promise. Return
|
||||
// a promise that will return this same map, but with any
|
||||
@ -1241,6 +1277,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
if ($results === []) {
|
||||
return new stdClass();
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
@ -1260,11 +1297,13 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
$keys = array_keys($assoc);
|
||||
$valuesAndPromises = array_values($assoc);
|
||||
$promise = $this->exeContext->promises->all($valuesAndPromises);
|
||||
|
||||
return $promise->then(static function ($values) use ($keys) {
|
||||
$resolvedResults = [];
|
||||
foreach ($values as $i => $value) {
|
||||
$resolvedResults[$keys[$i]] = $value;
|
||||
}
|
||||
|
||||
return self::fixResultsIfEmptyArray($resolvedResults);
|
||||
});
|
||||
}
|
||||
@ -1318,6 +1357,7 @@ class ReferenceExecutor implements ExecutorImplementation
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return $runtimeType;
|
||||
}
|
||||
}
|
||||
|
@ -86,11 +86,13 @@ class Collector
|
||||
} else {
|
||||
$this->runtime->addError(new Error('Must provide an operation.'));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($hasMultipleAssumedOperations) {
|
||||
$this->runtime->addError(new Error('Must provide operation name if query contains multiple operations.'));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -211,7 +213,9 @@ class Collector
|
||||
|
||||
if (isset($this->visitedFragments[$fragmentName])) {
|
||||
continue;
|
||||
} elseif (! isset($this->fragments[$fragmentName])) {
|
||||
}
|
||||
|
||||
if (! isset($this->fragments[$fragmentName])) {
|
||||
$this->runtime->addError(new Error(
|
||||
sprintf('Fragment "%s" does not exist.', $fragmentName),
|
||||
$selection
|
||||
|
@ -147,6 +147,7 @@ class CoroutineExecutor implements Runtime, ExecutorImplementation
|
||||
if ($emptyObjectAsStdClass && empty($array)) {
|
||||
return new stdClass();
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
@ -155,6 +156,7 @@ class CoroutineExecutor implements Runtime, ExecutorImplementation
|
||||
foreach ($value as $key => $item) {
|
||||
$array[$key] = self::resultToArray($item);
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
@ -365,6 +367,7 @@ class CoroutineExecutor implements Runtime, ExecutorImplementation
|
||||
// short-circuit evaluation for __typename
|
||||
if ($ctx->shared->fieldName === Introspection::TYPE_NAME_FIELD_NAME) {
|
||||
$ctx->result->{$ctx->shared->resultName} = $ctx->type->name;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -59,6 +59,7 @@ class Location
|
||||
$tmp = new static();
|
||||
$tmp->start = $start;
|
||||
$tmp->end = $end;
|
||||
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
|
@ -105,6 +105,7 @@ class NodeList implements ArrayAccess, IteratorAggregate, Countable
|
||||
if ($list instanceof self) {
|
||||
$list = $list->nodes;
|
||||
}
|
||||
|
||||
return new NodeList(array_merge($this->nodes, $list));
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,22 @@ use function preg_match;
|
||||
*/
|
||||
class Lexer
|
||||
{
|
||||
private const TOKEN_BANG = 33;
|
||||
private const TOKEN_HASH = 35;
|
||||
private const TOKEN_DOLLAR = 36;
|
||||
private const TOKEN_AMP = 38;
|
||||
private const TOKEN_PAREN_L = 40;
|
||||
private const TOKEN_PAREN_R = 41;
|
||||
private const TOKEN_DOT = 46;
|
||||
private const TOKEN_COLON = 58;
|
||||
private const TOKEN_EQUALS = 61;
|
||||
private const TOKEN_AT = 64;
|
||||
private const TOKEN_BRACKET_L = 91;
|
||||
private const TOKEN_BRACKET_R = 93;
|
||||
private const TOKEN_BRACE_L = 123;
|
||||
private const TOKEN_PIPE = 124;
|
||||
private const TOKEN_BRACE_R = 125;
|
||||
|
||||
/** @var Source */
|
||||
public $source;
|
||||
|
||||
@ -92,7 +108,8 @@ class Lexer
|
||||
*/
|
||||
public function advance()
|
||||
{
|
||||
$this->lastToken = $this->token;
|
||||
$this->lastToken = $this->token;
|
||||
|
||||
return $this->token = $this->lookahead();
|
||||
}
|
||||
|
||||
@ -131,44 +148,45 @@ class Lexer
|
||||
[, $code, $bytes] = $this->readChar(true);
|
||||
|
||||
switch ($code) {
|
||||
case 33: // !
|
||||
case self::TOKEN_BANG:
|
||||
return new Token(Token::BANG, $position, $position + 1, $line, $col, $prev);
|
||||
case 35: // #
|
||||
case self::TOKEN_HASH: // #
|
||||
$this->moveStringCursor(-1, -1 * $bytes);
|
||||
|
||||
return $this->readComment($line, $col, $prev);
|
||||
case 36: // $
|
||||
case self::TOKEN_DOLLAR:
|
||||
return new Token(Token::DOLLAR, $position, $position + 1, $line, $col, $prev);
|
||||
case 38: // &
|
||||
case self::TOKEN_AMP:
|
||||
return new Token(Token::AMP, $position, $position + 1, $line, $col, $prev);
|
||||
case 40: // (
|
||||
case self::TOKEN_PAREN_L:
|
||||
return new Token(Token::PAREN_L, $position, $position + 1, $line, $col, $prev);
|
||||
case 41: // )
|
||||
case self::TOKEN_PAREN_R:
|
||||
return new Token(Token::PAREN_R, $position, $position + 1, $line, $col, $prev);
|
||||
case 46: // .
|
||||
case self::TOKEN_DOT: // .
|
||||
[, $charCode1] = $this->readChar(true);
|
||||
[, $charCode2] = $this->readChar(true);
|
||||
|
||||
if ($charCode1 === 46 && $charCode2 === 46) {
|
||||
if ($charCode1 === self::TOKEN_DOT && $charCode2 === self::TOKEN_DOT) {
|
||||
return new Token(Token::SPREAD, $position, $position + 3, $line, $col, $prev);
|
||||
}
|
||||
break;
|
||||
case 58: // :
|
||||
case self::TOKEN_COLON:
|
||||
return new Token(Token::COLON, $position, $position + 1, $line, $col, $prev);
|
||||
case 61: // =
|
||||
case self::TOKEN_EQUALS:
|
||||
return new Token(Token::EQUALS, $position, $position + 1, $line, $col, $prev);
|
||||
case 64: // @
|
||||
case self::TOKEN_AT:
|
||||
return new Token(Token::AT, $position, $position + 1, $line, $col, $prev);
|
||||
case 91: // [
|
||||
case self::TOKEN_BRACKET_L:
|
||||
return new Token(Token::BRACKET_L, $position, $position + 1, $line, $col, $prev);
|
||||
case 93: // ]
|
||||
case self::TOKEN_BRACKET_R:
|
||||
return new Token(Token::BRACKET_R, $position, $position + 1, $line, $col, $prev);
|
||||
case 123: // {
|
||||
case self::TOKEN_BRACE_L:
|
||||
return new Token(Token::BRACE_L, $position, $position + 1, $line, $col, $prev);
|
||||
case 124: // |
|
||||
case self::TOKEN_PIPE:
|
||||
return new Token(Token::PIPE, $position, $position + 1, $line, $col, $prev);
|
||||
case 125: // }
|
||||
case self::TOKEN_BRACE_R:
|
||||
return new Token(Token::BRACE_R, $position, $position + 1, $line, $col, $prev);
|
||||
|
||||
// A-Z
|
||||
case 65:
|
||||
case 66:
|
||||
@ -227,6 +245,7 @@ class Lexer
|
||||
case 122:
|
||||
return $this->moveStringCursor(-1, -1 * $bytes)
|
||||
->readName($line, $col, $prev);
|
||||
|
||||
// -
|
||||
case 45:
|
||||
// 0-9
|
||||
@ -242,6 +261,7 @@ class Lexer
|
||||
case 57:
|
||||
return $this->moveStringCursor(-1, -1 * $bytes)
|
||||
->readNumber($line, $col, $prev);
|
||||
|
||||
// "
|
||||
case 34:
|
||||
[, $nextCode] = $this->readChar();
|
||||
@ -564,10 +584,10 @@ class Lexer
|
||||
$prev,
|
||||
BlockString::value($value)
|
||||
);
|
||||
} else {
|
||||
// move cursor back to before the first quote
|
||||
$this->moveStringCursor(-2, -2);
|
||||
}
|
||||
|
||||
// move cursor back to before the first quote
|
||||
$this->moveStringCursor(-2, -2);
|
||||
}
|
||||
|
||||
$this->assertValidBlockStringCharacterCode($code, $this->position);
|
||||
|
@ -439,7 +439,6 @@ class Parser
|
||||
case 'mutation':
|
||||
case 'subscription':
|
||||
return $this->parseOperationDefinition();
|
||||
|
||||
case 'fragment':
|
||||
return $this->parseFragmentDefinition();
|
||||
}
|
||||
@ -827,7 +826,9 @@ class Parser
|
||||
'value' => $token->value === 'true',
|
||||
'loc' => $this->loc($token),
|
||||
]);
|
||||
} elseif ($token->value === 'null') {
|
||||
}
|
||||
|
||||
if ($token->value === 'null') {
|
||||
$this->lexer->advance();
|
||||
|
||||
return new NullValueNode([
|
||||
|
@ -115,6 +115,7 @@ class Printer
|
||||
$varDefs = $this->wrap('(', $this->join($node->variableDefinitions, ', '), ')');
|
||||
$directives = $this->join($node->directives, ' ');
|
||||
$selectionSet = $node->selectionSet;
|
||||
|
||||
// Anonymous queries with no directives or variable definitions can use
|
||||
// the query short form.
|
||||
return ! $name && ! $directives && ! $varDefs && $op === 'query'
|
||||
|
@ -151,6 +151,7 @@ class StandardServer
|
||||
StreamInterface $writableBodyStream
|
||||
) {
|
||||
$result = $this->executePsrRequest($request);
|
||||
|
||||
return $this->helper->toPsrResponse($result, $response, $writableBodyStream);
|
||||
}
|
||||
|
||||
@ -165,6 +166,7 @@ class StandardServer
|
||||
public function executePsrRequest(ServerRequestInterface $request)
|
||||
{
|
||||
$parsedBody = $this->helper->parsePsrRequest($request);
|
||||
|
||||
return $this->executeRequest($parsedBody);
|
||||
}
|
||||
|
||||
|
@ -11,9 +11,6 @@ use GraphQL\Language\AST\Node;
|
||||
use GraphQL\Utils\Utils;
|
||||
use function is_bool;
|
||||
|
||||
/**
|
||||
* Class BooleanType
|
||||
*/
|
||||
class BooleanType extends ScalarType
|
||||
{
|
||||
/** @var string */
|
||||
|
@ -12,9 +12,6 @@ use function call_user_func;
|
||||
use function is_callable;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* Class CustomScalarType
|
||||
*/
|
||||
class CustomScalarType extends ScalarType
|
||||
{
|
||||
/**
|
||||
|
@ -12,9 +12,6 @@ use function array_keys;
|
||||
use function in_array;
|
||||
use function is_array;
|
||||
|
||||
/**
|
||||
* Class Directive
|
||||
*/
|
||||
class Directive
|
||||
{
|
||||
public const DEFAULT_DEPRECATION_REASON = 'No longer supported';
|
||||
@ -80,6 +77,7 @@ class Directive
|
||||
public static function includeDirective()
|
||||
{
|
||||
$internal = self::getInternalDirectives();
|
||||
|
||||
return $internal['include'];
|
||||
}
|
||||
|
||||
@ -140,24 +138,30 @@ class Directive
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
return self::$internalDirectives;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Directive
|
||||
*/
|
||||
public static function skipDirective()
|
||||
{
|
||||
$internal = self::getInternalDirectives();
|
||||
|
||||
return $internal['skip'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Directive
|
||||
*/
|
||||
public static function deprecatedDirective()
|
||||
{
|
||||
$internal = self::getInternalDirectives();
|
||||
|
||||
return $internal['deprecated'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
|
@ -19,9 +19,6 @@ use function is_int;
|
||||
use function is_string;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* Class EnumType
|
||||
*/
|
||||
class EnumType extends Type implements InputType, OutputType, LeafType, NullableType, NamedType
|
||||
{
|
||||
/** @var EnumTypeDefinitionNode|null */
|
||||
@ -33,7 +30,7 @@ class EnumType extends Type implements InputType, OutputType, LeafType, Nullable
|
||||
/** @var MixedStore<mixed, EnumValueDefinition> */
|
||||
private $valueLookup;
|
||||
|
||||
/** @var \ArrayObject<string, EnumValueDefinition> */
|
||||
/** @var ArrayObject<string, EnumValueDefinition> */
|
||||
private $nameLookup;
|
||||
|
||||
/** @var EnumTypeExtensionNode[] */
|
||||
@ -71,7 +68,7 @@ class EnumType extends Type implements InputType, OutputType, LeafType, Nullable
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \ArrayObject<string, EnumValueDefinition>
|
||||
* @return ArrayObject<string, EnumValueDefinition>
|
||||
*/
|
||||
private function getNameLookup()
|
||||
{
|
||||
|
@ -6,9 +6,6 @@ namespace GraphQL\Type\Definition;
|
||||
|
||||
use GraphQL\Language\AST\EnumValueDefinitionNode;
|
||||
|
||||
/**
|
||||
* Class EnumValueDefinition
|
||||
*/
|
||||
class EnumValueDefinition
|
||||
{
|
||||
/** @var string */
|
||||
|
@ -11,9 +11,6 @@ use function is_array;
|
||||
use function is_string;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* Class FieldArgument
|
||||
*/
|
||||
class FieldArgument
|
||||
{
|
||||
/** @var string */
|
||||
|
@ -81,7 +81,7 @@ class FieldDefinition
|
||||
|
||||
$this->config = $config;
|
||||
|
||||
$this->complexityFn = $config['complexity'] ?? static::DEFAULT_COMPLEXITY_FN;
|
||||
$this->complexityFn = $config['complexity'] ?? self::DEFAULT_COMPLEXITY_FN;
|
||||
}
|
||||
|
||||
public static function defineFieldMap(Type $type, $fields)
|
||||
|
@ -12,9 +12,6 @@ use GraphQL\Language\AST\Node;
|
||||
use GraphQL\Utils\Utils;
|
||||
use function is_numeric;
|
||||
|
||||
/**
|
||||
* Class FloatType
|
||||
*/
|
||||
class FloatType extends ScalarType
|
||||
{
|
||||
/** @var string */
|
||||
|
@ -15,9 +15,6 @@ use function is_callable;
|
||||
use function is_string;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* Class InputObjectType
|
||||
*/
|
||||
class InputObjectType extends Type implements InputType, NullableType, NamedType
|
||||
{
|
||||
/** @var InputObjectTypeDefinitionNode|null */
|
||||
|
@ -14,9 +14,6 @@ use function intval;
|
||||
use function is_bool;
|
||||
use function is_numeric;
|
||||
|
||||
/**
|
||||
* Class IntType
|
||||
*/
|
||||
class IntType extends ScalarType
|
||||
{
|
||||
// As per the GraphQL Spec, Integers are only treated as valid when a valid
|
||||
|
@ -12,9 +12,6 @@ use function is_callable;
|
||||
use function is_string;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* Class InterfaceType
|
||||
*/
|
||||
class InterfaceType extends Type implements AbstractType, OutputType, CompositeType, NullableType, NamedType
|
||||
{
|
||||
/** @var InterfaceTypeDefinitionNode|null */
|
||||
|
@ -4,9 +4,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace GraphQL\Type\Definition;
|
||||
|
||||
/**
|
||||
* Class ListOfType
|
||||
*/
|
||||
class ListOfType extends Type implements WrappingType, OutputType, NullableType, InputType
|
||||
{
|
||||
/** @var ObjectType|InterfaceType|UnionType|ScalarType|InputObjectType|EnumType */
|
||||
|
@ -6,9 +6,6 @@ namespace GraphQL\Type\Definition;
|
||||
|
||||
use GraphQL\Utils\Utils;
|
||||
|
||||
/**
|
||||
* Class NonNull
|
||||
*/
|
||||
class NonNull extends Type implements WrappingType, OutputType, InputType
|
||||
{
|
||||
/** @var NullableType */
|
||||
|
@ -183,6 +183,7 @@ class QueryPlan
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
@ -226,6 +226,7 @@ class ResolveInfo
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
||||
|
@ -14,9 +14,6 @@ use function is_object;
|
||||
use function is_scalar;
|
||||
use function method_exists;
|
||||
|
||||
/**
|
||||
* Class StringType
|
||||
*/
|
||||
class StringType extends ScalarType
|
||||
{
|
||||
/** @var string */
|
||||
|
@ -194,6 +194,7 @@ abstract class Type implements JsonSerializable
|
||||
public static function getInternalTypes()
|
||||
{
|
||||
trigger_error(__METHOD__ . ' is deprecated. Use Type::getStandardTypes() instead', E_USER_DEPRECATED);
|
||||
|
||||
return self::getStandardTypes();
|
||||
}
|
||||
|
||||
|
@ -14,9 +14,6 @@ use function is_callable;
|
||||
use function is_string;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* Class UnionType
|
||||
*/
|
||||
class UnionType extends Type implements AbstractType, OutputType, CompositeType, NullableType, NamedType
|
||||
{
|
||||
/** @var UnionTypeDefinitionNode */
|
||||
|
@ -353,6 +353,7 @@ class AST
|
||||
// No valid return value.
|
||||
return $undefined;
|
||||
}
|
||||
|
||||
// Note: we're not doing any checking that this variable is correct. We're
|
||||
// assuming that this query has been validated and the variable usage here
|
||||
// is of the correct type.
|
||||
|
@ -144,7 +144,8 @@ class ASTDefinitionBuilder
|
||||
// Note: While this could make assertions to get the correctly typed
|
||||
// value, that would throw immediately while type system validation
|
||||
// with validateSchema() will produce more actionable results.
|
||||
$type = $this->internalBuildWrappedType($value->type);
|
||||
$type = $this->internalBuildWrappedType($value->type);
|
||||
|
||||
$config = [
|
||||
'name' => $value->name->value,
|
||||
'type' => $type,
|
||||
|
@ -22,8 +22,6 @@ use function is_string;
|
||||
*
|
||||
* Note: unfortunately when storing array as key - access and modification is O(N)
|
||||
* (yet this should be really rare case and should be avoided when possible)
|
||||
*
|
||||
* Class MixedStore
|
||||
*/
|
||||
class MixedStore implements ArrayAccess
|
||||
{
|
||||
|
@ -66,6 +66,7 @@ class SchemaExtender
|
||||
|
||||
return $type->extensionASTNodes;
|
||||
}
|
||||
|
||||
return static::$typeExtensionsMap[$name] ?? null;
|
||||
}
|
||||
|
||||
@ -284,6 +285,7 @@ class SchemaExtender
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $interfaces;
|
||||
}
|
||||
|
||||
|
@ -153,11 +153,8 @@ class SchemaPrinter
|
||||
}
|
||||
|
||||
$subscriptionType = $schema->getSubscriptionType();
|
||||
if ($subscriptionType && $subscriptionType->name !== 'Subscription') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return ! $subscriptionType || $subscriptionType->name === 'Subscription';
|
||||
}
|
||||
|
||||
private static function printDirective($directive, $options) : string
|
||||
|
@ -86,18 +86,12 @@ class TypeComparators
|
||||
|
||||
// If superType type is an abstract type, maybeSubType type may be a currently
|
||||
// possible object type.
|
||||
if (Type::isAbstractType($superType) &&
|
||||
return Type::isAbstractType($superType) &&
|
||||
$maybeSubType instanceof ObjectType &&
|
||||
$schema->isPossibleType(
|
||||
$superType,
|
||||
$maybeSubType
|
||||
)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Otherwise, the child type is not a valid subtype of the parent type.
|
||||
return false;
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,13 +125,11 @@ class TypeComparators
|
||||
return false;
|
||||
}
|
||||
|
||||
/** @var $typeB ObjectType */
|
||||
// Determine if the latter type is a possible concrete type of the former.
|
||||
return $schema->isPossibleType($typeA, $typeB);
|
||||
}
|
||||
|
||||
if ($typeB instanceof AbstractType) {
|
||||
/** @var $typeA ObjectType */
|
||||
// Determine if the former type is a possible concrete type of the latter.
|
||||
return $schema->isPossibleType($typeB, $typeA);
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ use GraphQL\Type\Definition\UnionType;
|
||||
use GraphQL\Type\Definition\WrappingType;
|
||||
use GraphQL\Type\Introspection;
|
||||
use GraphQL\Type\Schema;
|
||||
use SplStack;
|
||||
use function array_map;
|
||||
use function array_merge;
|
||||
use function array_pop;
|
||||
@ -35,24 +36,21 @@ use function count;
|
||||
use function is_array;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* Class TypeInfo
|
||||
*/
|
||||
class TypeInfo
|
||||
{
|
||||
/** @var Schema */
|
||||
private $schema;
|
||||
|
||||
/** @var \SplStack<OutputType> */
|
||||
/** @var SplStack<OutputType> */
|
||||
private $typeStack;
|
||||
|
||||
/** @var \SplStack<CompositeType> */
|
||||
/** @var SplStack<CompositeType> */
|
||||
private $parentTypeStack;
|
||||
|
||||
/** @var \SplStack<InputType> */
|
||||
/** @var SplStack<InputType> */
|
||||
private $inputTypeStack;
|
||||
|
||||
/** @var \SplStack<FieldDefinition> */
|
||||
/** @var SplStack<FieldDefinition> */
|
||||
private $fieldDefStack;
|
||||
|
||||
/** @var Directive */
|
||||
@ -155,6 +153,7 @@ class TypeInfo
|
||||
if (! $alreadyInMap) {
|
||||
$typeMap[$i] = $type;
|
||||
}
|
||||
|
||||
return $typeMap;
|
||||
}
|
||||
|
||||
|
@ -52,6 +52,6 @@ class DisableIntrospection extends QuerySecurityRule
|
||||
|
||||
protected function isEnabled()
|
||||
{
|
||||
return $this->isEnabled !== static::DISABLED;
|
||||
return $this->isEnabled !== self::DISABLED;
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ class LoneSchemaDefinition extends ValidationRule
|
||||
NodeKind::SCHEMA_DEFINITION => static function (SchemaDefinitionNode $node) use ($alreadyDefined, $context, &$schemaDefinitionsCount) {
|
||||
if ($alreadyDefined !== false) {
|
||||
$context->reportError(new Error('Cannot define a new schema within a schema extension.', $node));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -12,8 +12,6 @@ use GraphQL\Validator\ValidationContext;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* Class NoUndefinedVariables
|
||||
*
|
||||
* A GraphQL operation is only valid if all variables encountered, both directly
|
||||
* and via fragment spreads, are defined by that operation.
|
||||
*/
|
||||
|
@ -206,10 +206,12 @@ class QueryComplexity extends QuerySecurityRule
|
||||
$directive = Directive::includeDirective();
|
||||
/** @var bool $directiveArgsIf */
|
||||
$directiveArgsIf = Values::getArgumentValues($directive, $directiveNode, $variableValues)['if'];
|
||||
|
||||
return ! $directiveArgsIf;
|
||||
}
|
||||
$directive = Directive::skipDirective();
|
||||
$directiveArgsIf = Values::getArgumentValues($directive, $directiveNode, $variableValues);
|
||||
|
||||
return $directiveArgsIf['if'];
|
||||
}
|
||||
}
|
||||
@ -282,6 +284,6 @@ class QueryComplexity extends QuerySecurityRule
|
||||
|
||||
protected function isEnabled()
|
||||
{
|
||||
return $this->getMaxQueryComplexity() !== static::DISABLED;
|
||||
return $this->getMaxQueryComplexity() !== self::DISABLED;
|
||||
}
|
||||
}
|
||||
|
@ -113,6 +113,6 @@ class QueryDepth extends QuerySecurityRule
|
||||
|
||||
protected function isEnabled()
|
||||
{
|
||||
return $this->getMaxQueryDepth() !== static::DISABLED;
|
||||
return $this->getMaxQueryDepth() !== self::DISABLED;
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ class ValuesOfCorrectType extends ValidationRule
|
||||
public function getVisitor(ValidationContext $context)
|
||||
{
|
||||
$fieldName = '';
|
||||
|
||||
return [
|
||||
NodeKind::FIELD => [
|
||||
'enter' => static function (FieldNode $node) use (&$fieldName) {
|
||||
@ -281,6 +282,7 @@ class ValuesOfCorrectType extends ValidationRule
|
||||
return self::badArgumentValueMessage($typeName, $valueName, $fieldName, $arg->name, $message);
|
||||
}
|
||||
}
|
||||
|
||||
return self::badValueMessage($typeName, $valueName, $message);
|
||||
}
|
||||
}
|
||||
|
@ -59,6 +59,7 @@ class MutationsTest extends TestCase
|
||||
],
|
||||
'name' => 'NumberHolder',
|
||||
]);
|
||||
|
||||
return new Schema([
|
||||
'query' => new ObjectType([
|
||||
'fields' => [
|
||||
|
@ -16,7 +16,6 @@ use function uniqid;
|
||||
class ResolveTest extends TestCase
|
||||
{
|
||||
// Execute: resolve function
|
||||
|
||||
/**
|
||||
* @see it('default function accesses properties')
|
||||
*/
|
||||
|
@ -355,7 +355,6 @@ class VariablesTest extends TestCase
|
||||
self::assertEquals($expected, $result->toArray());
|
||||
}
|
||||
|
||||
|
||||
// Describe: Handles non-nullable scalars
|
||||
|
||||
/**
|
||||
|
@ -11,7 +11,6 @@ class StarWarsIntrospectionTest extends TestCase
|
||||
{
|
||||
// Star Wars Introspection Tests
|
||||
// Basic Introspection
|
||||
|
||||
/**
|
||||
* @see it('Allows querying the schema for types')
|
||||
*/
|
||||
|
@ -12,7 +12,6 @@ class StarWarsValidationTest extends TestCase
|
||||
{
|
||||
// Star Wars Validation Tests
|
||||
// Basic Queries
|
||||
|
||||
/**
|
||||
* @see it('Validates a complex but valid query')
|
||||
*/
|
||||
|
@ -24,7 +24,6 @@ use function count;
|
||||
class BuildSchemaTest extends TestCase
|
||||
{
|
||||
// Describe: Schema Builder
|
||||
|
||||
/**
|
||||
* @see it('can use built schema for limited execution')
|
||||
*/
|
||||
|
@ -198,6 +198,7 @@ class SchemaExtenderTest extends TestCase
|
||||
|
||||
preg_match('/^[ \t]*/', $trimmedStr, $indentMatch);
|
||||
$indent = $indentMatch[0];
|
||||
|
||||
return preg_replace('/^' . $indent . '/m', '', $trimmedStr);
|
||||
}
|
||||
|
||||
@ -210,6 +211,7 @@ class SchemaExtenderTest extends TestCase
|
||||
$ast = Parser::parse($sdl);
|
||||
$extendedSchema = SchemaExtender::extend($this->testSchema, $ast, $options);
|
||||
self::assertEquals(SchemaPrinter::doPrint($this->testSchema), $originalPrint);
|
||||
|
||||
return $extendedSchema;
|
||||
}
|
||||
|
||||
@ -1250,7 +1252,6 @@ class SchemaExtenderTest extends TestCase
|
||||
self::assertEquals('new directive', $newDirective->description);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see it('may extend directives with new complex directive')
|
||||
*/
|
||||
@ -1735,7 +1736,6 @@ class SchemaExtenderTest extends TestCase
|
||||
self::assertEquals($queryType->name, 'Foo');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see it('adds new root types via schema extension')
|
||||
*/
|
||||
@ -1875,7 +1875,6 @@ class SchemaExtenderTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see it('does not allow defining a root operation type twice')
|
||||
*/
|
||||
@ -1964,7 +1963,6 @@ extend type Query {
|
||||
self::assertSame(['data' => ['hello' => 'Hello World!']], $result->toArray());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see https://github.com/webonyx/graphql-php/issues/180
|
||||
*/
|
||||
|
@ -21,7 +21,6 @@ use PHPUnit\Framework\TestCase;
|
||||
class SchemaPrinterTest extends TestCase
|
||||
{
|
||||
// Describe: Type System Printer
|
||||
|
||||
/**
|
||||
* @see it('Prints String Field')
|
||||
*/
|
||||
|
@ -1135,7 +1135,6 @@ class ValuesOfCorrectTypeTest extends ValidatorTestCase
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// DESCRIBE: Valid input object value
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user