From 4c37fa4b41b0cab50a4fc192e9120042dbe36872 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 15 Nov 2021 18:33:35 +0300 Subject: [PATCH] update phpstan to 1.1.2; update php-qrcode to 3.4.1 --- vendor/beberlei/assert/composer.json | 29 +- vendor/beberlei/assert/lib/Assert/Assert.php | 41 +- .../beberlei/assert/lib/Assert/Assertion.php | 1087 ++++++-------- .../assert/lib/Assert/AssertionChain.php | 50 +- .../lib/Assert/AssertionFailedException.php | 11 +- .../lib/Assert/InvalidArgumentException.php | 17 +- .../assert/lib/Assert/LazyAssertion.php | 208 ++- .../lib/Assert/LazyAssertionException.php | 7 +- .../beberlei/assert/lib/Assert/functions.php | 34 +- vendor/beberlei/assert/phpstan-code.neon | 7 - .../php-qrcode/.github/workflows/tests.yml | 84 +- vendor/chillerlan/php-qrcode/.travis.yml | 5 + vendor/chillerlan/php-qrcode/composer.json | 5 +- .../php-qrcode/examples/QRImageWithLogo.php | 12 +- .../php-qrcode/examples/imageWithLogo.php | 13 +- .../php-qrcode/src/Data/QRMatrix.php | 6 +- .../php-qrcode/tests/Output/QRImageTest.php | 10 +- .../php-settings-container/.travis.yml | 4 +- .../php-settings-container/README.md | 13 +- .../php-settings-container/composer.json | 4 +- vendor/composer/ClassLoader.php | 157 +- vendor/composer/LICENSE | 2 - vendor/composer/autoload_classmap.php | 1 - vendor/composer/autoload_real.php | 4 +- vendor/composer/autoload_static.php | 1 - vendor/composer/installed.json | 1307 ++++++++--------- vendor/phpstan/phpstan/README.md | 2 + vendor/phpstan/phpstan/phpstan.phar | Bin 19115160 -> 19215905 bytes vendor/phpstan/phpstan/phpstan.phar.asc | 26 +- 29 files changed, 1397 insertions(+), 1750 deletions(-) diff --git a/vendor/beberlei/assert/composer.json b/vendor/beberlei/assert/composer.json index e11870470..3dd5e7451 100644 --- a/vendor/beberlei/assert/composer.json +++ b/vendor/beberlei/assert/composer.json @@ -19,6 +19,17 @@ "assertion", "validation" ], + "config": { + "sort-packages": true + }, + "require": { + "php": "^7" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "*", + "phpstan/phpstan-shim": "*", + "phpunit/phpunit": ">=6.0.0 <8" + }, "autoload": { "psr-4": { "Assert\\": "lib/Assert" @@ -35,29 +46,11 @@ "tests/Assert/Tests/Fixtures/functions.php" ] }, - "config": { - "sort-packages": true - }, - "require": { - "php": "^7", - "ext-simplexml": "*", - "ext-mbstring": "*", - "ext-ctype": "*", - "ext-json": "*" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan-shim": "*", - "phpunit/phpunit": ">=6.0.0 <8" - }, "scripts": { "assert:generate-docs": "php bin/generate_method_docs.php", "assert:cs-lint": "php-cs-fixer fix --diff -vvv --dry-run", "assert:cs-fix": "php-cs-fixer fix . -vvv || true", "assert:sa-code": "vendor/bin/phpstan analyse --configuration=phpstan-code.neon --no-progress --ansi -l 7 bin lib", "assert:sa-tests": "vendor/bin/phpstan analyse --configuration=phpstan-tests.neon --no-progress --ansi -l 7 tests" - }, - "suggest": { - "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles" } } diff --git a/vendor/beberlei/assert/lib/Assert/Assert.php b/vendor/beberlei/assert/lib/Assert/Assert.php index 6910258d6..39bd9d64d 100644 --- a/vendor/beberlei/assert/lib/Assert/Assert.php +++ b/vendor/beberlei/assert/lib/Assert/Assert.php @@ -31,12 +31,6 @@ abstract class Assert * The invocation of this method starts an assertion chain * that is happening on the passed value. * - * @param mixed $value - * @param string|callable|null $defaultMessage - * @param string|null $defaultPropertyPath - * - * @return AssertionChain - * * @example * * Assert::that($value)->notEmpty()->integer(); @@ -44,8 +38,14 @@ abstract class Assert * * The assertion chain can be stateful, that means be careful when you reuse * it. You should never pass around the chain. + * + * @param mixed $value + * @param string $defaultMessage + * @param string $defaultPropertyPath + * + * @return \Assert\AssertionChain */ - public static function that($value, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain + public static function that($value, $defaultMessage = null, $defaultPropertyPath = null) { $assertionChain = new AssertionChain($value, $defaultMessage, $defaultPropertyPath); @@ -55,13 +55,13 @@ abstract class Assert /** * Start validation on a set of values, returns {@link AssertionChain}. * - * @param mixed $values - * @param string|callable|null $defaultMessage - * @param string|null $defaultPropertyPath + * @param mixed $values + * @param string $defaultMessage + * @param string $defaultPropertyPath * - * @return AssertionChain + * @return \Assert\AssertionChain */ - public static function thatAll($values, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain + public static function thatAll($values, $defaultMessage = null, $defaultPropertyPath = null) { return static::that($values, $defaultMessage, $defaultPropertyPath)->all(); } @@ -69,13 +69,13 @@ abstract class Assert /** * Start validation and allow NULL, returns {@link AssertionChain}. * - * @param mixed $value - * @param string|callable|null $defaultMessage - * @param string|null $defaultPropertyPath + * @param mixed $value + * @param string $defaultMessage + * @param string $defaultPropertyPath * - * @return AssertionChain + * @return \Assert\AssertionChain */ - public static function thatNullOr($value, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain + public static function thatNullOr($value, $defaultMessage = null, $defaultPropertyPath = null) { return static::that($value, $defaultMessage, $defaultPropertyPath)->nullOr(); } @@ -83,14 +83,15 @@ abstract class Assert /** * Create a lazy assertion object. * - * @return LazyAssertion + * @return \Assert\LazyAssertion */ - public static function lazy(): LazyAssertion + public static function lazy() { $lazyAssertion = new LazyAssertion(); return $lazyAssertion ->setAssertClass(\get_called_class()) - ->setExceptionClass(static::$lazyAssertionExceptionClass); + ->setExceptionClass(static::$lazyAssertionExceptionClass) + ; } } diff --git a/vendor/beberlei/assert/lib/Assert/Assertion.php b/vendor/beberlei/assert/lib/Assert/Assertion.php index a8b04e529..0b06b065c 100644 --- a/vendor/beberlei/assert/lib/Assert/Assertion.php +++ b/vendor/beberlei/assert/lib/Assert/Assertion.php @@ -14,121 +14,112 @@ namespace Assert; -use ArrayAccess; use BadMethodCallException; -use Countable; -use DateTime; -use ReflectionClass; -use ReflectionException; -use ResourceBundle; -use SimpleXMLElement; -use Throwable; -use Traversable; /** * Assert library. * * @author Benjamin Eberlei * - * @method static bool allAlnum(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is alphanumeric for all values. - * @method static bool allBase64(string[] $value, string|callable $message = null, string $propertyPath = null) Assert that a constant is defined for all values. - * @method static bool allBetween(mixed[] $value, mixed $lowerLimit, mixed $upperLimit, string|callable $message = null, string $propertyPath = null) Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit for all values. - * @method static bool allBetweenExclusive(mixed[] $value, mixed $lowerLimit, mixed $upperLimit, string|callable $message = null, string $propertyPath = null) Assert that a value is greater than a lower limit, and less than an upper limit for all values. - * @method static bool allBetweenLength(mixed[] $value, int $minLength, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string length is between min and max lengths for all values. - * @method static bool allBoolean(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is php boolean for all values. - * @method static bool allChoice(mixed[] $value, array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices for all values. - * @method static bool allChoicesNotEmpty(array[] $values, array $choices, string|callable $message = null, string $propertyPath = null) Determines if the values array has every choice as key and that this choice has content for all values. - * @method static bool allClassExists(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that the class exists for all values. - * @method static bool allContains(mixed[] $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string contains a sequence of chars for all values. - * @method static bool allCount(array[]|Countable[]|ResourceBundle[]|SimpleXMLElement[] $countable, int $count, string|callable $message = null, string $propertyPath = null) Assert that the count of countable is equal to count for all values. - * @method static bool allDate(string[] $value, string $format, string|callable $message = null, string $propertyPath = null) Assert that date is valid and corresponds to the given format for all values. - * @method static bool allDefined(mixed[] $constant, string|callable $message = null, string $propertyPath = null) Assert that a constant is defined for all values. - * @method static bool allDigit(mixed[] $value, string|callable $message = null, string $propertyPath = null) Validates if an integer or integerish is a digit for all values. - * @method static bool allDirectory(string[] $value, string|callable $message = null, string $propertyPath = null) Assert that a directory exists for all values. - * @method static bool allE164(string[] $value, string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid E164 Phone Number for all values. - * @method static bool allEmail(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is an email address (using input_filter/FILTER_VALIDATE_EMAIL) for all values. - * @method static bool allEndsWith(mixed[] $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string ends with a sequence of chars for all values. - * @method static bool allEq(mixed[] $value, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are equal (using ==) for all values. - * @method static bool allEqArraySubset(mixed[] $value, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that the array contains the subset for all values. - * @method static bool allExtensionLoaded(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that extension is loaded for all values. - * @method static bool allExtensionVersion(string[] $extension, string $operator, mixed $version, string|callable $message = null, string $propertyPath = null) Assert that extension is loaded and a specific version is installed for all values. - * @method static bool allFalse(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that the value is boolean False for all values. - * @method static bool allFile(string[] $value, string|callable $message = null, string $propertyPath = null) Assert that a file exists for all values. - * @method static bool allFloat(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is a php float for all values. - * @method static bool allGreaterOrEqualThan(mixed[] $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is greater or equal than given limit for all values. - * @method static bool allGreaterThan(mixed[] $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is greater than given limit for all values. - * @method static bool allImplementsInterface(mixed[] $class, string $interfaceName, string|callable $message = null, string $propertyPath = null) Assert that the class implements the interface for all values. - * @method static bool allInArray(mixed[] $value, array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices. This is an alias of Assertion::choice() for all values. - * @method static bool allInteger(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is a php integer for all values. - * @method static bool allIntegerish(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is a php integer'ish for all values. - * @method static bool allInterfaceExists(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that the interface exists for all values. - * @method static bool allIp(string[] $value, int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv4 or IPv6 address for all values. - * @method static bool allIpv4(string[] $value, int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv4 address for all values. - * @method static bool allIpv6(string[] $value, int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv6 address for all values. - * @method static bool allIsArray(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is an array for all values. - * @method static bool allIsArrayAccessible(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is an array or an array-accessible object for all values. - * @method static bool allIsCallable(mixed[] $value, string|callable $message = null, string $propertyPath = null) Determines that the provided value is callable for all values. - * @method static bool allIsCountable(array[]|Countable[]|ResourceBundle[]|SimpleXMLElement[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is countable for all values. - * @method static bool allIsInstanceOf(mixed[] $value, string $className, string|callable $message = null, string $propertyPath = null) Assert that value is instance of given class-name for all values. - * @method static bool allIsJsonString(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid json string for all values. - * @method static bool allIsObject(mixed[] $value, string|callable $message = null, string $propertyPath = null) Determines that the provided value is an object for all values. - * @method static bool allIsResource(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is a resource for all values. - * @method static bool allIsTraversable(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is an array or a traversable object for all values. - * @method static bool allKeyExists(mixed[] $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array for all values. - * @method static bool allKeyIsset(mixed[] $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object using isset() for all values. - * @method static bool allKeyNotExists(mixed[] $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key does not exist in an array for all values. - * @method static bool allLength(mixed[] $value, int $length, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string has a given length for all values. - * @method static bool allLessOrEqualThan(mixed[] $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less or equal than given limit for all values. - * @method static bool allLessThan(mixed[] $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less than given limit for all values. - * @method static bool allMax(mixed[] $value, mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that a number is smaller as a given limit for all values. - * @method static bool allMaxCount(array[]|Countable[]|ResourceBundle[]|SimpleXMLElement[] $countable, int $count, string|callable $message = null, string $propertyPath = null) Assert that the countable have at most $count elements for all values. - * @method static bool allMaxLength(mixed[] $value, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string value is not longer than $maxLength chars for all values. - * @method static bool allMethodExists(string[] $value, mixed $object, string|callable $message = null, string $propertyPath = null) Determines that the named method is defined in the provided object for all values. - * @method static bool allMin(mixed[] $value, mixed $minValue, string|callable $message = null, string $propertyPath = null) Assert that a value is at least as big as a given limit for all values. - * @method static bool allMinCount(array[]|Countable[]|ResourceBundle[]|SimpleXMLElement[] $countable, int $count, string|callable $message = null, string $propertyPath = null) Assert that the countable have at least $count elements for all values. - * @method static bool allMinLength(mixed[] $value, int $minLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that a string is at least $minLength chars long for all values. - * @method static bool allNoContent(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is empty for all values. - * @method static bool allNotBlank(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is not blank for all values. - * @method static bool allNotContains(mixed[] $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string does not contains a sequence of chars for all values. - * @method static bool allNotEmpty(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is not empty for all values. - * @method static bool allNotEmptyKey(mixed[] $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object and its value is not empty for all values. - * @method static bool allNotEq(mixed[] $value1, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not equal (using ==) for all values. - * @method static bool allNotInArray(mixed[] $value, array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is not in array of choices for all values. - * @method static bool allNotIsInstanceOf(mixed[] $value, string $className, string|callable $message = null, string $propertyPath = null) Assert that value is not instance of given class-name for all values. - * @method static bool allNotNull(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is not null for all values. - * @method static bool allNotRegex(mixed[] $value, string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value does not match a regex for all values. - * @method static bool allNotSame(mixed[] $value1, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not the same (using ===) for all values. - * @method static bool allNull(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is null for all values. - * @method static bool allNumeric(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is numeric for all values. - * @method static bool allObjectOrClass(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that the value is an object, or a class that exists for all values. - * @method static bool allPhpVersion(string[] $operator, mixed $version, string|callable $message = null, string $propertyPath = null) Assert on PHP version for all values. - * @method static bool allPropertiesExist(mixed[] $value, array $properties, string|callable $message = null, string $propertyPath = null) Assert that the value is an object or class, and that the properties all exist for all values. - * @method static bool allPropertyExists(mixed[] $value, string $property, string|callable $message = null, string $propertyPath = null) Assert that the value is an object or class, and that the property exists for all values. - * @method static bool allRange(mixed[] $value, mixed $minValue, mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that value is in range of numbers for all values. - * @method static bool allReadable(string[] $value, string|callable $message = null, string $propertyPath = null) Assert that the value is something readable for all values. - * @method static bool allRegex(mixed[] $value, string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value matches a regex for all values. - * @method static bool allSame(mixed[] $value, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are the same (using ===) for all values. - * @method static bool allSatisfy(mixed[] $value, callable $callback, string|callable $message = null, string $propertyPath = null) Assert that the provided value is valid according to a callback for all values. - * @method static bool allScalar(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is a PHP scalar for all values. - * @method static bool allStartsWith(mixed[] $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string starts with a sequence of chars for all values. - * @method static bool allString(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is a string for all values. - * @method static bool allSubclassOf(mixed[] $value, string $className, string|callable $message = null, string $propertyPath = null) Assert that value is subclass of given class-name for all values. - * @method static bool allTrue(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that the value is boolean True for all values. - * @method static bool allUrl(mixed[] $value, string|callable $message = null, string $propertyPath = null) Assert that value is an URL for all values. - * @method static bool allUuid(string[] $value, string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid UUID for all values. - * @method static bool allVersion(string[] $version1, string $operator, string $version2, string|callable $message = null, string $propertyPath = null) Assert comparison of two versions for all values. - * @method static bool allWriteable(string[] $value, string|callable $message = null, string $propertyPath = null) Assert that the value is something writeable for all values. + * @method static bool allAlnum(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is alphanumeric for all values. + * @method static bool allBase64(string $value, string|callable $message = null, string $propertyPath = null) Assert that a constant is defined for all values. + * @method static bool allBetween(mixed $value, mixed $lowerLimit, mixed $upperLimit, string $message = null, string $propertyPath = null) Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit for all values. + * @method static bool allBetweenExclusive(mixed $value, mixed $lowerLimit, mixed $upperLimit, string $message = null, string $propertyPath = null) Assert that a value is greater than a lower limit, and less than an upper limit for all values. + * @method static bool allBetweenLength(mixed $value, int $minLength, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string length is between min and max lengths for all values. + * @method static bool allBoolean(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is php boolean for all values. + * @method static bool allChoice(mixed $value, array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices for all values. + * @method static bool allChoicesNotEmpty(array $values, array $choices, string|callable $message = null, string $propertyPath = null) Determines if the values array has every choice as key and that this choice has content for all values. + * @method static bool allClassExists(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that the class exists for all values. + * @method static bool allContains(mixed $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string contains a sequence of chars for all values. + * @method static bool allCount(array|\Countable|\ResourceBundle|\SimpleXMLElement $countable, int $count, string $message = null, string $propertyPath = null) Assert that the count of countable is equal to count for all values. + * @method static bool allDate(string $value, string $format, string|callable $message = null, string $propertyPath = null) Assert that date is valid and corresponds to the given format for all values. + * @method static bool allDefined(mixed $constant, string|callable $message = null, string $propertyPath = null) Assert that a constant is defined for all values. + * @method static bool allDigit(mixed $value, string|callable $message = null, string $propertyPath = null) Validates if an integer or integerish is a digit for all values. + * @method static bool allDirectory(string $value, string|callable $message = null, string $propertyPath = null) Assert that a directory exists for all values. + * @method static bool allE164(string $value, string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid E164 Phone Number for all values. + * @method static bool allEmail(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is an email address (using input_filter/FILTER_VALIDATE_EMAIL) for all values. + * @method static bool allEndsWith(mixed $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string ends with a sequence of chars for all values. + * @method static bool allEq(mixed $value, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are equal (using ==) for all values. + * @method static bool allEqArraySubset(mixed $value, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that the array contains the subset for all values. + * @method static bool allExtensionLoaded(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that extension is loaded for all values. + * @method static bool allExtensionVersion(string $extension, string $operator, mixed $version, string|callable $message = null, string $propertyPath = null) Assert that extension is loaded and a specific version is installed for all values. + * @method static bool allFalse(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that the value is boolean False for all values. + * @method static bool allFile(string $value, string|callable $message = null, string $propertyPath = null) Assert that a file exists for all values. + * @method static bool allFloat(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is a php float for all values. + * @method static bool allGreaterOrEqualThan(mixed $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is greater or equal than given limit for all values. + * @method static bool allGreaterThan(mixed $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is greater than given limit for all values. + * @method static bool allImplementsInterface(mixed $class, string $interfaceName, string|callable $message = null, string $propertyPath = null) Assert that the class implements the interface for all values. + * @method static bool allInArray(mixed $value, array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices. This is an alias of Assertion::choice() for all values. + * @method static bool allInteger(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is a php integer for all values. + * @method static bool allIntegerish(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is a php integer'ish for all values. + * @method static bool allInterfaceExists(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that the interface exists for all values. + * @method static bool allIp(string $value, int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv4 or IPv6 address for all values. + * @method static bool allIpv4(string $value, int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv4 address for all values. + * @method static bool allIpv6(string $value, int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv6 address for all values. + * @method static bool allIsArray(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is an array for all values. + * @method static bool allIsArrayAccessible(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is an array or an array-accessible object for all values. + * @method static bool allIsCallable(mixed $value, string|callable $message = null, string $propertyPath = null) Determines that the provided value is callable for all values. + * @method static bool allIsCountable(array|\Countable|\ResourceBundle|\SimpleXMLElement $value, string|callable $message = null, string $propertyPath = null) Assert that value is countable for all values. + * @method static bool allIsInstanceOf(mixed $value, string $className, string|callable $message = null, string $propertyPath = null) Assert that value is instance of given class-name for all values. + * @method static bool allIsJsonString(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid json string for all values. + * @method static bool allIsObject(mixed $value, string|callable $message = null, string $propertyPath = null) Determines that the provided value is an object for all values. + * @method static bool allIsResource(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is a resource for all values. + * @method static bool allIsTraversable(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is an array or a traversable object for all values. + * @method static bool allKeyExists(mixed $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array for all values. + * @method static bool allKeyIsset(mixed $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object using isset() for all values. + * @method static bool allKeyNotExists(mixed $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key does not exist in an array for all values. + * @method static bool allLength(mixed $value, int $length, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string has a given length for all values. + * @method static bool allLessOrEqualThan(mixed $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less or equal than given limit for all values. + * @method static bool allLessThan(mixed $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less than given limit for all values. + * @method static bool allMax(mixed $value, mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that a number is smaller as a given limit for all values. + * @method static bool allMaxCount(array|\Countable|\ResourceBundle|\SimpleXMLElement $countable, int $count, string $message = null, string $propertyPath = null) Assert that the countable have at most $count elements for all values. + * @method static bool allMaxLength(mixed $value, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string value is not longer than $maxLength chars for all values. + * @method static bool allMethodExists(string $value, mixed $object, string|callable $message = null, string $propertyPath = null) Determines that the named method is defined in the provided object for all values. + * @method static bool allMin(mixed $value, mixed $minValue, string|callable $message = null, string $propertyPath = null) Assert that a value is at least as big as a given limit for all values. + * @method static bool allMinCount(array|\Countable|\ResourceBundle|\SimpleXMLElement $countable, int $count, string $message = null, string $propertyPath = null) Assert that the countable have at least $count elements for all values. + * @method static bool allMinLength(mixed $value, int $minLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that a string is at least $minLength chars long for all values. + * @method static bool allNoContent(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is empty for all values. + * @method static bool allNotBlank(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is not blank for all values. + * @method static bool allNotContains(mixed $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string does not contains a sequence of chars for all values. + * @method static bool allNotEmpty(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is not empty for all values. + * @method static bool allNotEmptyKey(mixed $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object and its value is not empty for all values. + * @method static bool allNotEq(mixed $value1, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not equal (using == ) for all values. + * @method static bool allNotInArray(mixed $value, array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is not in array of choices for all values. + * @method static bool allNotIsInstanceOf(mixed $value, string $className, string|callable $message = null, string $propertyPath = null) Assert that value is not instance of given class-name for all values. + * @method static bool allNotNull(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is not null for all values. + * @method static bool allNotRegex(mixed $value, string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value does not match a regex for all values. + * @method static bool allNotSame(mixed $value1, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not the same (using === ) for all values. + * @method static bool allNull(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is null for all values. + * @method static bool allNumeric(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is numeric for all values. + * @method static bool allObjectOrClass(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that the value is an object, or a class that exists for all values. + * @method static bool allPhpVersion(string $operator, mixed $version, string|callable $message = null, string $propertyPath = null) Assert on PHP version for all values. + * @method static bool allPropertiesExist(mixed $value, array $properties, string|callable $message = null, string $propertyPath = null) Assert that the value is an object or class, and that the properties all exist for all values. + * @method static bool allPropertyExists(mixed $value, string $property, string|callable $message = null, string $propertyPath = null) Assert that the value is an object or class, and that the property exists for all values. + * @method static bool allRange(mixed $value, mixed $minValue, mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that value is in range of numbers for all values. + * @method static bool allReadable(string $value, string|callable $message = null, string $propertyPath = null) Assert that the value is something readable for all values. + * @method static bool allRegex(mixed $value, string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value matches a regex for all values. + * @method static bool allSame(mixed $value, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are the same (using ===) for all values. + * @method static bool allSatisfy(mixed $value, callable $callback, string|callable $message = null, string $propertyPath = null) Assert that the provided value is valid according to a callback for all values. + * @method static bool allScalar(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is a PHP scalar for all values. + * @method static bool allStartsWith(mixed $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string starts with a sequence of chars for all values. + * @method static bool allString(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is a string for all values. + * @method static bool allSubclassOf(mixed $value, string $className, string|callable $message = null, string $propertyPath = null) Assert that value is subclass of given class-name for all values. + * @method static bool allTrue(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that the value is boolean True for all values. + * @method static bool allUrl(mixed $value, string|callable $message = null, string $propertyPath = null) Assert that value is an URL for all values. + * @method static bool allUuid(string $value, string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid UUID for all values. + * @method static bool allVersion(string $version1, string $operator, string $version2, string|callable $message = null, string $propertyPath = null) Assert comparison of two versions for all values. + * @method static bool allWriteable(string $value, string|callable $message = null, string $propertyPath = null) Assert that the value is something writeable for all values. * @method static bool nullOrAlnum(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is alphanumeric or that the value is null. * @method static bool nullOrBase64(string|null $value, string|callable $message = null, string $propertyPath = null) Assert that a constant is defined or that the value is null. - * @method static bool nullOrBetween(mixed|null $value, mixed $lowerLimit, mixed $upperLimit, string|callable $message = null, string $propertyPath = null) Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit or that the value is null. - * @method static bool nullOrBetweenExclusive(mixed|null $value, mixed $lowerLimit, mixed $upperLimit, string|callable $message = null, string $propertyPath = null) Assert that a value is greater than a lower limit, and less than an upper limit or that the value is null. + * @method static bool nullOrBetween(mixed|null $value, mixed $lowerLimit, mixed $upperLimit, string $message = null, string $propertyPath = null) Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit or that the value is null. + * @method static bool nullOrBetweenExclusive(mixed|null $value, mixed $lowerLimit, mixed $upperLimit, string $message = null, string $propertyPath = null) Assert that a value is greater than a lower limit, and less than an upper limit or that the value is null. * @method static bool nullOrBetweenLength(mixed|null $value, int $minLength, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string length is between min and max lengths or that the value is null. * @method static bool nullOrBoolean(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is php boolean or that the value is null. * @method static bool nullOrChoice(mixed|null $value, array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices or that the value is null. * @method static bool nullOrChoicesNotEmpty(array|null $values, array $choices, string|callable $message = null, string $propertyPath = null) Determines if the values array has every choice as key and that this choice has content or that the value is null. * @method static bool nullOrClassExists(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that the class exists or that the value is null. * @method static bool nullOrContains(mixed|null $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string contains a sequence of chars or that the value is null. - * @method static bool nullOrCount(array|Countable|ResourceBundle|SimpleXMLElement|null $countable, int $count, string|callable $message = null, string $propertyPath = null) Assert that the count of countable is equal to count or that the value is null. + * @method static bool nullOrCount(array|\Countable|\ResourceBundle|\SimpleXMLElement|null $countable, int $count, string $message = null, string $propertyPath = null) Assert that the count of countable is equal to count or that the value is null. * @method static bool nullOrDate(string|null $value, string $format, string|callable $message = null, string $propertyPath = null) Assert that date is valid and corresponds to the given format or that the value is null. * @method static bool nullOrDefined(mixed|null $constant, string|callable $message = null, string $propertyPath = null) Assert that a constant is defined or that the value is null. * @method static bool nullOrDigit(mixed|null $value, string|callable $message = null, string $propertyPath = null) Validates if an integer or integerish is a digit or that the value is null. @@ -156,7 +147,7 @@ use Traversable; * @method static bool nullOrIsArray(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is an array or that the value is null. * @method static bool nullOrIsArrayAccessible(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is an array or an array-accessible object or that the value is null. * @method static bool nullOrIsCallable(mixed|null $value, string|callable $message = null, string $propertyPath = null) Determines that the provided value is callable or that the value is null. - * @method static bool nullOrIsCountable(array|Countable|ResourceBundle|SimpleXMLElement|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is countable or that the value is null. + * @method static bool nullOrIsCountable(array|\Countable|\ResourceBundle|\SimpleXMLElement|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is countable or that the value is null. * @method static bool nullOrIsInstanceOf(mixed|null $value, string $className, string|callable $message = null, string $propertyPath = null) Assert that value is instance of given class-name or that the value is null. * @method static bool nullOrIsJsonString(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid json string or that the value is null. * @method static bool nullOrIsObject(mixed|null $value, string|callable $message = null, string $propertyPath = null) Determines that the provided value is an object or that the value is null. @@ -169,23 +160,23 @@ use Traversable; * @method static bool nullOrLessOrEqualThan(mixed|null $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less or equal than given limit or that the value is null. * @method static bool nullOrLessThan(mixed|null $value, mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less than given limit or that the value is null. * @method static bool nullOrMax(mixed|null $value, mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that a number is smaller as a given limit or that the value is null. - * @method static bool nullOrMaxCount(array|Countable|ResourceBundle|SimpleXMLElement|null $countable, int $count, string|callable $message = null, string $propertyPath = null) Assert that the countable have at most $count elements or that the value is null. + * @method static bool nullOrMaxCount(array|\Countable|\ResourceBundle|\SimpleXMLElement|null $countable, int $count, string $message = null, string $propertyPath = null) Assert that the countable have at most $count elements or that the value is null. * @method static bool nullOrMaxLength(mixed|null $value, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string value is not longer than $maxLength chars or that the value is null. * @method static bool nullOrMethodExists(string|null $value, mixed $object, string|callable $message = null, string $propertyPath = null) Determines that the named method is defined in the provided object or that the value is null. * @method static bool nullOrMin(mixed|null $value, mixed $minValue, string|callable $message = null, string $propertyPath = null) Assert that a value is at least as big as a given limit or that the value is null. - * @method static bool nullOrMinCount(array|Countable|ResourceBundle|SimpleXMLElement|null $countable, int $count, string|callable $message = null, string $propertyPath = null) Assert that the countable have at least $count elements or that the value is null. + * @method static bool nullOrMinCount(array|\Countable|\ResourceBundle|\SimpleXMLElement|null $countable, int $count, string $message = null, string $propertyPath = null) Assert that the countable have at least $count elements or that the value is null. * @method static bool nullOrMinLength(mixed|null $value, int $minLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that a string is at least $minLength chars long or that the value is null. * @method static bool nullOrNoContent(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is empty or that the value is null. * @method static bool nullOrNotBlank(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is not blank or that the value is null. * @method static bool nullOrNotContains(mixed|null $string, string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string does not contains a sequence of chars or that the value is null. * @method static bool nullOrNotEmpty(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is not empty or that the value is null. * @method static bool nullOrNotEmptyKey(mixed|null $value, string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object and its value is not empty or that the value is null. - * @method static bool nullOrNotEq(mixed|null $value1, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not equal (using ==) or that the value is null. + * @method static bool nullOrNotEq(mixed|null $value1, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not equal (using == ) or that the value is null. * @method static bool nullOrNotInArray(mixed|null $value, array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is not in array of choices or that the value is null. * @method static bool nullOrNotIsInstanceOf(mixed|null $value, string $className, string|callable $message = null, string $propertyPath = null) Assert that value is not instance of given class-name or that the value is null. * @method static bool nullOrNotNull(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is not null or that the value is null. * @method static bool nullOrNotRegex(mixed|null $value, string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value does not match a regex or that the value is null. - * @method static bool nullOrNotSame(mixed|null $value1, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not the same (using ===) or that the value is null. + * @method static bool nullOrNotSame(mixed|null $value1, mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not the same (using === ) or that the value is null. * @method static bool nullOrNull(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is null or that the value is null. * @method static bool nullOrNumeric(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that value is numeric or that the value is null. * @method static bool nullOrObjectOrClass(mixed|null $value, string|callable $message = null, string $propertyPath = null) Assert that the value is an object, or a class that exists or that the value is null. @@ -298,16 +289,14 @@ class Assertion /** * Assert that two values are equal (using ==). * - * @param mixed $value - * @param mixed $value2 + * @param mixed $value + * @param mixed $value2 * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function eq($value, $value2, $message = null, string $propertyPath = null): bool + public static function eq($value, $value2, $message = null, $propertyPath = null) { if ($value != $value2) { $message = \sprintf( @@ -325,16 +314,14 @@ class Assertion /** * Assert that the array contains the subset. * - * @param mixed $value - * @param mixed $value2 + * @param mixed $value + * @param mixed $value2 * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function eqArraySubset($value, $value2, $message = null, string $propertyPath = null): bool + public static function eqArraySubset($value, $value2, $message = null, $propertyPath = null) { static::isArray($value, $message, $propertyPath); static::isArray($value2, $message, $propertyPath); @@ -348,16 +335,14 @@ class Assertion /** * Assert that two values are the same (using ===). * - * @param mixed $value - * @param mixed $value2 + * @param mixed $value + * @param mixed $value2 * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function same($value, $value2, $message = null, string $propertyPath = null): bool + public static function same($value, $value2, $message = null, $propertyPath = null) { if ($value !== $value2) { $message = \sprintf( @@ -373,18 +358,16 @@ class Assertion } /** - * Assert that two values are not equal (using ==). + * Assert that two values are not equal (using == ). * - * @param mixed $value1 - * @param mixed $value2 + * @param mixed $value1 + * @param mixed $value2 * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function notEq($value1, $value2, $message = null, string $propertyPath = null): bool + public static function notEq($value1, $value2, $message = null, $propertyPath = null) { if ($value1 == $value2) { $message = \sprintf( @@ -399,18 +382,16 @@ class Assertion } /** - * Assert that two values are not the same (using ===). + * Assert that two values are not the same (using === ). * - * @param mixed $value1 - * @param mixed $value2 + * @param mixed $value1 + * @param mixed $value2 * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function notSame($value1, $value2, $message = null, string $propertyPath = null): bool + public static function notSame($value1, $value2, $message = null, $propertyPath = null) { if ($value1 === $value2) { $message = \sprintf( @@ -427,16 +408,14 @@ class Assertion /** * Assert that value is not in array of choices. * - * @param mixed $value - * @param array $choices + * @param mixed $value + * @param array $choices * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function notInArray($value, array $choices, $message = null, string $propertyPath = null): bool + public static function notInArray($value, array $choices, $message = null, $propertyPath = null) { if (true === \in_array($value, $choices)) { $message = \sprintf( @@ -453,15 +432,13 @@ class Assertion /** * Assert that value is a php integer. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function integer($value, $message = null, string $propertyPath = null): bool + public static function integer($value, $message = null, $propertyPath = null) { if (!\is_int($value)) { $message = \sprintf( @@ -478,15 +455,13 @@ class Assertion /** * Assert that value is a php float. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function float($value, $message = null, string $propertyPath = null): bool + public static function float($value, $message = null, $propertyPath = null) { if (!\is_float($value)) { $message = \sprintf( @@ -503,17 +478,15 @@ class Assertion /** * Validates if an integer or integerish is a digit. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function digit($value, $message = null, string $propertyPath = null): bool + public static function digit($value, $message = null, $propertyPath = null) { - if (!\ctype_digit((string)$value)) { + if (!\ctype_digit((string) $value)) { $message = \sprintf( static::generateMessage($message ?: 'Value "%s" is not a digit.'), static::stringify($value) @@ -528,15 +501,13 @@ class Assertion /** * Assert that value is a php integer'ish. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function integerish($value, $message = null, string $propertyPath = null): bool + public static function integerish($value, $message = null, $propertyPath = null) { if ( \is_resource($value) || @@ -566,15 +537,13 @@ class Assertion /** * Assert that value is php boolean. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function boolean($value, $message = null, string $propertyPath = null): bool + public static function boolean($value, $message = null, $propertyPath = null) { if (!\is_bool($value)) { $message = \sprintf( @@ -591,15 +560,13 @@ class Assertion /** * Assert that value is a PHP scalar. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function scalar($value, $message = null, string $propertyPath = null): bool + public static function scalar($value, $message = null, $propertyPath = null) { if (!\is_scalar($value)) { $message = \sprintf( @@ -616,15 +583,13 @@ class Assertion /** * Assert that value is not empty. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function notEmpty($value, $message = null, string $propertyPath = null): bool + public static function notEmpty($value, $message = null, $propertyPath = null) { if (empty($value)) { $message = \sprintf( @@ -641,15 +606,13 @@ class Assertion /** * Assert that value is empty. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function noContent($value, $message = null, string $propertyPath = null): bool + public static function noContent($value, $message = null, $propertyPath = null) { if (!empty($value)) { $message = \sprintf( @@ -666,13 +629,13 @@ class Assertion /** * Assert that value is null. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool */ - public static function null($value, $message = null, string $propertyPath = null): bool + public static function null($value, $message = null, $propertyPath = null) { if (null !== $value) { $message = \sprintf( @@ -689,15 +652,13 @@ class Assertion /** * Assert that value is not null. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function notNull($value, $message = null, string $propertyPath = null): bool + public static function notNull($value, $message = null, $propertyPath = null) { if (null === $value) { $message = \sprintf( @@ -714,15 +675,13 @@ class Assertion /** * Assert that value is a string. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function string($value, $message = null, string $propertyPath = null) + public static function string($value, $message = null, $propertyPath = null) { if (!\is_string($value)) { $message = \sprintf( @@ -740,16 +699,14 @@ class Assertion /** * Assert that value matches a regex. * - * @param mixed $value - * @param string $pattern + * @param mixed $value + * @param string $pattern * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function regex($value, $pattern, $message = null, string $propertyPath = null): bool + public static function regex($value, $pattern, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); @@ -768,16 +725,16 @@ class Assertion /** * Assert that value does not match a regex. * - * @param mixed $value - * @param string $pattern + * @param mixed $value + * @param string $pattern * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool * - * @throws AssertionFailedException + * @throws \Assert\AssertionFailedException */ - public static function notRegex($value, $pattern, $message = null, string $propertyPath = null): bool + public static function notRegex($value, $pattern, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); @@ -796,17 +753,15 @@ class Assertion /** * Assert that string has a given length. * - * @param mixed $value - * @param int $length + * @param mixed $value + * @param int $length * @param string|callable|null $message - * @param string|null $propertyPath - * @param string $encoding + * @param string|null $propertyPath + * @param string $encoding * * @return bool - * - * @throws AssertionFailedException */ - public static function length($value, $length, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function length($value, $length, $message = null, $propertyPath = null, $encoding = 'utf8') { static::string($value, $message, $propertyPath); @@ -827,17 +782,15 @@ class Assertion /** * Assert that a string is at least $minLength chars long. * - * @param mixed $value - * @param int $minLength + * @param mixed $value + * @param int $minLength * @param string|callable|null $message - * @param string|null $propertyPath - * @param string $encoding + * @param string|null $propertyPath + * @param string $encoding * * @return bool - * - * @throws AssertionFailedException */ - public static function minLength($value, $minLength, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function minLength($value, $minLength, $message = null, $propertyPath = null, $encoding = 'utf8') { static::string($value, $message, $propertyPath); @@ -858,17 +811,15 @@ class Assertion /** * Assert that string value is not longer than $maxLength chars. * - * @param mixed $value - * @param int $maxLength + * @param mixed $value + * @param int $maxLength * @param string|callable|null $message - * @param string|null $propertyPath - * @param string $encoding + * @param string|null $propertyPath + * @param string $encoding * * @return bool - * - * @throws AssertionFailedException */ - public static function maxLength($value, $maxLength, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function maxLength($value, $maxLength, $message = null, $propertyPath = null, $encoding = 'utf8') { static::string($value, $message, $propertyPath); @@ -889,18 +840,16 @@ class Assertion /** * Assert that string length is between min and max lengths. * - * @param mixed $value - * @param int $minLength - * @param int $maxLength + * @param mixed $value + * @param int $minLength + * @param int $maxLength * @param string|callable|null $message - * @param string|null $propertyPath - * @param string $encoding + * @param string|null $propertyPath + * @param string $encoding * * @return bool - * - * @throws AssertionFailedException */ - public static function betweenLength($value, $minLength, $maxLength, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function betweenLength($value, $minLength, $maxLength, $message = null, $propertyPath = null, $encoding = 'utf8') { static::string($value, $message, $propertyPath); static::minLength($value, $minLength, $message, $propertyPath, $encoding); @@ -912,17 +861,15 @@ class Assertion /** * Assert that string starts with a sequence of chars. * - * @param mixed $string - * @param string $needle + * @param mixed $string + * @param string $needle * @param string|callable|null $message - * @param string|null $propertyPath - * @param string $encoding + * @param string|null $propertyPath + * @param string $encoding * * @return bool - * - * @throws AssertionFailedException */ - public static function startsWith($string, $needle, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function startsWith($string, $needle, $message = null, $propertyPath = null, $encoding = 'utf8') { static::string($string, $message, $propertyPath); @@ -942,17 +889,15 @@ class Assertion /** * Assert that string ends with a sequence of chars. * - * @param mixed $string - * @param string $needle + * @param mixed $string + * @param string $needle * @param string|callable|null $message - * @param string|null $propertyPath - * @param string $encoding + * @param string|null $propertyPath + * @param string $encoding * * @return bool - * - * @throws AssertionFailedException */ - public static function endsWith($string, $needle, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function endsWith($string, $needle, $message = null, $propertyPath = null, $encoding = 'utf8') { static::string($string, $message, $propertyPath); @@ -974,17 +919,15 @@ class Assertion /** * Assert that string contains a sequence of chars. * - * @param mixed $string - * @param string $needle + * @param mixed $string + * @param string $needle * @param string|callable|null $message - * @param string|null $propertyPath - * @param string $encoding + * @param string|null $propertyPath + * @param string $encoding * * @return bool - * - * @throws AssertionFailedException */ - public static function contains($string, $needle, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function contains($string, $needle, $message = null, $propertyPath = null, $encoding = 'utf8') { static::string($string, $message, $propertyPath); @@ -1004,17 +947,15 @@ class Assertion /** * Assert that string does not contains a sequence of chars. * - * @param mixed $string - * @param string $needle + * @param mixed $string + * @param string $needle * @param string|callable|null $message - * @param string|null $propertyPath - * @param string $encoding + * @param string|null $propertyPath + * @param string $encoding * * @return bool - * - * @throws AssertionFailedException */ - public static function notContains($string, $needle, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function notContains($string, $needle, $message = null, $propertyPath = null, $encoding = 'utf8') { static::string($string, $message, $propertyPath); @@ -1034,16 +975,14 @@ class Assertion /** * Assert that value is in array of choices. * - * @param mixed $value - * @param array $choices + * @param mixed $value + * @param array $choices * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function choice($value, array $choices, $message = null, string $propertyPath = null): bool + public static function choice($value, array $choices, $message = null, $propertyPath = null) { if (!\in_array($value, $choices, true)) { $message = \sprintf( @@ -1063,16 +1002,14 @@ class Assertion * * This is an alias of {@see choice()}. * - * @param mixed $value - * @param array $choices + * @param mixed $value + * @param array $choices * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function inArray($value, array $choices, $message = null, string $propertyPath = null): bool + public static function inArray($value, array $choices, $message = null, $propertyPath = null) { return static::choice($value, $choices, $message, $propertyPath); } @@ -1080,15 +1017,13 @@ class Assertion /** * Assert that value is numeric. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function numeric($value, $message = null, string $propertyPath = null): bool + public static function numeric($value, $message = null, $propertyPath = null) { if (!\is_numeric($value)) { $message = \sprintf( @@ -1105,13 +1040,13 @@ class Assertion /** * Assert that value is a resource. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool */ - public static function isResource($value, $message = null, string $propertyPath = null): bool + public static function isResource($value, $message = null, $propertyPath = null) { if (!\is_resource($value)) { $message = \sprintf( @@ -1128,15 +1063,13 @@ class Assertion /** * Assert that value is an array. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function isArray($value, $message = null, string $propertyPath = null): bool + public static function isArray($value, $message = null, $propertyPath = null) { if (!\is_array($value)) { $message = \sprintf( @@ -1153,17 +1086,15 @@ class Assertion /** * Assert that value is an array or a traversable object. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function isTraversable($value, $message = null, string $propertyPath = null): bool + public static function isTraversable($value, $message = null, $propertyPath = null) { - if (!\is_array($value) && !$value instanceof Traversable) { + if (!\is_array($value) && !$value instanceof \Traversable) { $message = \sprintf( static::generateMessage($message ?: 'Value "%s" is not an array and does not implement Traversable.'), static::stringify($value) @@ -1178,17 +1109,15 @@ class Assertion /** * Assert that value is an array or an array-accessible object. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function isArrayAccessible($value, $message = null, string $propertyPath = null): bool + public static function isArrayAccessible($value, $message = null, $propertyPath = null) { - if (!\is_array($value) && !$value instanceof ArrayAccess) { + if (!\is_array($value) && !$value instanceof \ArrayAccess) { $message = \sprintf( static::generateMessage($message ?: 'Value "%s" is not an array and does not implement ArrayAccess.'), static::stringify($value) @@ -1203,20 +1132,18 @@ class Assertion /** * Assert that value is countable. * - * @param array|Countable|ResourceBundle|SimpleXMLElement $value - * @param string|callable|null $message - * @param string|null $propertyPath + * @param array|\Countable|\ResourceBundle|\SimpleXMLElement $value + * @param string|callable|null $message + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function isCountable($value, $message = null, string $propertyPath = null): bool + public static function isCountable($value, $message = null, $propertyPath = null) { if (\function_exists('is_countable')) { $assert = \is_countable($value); } else { - $assert = \is_array($value) || $value instanceof Countable || $value instanceof ResourceBundle || $value instanceof SimpleXMLElement; + $assert = \is_array($value) || $value instanceof \Countable || $value instanceof \ResourceBundle || $value instanceof \SimpleXMLElement; } if (!$assert) { @@ -1234,16 +1161,14 @@ class Assertion /** * Assert that key exists in an array. * - * @param mixed $value - * @param string|int $key + * @param mixed $value + * @param string|int $key * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function keyExists($value, $key, $message = null, string $propertyPath = null): bool + public static function keyExists($value, $key, $message = null, $propertyPath = null) { static::isArray($value, $message, $propertyPath); @@ -1262,16 +1187,14 @@ class Assertion /** * Assert that key does not exist in an array. * - * @param mixed $value - * @param string|int $key + * @param mixed $value + * @param string|int $key * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function keyNotExists($value, $key, $message = null, string $propertyPath = null): bool + public static function keyNotExists($value, $key, $message = null, $propertyPath = null) { static::isArray($value, $message, $propertyPath); @@ -1290,16 +1213,14 @@ class Assertion /** * Assert that key exists in an array/array-accessible object using isset(). * - * @param mixed $value - * @param string|int $key + * @param mixed $value + * @param string|int $key * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function keyIsset($value, $key, $message = null, string $propertyPath = null): bool + public static function keyIsset($value, $key, $message = null, $propertyPath = null) { static::isArrayAccessible($value, $message, $propertyPath); @@ -1318,16 +1239,14 @@ class Assertion /** * Assert that key exists in an array/array-accessible object and its value is not empty. * - * @param mixed $value - * @param string|int $key + * @param mixed $value + * @param string|int $key * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function notEmptyKey($value, $key, $message = null, string $propertyPath = null): bool + public static function notEmptyKey($value, $key, $message = null, $propertyPath = null) { static::keyIsset($value, $key, $message, $propertyPath); static::notEmpty($value[$key], $message, $propertyPath); @@ -1338,15 +1257,13 @@ class Assertion /** * Assert that value is not blank. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function notBlank($value, $message = null, string $propertyPath = null): bool + public static function notBlank($value, $message = null, $propertyPath = null) { if (false === $value || (empty($value) && '0' != $value) || (\is_string($value) && '' === \trim($value))) { $message = \sprintf( @@ -1363,16 +1280,14 @@ class Assertion /** * Assert that value is instance of given class-name. * - * @param mixed $value - * @param string $className + * @param mixed $value + * @param string $className * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function isInstanceOf($value, $className, $message = null, string $propertyPath = null): bool + public static function isInstanceOf($value, $className, $message = null, $propertyPath = null) { if (!($value instanceof $className)) { $message = \sprintf( @@ -1390,16 +1305,14 @@ class Assertion /** * Assert that value is not instance of given class-name. * - * @param mixed $value - * @param string $className + * @param mixed $value + * @param string $className * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function notIsInstanceOf($value, $className, $message = null, string $propertyPath = null): bool + public static function notIsInstanceOf($value, $className, $message = null, $propertyPath = null) { if ($value instanceof $className) { $message = \sprintf( @@ -1417,16 +1330,14 @@ class Assertion /** * Assert that value is subclass of given class-name. * - * @param mixed $value - * @param string $className + * @param mixed $value + * @param string $className * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function subclassOf($value, $className, $message = null, string $propertyPath = null): bool + public static function subclassOf($value, $className, $message = null, $propertyPath = null) { if (!\is_subclass_of($value, $className)) { $message = \sprintf( @@ -1444,17 +1355,15 @@ class Assertion /** * Assert that value is in range of numbers. * - * @param mixed $value - * @param mixed $minValue - * @param mixed $maxValue + * @param mixed $value + * @param mixed $minValue + * @param mixed $maxValue * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function range($value, $minValue, $maxValue, $message = null, string $propertyPath = null): bool + public static function range($value, $minValue, $maxValue, $message = null, $propertyPath = null) { static::numeric($value, $message, $propertyPath); @@ -1475,16 +1384,14 @@ class Assertion /** * Assert that a value is at least as big as a given limit. * - * @param mixed $value - * @param mixed $minValue + * @param mixed $value + * @param mixed $minValue * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function min($value, $minValue, $message = null, string $propertyPath = null): bool + public static function min($value, $minValue, $message = null, $propertyPath = null) { static::numeric($value, $message, $propertyPath); @@ -1504,16 +1411,14 @@ class Assertion /** * Assert that a number is smaller as a given limit. * - * @param mixed $value - * @param mixed $maxValue + * @param mixed $value + * @param mixed $maxValue * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function max($value, $maxValue, $message = null, string $propertyPath = null): bool + public static function max($value, $maxValue, $message = null, $propertyPath = null) { static::numeric($value, $message, $propertyPath); @@ -1533,15 +1438,13 @@ class Assertion /** * Assert that a file exists. * - * @param string $value + * @param string $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function file($value, $message = null, string $propertyPath = null): bool + public static function file($value, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); static::notEmpty($value, $message, $propertyPath); @@ -1561,15 +1464,13 @@ class Assertion /** * Assert that a directory exists. * - * @param string $value + * @param string $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function directory($value, $message = null, string $propertyPath = null): bool + public static function directory($value, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); @@ -1588,15 +1489,13 @@ class Assertion /** * Assert that the value is something readable. * - * @param string $value + * @param string $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function readable($value, $message = null, string $propertyPath = null): bool + public static function readable($value, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); @@ -1615,15 +1514,13 @@ class Assertion /** * Assert that the value is something writeable. * - * @param string $value + * @param string $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function writeable($value, $message = null, string $propertyPath = null): bool + public static function writeable($value, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); @@ -1642,15 +1539,13 @@ class Assertion /** * Assert that value is an email address (using input_filter/FILTER_VALIDATE_EMAIL). * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function email($value, $message = null, string $propertyPath = null): bool + public static function email($value, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); @@ -1671,18 +1566,16 @@ class Assertion * * This code snipped was taken from the Symfony project and modified to the special demands of this method. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool * - * @throws AssertionFailedException - * * @see https://github.com/symfony/Validator/blob/master/Constraints/UrlValidator.php * @see https://github.com/symfony/Validator/blob/master/Constraints/Url.php */ - public static function url($value, $message = null, string $propertyPath = null): bool + public static function url($value, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); @@ -1723,19 +1616,17 @@ class Assertion /** * Assert that value is alphanumeric. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function alnum($value, $message = null, string $propertyPath = null): bool + public static function alnum($value, $message = null, $propertyPath = null) { try { static::regex($value, '(^([a-zA-Z]{1}[a-zA-Z0-9]*)$)', $message, $propertyPath); - } catch (Throwable $e) { + } catch (\Throwable $e) { $message = \sprintf( static::generateMessage($message ?: 'Value "%s" is not alphanumeric, starting with letters and containing only letters and numbers.'), static::stringify($value) @@ -1750,15 +1641,13 @@ class Assertion /** * Assert that the value is boolean True. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function true($value, $message = null, string $propertyPath = null): bool + public static function true($value, $message = null, $propertyPath = null) { if (true !== $value) { $message = \sprintf( @@ -1775,15 +1664,13 @@ class Assertion /** * Assert that the value is boolean False. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function false($value, $message = null, string $propertyPath = null): bool + public static function false($value, $message = null, $propertyPath = null) { if (false !== $value) { $message = \sprintf( @@ -1800,15 +1687,13 @@ class Assertion /** * Assert that the class exists. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function classExists($value, $message = null, string $propertyPath = null): bool + public static function classExists($value, $message = null, $propertyPath = null) { if (!\class_exists($value)) { $message = \sprintf( @@ -1825,15 +1710,13 @@ class Assertion /** * Assert that the interface exists. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function interfaceExists($value, $message = null, string $propertyPath = null): bool + public static function interfaceExists($value, $message = null, $propertyPath = null) { if (!\interface_exists($value)) { $message = \sprintf( @@ -1850,19 +1733,17 @@ class Assertion /** * Assert that the class implements the interface. * - * @param mixed $class - * @param string $interfaceName + * @param mixed $class + * @param string $interfaceName * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function implementsInterface($class, $interfaceName, $message = null, string $propertyPath = null): bool + public static function implementsInterface($class, $interfaceName, $message = null, $propertyPath = null) { try { - $reflection = new ReflectionClass($class); + $reflection = new \ReflectionClass($class); if (!$reflection->implementsInterface($interfaceName)) { $message = \sprintf( static::generateMessage($message ?: 'Class "%s" does not implement interface "%s".'), @@ -1872,7 +1753,7 @@ class Assertion throw static::createException($class, $message, static::INTERFACE_NOT_IMPLEMENTED, $propertyPath, ['interface' => $interfaceName]); } - } catch (ReflectionException $e) { + } catch (\ReflectionException $e) { $message = \sprintf( static::generateMessage($message ?: 'Class "%s" failed reflection.'), static::stringify($class) @@ -1892,15 +1773,13 @@ class Assertion * content afterwards, just to decode and check for yourself instead * of using this assertion. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function isJsonString($value, $message = null, string $propertyPath = null): bool + public static function isJsonString($value, $message = null, $propertyPath = null) { if (null === \json_decode($value) && JSON_ERROR_NONE !== \json_last_error()) { $message = \sprintf( @@ -1919,15 +1798,13 @@ class Assertion * * Uses code from {@link https://github.com/ramsey/uuid} that is MIT licensed. * - * @param string $value + * @param string $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function uuid($value, $message = null, string $propertyPath = null): bool + public static function uuid($value, $message = null, $propertyPath = null) { $value = \str_replace(['urn:', 'uuid:', '{', '}'], '', $value); @@ -1952,15 +1829,13 @@ class Assertion * * @see https://en.wikipedia.org/wiki/E.164 * - * @param string $value + * @param string $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function e164($value, $message = null, string $propertyPath = null): bool + public static function e164($value, $message = null, $propertyPath = null) { if (!\preg_match('/^\+?[1-9]\d{1,14}$/', $value)) { $message = \sprintf( @@ -1977,16 +1852,14 @@ class Assertion /** * Assert that the count of countable is equal to count. * - * @param array|Countable|ResourceBundle|SimpleXMLElement $countable - * @param int $count - * @param string|callable|null $message - * @param string|null $propertyPath + * @param array|\Countable|\ResourceBundle|\SimpleXMLElement $countable + * @param int $count + * @param string|null $message + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function count($countable, $count, $message = null, string $propertyPath = null): bool + public static function count($countable, $count, $message = null, $propertyPath = null) { if ($count !== \count($countable)) { $message = \sprintf( @@ -2004,16 +1877,14 @@ class Assertion /** * Assert that the countable have at least $count elements. * - * @param array|Countable|ResourceBundle|SimpleXMLElement $countable - * @param int $count - * @param string|callable|null $message - * @param string|null $propertyPath + * @param array|\Countable|\ResourceBundle|\SimpleXMLElement $countable + * @param int $count + * @param string|null $message + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function minCount($countable, $count, $message = null, string $propertyPath = null): bool + public static function minCount($countable, $count, $message = null, $propertyPath = null) { if ($count > \count($countable)) { $message = \sprintf( @@ -2031,16 +1902,14 @@ class Assertion /** * Assert that the countable have at most $count elements. * - * @param array|Countable|ResourceBundle|SimpleXMLElement $countable - * @param int $count - * @param string|callable|null $message - * @param string|null $propertyPath + * @param array|\Countable|\ResourceBundle|\SimpleXMLElement $countable + * @param int $count + * @param string|null $message + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function maxCount($countable, $count, $message = null, string $propertyPath = null): bool + public static function maxCount($countable, $count, $message = null, $propertyPath = null) { if ($count < \count($countable)) { $message = \sprintf( @@ -2061,11 +1930,9 @@ class Assertion * - "all" delegation. * * @param string $method - * @param array $args + * @param array $args * * @return bool|mixed - * - * @throws AssertionFailedException */ public static function __callStatic($method, $args) { @@ -2107,16 +1974,14 @@ class Assertion /** * Determines if the values array has every choice as key and that this choice has content. * - * @param array $values - * @param array $choices + * @param array $values + * @param array $choices * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function choicesNotEmpty(array $values, array $choices, $message = null, string $propertyPath = null): bool + public static function choicesNotEmpty(array $values, array $choices, $message = null, $propertyPath = null) { static::notEmpty($values, $message, $propertyPath); @@ -2130,16 +1995,14 @@ class Assertion /** * Determines that the named method is defined in the provided object. * - * @param string $value - * @param mixed $object + * @param string $value + * @param mixed $object * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function methodExists($value, $object, $message = null, string $propertyPath = null): bool + public static function methodExists($value, $object, $message = null, $propertyPath = null) { static::isObject($object, $message, $propertyPath); @@ -2158,15 +2021,13 @@ class Assertion /** * Determines that the provided value is an object. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function isObject($value, $message = null, string $propertyPath = null): bool + public static function isObject($value, $message = null, $propertyPath = null) { if (!\is_object($value)) { $message = \sprintf( @@ -2183,16 +2044,14 @@ class Assertion /** * Determines if the value is less than given limit. * - * @param mixed $value - * @param mixed $limit + * @param mixed $value + * @param mixed $limit * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function lessThan($value, $limit, $message = null, string $propertyPath = null): bool + public static function lessThan($value, $limit, $message = null, $propertyPath = null) { if ($value >= $limit) { $message = \sprintf( @@ -2210,16 +2069,14 @@ class Assertion /** * Determines if the value is less or equal than given limit. * - * @param mixed $value - * @param mixed $limit + * @param mixed $value + * @param mixed $limit * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function lessOrEqualThan($value, $limit, $message = null, string $propertyPath = null): bool + public static function lessOrEqualThan($value, $limit, $message = null, $propertyPath = null) { if ($value > $limit) { $message = \sprintf( @@ -2237,16 +2094,14 @@ class Assertion /** * Determines if the value is greater than given limit. * - * @param mixed $value - * @param mixed $limit + * @param mixed $value + * @param mixed $limit * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function greaterThan($value, $limit, $message = null, string $propertyPath = null): bool + public static function greaterThan($value, $limit, $message = null, $propertyPath = null) { if ($value <= $limit) { $message = \sprintf( @@ -2264,16 +2119,14 @@ class Assertion /** * Determines if the value is greater or equal than given limit. * - * @param mixed $value - * @param mixed $limit + * @param mixed $value + * @param mixed $limit * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function greaterOrEqualThan($value, $limit, $message = null, string $propertyPath = null): bool + public static function greaterOrEqualThan($value, $limit, $message = null, $propertyPath = null) { if ($value < $limit) { $message = \sprintf( @@ -2291,17 +2144,15 @@ class Assertion /** * Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit. * - * @param mixed $value - * @param mixed $lowerLimit - * @param mixed $upperLimit - * @param string|callable|null $message + * @param mixed $value + * @param mixed $lowerLimit + * @param mixed $upperLimit + * @param string $message * @param string $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function between($value, $lowerLimit, $upperLimit, $message = null, string $propertyPath = null): bool + public static function between($value, $lowerLimit, $upperLimit, $message = null, $propertyPath = null) { if ($lowerLimit > $value || $value > $upperLimit) { $message = \sprintf( @@ -2320,17 +2171,15 @@ class Assertion /** * Assert that a value is greater than a lower limit, and less than an upper limit. * - * @param mixed $value - * @param mixed $lowerLimit - * @param mixed $upperLimit - * @param string|callable|null $message + * @param mixed $value + * @param mixed $lowerLimit + * @param mixed $upperLimit + * @param string $message * @param string $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function betweenExclusive($value, $lowerLimit, $upperLimit, $message = null, string $propertyPath = null): bool + public static function betweenExclusive($value, $lowerLimit, $upperLimit, $message = null, $propertyPath = null) { if ($lowerLimit >= $value || $value >= $upperLimit) { $message = \sprintf( @@ -2349,15 +2198,13 @@ class Assertion /** * Assert that extension is loaded. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function extensionLoaded($value, $message = null, string $propertyPath = null): bool + public static function extensionLoaded($value, $message = null, $propertyPath = null) { if (!\extension_loaded($value)) { $message = \sprintf( @@ -2374,24 +2221,22 @@ class Assertion /** * Assert that date is valid and corresponds to the given format. * - * @param string $value - * @param string $format supports all of the options date(), except for the following: - * N, w, W, t, L, o, B, a, A, g, h, I, O, P, Z, c, r + * @param string $value + * @param string $format supports all of the options date(), except for the following: + * N, w, W, t, L, o, B, a, A, g, h, I, O, P, Z, c, r * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool * - * @throws AssertionFailedException - * * @see http://php.net/manual/function.date.php#refsect1-function.date-parameters */ - public static function date($value, $format, $message = null, string $propertyPath = null): bool + public static function date($value, $format, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); static::string($format, $message, $propertyPath); - $dateTime = DateTime::createFromFormat('!'.$format, $value); + $dateTime = \DateTime::createFromFormat('!'.$format, $value); if (false === $dateTime || $value !== $dateTime->format($format)) { $message = \sprintf( @@ -2409,15 +2254,13 @@ class Assertion /** * Assert that the value is an object, or a class that exists. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function objectOrClass($value, $message = null, string $propertyPath = null): bool + public static function objectOrClass($value, $message = null, $propertyPath = null) { if (!\is_object($value)) { static::classExists($value, $message, $propertyPath); @@ -2429,16 +2272,14 @@ class Assertion /** * Assert that the value is an object or class, and that the property exists. * - * @param mixed $value - * @param string $property + * @param mixed $value + * @param string $property * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function propertyExists($value, $property, $message = null, string $propertyPath = null): bool + public static function propertyExists($value, $property, $message = null, $propertyPath = null) { static::objectOrClass($value); @@ -2458,16 +2299,14 @@ class Assertion /** * Assert that the value is an object or class, and that the properties all exist. * - * @param mixed $value - * @param array $properties + * @param mixed $value + * @param array $properties * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function propertiesExist($value, array $properties, $message = null, string $propertyPath = null): bool + public static function propertiesExist($value, array $properties, $message = null, $propertyPath = null) { static::objectOrClass($value); static::allString($properties, $message, $propertyPath); @@ -2495,17 +2334,15 @@ class Assertion /** * Assert comparison of two versions. * - * @param string $version1 - * @param string $operator - * @param string $version2 + * @param string $version1 + * @param string $operator + * @param string $version2 * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function version($version1, $operator, $version2, $message = null, string $propertyPath = null): bool + public static function version($version1, $operator, $version2, $message = null, $propertyPath = null) { static::notEmpty($operator, 'versionCompare operator is required and cannot be empty.'); @@ -2526,16 +2363,14 @@ class Assertion /** * Assert on PHP version. * - * @param string $operator - * @param mixed $version + * @param string $operator + * @param mixed $version * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function phpVersion($operator, $version, $message = null, string $propertyPath = null): bool + public static function phpVersion($operator, $version, $message = null, $propertyPath = null) { static::defined('PHP_VERSION'); @@ -2545,17 +2380,15 @@ class Assertion /** * Assert that extension is loaded and a specific version is installed. * - * @param string $extension - * @param string $operator - * @param mixed $version + * @param string $extension + * @param string $operator + * @param mixed $version * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function extensionVersion($extension, $operator, $version, $message = null, string $propertyPath = null): bool + public static function extensionVersion($extension, $operator, $version, $message = null, $propertyPath = null) { static::extensionLoaded($extension, $message, $propertyPath); @@ -2565,15 +2398,13 @@ class Assertion /** * Determines that the provided value is callable. * - * @param mixed $value + * @param mixed $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function isCallable($value, $message = null, string $propertyPath = null): bool + public static function isCallable($value, $message = null, $propertyPath = null) { if (!\is_callable($value)) { $message = \sprintf( @@ -2592,16 +2423,14 @@ class Assertion * * If the callback returns `false` the assertion will fail. * - * @param mixed $value - * @param callable $callback + * @param mixed $value + * @param callable $callback * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function satisfy($value, $callback, $message = null, string $propertyPath = null): bool + public static function satisfy($value, $callback, $message = null, $propertyPath = null) { static::isCallable($callback); @@ -2621,18 +2450,16 @@ class Assertion * Assert that value is an IPv4 or IPv6 address * (using input_filter/FILTER_VALIDATE_IP). * - * @param string $value - * @param int|null $flag + * @param string $value + * @param int|null $flag * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool * - * @throws AssertionFailedException - * * @see http://php.net/manual/filter.filters.flags.php */ - public static function ip($value, $flag = null, $message = null, string $propertyPath = null): bool + public static function ip($value, $flag = null, $message = null, $propertyPath = null) { static::string($value, $message, $propertyPath); if (!\filter_var($value, FILTER_VALIDATE_IP, $flag)) { @@ -2650,18 +2477,16 @@ class Assertion * Assert that value is an IPv4 address * (using input_filter/FILTER_VALIDATE_IP). * - * @param string $value - * @param int|null $flag + * @param string $value + * @param int|null $flag * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool * - * @throws AssertionFailedException - * * @see http://php.net/manual/filter.filters.flags.php */ - public static function ipv4($value, $flag = null, $message = null, string $propertyPath = null): bool + public static function ipv4($value, $flag = null, $message = null, $propertyPath = null) { static::ip($value, $flag | FILTER_FLAG_IPV4, static::generateMessage($message ?: 'Value "%s" was expected to be a valid IPv4 address.'), $propertyPath); @@ -2672,18 +2497,16 @@ class Assertion * Assert that value is an IPv6 address * (using input_filter/FILTER_VALIDATE_IP). * - * @param string $value - * @param int|null $flag + * @param string $value + * @param int|null $flag * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool * - * @throws AssertionFailedException - * * @see http://php.net/manual/filter.filters.flags.php */ - public static function ipv6($value, $flag = null, $message = null, string $propertyPath = null): bool + public static function ipv6($value, $flag = null, $message = null, $propertyPath = null) { static::ip($value, $flag | FILTER_FLAG_IPV6, static::generateMessage($message ?: 'Value "%s" was expected to be a valid IPv6 address.'), $propertyPath); @@ -2693,13 +2516,13 @@ class Assertion /** * Assert that a constant is defined. * - * @param mixed $constant + * @param mixed $constant * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool */ - public static function defined($constant, $message = null, string $propertyPath = null): bool + public static function defined($constant, $message = null, $propertyPath = null) { if (!\defined($constant)) { $message = \sprintf(static::generateMessage($message ?: 'Value "%s" expected to be a defined constant.'), $constant); @@ -2713,15 +2536,13 @@ class Assertion /** * Assert that a constant is defined. * - * @param string $value + * @param string $value * @param string|callable|null $message - * @param string|null $propertyPath + * @param string|null $propertyPath * * @return bool - * - * @throws AssertionFailedException */ - public static function base64($value, $message = null, string $propertyPath = null): bool + public static function base64($value, $message = null, $propertyPath = null) { if (false === \base64_decode($value, true)) { $message = \sprintf(static::generateMessage($message ?: 'Value "%s" is not a valid base64 string.'), $value); @@ -2737,11 +2558,11 @@ class Assertion * They are returned from this method so that the stack trace still shows * the assertions method. * - * @param mixed $value - * @param string|callable|null $message - * @param int $code - * @param string|null $propertyPath - * @param array $constraints + * @param mixed $value + * @param string|callable $message + * @param int $code + * @param string|null $propertyPath + * @param array $constraints * * @return mixed */ @@ -2759,17 +2580,17 @@ class Assertion * * @return string */ - protected static function stringify($value): string + protected static function stringify($value) { $result = \gettype($value); if (\is_bool($value)) { $result = $value ? '' : ''; } elseif (\is_scalar($value)) { - $val = (string)$value; + $val = (string) $value; - if (\mb_strlen($val) > 100) { - $val = \mb_substr($val, 0, 97).'...'; + if (\strlen($val) > 100) { + $val = \substr($val, 0, 97).'...'; } $result = $val; @@ -2789,7 +2610,7 @@ class Assertion /** * Generate the message. * - * @param string|callable|null $message + * @param string|callable $message * * @return string */ @@ -2801,7 +2622,7 @@ class Assertion $parameters = []; try { - $reflection = new ReflectionClass($traces[1]['class']); + $reflection = new \ReflectionClass($traces[1]['class']); $method = $reflection->getMethod($traces[1]['function']); foreach ($method->getParameters() as $index => $parameter) { if ('message' !== $parameter->getName()) { @@ -2815,11 +2636,11 @@ class Assertion $message = \call_user_func_array($message, [$parameters]); } // @codeCoverageIgnoreStart - catch (Throwable $exception) { + catch (\Throwable $exception) { $message = \sprintf('Unable to generate message : %s', $exception->getMessage()); } // @codeCoverageIgnoreEnd } - return (string)$message; + return (string) $message; } } diff --git a/vendor/beberlei/assert/lib/Assert/AssertionChain.php b/vendor/beberlei/assert/lib/Assert/AssertionChain.php index dbb6e839b..4d3ca1c01 100644 --- a/vendor/beberlei/assert/lib/Assert/AssertionChain.php +++ b/vendor/beberlei/assert/lib/Assert/AssertionChain.php @@ -24,15 +24,15 @@ use ReflectionClass; * * @method AssertionChain alnum(string|callable $message = null, string $propertyPath = null) Assert that value is alphanumeric. * @method AssertionChain base64(string|callable $message = null, string $propertyPath = null) Assert that a constant is defined. - * @method AssertionChain between(mixed $lowerLimit, mixed $upperLimit, string|callable $message = null, string $propertyPath = null) Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit. - * @method AssertionChain betweenExclusive(mixed $lowerLimit, mixed $upperLimit, string|callable $message = null, string $propertyPath = null) Assert that a value is greater than a lower limit, and less than an upper limit. + * @method AssertionChain between(mixed $lowerLimit, mixed $upperLimit, string $message = null, string $propertyPath = null) Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit. + * @method AssertionChain betweenExclusive(mixed $lowerLimit, mixed $upperLimit, string $message = null, string $propertyPath = null) Assert that a value is greater than a lower limit, and less than an upper limit. * @method AssertionChain betweenLength(int $minLength, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string length is between min and max lengths. * @method AssertionChain boolean(string|callable $message = null, string $propertyPath = null) Assert that value is php boolean. * @method AssertionChain choice(array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices. * @method AssertionChain choicesNotEmpty(array $choices, string|callable $message = null, string $propertyPath = null) Determines if the values array has every choice as key and that this choice has content. * @method AssertionChain classExists(string|callable $message = null, string $propertyPath = null) Assert that the class exists. * @method AssertionChain contains(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string contains a sequence of chars. - * @method AssertionChain count(int $count, string|callable $message = null, string $propertyPath = null) Assert that the count of countable is equal to count. + * @method AssertionChain count(int $count, string $message = null, string $propertyPath = null) Assert that the count of countable is equal to count. * @method AssertionChain date(string $format, string|callable $message = null, string $propertyPath = null) Assert that date is valid and corresponds to the given format. * @method AssertionChain defined(string|callable $message = null, string $propertyPath = null) Assert that a constant is defined. * @method AssertionChain digit(string|callable $message = null, string $propertyPath = null) Validates if an integer or integerish is a digit. @@ -73,23 +73,23 @@ use ReflectionClass; * @method AssertionChain lessOrEqualThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less or equal than given limit. * @method AssertionChain lessThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less than given limit. * @method AssertionChain max(mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that a number is smaller as a given limit. - * @method AssertionChain maxCount(int $count, string|callable $message = null, string $propertyPath = null) Assert that the countable have at most $count elements. + * @method AssertionChain maxCount(int $count, string $message = null, string $propertyPath = null) Assert that the countable have at most $count elements. * @method AssertionChain maxLength(int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string value is not longer than $maxLength chars. * @method AssertionChain methodExists(mixed $object, string|callable $message = null, string $propertyPath = null) Determines that the named method is defined in the provided object. * @method AssertionChain min(mixed $minValue, string|callable $message = null, string $propertyPath = null) Assert that a value is at least as big as a given limit. - * @method AssertionChain minCount(int $count, string|callable $message = null, string $propertyPath = null) Assert that the countable have at least $count elements. + * @method AssertionChain minCount(int $count, string $message = null, string $propertyPath = null) Assert that the countable have at least $count elements. * @method AssertionChain minLength(int $minLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that a string is at least $minLength chars long. * @method AssertionChain noContent(string|callable $message = null, string $propertyPath = null) Assert that value is empty. * @method AssertionChain notBlank(string|callable $message = null, string $propertyPath = null) Assert that value is not blank. * @method AssertionChain notContains(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string does not contains a sequence of chars. * @method AssertionChain notEmpty(string|callable $message = null, string $propertyPath = null) Assert that value is not empty. * @method AssertionChain notEmptyKey(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object and its value is not empty. - * @method AssertionChain notEq(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not equal (using ==). + * @method AssertionChain notEq(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not equal (using == ). * @method AssertionChain notInArray(array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is not in array of choices. * @method AssertionChain notIsInstanceOf(string $className, string|callable $message = null, string $propertyPath = null) Assert that value is not instance of given class-name. * @method AssertionChain notNull(string|callable $message = null, string $propertyPath = null) Assert that value is not null. * @method AssertionChain notRegex(string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value does not match a regex. - * @method AssertionChain notSame(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not the same (using ===). + * @method AssertionChain notSame(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not the same (using === ). * @method AssertionChain null(string|callable $message = null, string $propertyPath = null) Assert that value is null. * @method AssertionChain numeric(string|callable $message = null, string $propertyPath = null) Assert that value is numeric. * @method AssertionChain objectOrClass(string|callable $message = null, string $propertyPath = null) Assert that the value is an object, or a class that exists. @@ -113,19 +113,8 @@ use ReflectionClass; */ class AssertionChain { - /** - * @var mixed - */ private $value; - - /** - * @var string|callable|null - */ private $defaultMessage; - - /** - * @var string|null - */ private $defaultPropertyPath; /** @@ -145,14 +134,7 @@ class AssertionChain /** @var string|Assertion Class to use for assertion calls */ private $assertionClassName = 'Assert\Assertion'; - /** - * AssertionChain constructor. - * - * @param mixed $value - * @param string|callable|null $defaultMessage - * @param string|null $defaultPropertyPath - */ - public function __construct($value, $defaultMessage = null, string $defaultPropertyPath = null) + public function __construct($value, $defaultMessage = null, $defaultPropertyPath = null) { $this->value = $value; $this->defaultMessage = $defaultMessage; @@ -163,11 +145,11 @@ class AssertionChain * Call assertion on the current value in the chain. * * @param string $methodName - * @param array $args + * @param array $args * - * @return AssertionChain + * @return \Assert\AssertionChain */ - public function __call($methodName, $args): AssertionChain + public function __call($methodName, $args) { if (true === $this->alwaysValid) { return $this; @@ -209,9 +191,9 @@ class AssertionChain /** * Switch chain into validation mode for an array of values. * - * @return AssertionChain + * @return \Assert\AssertionChain */ - public function all(): AssertionChain + public function all() { $this->all = true; @@ -221,9 +203,9 @@ class AssertionChain /** * Switch chain into mode allowing nulls, ignoring further assertions. * - * @return AssertionChain + * @return \Assert\AssertionChain */ - public function nullOr(): AssertionChain + public function nullOr() { if (null === $this->value) { $this->alwaysValid = true; @@ -237,7 +219,7 @@ class AssertionChain * * @return $this */ - public function setAssertionClassName($className): AssertionChain + public function setAssertionClassName($className) { if (!\is_string($className)) { throw new LogicException('Exception class name must be passed as a string'); diff --git a/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php b/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php index c18483884..e895aa8e5 100644 --- a/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php +++ b/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php @@ -18,18 +18,9 @@ use Throwable; interface AssertionFailedException extends Throwable { - /** - * @return string|null - */ public function getPropertyPath(); - /** - * @return mixed - */ public function getValue(); - /** - * @return array - */ - public function getConstraints(): array; + public function getConstraints(); } diff --git a/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php b/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php index acd966544..20c890992 100644 --- a/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php +++ b/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php @@ -16,22 +16,11 @@ namespace Assert; class InvalidArgumentException extends \InvalidArgumentException implements AssertionFailedException { - /** - * @var string|null - */ private $propertyPath; - - /** - * @var mixed - */ private $value; - - /** - * @var array - */ private $constraints; - public function __construct($message, $code, string $propertyPath = null, $value = null, array $constraints = []) + public function __construct($message, $code, $propertyPath, $value, array $constraints = []) { parent::__construct($message, $code); @@ -47,7 +36,7 @@ class InvalidArgumentException extends \InvalidArgumentException implements Asse * Useful to transport information about the nature of the error * back to higher layers. * - * @return string|null + * @return string */ public function getPropertyPath() { @@ -69,7 +58,7 @@ class InvalidArgumentException extends \InvalidArgumentException implements Asse * * @return array */ - public function getConstraints(): array + public function getConstraints() { return $this->constraints; } diff --git a/vendor/beberlei/assert/lib/Assert/LazyAssertion.php b/vendor/beberlei/assert/lib/Assert/LazyAssertion.php index 6ccd64236..abbaf4bcb 100644 --- a/vendor/beberlei/assert/lib/Assert/LazyAssertion.php +++ b/vendor/beberlei/assert/lib/Assert/LazyAssertion.php @@ -21,96 +21,96 @@ use LogicException; * * @author Benjamin Eberlei * - * @method LazyAssertion alnum(string|callable $message = null, string $propertyPath = null) Assert that value is alphanumeric. - * @method LazyAssertion base64(string|callable $message = null, string $propertyPath = null) Assert that a constant is defined. - * @method LazyAssertion between(mixed $lowerLimit, mixed $upperLimit, string|callable $message = null, string $propertyPath = null) Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit. - * @method LazyAssertion betweenExclusive(mixed $lowerLimit, mixed $upperLimit, string|callable $message = null, string $propertyPath = null) Assert that a value is greater than a lower limit, and less than an upper limit. - * @method LazyAssertion betweenLength(int $minLength, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string length is between min and max lengths. - * @method LazyAssertion boolean(string|callable $message = null, string $propertyPath = null) Assert that value is php boolean. - * @method LazyAssertion choice(array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices. - * @method LazyAssertion choicesNotEmpty(array $choices, string|callable $message = null, string $propertyPath = null) Determines if the values array has every choice as key and that this choice has content. - * @method LazyAssertion classExists(string|callable $message = null, string $propertyPath = null) Assert that the class exists. - * @method LazyAssertion contains(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string contains a sequence of chars. - * @method LazyAssertion count(int $count, string|callable $message = null, string $propertyPath = null) Assert that the count of countable is equal to count. - * @method LazyAssertion date(string $format, string|callable $message = null, string $propertyPath = null) Assert that date is valid and corresponds to the given format. - * @method LazyAssertion defined(string|callable $message = null, string $propertyPath = null) Assert that a constant is defined. - * @method LazyAssertion digit(string|callable $message = null, string $propertyPath = null) Validates if an integer or integerish is a digit. - * @method LazyAssertion directory(string|callable $message = null, string $propertyPath = null) Assert that a directory exists. - * @method LazyAssertion e164(string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid E164 Phone Number. - * @method LazyAssertion email(string|callable $message = null, string $propertyPath = null) Assert that value is an email address (using input_filter/FILTER_VALIDATE_EMAIL). - * @method LazyAssertion endsWith(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string ends with a sequence of chars. - * @method LazyAssertion eq(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are equal (using ==). - * @method LazyAssertion eqArraySubset(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that the array contains the subset. - * @method LazyAssertion extensionLoaded(string|callable $message = null, string $propertyPath = null) Assert that extension is loaded. - * @method LazyAssertion extensionVersion(string $operator, mixed $version, string|callable $message = null, string $propertyPath = null) Assert that extension is loaded and a specific version is installed. - * @method LazyAssertion false(string|callable $message = null, string $propertyPath = null) Assert that the value is boolean False. - * @method LazyAssertion file(string|callable $message = null, string $propertyPath = null) Assert that a file exists. - * @method LazyAssertion float(string|callable $message = null, string $propertyPath = null) Assert that value is a php float. - * @method LazyAssertion greaterOrEqualThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is greater or equal than given limit. - * @method LazyAssertion greaterThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is greater than given limit. - * @method LazyAssertion implementsInterface(string $interfaceName, string|callable $message = null, string $propertyPath = null) Assert that the class implements the interface. - * @method LazyAssertion inArray(array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices. This is an alias of Assertion::choice(). - * @method LazyAssertion integer(string|callable $message = null, string $propertyPath = null) Assert that value is a php integer. - * @method LazyAssertion integerish(string|callable $message = null, string $propertyPath = null) Assert that value is a php integer'ish. - * @method LazyAssertion interfaceExists(string|callable $message = null, string $propertyPath = null) Assert that the interface exists. - * @method LazyAssertion ip(int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv4 or IPv6 address. - * @method LazyAssertion ipv4(int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv4 address. - * @method LazyAssertion ipv6(int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv6 address. - * @method LazyAssertion isArray(string|callable $message = null, string $propertyPath = null) Assert that value is an array. - * @method LazyAssertion isArrayAccessible(string|callable $message = null, string $propertyPath = null) Assert that value is an array or an array-accessible object. - * @method LazyAssertion isCallable(string|callable $message = null, string $propertyPath = null) Determines that the provided value is callable. - * @method LazyAssertion isCountable(string|callable $message = null, string $propertyPath = null) Assert that value is countable. - * @method LazyAssertion isInstanceOf(string $className, string|callable $message = null, string $propertyPath = null) Assert that value is instance of given class-name. - * @method LazyAssertion isJsonString(string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid json string. - * @method LazyAssertion isObject(string|callable $message = null, string $propertyPath = null) Determines that the provided value is an object. - * @method LazyAssertion isResource(string|callable $message = null, string $propertyPath = null) Assert that value is a resource. - * @method LazyAssertion isTraversable(string|callable $message = null, string $propertyPath = null) Assert that value is an array or a traversable object. - * @method LazyAssertion keyExists(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array. - * @method LazyAssertion keyIsset(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object using isset(). - * @method LazyAssertion keyNotExists(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key does not exist in an array. - * @method LazyAssertion length(int $length, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string has a given length. - * @method LazyAssertion lessOrEqualThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less or equal than given limit. - * @method LazyAssertion lessThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less than given limit. - * @method LazyAssertion max(mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that a number is smaller as a given limit. - * @method LazyAssertion maxCount(int $count, string|callable $message = null, string $propertyPath = null) Assert that the countable have at most $count elements. - * @method LazyAssertion maxLength(int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string value is not longer than $maxLength chars. - * @method LazyAssertion methodExists(mixed $object, string|callable $message = null, string $propertyPath = null) Determines that the named method is defined in the provided object. - * @method LazyAssertion min(mixed $minValue, string|callable $message = null, string $propertyPath = null) Assert that a value is at least as big as a given limit. - * @method LazyAssertion minCount(int $count, string|callable $message = null, string $propertyPath = null) Assert that the countable have at least $count elements. - * @method LazyAssertion minLength(int $minLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that a string is at least $minLength chars long. - * @method LazyAssertion noContent(string|callable $message = null, string $propertyPath = null) Assert that value is empty. - * @method LazyAssertion notBlank(string|callable $message = null, string $propertyPath = null) Assert that value is not blank. - * @method LazyAssertion notContains(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string does not contains a sequence of chars. - * @method LazyAssertion notEmpty(string|callable $message = null, string $propertyPath = null) Assert that value is not empty. - * @method LazyAssertion notEmptyKey(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object and its value is not empty. - * @method LazyAssertion notEq(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not equal (using ==). - * @method LazyAssertion notInArray(array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is not in array of choices. - * @method LazyAssertion notIsInstanceOf(string $className, string|callable $message = null, string $propertyPath = null) Assert that value is not instance of given class-name. - * @method LazyAssertion notNull(string|callable $message = null, string $propertyPath = null) Assert that value is not null. - * @method LazyAssertion notRegex(string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value does not match a regex. - * @method LazyAssertion notSame(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not the same (using ===). - * @method LazyAssertion null(string|callable $message = null, string $propertyPath = null) Assert that value is null. - * @method LazyAssertion numeric(string|callable $message = null, string $propertyPath = null) Assert that value is numeric. - * @method LazyAssertion objectOrClass(string|callable $message = null, string $propertyPath = null) Assert that the value is an object, or a class that exists. - * @method LazyAssertion phpVersion(mixed $version, string|callable $message = null, string $propertyPath = null) Assert on PHP version. - * @method LazyAssertion propertiesExist(array $properties, string|callable $message = null, string $propertyPath = null) Assert that the value is an object or class, and that the properties all exist. - * @method LazyAssertion propertyExists(string $property, string|callable $message = null, string $propertyPath = null) Assert that the value is an object or class, and that the property exists. - * @method LazyAssertion range(mixed $minValue, mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that value is in range of numbers. - * @method LazyAssertion readable(string|callable $message = null, string $propertyPath = null) Assert that the value is something readable. - * @method LazyAssertion regex(string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value matches a regex. - * @method LazyAssertion same(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are the same (using ===). - * @method LazyAssertion satisfy(callable $callback, string|callable $message = null, string $propertyPath = null) Assert that the provided value is valid according to a callback. - * @method LazyAssertion scalar(string|callable $message = null, string $propertyPath = null) Assert that value is a PHP scalar. - * @method LazyAssertion startsWith(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string starts with a sequence of chars. - * @method LazyAssertion string(string|callable $message = null, string $propertyPath = null) Assert that value is a string. - * @method LazyAssertion subclassOf(string $className, string|callable $message = null, string $propertyPath = null) Assert that value is subclass of given class-name. - * @method LazyAssertion true(string|callable $message = null, string $propertyPath = null) Assert that the value is boolean True. - * @method LazyAssertion url(string|callable $message = null, string $propertyPath = null) Assert that value is an URL. - * @method LazyAssertion uuid(string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid UUID. - * @method LazyAssertion version(string $operator, string $version2, string|callable $message = null, string $propertyPath = null) Assert comparison of two versions. - * @method LazyAssertion writeable(string|callable $message = null, string $propertyPath = null) Assert that the value is something writeable. - * @method LazyAssertion all() Switch chain into validation mode for an array of values. - * @method LazyAssertion nullOr() Switch chain into mode allowing nulls, ignoring further assertions. + * @method $this alnum(string|callable $message = null, string $propertyPath = null) Assert that value is alphanumeric. + * @method $this base64(string|callable $message = null, string $propertyPath = null) Assert that a constant is defined. + * @method $this between(mixed $lowerLimit, mixed $upperLimit, string $message = null, string $propertyPath = null) Assert that a value is greater or equal than a lower limit, and less than or equal to an upper limit. + * @method $this betweenExclusive(mixed $lowerLimit, mixed $upperLimit, string $message = null, string $propertyPath = null) Assert that a value is greater than a lower limit, and less than an upper limit. + * @method $this betweenLength(int $minLength, int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string length is between min and max lengths. + * @method $this boolean(string|callable $message = null, string $propertyPath = null) Assert that value is php boolean. + * @method $this choice(array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices. + * @method $this choicesNotEmpty(array $choices, string|callable $message = null, string $propertyPath = null) Determines if the values array has every choice as key and that this choice has content. + * @method $this classExists(string|callable $message = null, string $propertyPath = null) Assert that the class exists. + * @method $this contains(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string contains a sequence of chars. + * @method $this count(int $count, string $message = null, string $propertyPath = null) Assert that the count of countable is equal to count. + * @method $this date(string $format, string|callable $message = null, string $propertyPath = null) Assert that date is valid and corresponds to the given format. + * @method $this defined(string|callable $message = null, string $propertyPath = null) Assert that a constant is defined. + * @method $this digit(string|callable $message = null, string $propertyPath = null) Validates if an integer or integerish is a digit. + * @method $this directory(string|callable $message = null, string $propertyPath = null) Assert that a directory exists. + * @method $this e164(string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid E164 Phone Number. + * @method $this email(string|callable $message = null, string $propertyPath = null) Assert that value is an email address (using input_filter/FILTER_VALIDATE_EMAIL). + * @method $this endsWith(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string ends with a sequence of chars. + * @method $this eq(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are equal (using ==). + * @method $this eqArraySubset(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that the array contains the subset. + * @method $this extensionLoaded(string|callable $message = null, string $propertyPath = null) Assert that extension is loaded. + * @method $this extensionVersion(string $operator, mixed $version, string|callable $message = null, string $propertyPath = null) Assert that extension is loaded and a specific version is installed. + * @method $this false(string|callable $message = null, string $propertyPath = null) Assert that the value is boolean False. + * @method $this file(string|callable $message = null, string $propertyPath = null) Assert that a file exists. + * @method $this float(string|callable $message = null, string $propertyPath = null) Assert that value is a php float. + * @method $this greaterOrEqualThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is greater or equal than given limit. + * @method $this greaterThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is greater than given limit. + * @method $this implementsInterface(string $interfaceName, string|callable $message = null, string $propertyPath = null) Assert that the class implements the interface. + * @method $this inArray(array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is in array of choices. This is an alias of Assertion::choice(). + * @method $this integer(string|callable $message = null, string $propertyPath = null) Assert that value is a php integer. + * @method $this integerish(string|callable $message = null, string $propertyPath = null) Assert that value is a php integer'ish. + * @method $this interfaceExists(string|callable $message = null, string $propertyPath = null) Assert that the interface exists. + * @method $this ip(int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv4 or IPv6 address. + * @method $this ipv4(int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv4 address. + * @method $this ipv6(int $flag = null, string|callable $message = null, string $propertyPath = null) Assert that value is an IPv6 address. + * @method $this isArray(string|callable $message = null, string $propertyPath = null) Assert that value is an array. + * @method $this isArrayAccessible(string|callable $message = null, string $propertyPath = null) Assert that value is an array or an array-accessible object. + * @method $this isCallable(string|callable $message = null, string $propertyPath = null) Determines that the provided value is callable. + * @method $this isCountable(string|callable $message = null, string $propertyPath = null) Assert that value is countable. + * @method $this isInstanceOf(string $className, string|callable $message = null, string $propertyPath = null) Assert that value is instance of given class-name. + * @method $this isJsonString(string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid json string. + * @method $this isObject(string|callable $message = null, string $propertyPath = null) Determines that the provided value is an object. + * @method $this isResource(string|callable $message = null, string $propertyPath = null) Assert that value is a resource. + * @method $this isTraversable(string|callable $message = null, string $propertyPath = null) Assert that value is an array or a traversable object. + * @method $this keyExists(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array. + * @method $this keyIsset(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object using isset(). + * @method $this keyNotExists(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key does not exist in an array. + * @method $this length(int $length, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string has a given length. + * @method $this lessOrEqualThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less or equal than given limit. + * @method $this lessThan(mixed $limit, string|callable $message = null, string $propertyPath = null) Determines if the value is less than given limit. + * @method $this max(mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that a number is smaller as a given limit. + * @method $this maxCount(int $count, string $message = null, string $propertyPath = null) Assert that the countable have at most $count elements. + * @method $this maxLength(int $maxLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string value is not longer than $maxLength chars. + * @method $this methodExists(mixed $object, string|callable $message = null, string $propertyPath = null) Determines that the named method is defined in the provided object. + * @method $this min(mixed $minValue, string|callable $message = null, string $propertyPath = null) Assert that a value is at least as big as a given limit. + * @method $this minCount(int $count, string $message = null, string $propertyPath = null) Assert that the countable have at least $count elements. + * @method $this minLength(int $minLength, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that a string is at least $minLength chars long. + * @method $this noContent(string|callable $message = null, string $propertyPath = null) Assert that value is empty. + * @method $this notBlank(string|callable $message = null, string $propertyPath = null) Assert that value is not blank. + * @method $this notContains(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string does not contains a sequence of chars. + * @method $this notEmpty(string|callable $message = null, string $propertyPath = null) Assert that value is not empty. + * @method $this notEmptyKey(string|int $key, string|callable $message = null, string $propertyPath = null) Assert that key exists in an array/array-accessible object and its value is not empty. + * @method $this notEq(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not equal (using == ). + * @method $this notInArray(array $choices, string|callable $message = null, string $propertyPath = null) Assert that value is not in array of choices. + * @method $this notIsInstanceOf(string $className, string|callable $message = null, string $propertyPath = null) Assert that value is not instance of given class-name. + * @method $this notNull(string|callable $message = null, string $propertyPath = null) Assert that value is not null. + * @method $this notRegex(string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value does not match a regex. + * @method $this notSame(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are not the same (using === ). + * @method $this null(string|callable $message = null, string $propertyPath = null) Assert that value is null. + * @method $this numeric(string|callable $message = null, string $propertyPath = null) Assert that value is numeric. + * @method $this objectOrClass(string|callable $message = null, string $propertyPath = null) Assert that the value is an object, or a class that exists. + * @method $this phpVersion(mixed $version, string|callable $message = null, string $propertyPath = null) Assert on PHP version. + * @method $this propertiesExist(array $properties, string|callable $message = null, string $propertyPath = null) Assert that the value is an object or class, and that the properties all exist. + * @method $this propertyExists(string $property, string|callable $message = null, string $propertyPath = null) Assert that the value is an object or class, and that the property exists. + * @method $this range(mixed $minValue, mixed $maxValue, string|callable $message = null, string $propertyPath = null) Assert that value is in range of numbers. + * @method $this readable(string|callable $message = null, string $propertyPath = null) Assert that the value is something readable. + * @method $this regex(string $pattern, string|callable $message = null, string $propertyPath = null) Assert that value matches a regex. + * @method $this same(mixed $value2, string|callable $message = null, string $propertyPath = null) Assert that two values are the same (using ===). + * @method $this satisfy(callable $callback, string|callable $message = null, string $propertyPath = null) Assert that the provided value is valid according to a callback. + * @method $this scalar(string|callable $message = null, string $propertyPath = null) Assert that value is a PHP scalar. + * @method $this startsWith(string $needle, string|callable $message = null, string $propertyPath = null, string $encoding = 'utf8') Assert that string starts with a sequence of chars. + * @method $this string(string|callable $message = null, string $propertyPath = null) Assert that value is a string. + * @method $this subclassOf(string $className, string|callable $message = null, string $propertyPath = null) Assert that value is subclass of given class-name. + * @method $this true(string|callable $message = null, string $propertyPath = null) Assert that the value is boolean True. + * @method $this url(string|callable $message = null, string $propertyPath = null) Assert that value is an URL. + * @method $this uuid(string|callable $message = null, string $propertyPath = null) Assert that the given string is a valid UUID. + * @method $this version(string $operator, string $version2, string|callable $message = null, string $propertyPath = null) Assert comparison of two versions. + * @method $this writeable(string|callable $message = null, string $propertyPath = null) Assert that the value is something writeable. + * @method $this all() Switch chain into validation mode for an array of values. + * @method $this nullOr() Switch chain into mode allowing nulls, ignoring further assertions. */ class LazyAssertion { @@ -127,13 +127,9 @@ class LazyAssertion private $exceptionClass = LazyAssertionException::class; /** - * @param mixed $value - * @param string|null $propertyPath - * @param string|callable|null $defaultMessage - * - * @return static + * @return $this */ - public function that($value, string $propertyPath = null, $defaultMessage = null) + public function that($value, $propertyPath, $defaultMessage = null) { $this->currentChainFailed = false; $this->thisChainTryAll = false; @@ -144,7 +140,7 @@ class LazyAssertion } /** - * @return static + * @return $this */ public function tryAll() { @@ -157,12 +153,6 @@ class LazyAssertion return $this; } - /** - * @param string $method - * @param array $args - * - * @return static - */ public function __call($method, $args) { if (false === $this->alwaysTryAll @@ -183,11 +173,11 @@ class LazyAssertion } /** - * @return bool - * * @throws LazyAssertionException + * + * @return bool */ - public function verifyNow(): bool + public function verifyNow() { if ($this->errors) { throw \call_user_func([$this->exceptionClass, 'fromErrors'], $this->errors); @@ -199,12 +189,12 @@ class LazyAssertion /** * @param string $className * - * @return static + * @return $this */ public function setAssertClass(string $className) { if (Assert::class !== $className && !\is_subclass_of($className, Assert::class)) { - throw new LogicException($className.' is not (a subclass of) '.Assert::class); + throw new LogicException($className.' is not (a subclass of) '. Assert::class); } $this->assertClass = $className; @@ -215,7 +205,7 @@ class LazyAssertion /** * @param string $className * - * @return static + * @return $this */ public function setExceptionClass(string $className) { diff --git a/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php b/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php index f76ecc699..0a834c1cb 100644 --- a/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php +++ b/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php @@ -26,7 +26,7 @@ class LazyAssertionException extends InvalidArgumentException * * @return self */ - public static function fromErrors(array $errors): self + public static function fromErrors(array $errors) { $message = \sprintf('The following %d assertions failed:', \count($errors))."\n"; @@ -45,10 +45,7 @@ class LazyAssertionException extends InvalidArgumentException $this->errors = $errors; } - /** - * @return InvalidArgumentException[] - */ - public function getErrorExceptions(): array + public function getErrorExceptions() { return $this->errors; } diff --git a/vendor/beberlei/assert/lib/Assert/functions.php b/vendor/beberlei/assert/lib/Assert/functions.php index e0ccbd7d9..67bb6315e 100644 --- a/vendor/beberlei/assert/lib/Assert/functions.php +++ b/vendor/beberlei/assert/lib/Assert/functions.php @@ -20,12 +20,6 @@ namespace Assert; * The invocation of this method starts an assertion chain * that is happening on the passed value. * - * @param mixed $value - * @param string|callable|null $defaultMessage - * @param string $defaultPropertyPath - * - * @return AssertionChain - * * @example * * \Assert\that($value)->notEmpty()->integer(); @@ -33,8 +27,14 @@ namespace Assert; * * The assertion chain can be stateful, that means be careful when you reuse * it. You should never pass around the chain. + * + * @param mixed $value + * @param string $defaultMessage + * @param string $defaultPropertyPath + * + * @return \Assert\AssertionChain */ -function that($value, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain +function that($value, $defaultMessage = null, $defaultPropertyPath = null) { return Assert::that($value, $defaultMessage, $defaultPropertyPath); } @@ -42,13 +42,13 @@ function that($value, $defaultMessage = null, string $defaultPropertyPath = null /** * Start validation on a set of values, returns {@link AssertionChain}. * - * @param mixed $values - * @param string|callable|null $defaultMessage + * @param mixed $values + * @param string $defaultMessage * @param string $defaultPropertyPath * - * @return AssertionChain + * @return \Assert\AssertionChain */ -function thatAll($values, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain +function thatAll($values, $defaultMessage = null, $defaultPropertyPath = null) { return Assert::thatAll($values, $defaultMessage, $defaultPropertyPath); } @@ -56,15 +56,15 @@ function thatAll($values, $defaultMessage = null, string $defaultPropertyPath = /** * Start validation and allow NULL, returns {@link AssertionChain}. * - * @param mixed $value - * @param string|callable|null $defaultMessage + * @param mixed $value + * @param string $defaultMessage * @param string $defaultPropertyPath * - * @return AssertionChain + * @return \Assert\AssertionChain * * @deprecated In favour of Assert::thatNullOr($value, $defaultMessage = null, $defaultPropertyPath = null) */ -function thatNullOr($value, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain +function thatNullOr($value, $defaultMessage = null, $defaultPropertyPath = null) { return Assert::thatNullOr($value, $defaultMessage, $defaultPropertyPath); } @@ -72,9 +72,9 @@ function thatNullOr($value, $defaultMessage = null, string $defaultPropertyPath /** * Create a lazy assertion object. * - * @return LazyAssertion + * @return \Assert\LazyAssertion */ -function lazy(): LazyAssertion +function lazy() { return Assert::lazy(); } diff --git a/vendor/beberlei/assert/phpstan-code.neon b/vendor/beberlei/assert/phpstan-code.neon index 49aa5723f..630379dbe 100644 --- a/vendor/beberlei/assert/phpstan-code.neon +++ b/vendor/beberlei/assert/phpstan-code.neon @@ -1,10 +1,3 @@ parameters: autoload_files: - bin/MethodDocGenerator.php - ignoreErrors: - # is_countable() is available only in PHP 7.3+ - - '#Function is_countable not found#' - - # Calling count() on ResourceBundle and SimpleXMLElement is valid from PHP 7.0+, but does not correctly advertise - # the fact, and so PHPStan has an issue with this. This will be fixed in PHP 7.4+ - - '#Call to function count\(\) with argument type array|Countable|ResourceBundle|SimpleXMLElement will always result in number 1#' diff --git a/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml b/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml index 5dd343abd..991e6503c 100644 --- a/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml +++ b/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml @@ -1,5 +1,4 @@ # https://help.github.com/en/categories/automating-your-workflow-with-github-actions -# https://github.com/localheinz/php-library-template/blob/master/.github/workflows/continuous-integration.yml # https://github.com/sebastianbergmann/phpunit/blob/master/.github/workflows/ci.yml on: @@ -10,46 +9,69 @@ name: "Continuous Integration" jobs: + static-code-analysis: + name: "Static Code Analysis" + + runs-on: ubuntu-latest + + env: + PHAN_ALLOW_XDEBUG: 0 + PHAN_DISABLE_XDEBUG_WARN: 1 + + steps: + - name: "Checkout" + uses: actions/checkout@v2 + + - name: "Install PHP" + uses: shivammathur/setup-php@v2 + with: + php-version: "7.4" + coverage: none + tools: pecl + extensions: ast, gd, imagick, json, mbstring + + - name: "Update dependencies with composer" + run: composer update --no-interaction --no-ansi --no-progress --no-suggest + + - name: "Run phan" + run: php vendor/bin/phan + tests: name: "Unit Tests" - runs-on: ubuntu-latest + + runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: - php-binary: - - php7.2 - - php7.3 - - php7.4 + os: + - ubuntu-latest +# - windows-latest + php-version: + - "7.2" + - "7.3" + - "7.4" + - "8.0" steps: - name: "Checkout" - uses: actions/checkout@v1.1.0 + uses: actions/checkout@v2 + + - name: "Install PHP with extensions" + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + coverage: pcov + tools: pecl + extensions: gd, imagick, json, mbstring - name: "Install dependencies with composer" - run: ${{ matrix.php-binary }} $(which composer) update --no-interaction --no-progress --no-suggest + run: composer update --no-ansi --no-interaction --no-progress --no-suggest - - name: "Run unit tests with phpunit" - run: ${{ matrix.php-binary }} vendor/bin/phpunit --configuration=phpunit.xml --no-coverage - - - code-coverage: - name: "Code Coverage" - runs-on: ubuntu-latest - - steps: - - name: "Checkout" - uses: actions/checkout@v1.1.0 - - - name: "Install locked dependencies with composer" - run: php7.4 $(which composer) install --no-interaction --no-progress --no-suggest - - - name: "Dump Xdebug filter with phpunit/phpunit" - run: php7.4 vendor/bin/phpunit --configuration=phpunit.xml --dump-xdebug-filter=.build/phpunit/xdebug-filter.php - - - name: "Collect code coverage with Xdebug and phpunit/phpunit" - run: php7.4 vendor/bin/phpunit --configuration=phpunit.xml --prepend=.build/phpunit/xdebug-filter.php + - name: "Run tests with phpunit" + run: php vendor/phpunit/phpunit/phpunit --configuration=phpunit.xml - name: "Send code coverage report to Codecov.io" - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - run: bash <(curl -s https://codecov.io/bash) + uses: codecov/codecov-action@v1 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/vendor/chillerlan/php-qrcode/.travis.yml b/vendor/chillerlan/php-qrcode/.travis.yml index 78b8d79e9..7b2377fd8 100644 --- a/vendor/chillerlan/php-qrcode/.travis.yml +++ b/vendor/chillerlan/php-qrcode/.travis.yml @@ -1,3 +1,8 @@ +branches: + only: + - main + - v3.2.x + addons: apt: packages: diff --git a/vendor/chillerlan/php-qrcode/composer.json b/vendor/chillerlan/php-qrcode/composer.json index c2299a350..625149ce7 100644 --- a/vendor/chillerlan/php-qrcode/composer.json +++ b/vendor/chillerlan/php-qrcode/composer.json @@ -24,12 +24,13 @@ } ], "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "ext-mbstring": "*", - "chillerlan/php-settings-container": "^1.2" + "chillerlan/php-settings-container": "^1.2.2" }, "require-dev": { "phpunit/phpunit": "^8.5", + "phan/phan": "^3.2.2", "setasign/fpdf": "^1.8.2" }, "suggest": { diff --git a/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php b/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php index f9d94ae34..76aa5ced7 100644 --- a/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php +++ b/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php @@ -41,9 +41,9 @@ class QRImageWithLogo extends QRImage{ } $this->matrix->setLogoSpace( - $this->options->logoWidth, - $this->options->logoHeight - // not utilizing the position here + $this->options->logoSpaceWidth, + $this->options->logoSpaceHeight + // not utilizing the position here ); // there's no need to save the result of dump() into $this->image here @@ -55,9 +55,9 @@ class QRImageWithLogo extends QRImage{ $w = imagesx($im); $h = imagesy($im); - // set new logo size, leave a border of 1 module - $lw = ($this->options->logoWidth - 2) * $this->options->scale; - $lh = ($this->options->logoHeight - 2) * $this->options->scale; + // set new logo size, leave a border of 1 module (no proportional resize/centering) + $lw = ($this->options->logoSpaceWidth - 2) * $this->options->scale; + $lh = ($this->options->logoSpaceHeight - 2) * $this->options->scale; // get the qrcode size $ql = $this->matrix->size() * $this->options->scale; diff --git a/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php b/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php index 987e10c11..36f63d503 100644 --- a/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php +++ b/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php @@ -16,14 +16,15 @@ require_once __DIR__.'/../vendor/autoload.php'; $data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s'; /** - * @property int $logoWidth - * @property int $logoHeight + * @property int $logoSpaceWidth + * @property int $logoSpaceHeight * * @noinspection PhpIllegalPsrClassPathInspection */ class LogoOptions extends QROptions{ - protected $logoWidth; - protected $logoHeight; + // size in QR modules, multiply with QROptions::$scale for pixel size + protected $logoSpaceWidth; + protected $logoSpaceHeight; } $options = new LogoOptions; @@ -31,8 +32,8 @@ $options = new LogoOptions; $options->version = 7; $options->eccLevel = QRCode::ECC_H; $options->imageBase64 = false; -$options->logoWidth = 13; -$options->logoHeight = 13; +$options->logoSpaceWidth = 13; +$options->logoSpaceHeight = 13; $options->scale = 5; $options->imageTransparent = false; diff --git a/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php b/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php index a6d8b09e2..5b4487a40 100644 --- a/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php +++ b/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php @@ -589,12 +589,12 @@ class QRMatrix{ throw new QRCodeDataException('ECC level "H" required to add logo space'); } - // we need uneven sizes, adjust if needed - if(($width % 2) === 0){ + // we need uneven sizes to center the logo space, adjust if needed + if($startX === null && ($width % 2) === 0){ $width++; } - if(($height % 2) === 0){ + if($startY === null && ($height % 2) === 0){ $height++; } diff --git a/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php b/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php index 34ecf4f91..c4466a658 100644 --- a/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php @@ -13,6 +13,7 @@ namespace chillerlan\QRCodeTest\Output; use chillerlan\QRCode\{QRCode, Output\QRImage}; +use const PHP_MAJOR_VERSION; class QRImageTest extends QROutputTestAbstract{ @@ -63,7 +64,14 @@ class QRImageTest extends QROutputTestAbstract{ $this->setOutputInterface(); - $this::assertIsResource($this->outputInterface->dump()); + $data = $this->outputInterface->dump(); + + if(PHP_MAJOR_VERSION >= 8){ + $this::assertInstanceOf('\\GdImage', $data); + } + else{ + $this::assertIsResource($data); + } } } diff --git a/vendor/chillerlan/php-settings-container/.travis.yml b/vendor/chillerlan/php-settings-container/.travis.yml index 208cdeb6a..c2ad210ed 100644 --- a/vendor/chillerlan/php-settings-container/.travis.yml +++ b/vendor/chillerlan/php-settings-container/.travis.yml @@ -4,10 +4,10 @@ matrix: include: - php: 7.2 - php: 7.3 - - php: 7.4snapshot + - php: 7.4 + - php: 8.0 - php: nightly allow_failures: - - php: 7.4snapshot - php: nightly diff --git a/vendor/chillerlan/php-settings-container/README.md b/vendor/chillerlan/php-settings-container/README.md index 7d0ccf09d..f3bb26c5e 100644 --- a/vendor/chillerlan/php-settings-container/README.md +++ b/vendor/chillerlan/php-settings-container/README.md @@ -51,8 +51,8 @@ Profit! ## Usage -The `SettingsContainerInterface` (wrapped in`SettingsContainerAbstract` ) provides plug-in functionality for immutable object variables and adds some fancy, like loading/saving JSON, arrays etc. -It takes iterable as the only constructor argument and calls a method with the trait's name on invocation (`MyTrait::MyTrait()`) for each used trait. +The `SettingsContainerInterface` (wrapped in`SettingsContainerAbstract` ) provides plug-in functionality for immutable object properties and adds some fancy, like loading/saving JSON, arrays etc. +It takes an `iterable` as the only constructor argument and calls a method with the trait's name on invocation (`MyTrait::MyTrait()`) for each used trait. ### Simple usage ```php @@ -61,6 +61,13 @@ class MyContainer extends SettingsContainerAbstract{ protected $bar; } ``` +Typed properties in PHP 7.4+: +```php +class MyContainer extends SettingsContainerAbstract{ + protected string $foo; + protected string $bar; +} +``` ```php // use it just like a \stdClass @@ -78,6 +85,8 @@ $container->fromJSON('{"foo": "what", "bar": "foo"}'); $container->toArray(); // -> ['foo' => 'what', 'bar' => 'foo'] // or JSON $container->toJSON(); // -> {"foo": "what", "bar": "foo"} +// JSON via JsonSerializable +$json = json_encode($container); // -> {"foo": "what", "bar": "foo"} //non-existing properties will be ignored: $container->nope = 'what'; diff --git a/vendor/chillerlan/php-settings-container/composer.json b/vendor/chillerlan/php-settings-container/composer.json index 4dc758665..4464e6e8a 100644 --- a/vendor/chillerlan/php-settings-container/composer.json +++ b/vendor/chillerlan/php-settings-container/composer.json @@ -20,11 +20,11 @@ "source": "https://github.com/chillerlan/php-settings-container" }, "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "ext-json": "*" }, "require-dev": { - "phpunit/phpunit": "^8.3" + "phpunit/phpunit": "^8.4" }, "autoload": { "psr-4": { diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index 0cd6055d1..fce8549f0 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -37,130 +37,57 @@ namespace Composer\Autoload; * * @author Fabien Potencier * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ */ class ClassLoader { - /** @var ?string */ - private $vendorDir; - // PSR-4 - /** - * @var array[] - * @psalm-var array> - */ private $prefixLengthsPsr4 = array(); - /** - * @var array[] - * @psalm-var array> - */ private $prefixDirsPsr4 = array(); - /** - * @var array[] - * @psalm-var array - */ private $fallbackDirsPsr4 = array(); // PSR-0 - /** - * @var array[] - * @psalm-var array> - */ private $prefixesPsr0 = array(); - /** - * @var array[] - * @psalm-var array - */ private $fallbackDirsPsr0 = array(); - /** @var bool */ private $useIncludePath = false; - - /** - * @var string[] - * @psalm-var array - */ private $classMap = array(); - - /** @var bool */ private $classMapAuthoritative = false; - - /** - * @var bool[] - * @psalm-var array - */ private $missingClasses = array(); - - /** @var ?string */ private $apcuPrefix; - /** - * @var self[] - */ - private static $registeredLoaders = array(); - - /** - * @param ?string $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - } - - /** - * @return string[] - */ public function getPrefixes() { if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + return call_user_func_array('array_merge', $this->prefixesPsr0); } return array(); } - /** - * @return array[] - * @psalm-return array> - */ public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } - /** - * @return array[] - * @psalm-return array - */ public function getFallbackDirs() { return $this->fallbackDirsPsr0; } - /** - * @return array[] - * @psalm-return array - */ public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } - /** - * @return string[] Array of classname => path - * @psalm-var array - */ public function getClassMap() { return $this->classMap; } /** - * @param string[] $classMap Class to filename map - * @psalm-param array $classMap - * - * @return void + * @param array $classMap Class to filename map */ public function addClassMap(array $classMap) { @@ -175,11 +102,9 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories */ public function add($prefix, $paths, $prepend = false) { @@ -222,13 +147,11 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException - * - * @return void */ public function addPsr4($prefix, $paths, $prepend = false) { @@ -272,10 +195,8 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories - * - * @return void + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories */ public function set($prefix, $paths) { @@ -290,12 +211,10 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException - * - * @return void */ public function setPsr4($prefix, $paths) { @@ -315,8 +234,6 @@ class ClassLoader * Turns on searching the include path for class files. * * @param bool $useIncludePath - * - * @return void */ public function setUseIncludePath($useIncludePath) { @@ -339,8 +256,6 @@ class ClassLoader * that have not been registered with the class map. * * @param bool $classMapAuthoritative - * - * @return void */ public function setClassMapAuthoritative($classMapAuthoritative) { @@ -361,8 +276,6 @@ class ClassLoader * APCu prefix to use to cache found/not-found classes, if the extension is enabled. * * @param string|null $apcuPrefix - * - * @return void */ public function setApcuPrefix($apcuPrefix) { @@ -383,44 +296,25 @@ class ClassLoader * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void */ public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } } /** * Unregisters this instance as an autoloader. - * - * @return void */ public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } } /** * Loads the given class or interface. * * @param string $class The name of the class - * @return true|null True if loaded, null otherwise + * @return bool|null True if loaded, null otherwise */ public function loadClass($class) { @@ -429,8 +323,6 @@ class ClassLoader return true; } - - return null; } /** @@ -475,21 +367,6 @@ class ClassLoader return $file; } - /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. - * - * @return self[] - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ private function findFileWithExtension($class, $ext) { // PSR-4 lookup @@ -561,10 +438,6 @@ class ClassLoader * Scope isolated include. * * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - * @private */ function includeFile($file) { diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE index f27399a04..62ecfd8d0 100644 --- a/vendor/composer/LICENSE +++ b/vendor/composer/LICENSE @@ -1,4 +1,3 @@ - Copyright (c) Nils Adermann, Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,4 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 429869e46..8bbdabd74 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -6,7 +6,6 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'IdiormMethodMissingException' => $vendorDir . '/j4mie/idiorm/idiorm.php', 'IdiormResultSet' => $vendorDir . '/j4mie/idiorm/idiorm.php', 'IdiormString' => $vendorDir . '/j4mie/idiorm/idiorm.php', diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 51b54d2f0..8d2a1334f 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -23,12 +23,12 @@ class ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056 } spl_autoload_register(array('ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { - require __DIR__ . '/autoload_static.php'; + require_once __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056::getInitializer($loader)); } else { diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index d1b8ceed0..a8ad7dd29 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -154,7 +154,6 @@ class ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056 ); public static $classMap = array ( - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'IdiormMethodMissingException' => __DIR__ . '/..' . '/j4mie/idiorm/idiorm.php', 'IdiormResultSet' => __DIR__ . '/..' . '/j4mie/idiorm/idiorm.php', 'IdiormString' => __DIR__ . '/..' . '/j4mie/idiorm/idiorm.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index e05582fec..6848b75c0 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,684 +1,657 @@ -{ - "packages": [ - { - "name": "beberlei/assert", - "version": "v3.2.7", - "version_normalized": "3.2.7.0", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/d63a6943fc4fd1a2aedb65994e3548715105abcf", - "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "php": "^7" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan-shim": "*", - "phpunit/phpunit": ">=6.0.0 <8" - }, - "suggest": { - "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles" - }, - "time": "2019-12-19T17:51:41+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, - "files": [ - "lib/Assert/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "support": { - "issues": "https://github.com/beberlei/assert/issues", - "source": "https://github.com/beberlei/assert/tree/v3" - }, - "install-path": "../beberlei/assert" +[ + { + "name": "beberlei/assert", + "version": "v3.2.2", + "version_normalized": "3.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/beberlei/assert.git", + "reference": "5547e7d03f8c6be121b8b9db6d6ed5a22ffdcb01" }, - { - "name": "chillerlan/php-qrcode", - "version": "3.4.0", - "version_normalized": "3.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/chillerlan/php-qrcode.git", - "reference": "d8bf297e6843a53aeaa8f3285ce04fc349d133d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/d8bf297e6843a53aeaa8f3285ce04fc349d133d6", - "reference": "d8bf297e6843a53aeaa8f3285ce04fc349d133d6", - "shasum": "" - }, - "require": { - "chillerlan/php-settings-container": "^1.2", - "ext-mbstring": "*", - "php": "^7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5", - "setasign/fpdf": "^1.8.2" - }, - "suggest": { - "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", - "setasign/fpdf": "Required to use the QR FPDF output." - }, - "time": "2020-11-18T20:51:41+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "chillerlan\\QRCode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kazuhiko Arase", - "homepage": "https://github.com/kazuhikoarase" - }, - { - "name": "Smiley", - "email": "smiley@chillerlan.net", - "homepage": "https://github.com/codemasher" - }, - { - "name": "Contributors", - "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors" - } - ], - "description": "A QR code generator. PHP 7.2+", - "homepage": "https://github.com/chillerlan/php-qrcode", - "keywords": [ - "phpqrcode", - "qr", - "qr code", - "qrcode", - "qrcode-generator" - ], - "support": { - "issues": "https://github.com/chillerlan/php-qrcode/issues", - "source": "https://github.com/chillerlan/php-qrcode/tree/3.4.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", - "type": "custom" - }, - { - "url": "https://ko-fi.com/codemasher", - "type": "ko_fi" - } - ], - "install-path": "../chillerlan/php-qrcode" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beberlei/assert/zipball/5547e7d03f8c6be121b8b9db6d6ed5a22ffdcb01", + "reference": "5547e7d03f8c6be121b8b9db6d6ed5a22ffdcb01", + "shasum": "" }, - { - "name": "chillerlan/php-settings-container", - "version": "1.2.1", - "version_normalized": "1.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/chillerlan/php-settings-container.git", - "reference": "b9b0431dffd74102ee92348a63b4c33fc8ba639b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/b9b0431dffd74102ee92348a63b4c33fc8ba639b", - "reference": "b9b0431dffd74102ee92348a63b4c33fc8ba639b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.3" - }, - "time": "2019-09-10T00:09:44+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "chillerlan\\Settings\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Smiley", - "email": "smiley@chillerlan.net", - "homepage": "https://github.com/codemasher" - } - ], - "description": "A container class for immutable settings objects. Not a DI container. PHP 7.2+", - "homepage": "https://github.com/chillerlan/php-settings-container", - "keywords": [ - "PHP7", - "Settings", - "container", - "helper" - ], - "support": { - "issues": "https://github.com/chillerlan/php-settings-container/issues", - "source": "https://github.com/chillerlan/php-settings-container" - }, - "install-path": "../chillerlan/php-settings-container" + "require": { + "php": "^7" }, - { - "name": "j4mie/idiorm", - "version": "v1.5.7", - "version_normalized": "1.5.7.0", - "source": { - "type": "git", - "url": "https://github.com/j4mie/idiorm.git", - "reference": "d23f97053ef5d0b988a02c6a71eb5c6118b2f5b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/j4mie/idiorm/zipball/d23f97053ef5d0b988a02c6a71eb5c6118b2f5b4", - "reference": "d23f97053ef5d0b988a02c6a71eb5c6118b2f5b4", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "ext-pdo_sqlite": "*", - "phpunit/phpunit": "^4.8" - }, - "time": "2020-04-29T00:37:09+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "idiorm.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause", - "BSD-3-Clause", - "BSD-4-Clause" - ], - "authors": [ - { - "name": "Jamie Matthews", - "email": "jamie.matthews@gmail.com", - "homepage": "http://j4mie.org", - "role": "Developer" - }, - { - "name": "Simon Holywell", - "email": "treffynnon@php.net", - "homepage": "http://simonholywell.com", - "role": "Maintainer" - }, - { - "name": "Durham Hale", - "email": "me@durhamhale.com", - "homepage": "http://durhamhale.com", - "role": "Maintainer" - } - ], - "description": "A lightweight nearly-zero-configuration object-relational mapper and fluent query builder for PHP5", - "homepage": "http://j4mie.github.com/idiormandparis", - "keywords": [ - "idiorm", - "orm", - "query builder" - ], - "support": { - "issues": "https://github.com/j4mie/idiorm/issues", - "source": "https://github.com/j4mie/idiorm" - }, - "install-path": "../j4mie/idiorm" + "require-dev": { + "friendsofphp/php-cs-fixer": "*", + "phpstan/phpstan-shim": "*", + "phpunit/phpunit": ">=6.0.0 <8" }, - { - "name": "mervick/material-design-icons", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/mervick/material-design-icons.git", - "reference": "635435c8d3df3a6da3241648caf8a65d1c07cc1a" + "time": "2019-08-23T16:04:58+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Assert\\": "lib/Assert" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mervick/material-design-icons/zipball/635435c8d3df3a6da3241648caf8a65d1c07cc1a", - "reference": "635435c8d3df3a6da3241648caf8a65d1c07cc1a", - "shasum": "" - }, - "time": "2016-02-22T01:05:40+00:00", - "type": "library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "CC-BY-4.0" - ], - "authors": [ - { - "name": "Andrey Izman", - "email": "izmanw@gmail.com" - } - ], - "description": "Google Material Design Icons For Using With Bootstrap", - "homepage": "http://github.com/mervick/material-design-icons", - "keywords": [ - "bootstrap", - "google", - "icons", - "icons-web-font", - "material", - "material-design", - "web-font" - ], - "support": { - "issues": "https://github.com/mervick/material-design-icons/issues", - "source": "http://github.com/mervick/material-design-icons" - }, - "install-path": "../mervick/material-design-icons" + "files": [ + "lib/Assert/functions.php" + ] }, - { - "name": "paragonie/constant_time_encoding", - "version": "v2.4.0", - "version_normalized": "2.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de", + "role": "Lead Developer" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c", - "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c", - "shasum": "" - }, - "require": { - "php": "^7|^8" - }, - "require-dev": { - "phpunit/phpunit": "^6|^7|^8|^9", - "vimeo/psalm": "^1|^2|^3|^4" - }, - "time": "2020-12-06T15:14:20+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" - }, - { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" - } - ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", - "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" - }, - "install-path": "../paragonie/constant_time_encoding" + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Collaborator" + } + ], + "description": "Thin assertion library for input validation in business models.", + "keywords": [ + "assert", + "assertion", + "validation" + ] + }, + { + "name": "chillerlan/php-qrcode", + "version": "3.4.1", + "version_normalized": "3.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-qrcode.git", + "reference": "468603b687a5fe75c1ff33857a45f1726c7b95a9" }, - { - "name": "phpstan/phpstan", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "0d13a99513182e521271d46bde8f28caa4f84d97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0d13a99513182e521271d46bde8f28caa4f84d97", - "reference": "0d13a99513182e521271d46bde8f28caa4f84d97", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "time": "2021-11-01T06:38:20+00:00", - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.0.0" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "install-path": "../phpstan/phpstan" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/468603b687a5fe75c1ff33857a45f1726c7b95a9", + "reference": "468603b687a5fe75c1ff33857a45f1726c7b95a9", + "shasum": "" }, - { - "name": "spomky-labs/otphp", - "version": "v10.0.1", - "version_normalized": "10.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/Spomky-Labs/otphp.git", - "reference": "f44cce5a9db4b8da410215d992110482c931232f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/f44cce5a9db4b8da410215d992110482c931232f", - "reference": "f44cce5a9db4b8da410215d992110482c931232f", - "shasum": "" - }, - "require": { - "beberlei/assert": "^3.0", - "ext-mbstring": "*", - "paragonie/constant_time_encoding": "^2.0", - "php": "^7.2|^8.0", - "thecodingmachine/safe": "^0.1.14|^1.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-beberlei-assert": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^8.0", - "thecodingmachine/phpstan-safe-rule": "^1.0" - }, - "time": "2020-01-28T09:24:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "v10.0": "10.0.x-dev", - "v9.0": "9.0.x-dev", - "v8.3": "8.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "OTPHP\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/Spomky-Labs/otphp/contributors" - } - ], - "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", - "homepage": "https://github.com/Spomky-Labs/otphp", - "keywords": [ - "FreeOTP", - "RFC 4226", - "RFC 6238", - "google authenticator", - "hotp", - "otp", - "totp" - ], - "support": { - "issues": "https://github.com/Spomky-Labs/otphp/issues", - "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.1" - }, - "install-path": "../spomky-labs/otphp" + "require": { + "chillerlan/php-settings-container": "^1.2.2", + "ext-mbstring": "*", + "php": "^7.2 || ^8.0" }, - { - "name": "thecodingmachine/safe", - "version": "v1.3.3", - "version_normalized": "1.3.3.0", - "source": { - "type": "git", - "url": "https://github.com/thecodingmachine/safe.git", - "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc" + "require-dev": { + "phan/phan": "^3.2.2", + "phpunit/phpunit": "^8.5", + "setasign/fpdf": "^1.8.2" + }, + "suggest": { + "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", + "setasign/fpdf": "Required to use the QR FPDF output." + }, + "time": "2021-09-03T17:54:45+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "chillerlan\\QRCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kazuhiko Arase", + "homepage": "https://github.com/kazuhikoarase" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/a8ab0876305a4cdaef31b2350fcb9811b5608dbc", - "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc", - "shasum": "" + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" }, - "require": { - "php": ">=7.2" + { + "name": "Contributors", + "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors" + } + ], + "description": "A QR code generator. PHP 7.2+", + "homepage": "https://github.com/chillerlan/php-qrcode", + "keywords": [ + "phpqrcode", + "qr", + "qr code", + "qrcode", + "qrcode-generator" + ], + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" }, - "require-dev": { - "phpstan/phpstan": "^0.12", - "squizlabs/php_codesniffer": "^3.2", - "thecodingmachine/phpstan-strict-rules": "^0.12" + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ] + }, + { + "name": "chillerlan/php-settings-container", + "version": "1.2.2", + "version_normalized": "1.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-settings-container.git", + "reference": "d1b5284d6eb3a767459738bb0b20073f0cb3eeaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/d1b5284d6eb3a767459738bb0b20073f0cb3eeaf", + "reference": "d1b5284d6eb3a767459738bb0b20073f0cb3eeaf", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.4" + }, + "time": "2021-09-03T17:33:25+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "chillerlan\\Settings\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "description": "A container class for immutable settings objects. Not a DI container. PHP 7.2+", + "homepage": "https://github.com/chillerlan/php-settings-container", + "keywords": [ + "PHP7", + "Settings", + "container", + "helper" + ], + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" }, - "time": "2020-10-28T17:51:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.1-dev" - } + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ] + }, + { + "name": "j4mie/idiorm", + "version": "v1.5.7", + "version_normalized": "1.5.7.0", + "source": { + "type": "git", + "url": "https://github.com/j4mie/idiorm.git", + "reference": "d23f97053ef5d0b988a02c6a71eb5c6118b2f5b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/j4mie/idiorm/zipball/d23f97053ef5d0b988a02c6a71eb5c6118b2f5b4", + "reference": "d23f97053ef5d0b988a02c6a71eb5c6118b2f5b4", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "ext-pdo_sqlite": "*", + "phpunit/phpunit": "^4.8" + }, + "time": "2020-04-29T00:37:09+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "idiorm.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause", + "BSD-3-Clause", + "BSD-4-Clause" + ], + "authors": [ + { + "name": "Jamie Matthews", + "email": "jamie.matthews@gmail.com", + "homepage": "http://j4mie.org", + "role": "Developer" }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Safe\\": [ - "lib/", - "deprecated/", - "generated/" - ] - }, - "files": [ - "deprecated/apc.php", - "deprecated/libevent.php", - "deprecated/mssql.php", - "deprecated/stats.php", - "lib/special_cases.php", - "generated/apache.php", - "generated/apcu.php", - "generated/array.php", - "generated/bzip2.php", - "generated/calendar.php", - "generated/classobj.php", - "generated/com.php", - "generated/cubrid.php", - "generated/curl.php", - "generated/datetime.php", - "generated/dir.php", - "generated/eio.php", - "generated/errorfunc.php", - "generated/exec.php", - "generated/fileinfo.php", - "generated/filesystem.php", - "generated/filter.php", - "generated/fpm.php", - "generated/ftp.php", - "generated/funchand.php", - "generated/gmp.php", - "generated/gnupg.php", - "generated/hash.php", - "generated/ibase.php", - "generated/ibmDb2.php", - "generated/iconv.php", - "generated/image.php", - "generated/imap.php", - "generated/info.php", - "generated/ingres-ii.php", - "generated/inotify.php", - "generated/json.php", - "generated/ldap.php", - "generated/libxml.php", - "generated/lzf.php", - "generated/mailparse.php", - "generated/mbstring.php", - "generated/misc.php", - "generated/msql.php", - "generated/mysql.php", - "generated/mysqli.php", - "generated/mysqlndMs.php", - "generated/mysqlndQc.php", - "generated/network.php", - "generated/oci8.php", - "generated/opcache.php", - "generated/openssl.php", - "generated/outcontrol.php", - "generated/password.php", - "generated/pcntl.php", - "generated/pcre.php", - "generated/pdf.php", - "generated/pgsql.php", - "generated/posix.php", - "generated/ps.php", - "generated/pspell.php", - "generated/readline.php", - "generated/rpminfo.php", - "generated/rrd.php", - "generated/sem.php", - "generated/session.php", - "generated/shmop.php", - "generated/simplexml.php", - "generated/sockets.php", - "generated/sodium.php", - "generated/solr.php", - "generated/spl.php", - "generated/sqlsrv.php", - "generated/ssdeep.php", - "generated/ssh2.php", - "generated/stream.php", - "generated/strings.php", - "generated/swoole.php", - "generated/uodbc.php", - "generated/uopz.php", - "generated/url.php", - "generated/var.php", - "generated/xdiff.php", - "generated/xml.php", - "generated/xmlrpc.php", - "generated/yaml.php", - "generated/yaz.php", - "generated/zip.php", - "generated/zlib.php" - ] + { + "name": "Simon Holywell", + "email": "treffynnon@php.net", + "homepage": "http://simonholywell.com", + "role": "Maintainer" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP core functions that throw exceptions instead of returning FALSE on error", - "support": { - "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v1.3.3" - }, - "install-path": "../thecodingmachine/safe" + { + "name": "Durham Hale", + "email": "me@durhamhale.com", + "homepage": "http://durhamhale.com", + "role": "Maintainer" + } + ], + "description": "A lightweight nearly-zero-configuration object-relational mapper and fluent query builder for PHP5", + "homepage": "http://j4mie.github.com/idiormandparis", + "keywords": [ + "idiorm", + "orm", + "query builder" + ], + "support": { + "issues": "https://github.com/j4mie/idiorm/issues", + "source": "https://github.com/j4mie/idiorm" } - ], - "dev": true, - "dev-package-names": [ - "phpstan/phpstan" - ] -} + }, + { + "name": "mervick/material-design-icons", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/mervick/material-design-icons.git", + "reference": "635435c8d3df3a6da3241648caf8a65d1c07cc1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mervick/material-design-icons/zipball/635435c8d3df3a6da3241648caf8a65d1c07cc1a", + "reference": "635435c8d3df3a6da3241648caf8a65d1c07cc1a", + "shasum": "" + }, + "time": "2016-02-22T01:05:40+00:00", + "type": "library", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT", + "CC-BY-4.0" + ], + "authors": [ + { + "name": "Andrey Izman", + "email": "izmanw@gmail.com" + } + ], + "description": "Google Material Design Icons For Using With Bootstrap", + "homepage": "http://github.com/mervick/material-design-icons", + "keywords": [ + "bootstrap", + "google", + "icons", + "icons-web-font", + "material", + "material-design", + "web-font" + ], + "support": { + "issues": "https://github.com/mervick/material-design-icons/issues", + "source": "http://github.com/mervick/material-design-icons" + } + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c", + "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "time": "2020-12-06T15:14:20+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + } + }, + { + "name": "phpstan/phpstan", + "version": "1.1.2", + "version_normalized": "1.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "bcea0ae85868a89d5789c75f012c93129f842934" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/bcea0ae85868a89d5789c75f012c93129f842934", + "reference": "bcea0ae85868a89d5789c75f012c93129f842934", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "time": "2021-11-09T12:41:09+00:00", + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ] + }, + { + "name": "spomky-labs/otphp", + "version": "v10.0.1", + "version_normalized": "10.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/otphp.git", + "reference": "f44cce5a9db4b8da410215d992110482c931232f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/f44cce5a9db4b8da410215d992110482c931232f", + "reference": "f44cce5a9db4b8da410215d992110482c931232f", + "shasum": "" + }, + "require": { + "beberlei/assert": "^3.0", + "ext-mbstring": "*", + "paragonie/constant_time_encoding": "^2.0", + "php": "^7.2|^8.0", + "thecodingmachine/safe": "^0.1.14|^1.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-beberlei-assert": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^8.0", + "thecodingmachine/phpstan-safe-rule": "^1.0" + }, + "time": "2020-01-28T09:24:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "v10.0": "10.0.x-dev", + "v9.0": "9.0.x-dev", + "v8.3": "8.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "OTPHP\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/otphp/contributors" + } + ], + "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", + "homepage": "https://github.com/Spomky-Labs/otphp", + "keywords": [ + "FreeOTP", + "RFC 4226", + "RFC 6238", + "google authenticator", + "hotp", + "otp", + "totp" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/otphp/issues", + "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.1" + } + }, + { + "name": "thecodingmachine/safe", + "version": "v1.3.3", + "version_normalized": "1.3.3.0", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/safe.git", + "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/a8ab0876305a4cdaef31b2350fcb9811b5608dbc", + "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpstan/phpstan": "^0.12", + "squizlabs/php_codesniffer": "^3.2", + "thecodingmachine/phpstan-strict-rules": "^0.12" + }, + "time": "2020-10-28T17:51:34+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Safe\\": [ + "lib/", + "deprecated/", + "generated/" + ] + }, + "files": [ + "deprecated/apc.php", + "deprecated/libevent.php", + "deprecated/mssql.php", + "deprecated/stats.php", + "lib/special_cases.php", + "generated/apache.php", + "generated/apcu.php", + "generated/array.php", + "generated/bzip2.php", + "generated/calendar.php", + "generated/classobj.php", + "generated/com.php", + "generated/cubrid.php", + "generated/curl.php", + "generated/datetime.php", + "generated/dir.php", + "generated/eio.php", + "generated/errorfunc.php", + "generated/exec.php", + "generated/fileinfo.php", + "generated/filesystem.php", + "generated/filter.php", + "generated/fpm.php", + "generated/ftp.php", + "generated/funchand.php", + "generated/gmp.php", + "generated/gnupg.php", + "generated/hash.php", + "generated/ibase.php", + "generated/ibmDb2.php", + "generated/iconv.php", + "generated/image.php", + "generated/imap.php", + "generated/info.php", + "generated/ingres-ii.php", + "generated/inotify.php", + "generated/json.php", + "generated/ldap.php", + "generated/libxml.php", + "generated/lzf.php", + "generated/mailparse.php", + "generated/mbstring.php", + "generated/misc.php", + "generated/msql.php", + "generated/mysql.php", + "generated/mysqli.php", + "generated/mysqlndMs.php", + "generated/mysqlndQc.php", + "generated/network.php", + "generated/oci8.php", + "generated/opcache.php", + "generated/openssl.php", + "generated/outcontrol.php", + "generated/password.php", + "generated/pcntl.php", + "generated/pcre.php", + "generated/pdf.php", + "generated/pgsql.php", + "generated/posix.php", + "generated/ps.php", + "generated/pspell.php", + "generated/readline.php", + "generated/rpminfo.php", + "generated/rrd.php", + "generated/sem.php", + "generated/session.php", + "generated/shmop.php", + "generated/simplexml.php", + "generated/sockets.php", + "generated/sodium.php", + "generated/solr.php", + "generated/spl.php", + "generated/sqlsrv.php", + "generated/ssdeep.php", + "generated/ssh2.php", + "generated/stream.php", + "generated/strings.php", + "generated/swoole.php", + "generated/uodbc.php", + "generated/uopz.php", + "generated/url.php", + "generated/var.php", + "generated/xdiff.php", + "generated/xml.php", + "generated/xmlrpc.php", + "generated/yaml.php", + "generated/yaz.php", + "generated/zip.php", + "generated/zlib.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP core functions that throw exceptions instead of returning FALSE on error", + "support": { + "issues": "https://github.com/thecodingmachine/safe/issues", + "source": "https://github.com/thecodingmachine/safe/tree/v1.3.3" + } + } +] diff --git a/vendor/phpstan/phpstan/README.md b/vendor/phpstan/phpstan/README.md index b90c0d415..e4953b4a4 100644 --- a/vendor/phpstan/phpstan/README.md +++ b/vendor/phpstan/phpstan/README.md @@ -51,6 +51,8 @@ can be checked before you run the actual line. Shopware     Craft CMS +
+Worksome [**You can now sponsor my open-source work on PHPStan through GitHub Sponsors.**](https://github.com/sponsors/ondrejmirtes) diff --git a/vendor/phpstan/phpstan/phpstan.phar b/vendor/phpstan/phpstan/phpstan.phar index 69444cd4ef3e298f8a2f181dec2e163f9f63bb7c..306020e3a247dfcbbda6908dde13157bb933044a 100644 GIT binary patch delta 473860 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