Skip to content

Commit 0d43d7b

Browse files
authored
Improve extendability of validator rules (#854)
1 parent 852a191 commit 0d43d7b

34 files changed

+119
-121
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
Changed:
55
- PHP version required: 7.4+
66

7+
Feat:
8+
- Improve extendability of validator rules
9+
710
Removed:
811
- Removed deprecated `Type::getInternalTypes()`
912
- Remove deprecated `GraphQL::execute()`

src/Validator/Rules/CustomValidationRule.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,26 @@
44

55
namespace GraphQL\Validator\Rules;
66

7-
use GraphQL\Error\Error;
7+
use GraphQL\Language\AST\Node;
8+
use GraphQL\Language\VisitorOperation;
89
use GraphQL\Validator\ValidationContext;
910

1011
class CustomValidationRule extends ValidationRule
1112
{
1213
/** @var callable */
13-
private $visitorFn;
14+
protected $visitorFn;
1415

15-
public function __construct($name, callable $visitorFn)
16+
/**
17+
* @param callable(ValidationContext): (array<string, callable(Node): VisitorOperation|mixed|null>|array<string, array<string, callable(Node): VisitorOperation|mixed|null>>) $visitorFn
18+
*/
19+
public function __construct(string $name, callable $visitorFn)
1620
{
1721
$this->name = $name;
1822
$this->visitorFn = $visitorFn;
1923
}
2024

21-
/**
22-
* @return Error[]
23-
*/
2425
public function getVisitor(ValidationContext $context)
2526
{
26-
$fn = $this->visitorFn;
27-
28-
return $fn($context);
27+
return ($this->visitorFn)($context);
2928
}
3029
}

src/Validator/Rules/DisableIntrospection.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ class DisableIntrospection extends QuerySecurityRule
1313
{
1414
public const ENABLED = 1;
1515

16-
/** @var bool */
17-
private $isEnabled;
16+
protected int $isEnabled;
1817

1918
public function __construct($enabled = self::ENABLED)
2019
{

src/Validator/Rules/ExecutableDefinitions.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function getVisitor(ValidationContext $context)
3434
}
3535

3636
$context->reportError(new Error(
37-
self::nonExecutableDefinitionMessage($definition->name->value),
37+
static::nonExecutableDefinitionMessage($definition->name->value),
3838
[$definition->name]
3939
));
4040
}

src/Validator/Rules/FieldsOnCorrectType.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function getVisitor(ValidationContext $context)
7979
*
8080
* @return string[]
8181
*/
82-
private function getSuggestedTypeNames(Schema $schema, $type, $fieldName)
82+
protected function getSuggestedTypeNames(Schema $schema, $type, $fieldName)
8383
{
8484
if (Type::isAbstractType($type)) {
8585
$suggestedObjectTypes = [];
@@ -128,7 +128,7 @@ private function getSuggestedTypeNames(Schema $schema, $type, $fieldName)
128128
*
129129
* @return array|string[]
130130
*/
131-
private function getSuggestedFieldNames(Schema $schema, $type, $fieldName)
131+
protected function getSuggestedFieldNames(Schema $schema, $type, $fieldName)
132132
{
133133
if ($type instanceof ObjectType || $type instanceof InterfaceType) {
134134
$possibleFieldNames = array_keys($type->getFields());

src/Validator/Rules/KnownArgumentNames.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function getVisitor(ValidationContext $context)
4040
}
4141

4242
$context->reportError(new Error(
43-
self::unknownArgMessage(
43+
static::unknownArgMessage(
4444
$node->name->value,
4545
$fieldDef->name,
4646
$parentType->name,

src/Validator/Rules/KnownArgumentNamesOnDirectives.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ static function (InputValueDefinitionNode $arg): string {
104104

105105
$suggestions = Utils::suggestionList($argName, $knownArgs);
106106
$context->reportError(new Error(
107-
self::unknownDirectiveArgMessage($argName, $directiveName, $suggestions),
107+
static::unknownDirectiveArgMessage($argName, $directiveName, $suggestions),
108108
[$argNode]
109109
));
110110
}

src/Validator/Rules/KnownDirectives.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ static function ($name): string {
101101

102102
if (! $locations) {
103103
$context->reportError(new Error(
104-
self::unknownDirectiveMessage($name),
104+
static::unknownDirectiveMessage($name),
105105
[$node]
106106
));
107107

@@ -116,7 +116,7 @@ static function ($name): string {
116116

117117
$context->reportError(
118118
new Error(
119-
self::misplacedDirectiveMessage($name, $candidateLocation),
119+
static::misplacedDirectiveMessage($name, $candidateLocation),
120120
[$node]
121121
)
122122
);
@@ -134,7 +134,7 @@ public static function unknownDirectiveMessage($directiveName)
134134
*
135135
* @return string
136136
*/
137-
private function getDirectiveLocationForASTPath(array $ancestors)
137+
protected function getDirectiveLocationForASTPath(array $ancestors)
138138
{
139139
$appliedTo = $ancestors[count($ancestors) - 1];
140140
switch (true) {

src/Validator/Rules/KnownFragmentNames.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function getVisitor(ValidationContext $context)
2424
}
2525

2626
$context->reportError(new Error(
27-
self::unknownFragmentMessage($fragmentName),
27+
static::unknownFragmentMessage($fragmentName),
2828
[$node->name]
2929
));
3030
},

src/Validator/Rules/KnownTypeNames.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function getVisitor(ValidationContext $context)
4747
}
4848

4949
$context->reportError(new Error(
50-
self::unknownTypeMessage(
50+
static::unknownTypeMessage(
5151
$typeName,
5252
Utils::suggestionList($typeName, array_keys($schema->getTypeMap()))
5353
),

0 commit comments

Comments
 (0)