mirror of
https://github.com/retailcrm/graphql-php.git
synced 2024-11-22 04:46:04 +03:00
Validate type/field/argument names
This commit is contained in:
parent
3b0e52f254
commit
22e41a3729
@ -19,6 +19,7 @@ class Config
|
||||
const SCALAR = 32;
|
||||
const CALLBACK = 64;
|
||||
const ANY = 128;
|
||||
const NAME = 256;
|
||||
|
||||
const OUTPUT_TYPE = 2048;
|
||||
const INPUT_TYPE = 4096;
|
||||
@ -253,6 +254,13 @@ class Config
|
||||
case $def & self::SCALAR:
|
||||
Utils::invariant(is_scalar($value), $err, 'scalar');
|
||||
break;
|
||||
case $def & self::NAME:
|
||||
Utils::invariant(
|
||||
preg_match('~^[_a-zA-Z][_a-zA-Z0-9]*$~', $value),
|
||||
'Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "%s" does not.',
|
||||
$value
|
||||
);
|
||||
break;
|
||||
case $def & self::INPUT_TYPE:
|
||||
Utils::invariant(
|
||||
is_callable($value) || $value instanceof InputType,
|
||||
|
@ -32,9 +32,9 @@ class EnumType extends Type implements InputType, OutputType, LeafType
|
||||
}
|
||||
|
||||
Config::validate($config, [
|
||||
'name' => Config::STRING | Config::REQUIRED,
|
||||
'name' => Config::NAME | Config::REQUIRED,
|
||||
'values' => Config::arrayOf([
|
||||
'name' => Config::STRING | Config::REQUIRED,
|
||||
'name' => Config::NAME | Config::REQUIRED,
|
||||
'value' => Config::ANY,
|
||||
'deprecationReason' => Config::STRING,
|
||||
'description' => Config::STRING
|
||||
|
@ -73,10 +73,10 @@ class FieldDefinition
|
||||
public static function getDefinition()
|
||||
{
|
||||
return self::$def ?: (self::$def = [
|
||||
'name' => Config::STRING | Config::REQUIRED,
|
||||
'name' => Config::NAME | Config::REQUIRED,
|
||||
'type' => Config::OUTPUT_TYPE | Config::REQUIRED,
|
||||
'args' => Config::arrayOf([
|
||||
'name' => Config::STRING | Config::REQUIRED,
|
||||
'name' => Config::NAME | Config::REQUIRED,
|
||||
'type' => Config::INPUT_TYPE | Config::REQUIRED,
|
||||
'description' => Config::STRING,
|
||||
'defaultValue' => Config::ANY
|
||||
|
@ -30,9 +30,9 @@ class InputObjectType extends Type implements InputType
|
||||
}
|
||||
|
||||
Config::validate($config, [
|
||||
'name' => Config::STRING | Config::REQUIRED,
|
||||
'name' => Config::NAME | Config::REQUIRED,
|
||||
'fields' => Config::arrayOf([
|
||||
'name' => Config::STRING | Config::REQUIRED,
|
||||
'name' => Config::NAME | Config::REQUIRED,
|
||||
'type' => Config::INPUT_TYPE | Config::REQUIRED,
|
||||
'defaultValue' => Config::ANY,
|
||||
'description' => Config::STRING
|
||||
|
@ -40,7 +40,7 @@ class InterfaceType extends Type implements AbstractType, OutputType, CompositeT
|
||||
}
|
||||
|
||||
Config::validate($config, [
|
||||
'name' => Config::STRING,
|
||||
'name' => Config::NAME,
|
||||
'fields' => Config::arrayOf(
|
||||
FieldDefinition::getDefinition(),
|
||||
Config::KEY_AS_NAME | Config::MAYBE_THUNK | Config::MAYBE_TYPE
|
||||
|
@ -88,7 +88,7 @@ class ObjectType extends Type implements OutputType, CompositeType
|
||||
// Note: this validation is disabled by default, because it is resource-consuming
|
||||
// TODO: add bin/validate script to check if schema is valid during development
|
||||
Config::validate($config, [
|
||||
'name' => Config::STRING | Config::REQUIRED,
|
||||
'name' => Config::NAME | Config::REQUIRED,
|
||||
'fields' => Config::arrayOf(
|
||||
FieldDefinition::getDefinition(),
|
||||
Config::KEY_AS_NAME | Config::MAYBE_THUNK | Config::MAYBE_TYPE
|
||||
|
@ -41,7 +41,7 @@ class UnionType extends Type implements AbstractType, OutputType, CompositeType
|
||||
}
|
||||
|
||||
Config::validate($config, [
|
||||
'name' => Config::STRING | Config::REQUIRED,
|
||||
'name' => Config::NAME | Config::REQUIRED,
|
||||
'types' => Config::arrayOf(Config::OBJECT_TYPE, Config::MAYBE_THUNK | Config::REQUIRED),
|
||||
'resolveType' => Config::CALLBACK, // function($value, ResolveInfo $info) => ObjectType
|
||||
'description' => Config::STRING
|
||||
|
Loading…
Reference in New Issue
Block a user