diff --git a/src/Type/Definition/Config.php b/src/Type/Definition/Config.php index 815b8c6..0d1a171 100644 --- a/src/Type/Definition/Config.php +++ b/src/Type/Definition/Config.php @@ -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, diff --git a/src/Type/Definition/EnumType.php b/src/Type/Definition/EnumType.php index cb71a91..2945a50 100644 --- a/src/Type/Definition/EnumType.php +++ b/src/Type/Definition/EnumType.php @@ -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 diff --git a/src/Type/Definition/FieldDefinition.php b/src/Type/Definition/FieldDefinition.php index 0fe06f5..650d9dd 100644 --- a/src/Type/Definition/FieldDefinition.php +++ b/src/Type/Definition/FieldDefinition.php @@ -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 diff --git a/src/Type/Definition/InputObjectType.php b/src/Type/Definition/InputObjectType.php index cf32a79..322a51a 100644 --- a/src/Type/Definition/InputObjectType.php +++ b/src/Type/Definition/InputObjectType.php @@ -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 diff --git a/src/Type/Definition/InterfaceType.php b/src/Type/Definition/InterfaceType.php index 126a597..410de70 100644 --- a/src/Type/Definition/InterfaceType.php +++ b/src/Type/Definition/InterfaceType.php @@ -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 diff --git a/src/Type/Definition/ObjectType.php b/src/Type/Definition/ObjectType.php index 25c4037..134a248 100644 --- a/src/Type/Definition/ObjectType.php +++ b/src/Type/Definition/ObjectType.php @@ -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 diff --git a/src/Type/Definition/UnionType.php b/src/Type/Definition/UnionType.php index 74ab9be..e113986 100644 --- a/src/Type/Definition/UnionType.php +++ b/src/Type/Definition/UnionType.php @@ -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