mirror of
https://github.com/retailcrm/graphql-php.git
synced 2025-02-11 18:19:23 +03:00
Added tools for warnings with ability to suppress them
This commit is contained in:
parent
88b85c9761
commit
90e1ea4d22
@ -3,21 +3,39 @@ namespace GraphQL\Error;
|
||||
|
||||
final class Warning
|
||||
{
|
||||
static $supressWarnings = false;
|
||||
const NAME_WARNING = 1;
|
||||
const ASSIGN_WARNING = 2;
|
||||
const CONFIG_WARNING = 4;
|
||||
|
||||
const ALL = self::NAME_WARNING | self::ASSIGN_WARNING | self::CONFIG_WARNING;
|
||||
|
||||
static $enableWarnings = self::ALL;
|
||||
|
||||
static $warned = [];
|
||||
|
||||
static function supress($set = true)
|
||||
static function suppress($suppress = true)
|
||||
{
|
||||
self::$supressWarnings = $set;
|
||||
if (true === $suppress) {
|
||||
self::$enableWarnings = 0;
|
||||
} else if (false === $suppress) {
|
||||
self::$enableWarnings = self::ALL;
|
||||
} else {
|
||||
$suppress = (int) $suppress;
|
||||
self::$enableWarnings &= ~$suppress;
|
||||
}
|
||||
}
|
||||
|
||||
static function warnOnce($errorMessage, $errorId = null)
|
||||
static function warnOnce($errorMessage, $warningId)
|
||||
{
|
||||
$errorId = $errorId ?: $errorMessage;
|
||||
if ((self::$enableWarnings & $warningId) > 0 && !isset(self::$warned[$warningId])) {
|
||||
self::$warned[$warningId] = true;
|
||||
trigger_error($errorMessage, E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
if (!self::$supressWarnings && !isset(self::$warned[$errorId])) {
|
||||
self::$warned[$errorId] = true;
|
||||
static function warn($errorMessage, $warningId)
|
||||
{
|
||||
if ((self::$enableWarnings & $warningId) > 0) {
|
||||
trigger_error($errorMessage, E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
namespace GraphQL\Type\Definition;
|
||||
|
||||
use GraphQL\Error\InvariantViolation;
|
||||
use GraphQL\Error\Warning;
|
||||
use GraphQL\Utils;
|
||||
|
||||
/**
|
||||
@ -127,7 +128,10 @@ class Config
|
||||
|
||||
if (!empty($unexpectedKeys)) {
|
||||
if (!self::$allowCustomOptions) {
|
||||
trigger_error(sprintf('Error in "%s" type definition: Non-standard keys "%s" ' . $suffix, $typeName, implode(', ', $unexpectedKeys)));
|
||||
Warning::warnOnce(
|
||||
sprintf('Error in "%s" type definition: Non-standard keys "%s" ' . $suffix, $typeName, implode(', ', $unexpectedKeys)),
|
||||
Warning::CONFIG_WARNING
|
||||
);
|
||||
}
|
||||
$map = array_intersect_key($map, $definitions);
|
||||
}
|
||||
|
@ -34,7 +34,10 @@ class Utils
|
||||
foreach ($vars as $key => $value) {
|
||||
if (!property_exists($obj, $key)) {
|
||||
$cls = get_class($obj);
|
||||
trigger_error("Trying to set non-existing property '$key' on class '$cls'");
|
||||
Warning::warn(
|
||||
"Trying to set non-existing property '$key' on class '$cls'",
|
||||
Warning::ASSIGN_WARNING
|
||||
);
|
||||
}
|
||||
$obj->{$key} = $value;
|
||||
}
|
||||
@ -356,7 +359,7 @@ class Utils
|
||||
'Name "'.$name.'" must not begin with "__", which is reserved by ' .
|
||||
'GraphQL introspection. In a future release of graphql this will ' .
|
||||
'become an exception',
|
||||
'warnAboutDunder'
|
||||
Warning::NAME_WARNING
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -643,7 +643,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
|
||||
['test' => Config::STRING]
|
||||
);
|
||||
$this->fail('Expected exception not thrown');
|
||||
} catch (\PHPUnit_Framework_Error_Notice $e) {
|
||||
} catch (\PHPUnit_Framework_Error_Warning $e) {
|
||||
$this->assertEquals(
|
||||
$this->typeError('Non-standard keys "test2" '),
|
||||
$e->getMessage()
|
||||
|
Loading…
x
Reference in New Issue
Block a user