diff --git a/classes/Redis.php b/classes/Redis.php index e55bd6d..f5ea029 100644 --- a/classes/Redis.php +++ b/classes/Redis.php @@ -209,7 +209,7 @@ public function set(string $key, $value, int $minutes = 0): bool /** * @inheritDoc */ - public function retrieve(string $key) + public function retrieve(string $key): ?Value { $key = $this->key($key); diff --git a/composer.json b/composer.json index a94e70d..f9b81ac 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "bnomei/kirby3-redis-cachedriver", "type": "kirby-plugin", - "version": "1.7.0", + "version": "1.7.1", "description": "Redis based Cache-Driver", "license": "MIT", "authors": [ diff --git a/composer.lock b/composer.lock index 501db86..9ae1c6c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1d8715677fbf3a8734189ae6e4700fad", + "content-hash": "51d6c058ff4f3dd8de494c20ec055fe7", "packages": [ { "name": "getkirby/composer-installer", @@ -55,16 +55,16 @@ }, { "name": "predis/predis", - "version": "v2.0.0", + "version": "v2.0.3", "source": { "type": "git", "url": "https://github.com/predis/predis.git", - "reference": "99c253733dee9447d26257dc669d33d5ac84713d" + "reference": "ff59f745815150c65ed388f7d64e7660fe961771" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/99c253733dee9447d26257dc669d33d5ac84713d", - "reference": "99c253733dee9447d26257dc669d33d5ac84713d", + "url": "https://api.github.com/repos/predis/predis/zipball/ff59f745815150c65ed388f7d64e7660fe961771", + "reference": "ff59f745815150c65ed388f7d64e7660fe961771", "shasum": "" }, "require": { @@ -114,7 +114,7 @@ ], "support": { "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.0.0" + "source": "https://github.com/predis/predis/tree/v2.0.3" }, "funding": [ { @@ -122,22 +122,22 @@ "type": "github" } ], - "time": "2022-06-08T13:14:56+00:00" + "time": "2022-10-11T16:52:29+00:00" } ], "packages-dev": [ { "name": "claviska/simpleimage", - "version": "3.6.5", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/claviska/SimpleImage.git", - "reference": "00f90662686696b9b7157dbb176183aabe89700f" + "reference": "abd15ced313c7b8041d7d73d8d2398b4f2510cf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/00f90662686696b9b7157dbb176183aabe89700f", - "reference": "00f90662686696b9b7157dbb176183aabe89700f", + "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/abd15ced313c7b8041d7d73d8d2398b4f2510cf1", + "reference": "abd15ced313c7b8041d7d73d8d2398b4f2510cf1", "shasum": "" }, "require": { @@ -165,7 +165,7 @@ "description": "A PHP class that makes working with images as simple as possible.", "support": { "issues": "https://github.com/claviska/SimpleImage/issues", - "source": "https://github.com/claviska/SimpleImage/tree/3.6.5" + "source": "https://github.com/claviska/SimpleImage/tree/3.7.0" }, "funding": [ { @@ -173,7 +173,88 @@ "type": "github" } ], - "time": "2021-12-01T12:42:55+00:00" + "time": "2022-07-05T13:18:44+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" }, { "name": "doctrine/instantiator", @@ -247,16 +328,16 @@ }, { "name": "filp/whoops", - "version": "2.14.5", + "version": "2.14.6", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + "reference": "f7948baaa0330277c729714910336383286305da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da", + "reference": "f7948baaa0330277c729714910336383286305da", "shasum": "" }, "require": { @@ -306,7 +387,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.5" + "source": "https://github.com/filp/whoops/tree/2.14.6" }, "funding": [ { @@ -314,24 +395,25 @@ "type": "github" } ], - "time": "2022-01-07T12:00:00+00:00" + "time": "2022-11-02T16:23:29+00:00" }, { "name": "getkirby/cms", - "version": "3.7.2", + "version": "3.8.3", "source": { "type": "git", "url": "https://github.com/getkirby/kirby.git", - "reference": "0f4890a101f19632497ba0dc579a6f81b7fedf78" + "reference": "41719bd54310dfc2e321a75a8549da98ccf5cd1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getkirby/kirby/zipball/0f4890a101f19632497ba0dc579a6f81b7fedf78", - "reference": "0f4890a101f19632497ba0dc579a6f81b7fedf78", + "url": "https://api.github.com/repos/getkirby/kirby/zipball/41719bd54310dfc2e321a75a8549da98ccf5cd1d", + "reference": "41719bd54310dfc2e321a75a8549da98ccf5cd1d", "shasum": "" }, "require": { - "claviska/simpleimage": "3.6.5", + "claviska/simpleimage": "3.7.0", + "composer/semver": "3.3.2", "ext-ctype": "*", "ext-curl": "*", "ext-dom": "*", @@ -343,12 +425,12 @@ "ext-mbstring": "*", "ext-openssl": "*", "ext-simplexml": "*", - "filp/whoops": "2.14.5", + "filp/whoops": "2.14.6", "getkirby/composer-installer": "^1.2.1", - "laminas/laminas-escaper": "2.10.0", + "laminas/laminas-escaper": "2.12.0", "michelf/php-smartypants": "1.8.1", - "php": ">=7.4.0 <8.2.0", - "phpmailer/phpmailer": "6.6.3", + "php": ">=8.0.0 <8.2.0", + "phpmailer/phpmailer": "6.6.5", "symfony/polyfill-intl-idn": "1.26.0", "symfony/polyfill-mbstring": "1.26.0" }, @@ -413,20 +495,20 @@ "type": "custom" } ], - "time": "2022-07-27T13:02:31+00:00" + "time": "2022-12-06T14:31:06+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.4.5", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { @@ -441,10 +523,10 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -454,8 +536,12 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -521,7 +607,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.5" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -537,20 +623,20 @@ "type": "tidelift" } ], - "time": "2022-06-20T22:16:13+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -605,7 +691,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -621,20 +707,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.4.0", + "version": "2.4.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "13388f00956b1503577598873fffb5ae994b5737" + "reference": "67c26b443f348a51926030c83481b85718457d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737", - "reference": "13388f00956b1503577598873fffb5ae994b5737", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", "shasum": "" }, "require": { @@ -648,15 +734,19 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { "dev-master": "2.4-dev" } @@ -720,7 +810,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.3" }, "funding": [ { @@ -736,36 +826,36 @@ "type": "tidelift" } ], - "time": "2022-06-20T21:43:11+00:00" + "time": "2022-10-26T14:07:24+00:00" }, { "name": "laminas/laminas-escaper", - "version": "2.10.0", + "version": "2.12.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "58af67282db37d24e584a837a94ee55b9c7552be" + "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/58af67282db37d24e584a837a94ee55b9c7552be", - "reference": "58af67282db37d24e584a837a94ee55b9c7552be", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", + "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", "shasum": "" }, "require": { "ext-ctype": "*", "ext-mbstring": "*", - "php": "^7.4 || ~8.0.0 || ~8.1.0" + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-escaper": "*" }, "require-dev": { "infection/infection": "^0.26.6", - "laminas/laminas-coding-standard": "~2.3.0", + "laminas/laminas-coding-standard": "~2.4.0", "maglnet/composer-require-checker": "^3.8.0", "phpunit/phpunit": "^9.5.18", - "psalm/plugin-phpunit": "^0.16.1", + "psalm/plugin-phpunit": "^0.17.0", "vimeo/psalm": "^4.22.0" }, "type": "library", @@ -798,7 +888,7 @@ "type": "community_bridge" } ], - "time": "2022-03-08T20:15:36+00:00" + "time": "2022-10-10T10:11:09+00:00" }, { "name": "league/color-extractor", @@ -973,16 +1063,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.15.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", "shasum": "" }, "require": { @@ -1023,9 +1113,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" }, - "time": "2022-05-31T20:59:12+00:00" + "time": "2022-11-12T15:38:23+00:00" }, { "name": "phar-io/manifest", @@ -1140,16 +1230,16 @@ }, { "name": "php-coveralls/php-coveralls", - "version": "v2.5.2", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/php-coveralls/php-coveralls.git", - "reference": "007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4" + "reference": "9d8243bbf0e053333692857c98fab7cfba0d60a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4", - "reference": "007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/9d8243bbf0e053333692857c98fab7cfba0d60a9", + "reference": "9d8243bbf0e053333692857c98fab7cfba0d60a9", "shasum": "" }, "require": { @@ -1164,7 +1254,7 @@ "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || >=8.0 <8.5.29 || >=9.0 <9.5.23", "sanmai/phpunit-legacy-adapter": "^6.1 || ^8.0" }, "suggest": { @@ -1217,182 +1307,22 @@ ], "support": { "issues": "https://github.com/php-coveralls/php-coveralls/issues", - "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.5.2" + "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.5.3" }, - "time": "2021-12-06T17:05:08+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" - }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2022-09-12T20:47:09+00:00" }, { "name": "phpmailer/phpmailer", - "version": "v6.6.3", + "version": "v6.6.5", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "9400f305a898f194caff5521f64e5dfa926626f3" + "reference": "8b6386d7417526d1ea4da9edb70b8352f7543627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/9400f305a898f194caff5521f64e5dfa926626f3", - "reference": "9400f305a898f194caff5521f64e5dfa926626f3", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8b6386d7417526d1ea4da9edb70b8352f7543627", + "reference": "8b6386d7417526d1ea4da9edb70b8352f7543627", "shasum": "" }, "require": { @@ -1416,8 +1346,8 @@ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", - "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -1449,7 +1379,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.3" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.5" }, "funding": [ { @@ -1457,94 +1387,27 @@ "type": "github" } ], - "time": "2022-06-20T09:21:02+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2022-10-07T12:23:10+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1593,7 +1456,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19" }, "funding": [ { @@ -1601,7 +1464,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2022-11-18T07:47:47+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1846,16 +1709,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.21", + "version": "9.5.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1" + "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38", + "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38", "shasum": "" }, "require": { @@ -1870,7 +1733,6 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", @@ -1878,19 +1740,16 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -1932,7 +1791,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27" }, "funding": [ { @@ -1942,9 +1801,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-06-19T12:14:25+00:00" + "time": "2022-12-09T07:31:23+00:00" }, { "name": "psr/container", @@ -2422,16 +2285,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -2484,7 +2347,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -2492,7 +2355,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -2682,16 +2545,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -2747,7 +2610,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -2755,7 +2618,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -3110,16 +2973,16 @@ }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { @@ -3131,7 +2994,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -3154,7 +3017,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -3162,7 +3025,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -3219,16 +3082,16 @@ }, { "name": "symfony/config", - "version": "v6.0.9", + "version": "v6.0.11", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "9c40f44bc38d91aeefbcdd1d42609033984ce062" + "reference": "956d4ec5df274dda91a4cedfccc2bfd063f6f649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/9c40f44bc38d91aeefbcdd1d42609033984ce062", - "reference": "9c40f44bc38d91aeefbcdd1d42609033984ce062", + "url": "https://api.github.com/repos/symfony/config/zipball/956d4ec5df274dda91a4cedfccc2bfd063f6f649", + "reference": "956d4ec5df274dda91a4cedfccc2bfd063f6f649", "shasum": "" }, "require": { @@ -3277,7 +3140,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.0.9" + "source": "https://github.com/symfony/config/tree/v6.0.11" }, "funding": [ { @@ -3293,20 +3156,20 @@ "type": "tidelift" } ], - "time": "2022-05-17T12:08:13+00:00" + "time": "2022-06-27T17:10:44+00:00" }, { "name": "symfony/console", - "version": "v6.0.10", + "version": "v6.0.16", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d8d41b93c16f1da2f2d4b9209b7de78c4d203642" + "reference": "be294423f337dda97c810733138c0caec1bb0575" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d8d41b93c16f1da2f2d4b9209b7de78c4d203642", - "reference": "d8d41b93c16f1da2f2d4b9209b7de78c4d203642", + "url": "https://api.github.com/repos/symfony/console/zipball/be294423f337dda97c810733138c0caec1bb0575", + "reference": "be294423f337dda97c810733138c0caec1bb0575", "shasum": "" }, "require": { @@ -3372,7 +3235,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.10" + "source": "https://github.com/symfony/console/tree/v6.0.16" }, "funding": [ { @@ -3388,7 +3251,7 @@ "type": "tidelift" } ], - "time": "2022-06-26T13:01:22+00:00" + "time": "2022-11-25T18:58:46+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3459,16 +3322,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.0.9", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "bf7b9d2ee692b6df2a41017d6023a2fe732d240c" + "reference": "3adca49133bd055ebe6011ed1e012be3c908af79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf7b9d2ee692b6df2a41017d6023a2fe732d240c", - "reference": "bf7b9d2ee692b6df2a41017d6023a2fe732d240c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3adca49133bd055ebe6011ed1e012be3c908af79", + "reference": "3adca49133bd055ebe6011ed1e012be3c908af79", "shasum": "" }, "require": { @@ -3502,7 +3365,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.9" + "source": "https://github.com/symfony/filesystem/tree/v6.0.13" }, "funding": [ { @@ -3518,20 +3381,20 @@ "type": "tidelift" } ], - "time": "2022-05-21T13:33:31+00:00" + "time": "2022-09-21T20:25:27+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -3546,7 +3409,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3584,7 +3447,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -3600,20 +3463,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -3625,7 +3488,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3665,7 +3528,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -3681,7 +3544,7 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -3772,16 +3635,16 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -3793,7 +3656,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3836,7 +3699,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -3852,7 +3715,7 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -3939,16 +3802,16 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -3957,7 +3820,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3998,7 +3861,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -4014,7 +3877,7 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/service-contracts", @@ -4100,16 +3963,16 @@ }, { "name": "symfony/stopwatch", - "version": "v6.0.5", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "f2c1780607ec6502f2121d9729fd8150a655d337" + "reference": "7554fde6848af5ef1178f8ccbdbdb8ae1092c70a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f2c1780607ec6502f2121d9729fd8150a655d337", - "reference": "f2c1780607ec6502f2121d9729fd8150a655d337", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/7554fde6848af5ef1178f8ccbdbdb8ae1092c70a", + "reference": "7554fde6848af5ef1178f8ccbdbdb8ae1092c70a", "shasum": "" }, "require": { @@ -4142,7 +4005,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.5" + "source": "https://github.com/symfony/stopwatch/tree/v6.0.13" }, "funding": [ { @@ -4158,20 +4021,20 @@ "type": "tidelift" } ], - "time": "2022-02-21T17:15:17+00:00" + "time": "2022-09-28T15:52:47+00:00" }, { "name": "symfony/string", - "version": "v6.0.10", + "version": "v6.0.15", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "1b3adf02a0fc814bd9118d7fd68a097a599ebc27" + "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/1b3adf02a0fc814bd9118d7fd68a097a599ebc27", - "reference": "1b3adf02a0fc814bd9118d7fd68a097a599ebc27", + "url": "https://api.github.com/repos/symfony/string/zipball/51ac0fa0ccf132a00519b87c97e8f775fa14e771", + "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771", "shasum": "" }, "require": { @@ -4227,7 +4090,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.10" + "source": "https://github.com/symfony/string/tree/v6.0.15" }, "funding": [ { @@ -4243,20 +4106,20 @@ "type": "tidelift" } ], - "time": "2022-06-26T16:34:50+00:00" + "time": "2022-10-10T09:34:08+00:00" }, { "name": "symfony/yaml", - "version": "v6.0.10", + "version": "v6.0.16", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3b039081c8a6ff8773db2fc11069f2da4960449c" + "reference": "eb85bd1b0b297e976f3ada52ad239ef80b4dbd0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3b039081c8a6ff8773db2fc11069f2da4960449c", - "reference": "3b039081c8a6ff8773db2fc11069f2da4960449c", + "url": "https://api.github.com/repos/symfony/yaml/zipball/eb85bd1b0b297e976f3ada52ad239ef80b4dbd0b", + "reference": "eb85bd1b0b297e976f3ada52ad239ef80b4dbd0b", "shasum": "" }, "require": { @@ -4301,7 +4164,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.0.10" + "source": "https://github.com/symfony/yaml/tree/v6.0.16" }, "funding": [ { @@ -4317,7 +4180,7 @@ "type": "tidelift" } ], - "time": "2022-06-20T11:58:32+00:00" + "time": "2022-11-25T18:58:46+00:00" }, { "name": "theseer/tokenizer", @@ -4368,64 +4231,6 @@ } ], "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], diff --git a/vendor/autoload.php b/vendor/autoload.php index 844e72d..18acfa8 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -3,8 +3,21 @@ // autoload.php @generated by Composer if (PHP_VERSION_ID < 50600) { - echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; - exit(1); + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, $err); + } elseif (!headers_sent()) { + echo $err; + } + } + trigger_error( + $err, + E_USER_ERROR + ); } require_once __DIR__ . '/composer/autoload_real.php'; diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 597eff6..2dfdd04 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -185,6 +185,12 @@ 'Predis\\Command\\Redis\\UNSUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/UNSUBSCRIBE.php', 'Predis\\Command\\Redis\\UNWATCH' => $vendorDir . '/predis/predis/src/Command/Redis/UNWATCH.php', 'Predis\\Command\\Redis\\WATCH' => $vendorDir . '/predis/predis/src/Command/Redis/WATCH.php', + 'Predis\\Command\\Redis\\XADD' => $vendorDir . '/predis/predis/src/Command/Redis/XADD.php', + 'Predis\\Command\\Redis\\XDEL' => $vendorDir . '/predis/predis/src/Command/Redis/XDEL.php', + 'Predis\\Command\\Redis\\XLEN' => $vendorDir . '/predis/predis/src/Command/Redis/XLEN.php', + 'Predis\\Command\\Redis\\XRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/XRANGE.php', + 'Predis\\Command\\Redis\\XREVRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/XREVRANGE.php', + 'Predis\\Command\\Redis\\XTRIM' => $vendorDir . '/predis/predis/src/Command/Redis/XTRIM.php', 'Predis\\Command\\Redis\\ZADD' => $vendorDir . '/predis/predis/src/Command/Redis/ZADD.php', 'Predis\\Command\\Redis\\ZCARD' => $vendorDir . '/predis/predis/src/Command/Redis/ZCARD.php', 'Predis\\Command\\Redis\\ZCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/ZCOUNT.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index c62186c..545b2b1 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -216,6 +216,12 @@ class ComposerStaticInit2d571c530ac2455b062b8f3d1ca217d6 'Predis\\Command\\Redis\\UNSUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/UNSUBSCRIBE.php', 'Predis\\Command\\Redis\\UNWATCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/UNWATCH.php', 'Predis\\Command\\Redis\\WATCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/WATCH.php', + 'Predis\\Command\\Redis\\XADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XADD.php', + 'Predis\\Command\\Redis\\XDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XDEL.php', + 'Predis\\Command\\Redis\\XLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XLEN.php', + 'Predis\\Command\\Redis\\XRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XRANGE.php', + 'Predis\\Command\\Redis\\XREVRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XREVRANGE.php', + 'Predis\\Command\\Redis\\XTRIM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XTRIM.php', 'Predis\\Command\\Redis\\ZADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZADD.php', 'Predis\\Command\\Redis\\ZCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZCARD.php', 'Predis\\Command\\Redis\\ZCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZCOUNT.php', diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 248d281..73eeec3 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,8 +1,8 @@ array( 'name' => 'bnomei/kirby3-redis-cachedriver', - 'pretty_version' => '1.7.0', - 'version' => '1.7.0.0', + 'pretty_version' => '1.7.1', + 'version' => '1.7.1.0', 'reference' => NULL, 'type' => 'kirby-plugin', 'install_path' => __DIR__ . '/../../', @@ -11,8 +11,8 @@ ), 'versions' => array( 'bnomei/kirby3-redis-cachedriver' => array( - 'pretty_version' => '1.7.0', - 'version' => '1.7.0.0', + 'pretty_version' => '1.7.1', + 'version' => '1.7.1.0', 'reference' => NULL, 'type' => 'kirby-plugin', 'install_path' => __DIR__ . '/../../', @@ -29,9 +29,9 @@ 'dev_requirement' => false, ), 'predis/predis' => array( - 'pretty_version' => 'v2.0.0', - 'version' => '2.0.0.0', - 'reference' => '99c253733dee9447d26257dc669d33d5ac84713d', + 'pretty_version' => 'v2.0.3', + 'version' => '2.0.3.0', + 'reference' => 'ff59f745815150c65ed388f7d64e7660fe961771', 'type' => 'library', 'install_path' => __DIR__ . '/../predis/predis', 'aliases' => array(), diff --git a/vendor/predis/predis/src/Client.php b/vendor/predis/predis/src/Client.php index e4c8ba8..8fedf93 100644 --- a/vendor/predis/predis/src/Client.php +++ b/vendor/predis/predis/src/Client.php @@ -40,7 +40,7 @@ */ class Client implements ClientInterface, \IteratorAggregate { - const VERSION = '2.0.0'; + const VERSION = '2.0.3'; /** @var OptionsInterface */ private $options; diff --git a/vendor/predis/predis/src/ClientInterface.php b/vendor/predis/predis/src/ClientInterface.php index ae4af81..e4bc0d9 100644 --- a/vendor/predis/predis/src/ClientInterface.php +++ b/vendor/predis/predis/src/ClientInterface.php @@ -25,157 +25,163 @@ * and more friendly interface to ease programming which is described in the * following list of methods: * - * @method int del(string[]|string $keyOrKeys, string ...$keys = null) - * @method string|null dump(string $key) - * @method int exists(string $key) - * @method int expire(string $key, int $seconds) - * @method int expireat(string $key, int $timestamp) - * @method array keys(string $pattern) - * @method int move(string $key, int $db) - * @method mixed object($subcommand, string $key) - * @method int persist(string $key) - * @method int pexpire(string $key, int $milliseconds) - * @method int pexpireat(string $key, int $timestamp) - * @method int pttl(string $key) - * @method string|null randomkey() - * @method mixed rename(string $key, string $target) - * @method int renamenx(string $key, string $target) - * @method array scan($cursor, array $options = null) - * @method array sort(string $key, array $options = null) - * @method int ttl(string $key) - * @method mixed type(string $key) - * @method int append(string $key, $value) - * @method int bitcount(string $key, $start = null, $end = null) - * @method int bitop($operation, $destkey, $key) - * @method array|null bitfield(string $key, $subcommand, ...$subcommandArg) - * @method int bitpos(string $key, $bit, $start = null, $end = null) - * @method int decr(string $key) - * @method int decrby(string $key, int $decrement) - * @method string|null get(string $key) - * @method int getbit(string $key, $offset) - * @method string getrange(string $key, $start, $end) - * @method string|null getset(string $key, $value) - * @method int incr(string $key) - * @method int incrby(string $key, int $increment) - * @method string incrbyfloat(string $key, int|float $increment) - * @method array mget(string[]|string $keyOrKeys, string ...$keys = null) - * @method mixed mset(array $dictionary) - * @method int msetnx(array $dictionary) - * @method Status psetex(string $key, $milliseconds, $value) - * @method Status set(string $key, $value, $expireResolution = null, $expireTTL = null, $flag = null) - * @method int setbit(string $key, $offset, $value) - * @method Status setex(string $key, $seconds, $value) - * @method int setnx(string $key, $value) - * @method int setrange(string $key, $offset, $value) - * @method int strlen(string $key) - * @method int hdel(string $key, array $fields) - * @method int hexists(string $key, string $field) - * @method string|null hget(string $key, string $field) - * @method array hgetall(string $key) - * @method int hincrby(string $key, string $field, int $increment) - * @method string hincrbyfloat(string $key, string $field, int|float $increment) - * @method array hkeys(string $key) - * @method int hlen(string $key) - * @method array hmget(string $key, array $fields) - * @method mixed hmset(string $key, array $dictionary) - * @method array hscan(string $key, $cursor, array $options = null) - * @method int hset(string $key, string $field, string $value) - * @method int hsetnx(string $key, string $field, string $value) - * @method array hvals(string $key) - * @method int hstrlen(string $key, string $field) - * @method array|null blpop(array|string $keys, int|float $timeout) - * @method array|null brpop(array|string $keys, int|float $timeout) - * @method string|null brpoplpush(string $source, string $destination, int|float $timeout) - * @method string|null lindex(string $key, int $index) - * @method int linsert(string $key, $whence, $pivot, $value) - * @method int llen(string $key) - * @method string|null lpop(string $key) - * @method int lpush(string $key, array $values) - * @method int lpushx(string $key, array $values) - * @method string[] lrange(string $key, int $start, int $stop) - * @method int lrem(string $key, int $count, string $value) - * @method mixed lset(string $key, int $index, string $value) - * @method mixed ltrim(string $key, int $start, int $stop) - * @method string|null rpop(string $key) - * @method string|null rpoplpush(string $source, string $destination) - * @method int rpush(string $key, array $values) - * @method int rpushx(string $key, array $values) - * @method int sadd(string $key, array $members) - * @method int scard(string $key) - * @method string[] sdiff(array|string $keys) - * @method int sdiffstore(string $destination, array|string $keys) - * @method string[] sinter(array|string $keys) - * @method int sinterstore(string $destination, array|string $keys) - * @method int sismember(string $key, string $member) - * @method string[] smembers(string $key) - * @method int smove(string $source, string $destination, string $member) - * @method string|null spop(string $key, int $count = null) - * @method string|null srandmember(string $key, int $count = null) - * @method int srem(string $key, string $member) - * @method array sscan(string $key, int $cursor, array $options = null) - * @method string[] sunion(array|string $keys) - * @method int sunionstore(string $destination, array|string $keys) - * @method int touch(string[]|string $keyOrKeys, string ...$keys = null) - * @method int zadd(string $key, array $membersAndScoresDictionary) - * @method int zcard(string $key) - * @method string zcount(string $key, int|string $min, int|string $max) - * @method string zincrby(string $key, int $increment, string $member) - * @method int zinterstore(string $destination, array|string $keys, array $options = null) - * @method array zpopmin(string $key, int $count = 1) - * @method array zpopmax(string $key, int $count = 1) - * @method array zrange(string $key, int|string $start, int|string $stop, array $options = null) - * @method array zrangebyscore(string $key, int|string $min, int|string $max, array $options = null) - * @method int|null zrank(string $key, string $member) - * @method int zrem(string $key, string ...$member) - * @method int zremrangebyrank(string $key, int|string $start, int|string $stop) - * @method int zremrangebyscore(string $key, int|string $min, int|string $max) - * @method array zrevrange(string $key, int|string $start, int|string $stop, array $options = null) - * @method array zrevrangebyscore(string $key, int|string $max, int|string $min, array $options = null) - * @method int|null zrevrank(string $key, string $member) - * @method int zunionstore(string $destination, array|string $keys, array $options = null) - * @method string|null zscore(string $key, string $member) - * @method array zscan(string $key, int $cursor, array $options = null) - * @method array zrangebylex(string $key, string $start, string $stop, array $options = null) - * @method array zrevrangebylex(string $key, string $start, string $stop, array $options = null) - * @method int zremrangebylex(string $key, string $min, string $max) - * @method int zlexcount(string $key, string $min, string $max) - * @method int pfadd(string $key, array $elements) - * @method mixed pfmerge(string $destinationKey, array|string $sourceKeys) - * @method int pfcount(string[]|string $keyOrKeys, string ...$keys = null) - * @method mixed pubsub($subcommand, $argument) - * @method int publish($channel, $message) - * @method mixed discard() - * @method array|null exec() - * @method mixed multi() - * @method mixed unwatch() - * @method mixed watch(string $key) - * @method mixed eval(string $script, int $numkeys, string ...$keyOrArg = null) - * @method mixed evalsha(string $script, int $numkeys, string ...$keyOrArg = null) - * @method mixed script($subcommand, $argument = null) - * @method mixed auth(string $password) - * @method string echo(string $message) - * @method mixed ping(string $message = null) - * @method mixed select(int $database) - * @method mixed bgrewriteaof() - * @method mixed bgsave() - * @method mixed client($subcommand, $argument = null) - * @method mixed config($subcommand, $argument = null) - * @method int dbsize() - * @method mixed flushall() - * @method mixed flushdb() - * @method array info($section = null) - * @method int lastsave() - * @method mixed save() - * @method mixed slaveof(string $host, int $port) - * @method mixed slowlog($subcommand, $argument = null) - * @method array time() - * @method array command() - * @method int geoadd(string $key, $longitude, $latitude, $member) - * @method array geohash(string $key, array $members) - * @method array geopos(string $key, array $members) - * @method string|null geodist(string $key, $member1, $member2, $unit = null) - * @method array georadius(string $key, $longitude, $latitude, $radius, $unit, array $options = null) - * @method array georadiusbymember(string $key, $member, $radius, $unit, array $options = null) + * @method int del(string[]|string $keyOrKeys, string ...$keys = null) + * @method string|null dump(string $key) + * @method int exists(string $key) + * @method int expire(string $key, int $seconds) + * @method int expireat(string $key, int $timestamp) + * @method array keys(string $pattern) + * @method int move(string $key, int $db) + * @method mixed object($subcommand, string $key) + * @method int persist(string $key) + * @method int pexpire(string $key, int $milliseconds) + * @method int pexpireat(string $key, int $timestamp) + * @method int pttl(string $key) + * @method string|null randomkey() + * @method mixed rename(string $key, string $target) + * @method int renamenx(string $key, string $target) + * @method array scan($cursor, array $options = null) + * @method array sort(string $key, array $options = null) + * @method int ttl(string $key) + * @method mixed type(string $key) + * @method int append(string $key, $value) + * @method int bitcount(string $key, $start = null, $end = null) + * @method int bitop($operation, $destkey, $key) + * @method array|null bitfield(string $key, $subcommand, ...$subcommandArg) + * @method int bitpos(string $key, $bit, $start = null, $end = null) + * @method int decr(string $key) + * @method int decrby(string $key, int $decrement) + * @method string|null get(string $key) + * @method int getbit(string $key, $offset) + * @method string getrange(string $key, $start, $end) + * @method string|null getset(string $key, $value) + * @method int incr(string $key) + * @method int incrby(string $key, int $increment) + * @method string incrbyfloat(string $key, int|float $increment) + * @method array mget(string[]|string $keyOrKeys, string ...$keys = null) + * @method mixed mset(array $dictionary) + * @method int msetnx(array $dictionary) + * @method Status psetex(string $key, $milliseconds, $value) + * @method Status set(string $key, $value, $expireResolution = null, $expireTTL = null, $flag = null) + * @method int setbit(string $key, $offset, $value) + * @method Status setex(string $key, $seconds, $value) + * @method int setnx(string $key, $value) + * @method int setrange(string $key, $offset, $value) + * @method int strlen(string $key) + * @method int hdel(string $key, array $fields) + * @method int hexists(string $key, string $field) + * @method string|null hget(string $key, string $field) + * @method array hgetall(string $key) + * @method int hincrby(string $key, string $field, int $increment) + * @method string hincrbyfloat(string $key, string $field, int|float $increment) + * @method array hkeys(string $key) + * @method int hlen(string $key) + * @method array hmget(string $key, array $fields) + * @method mixed hmset(string $key, array $dictionary) + * @method array hscan(string $key, $cursor, array $options = null) + * @method int hset(string $key, string $field, string $value) + * @method int hsetnx(string $key, string $field, string $value) + * @method array hvals(string $key) + * @method int hstrlen(string $key, string $field) + * @method array|null blpop(array|string $keys, int|float $timeout) + * @method array|null brpop(array|string $keys, int|float $timeout) + * @method string|null brpoplpush(string $source, string $destination, int|float $timeout) + * @method string|null lindex(string $key, int $index) + * @method int linsert(string $key, $whence, $pivot, $value) + * @method int llen(string $key) + * @method string|null lpop(string $key) + * @method int lpush(string $key, array $values) + * @method int lpushx(string $key, array $values) + * @method string[] lrange(string $key, int $start, int $stop) + * @method int lrem(string $key, int $count, string $value) + * @method mixed lset(string $key, int $index, string $value) + * @method mixed ltrim(string $key, int $start, int $stop) + * @method string|null rpop(string $key) + * @method string|null rpoplpush(string $source, string $destination) + * @method int rpush(string $key, array $values) + * @method int rpushx(string $key, array $values) + * @method int sadd(string $key, array $members) + * @method int scard(string $key) + * @method string[] sdiff(array|string $keys) + * @method int sdiffstore(string $destination, array|string $keys) + * @method string[] sinter(array|string $keys) + * @method int sinterstore(string $destination, array|string $keys) + * @method int sismember(string $key, string $member) + * @method string[] smembers(string $key) + * @method int smove(string $source, string $destination, string $member) + * @method string|array|null spop(string $key, int $count = null) + * @method string|null srandmember(string $key, int $count = null) + * @method int srem(string $key, array|string $member) + * @method array sscan(string $key, int $cursor, array $options = null) + * @method string[] sunion(array|string $keys) + * @method int sunionstore(string $destination, array|string $keys) + * @method int touch(string[]|string $keyOrKeys, string ...$keys = null) + * @method string xadd(string $key, array $dictionary, string $id = '*', array $options = null) + * @method int xdel(string $key, string ...$id) + * @method int xlen(string $key) + * @method array xrevrange(string $key, string $end, string $start, ?int $count = null) + * @method array xrange(string $key, string $start, string $end, ?int $count = null) + * @method string xtrim(string $key, array|string $strategy, string $threshold, array $options = null) + * @method int zadd(string $key, array $membersAndScoresDictionary) + * @method int zcard(string $key) + * @method string zcount(string $key, int|string $min, int|string $max) + * @method string zincrby(string $key, int $increment, string $member) + * @method int zinterstore(string $destination, array|string $keys, array $options = null) + * @method array zpopmin(string $key, int $count = 1) + * @method array zpopmax(string $key, int $count = 1) + * @method array zrange(string $key, int|string $start, int|string $stop, array $options = null) + * @method array zrangebyscore(string $key, int|string $min, int|string $max, array $options = null) + * @method int|null zrank(string $key, string $member) + * @method int zrem(string $key, string ...$member) + * @method int zremrangebyrank(string $key, int|string $start, int|string $stop) + * @method int zremrangebyscore(string $key, int|string $min, int|string $max) + * @method array zrevrange(string $key, int|string $start, int|string $stop, array $options = null) + * @method array zrevrangebyscore(string $key, int|string $max, int|string $min, array $options = null) + * @method int|null zrevrank(string $key, string $member) + * @method int zunionstore(string $destination, array|string $keys, array $options = null) + * @method string|null zscore(string $key, string $member) + * @method array zscan(string $key, int $cursor, array $options = null) + * @method array zrangebylex(string $key, string $start, string $stop, array $options = null) + * @method array zrevrangebylex(string $key, string $start, string $stop, array $options = null) + * @method int zremrangebylex(string $key, string $min, string $max) + * @method int zlexcount(string $key, string $min, string $max) + * @method int pfadd(string $key, array $elements) + * @method mixed pfmerge(string $destinationKey, array|string $sourceKeys) + * @method int pfcount(string[]|string $keyOrKeys, string ...$keys = null) + * @method mixed pubsub($subcommand, $argument) + * @method int publish($channel, $message) + * @method mixed discard() + * @method array|null exec() + * @method mixed multi() + * @method mixed unwatch() + * @method mixed watch(string $key) + * @method mixed eval(string $script, int $numkeys, string ...$keyOrArg = null) + * @method mixed evalsha(string $script, int $numkeys, string ...$keyOrArg = null) + * @method mixed script($subcommand, $argument = null) + * @method mixed auth(string $password) + * @method string echo(string $message) + * @method mixed ping(string $message = null) + * @method mixed select(int $database) + * @method mixed bgrewriteaof() + * @method mixed bgsave() + * @method mixed client($subcommand, $argument = null) + * @method mixed config($subcommand, $argument = null) + * @method int dbsize() + * @method mixed flushall() + * @method mixed flushdb() + * @method array info($section = null) + * @method int lastsave() + * @method mixed save() + * @method mixed slaveof(string $host, int $port) + * @method mixed slowlog($subcommand, $argument = null) + * @method array time() + * @method array command() + * @method int geoadd(string $key, $longitude, $latitude, $member) + * @method array geohash(string $key, array $members) + * @method array geopos(string $key, array $members) + * @method string|null geodist(string $key, $member1, $member2, $unit = null) + * @method array georadius(string $key, $longitude, $latitude, $radius, $unit, array $options = null) + * @method array georadiusbymember(string $key, $member, $radius, $unit, array $options = null) * * @author Daniele Alessandri */ diff --git a/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php b/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php index 7520127..c9bfdf0 100644 --- a/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php +++ b/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php @@ -31,142 +31,154 @@ class KeyPrefixProcessor implements ProcessorInterface public function __construct($prefix) { $this->prefix = $prefix; - $this->commands = array( + + $prefixFirst = static::class . '::first'; + $prefixAll = static::class . '::all'; + $prefixInterleaved = static::class . '::interleaved'; + $prefixSkipFirst = static::class . '::skipFirst'; + $prefixSkipLast = static::class . '::skipLast'; + $prefixSort = static::class . '::sort'; + $prefixEvalKeys = static::class . '::evalKeys'; + $prefixZsetStore = static::class . '::zsetStore'; + $prefixMigrate = static::class . '::migrate'; + $prefixGeoradius = static::class . '::georadius'; + + $this->commands = [ /* ---------------- Redis 1.2 ---------------- */ - 'EXISTS' => 'static::all', - 'DEL' => 'static::all', - 'TYPE' => 'static::first', - 'KEYS' => 'static::first', - 'RENAME' => 'static::all', - 'RENAMENX' => 'static::all', - 'EXPIRE' => 'static::first', - 'EXPIREAT' => 'static::first', - 'TTL' => 'static::first', - 'MOVE' => 'static::first', - 'SORT' => 'static::sort', - 'DUMP' => 'static::first', - 'RESTORE' => 'static::first', - 'SET' => 'static::first', - 'SETNX' => 'static::first', - 'MSET' => 'static::interleaved', - 'MSETNX' => 'static::interleaved', - 'GET' => 'static::first', - 'MGET' => 'static::all', - 'GETSET' => 'static::first', - 'INCR' => 'static::first', - 'INCRBY' => 'static::first', - 'DECR' => 'static::first', - 'DECRBY' => 'static::first', - 'RPUSH' => 'static::first', - 'LPUSH' => 'static::first', - 'LLEN' => 'static::first', - 'LRANGE' => 'static::first', - 'LTRIM' => 'static::first', - 'LINDEX' => 'static::first', - 'LSET' => 'static::first', - 'LREM' => 'static::first', - 'LPOP' => 'static::first', - 'RPOP' => 'static::first', - 'RPOPLPUSH' => 'static::all', - 'SADD' => 'static::first', - 'SREM' => 'static::first', - 'SPOP' => 'static::first', - 'SMOVE' => 'static::skipLast', - 'SCARD' => 'static::first', - 'SISMEMBER' => 'static::first', - 'SINTER' => 'static::all', - 'SINTERSTORE' => 'static::all', - 'SUNION' => 'static::all', - 'SUNIONSTORE' => 'static::all', - 'SDIFF' => 'static::all', - 'SDIFFSTORE' => 'static::all', - 'SMEMBERS' => 'static::first', - 'SRANDMEMBER' => 'static::first', - 'ZADD' => 'static::first', - 'ZINCRBY' => 'static::first', - 'ZREM' => 'static::first', - 'ZRANGE' => 'static::first', - 'ZREVRANGE' => 'static::first', - 'ZRANGEBYSCORE' => 'static::first', - 'ZCARD' => 'static::first', - 'ZSCORE' => 'static::first', - 'ZREMRANGEBYSCORE' => 'static::first', + 'EXISTS' => $prefixAll, + 'DEL' => $prefixAll, + 'TYPE' => $prefixFirst, + 'KEYS' => $prefixFirst, + 'RENAME' => $prefixAll, + 'RENAMENX' => $prefixAll, + 'EXPIRE' => $prefixFirst, + 'EXPIREAT' => $prefixFirst, + 'TTL' => $prefixFirst, + 'MOVE' => $prefixFirst, + 'SORT' => $prefixSort, + 'DUMP' => $prefixFirst, + 'RESTORE' => $prefixFirst, + 'SET' => $prefixFirst, + 'SETNX' => $prefixFirst, + 'MSET' => $prefixInterleaved, + 'MSETNX' => $prefixInterleaved, + 'GET' => $prefixFirst, + 'MGET' => $prefixAll, + 'GETSET' => $prefixFirst, + 'INCR' => $prefixFirst, + 'INCRBY' => $prefixFirst, + 'DECR' => $prefixFirst, + 'DECRBY' => $prefixFirst, + 'RPUSH' => $prefixFirst, + 'LPUSH' => $prefixFirst, + 'LLEN' => $prefixFirst, + 'LRANGE' => $prefixFirst, + 'LTRIM' => $prefixFirst, + 'LINDEX' => $prefixFirst, + 'LSET' => $prefixFirst, + 'LREM' => $prefixFirst, + 'LPOP' => $prefixFirst, + 'RPOP' => $prefixFirst, + 'RPOPLPUSH' => $prefixAll, + 'SADD' => $prefixFirst, + 'SREM' => $prefixFirst, + 'SPOP' => $prefixFirst, + 'SMOVE' => $prefixSkipLast, + 'SCARD' => $prefixFirst, + 'SISMEMBER' => $prefixFirst, + 'SINTER' => $prefixAll, + 'SINTERSTORE' => $prefixAll, + 'SUNION' => $prefixAll, + 'SUNIONSTORE' => $prefixAll, + 'SDIFF' => $prefixAll, + 'SDIFFSTORE' => $prefixAll, + 'SMEMBERS' => $prefixFirst, + 'SRANDMEMBER' => $prefixFirst, + 'ZADD' => $prefixFirst, + 'ZINCRBY' => $prefixFirst, + 'ZREM' => $prefixFirst, + 'ZRANGE' => $prefixFirst, + 'ZREVRANGE' => $prefixFirst, + 'ZRANGEBYSCORE' => $prefixFirst, + 'ZCARD' => $prefixFirst, + 'ZSCORE' => $prefixFirst, + 'ZREMRANGEBYSCORE' => $prefixFirst, /* ---------------- Redis 2.0 ---------------- */ - 'SETEX' => 'static::first', - 'APPEND' => 'static::first', - 'SUBSTR' => 'static::first', - 'BLPOP' => 'static::skipLast', - 'BRPOP' => 'static::skipLast', - 'ZUNIONSTORE' => 'static::zsetStore', - 'ZINTERSTORE' => 'static::zsetStore', - 'ZCOUNT' => 'static::first', - 'ZRANK' => 'static::first', - 'ZREVRANK' => 'static::first', - 'ZREMRANGEBYRANK' => 'static::first', - 'HSET' => 'static::first', - 'HSETNX' => 'static::first', - 'HMSET' => 'static::first', - 'HINCRBY' => 'static::first', - 'HGET' => 'static::first', - 'HMGET' => 'static::first', - 'HDEL' => 'static::first', - 'HEXISTS' => 'static::first', - 'HLEN' => 'static::first', - 'HKEYS' => 'static::first', - 'HVALS' => 'static::first', - 'HGETALL' => 'static::first', - 'SUBSCRIBE' => 'static::all', - 'UNSUBSCRIBE' => 'static::all', - 'PSUBSCRIBE' => 'static::all', - 'PUNSUBSCRIBE' => 'static::all', - 'PUBLISH' => 'static::first', + 'SETEX' => $prefixFirst, + 'APPEND' => $prefixFirst, + 'SUBSTR' => $prefixFirst, + 'BLPOP' => $prefixSkipLast, + 'BRPOP' => $prefixSkipLast, + 'ZUNIONSTORE' => $prefixZsetStore, + 'ZINTERSTORE' => $prefixZsetStore, + 'ZCOUNT' => $prefixFirst, + 'ZRANK' => $prefixFirst, + 'ZREVRANK' => $prefixFirst, + 'ZREMRANGEBYRANK' => $prefixFirst, + 'HSET' => $prefixFirst, + 'HSETNX' => $prefixFirst, + 'HMSET' => $prefixFirst, + 'HINCRBY' => $prefixFirst, + 'HGET' => $prefixFirst, + 'HMGET' => $prefixFirst, + 'HDEL' => $prefixFirst, + 'HEXISTS' => $prefixFirst, + 'HLEN' => $prefixFirst, + 'HKEYS' => $prefixFirst, + 'HVALS' => $prefixFirst, + 'HGETALL' => $prefixFirst, + 'SUBSCRIBE' => $prefixAll, + 'UNSUBSCRIBE' => $prefixAll, + 'PSUBSCRIBE' => $prefixAll, + 'PUNSUBSCRIBE' => $prefixAll, + 'PUBLISH' => $prefixFirst, /* ---------------- Redis 2.2 ---------------- */ - 'PERSIST' => 'static::first', - 'STRLEN' => 'static::first', - 'SETRANGE' => 'static::first', - 'GETRANGE' => 'static::first', - 'SETBIT' => 'static::first', - 'GETBIT' => 'static::first', - 'RPUSHX' => 'static::first', - 'LPUSHX' => 'static::first', - 'LINSERT' => 'static::first', - 'BRPOPLPUSH' => 'static::skipLast', - 'ZREVRANGEBYSCORE' => 'static::first', - 'WATCH' => 'static::all', + 'PERSIST' => $prefixFirst, + 'STRLEN' => $prefixFirst, + 'SETRANGE' => $prefixFirst, + 'GETRANGE' => $prefixFirst, + 'SETBIT' => $prefixFirst, + 'GETBIT' => $prefixFirst, + 'RPUSHX' => $prefixFirst, + 'LPUSHX' => $prefixFirst, + 'LINSERT' => $prefixFirst, + 'BRPOPLPUSH' => $prefixSkipLast, + 'ZREVRANGEBYSCORE' => $prefixFirst, + 'WATCH' => $prefixAll, /* ---------------- Redis 2.6 ---------------- */ - 'PTTL' => 'static::first', - 'PEXPIRE' => 'static::first', - 'PEXPIREAT' => 'static::first', - 'PSETEX' => 'static::first', - 'INCRBYFLOAT' => 'static::first', - 'BITOP' => 'static::skipFirst', - 'BITCOUNT' => 'static::first', - 'HINCRBYFLOAT' => 'static::first', - 'EVAL' => 'static::evalKeys', - 'EVALSHA' => 'static::evalKeys', - 'MIGRATE' => 'static::migrate', + 'PTTL' => $prefixFirst, + 'PEXPIRE' => $prefixFirst, + 'PEXPIREAT' => $prefixFirst, + 'PSETEX' => $prefixFirst, + 'INCRBYFLOAT' => $prefixFirst, + 'BITOP' => $prefixSkipFirst, + 'BITCOUNT' => $prefixFirst, + 'HINCRBYFLOAT' => $prefixFirst, + 'EVAL' => $prefixEvalKeys, + 'EVALSHA' => $prefixEvalKeys, + 'MIGRATE' => $prefixMigrate, /* ---------------- Redis 2.8 ---------------- */ - 'SSCAN' => 'static::first', - 'ZSCAN' => 'static::first', - 'HSCAN' => 'static::first', - 'PFADD' => 'static::first', - 'PFCOUNT' => 'static::all', - 'PFMERGE' => 'static::all', - 'ZLEXCOUNT' => 'static::first', - 'ZRANGEBYLEX' => 'static::first', - 'ZREMRANGEBYLEX' => 'static::first', - 'ZREVRANGEBYLEX' => 'static::first', - 'BITPOS' => 'static::first', + 'SSCAN' => $prefixFirst, + 'ZSCAN' => $prefixFirst, + 'HSCAN' => $prefixFirst, + 'PFADD' => $prefixFirst, + 'PFCOUNT' => $prefixAll, + 'PFMERGE' => $prefixAll, + 'ZLEXCOUNT' => $prefixFirst, + 'ZRANGEBYLEX' => $prefixFirst, + 'ZREMRANGEBYLEX' => $prefixFirst, + 'ZREVRANGEBYLEX' => $prefixFirst, + 'BITPOS' => $prefixFirst, /* ---------------- Redis 3.2 ---------------- */ - 'HSTRLEN' => 'static::first', - 'BITFIELD' => 'static::first', - 'GEOADD' => 'static::first', - 'GEOHASH' => 'static::first', - 'GEOPOS' => 'static::first', - 'GEODIST' => 'static::first', - 'GEORADIUS' => 'static::georadius', - 'GEORADIUSBYMEMBER' => 'static::georadius', - ); + 'HSTRLEN' => $prefixFirst, + 'BITFIELD' => $prefixFirst, + 'GEOADD' => $prefixFirst, + 'GEOHASH' => $prefixFirst, + 'GEOPOS' => $prefixFirst, + 'GEODIST' => $prefixFirst, + 'GEORADIUS' => $prefixGeoradius, + 'GEORADIUSBYMEMBER' => $prefixGeoradius, + ]; } /** @@ -197,7 +209,7 @@ public function process(CommandInterface $command) if ($command instanceof PrefixableCommandInterface) { $command->prefixKeys($this->prefix); } elseif (isset($this->commands[$commandID = strtoupper($command->getId())])) { - call_user_func($this->commands[$commandID], $command, $this->prefix); + $this->commands[$commandID]($command, $this->prefix); } } diff --git a/vendor/predis/predis/src/Command/Redis/XADD.php b/vendor/predis/predis/src/Command/Redis/XADD.php new file mode 100644 index 0000000..b00b500 --- /dev/null +++ b/vendor/predis/predis/src/Command/Redis/XADD.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Predis\Command\Redis; + +use Predis\Command\Command as RedisCommand; + +/** + * @link http://redis.io/commands/xadd + * + * @author Daniele Alessandri + */ +class XADD extends RedisCommand +{ + /** + * {@inheritdoc} + */ + public function getId() + { + return 'XADD'; + } + + /** + * {@inheritdoc} + */ + public function setArguments(array $arguments) + { + $args = array(); + + $args[] = $arguments[0]; + $options = $arguments[3] ?? []; + + if (isset($options['nomkstream']) && $options['nomkstream']) { + $args[] = 'NOMKSTREAM'; + } + + if (isset($options['trim']) && is_array($options['trim'])) { + array_push($args, ...$options['trim']); + + if (isset($options['limit'])) { + $args[] = 'LIMIT'; + $args[] = $options['limit']; + } + } + + // ID, default to * to let Redis set it + $args[] = $arguments[2] ?? '*'; + if (isset($arguments[1]) && is_array($arguments[1])) { + foreach ($arguments[1] as $key => $val) { + $args[] = $key; + $args[] = $val; + } + } + + parent::setArguments($args); + } +} diff --git a/vendor/predis/predis/src/Command/Redis/XDEL.php b/vendor/predis/predis/src/Command/Redis/XDEL.php new file mode 100644 index 0000000..f182a04 --- /dev/null +++ b/vendor/predis/predis/src/Command/Redis/XDEL.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Predis\Command\Redis; + +use Predis\Command\Command as RedisCommand; + +/** + * @link http://redis.io/commands/xdel + * + * @author Daniele Alessandri + */ +class XDEL extends RedisCommand +{ + /** + * {@inheritdoc} + */ + public function getId() + { + return 'XDEL'; + } + + /** + * {@inheritdoc} + */ + public function setArguments(array $arguments) + { + $arguments = self::normalizeVariadic($arguments); + + parent::setArguments($arguments); + } +} diff --git a/vendor/predis/predis/src/Command/Redis/XLEN.php b/vendor/predis/predis/src/Command/Redis/XLEN.php new file mode 100644 index 0000000..d0670cc --- /dev/null +++ b/vendor/predis/predis/src/Command/Redis/XLEN.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Predis\Command\Redis; + +use Predis\Command\Command as RedisCommand; + +/** + * @link http://redis.io/commands/xlen + * + * @author Daniele Alessandri + */ +class XLEN extends RedisCommand +{ + /** + * {@inheritdoc} + */ + public function getId() + { + return 'XLEN'; + } +} diff --git a/vendor/predis/predis/src/Command/Redis/XRANGE.php b/vendor/predis/predis/src/Command/Redis/XRANGE.php new file mode 100644 index 0000000..3929618 --- /dev/null +++ b/vendor/predis/predis/src/Command/Redis/XRANGE.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Predis\Command\Redis; + +use Predis\Command\Command as RedisCommand; + +/** + * @link http://redis.io/commands/xrange + * + * @author Daniele Alessandri + */ +class XRANGE extends RedisCommand +{ + /** + * {@inheritdoc} + */ + public function getId() + { + return 'XRANGE'; + } + + /** + * {@inheritdoc} + */ + public function setArguments(array $arguments) + { + if (count($arguments) === 4) { + $arguments[] = $arguments[3]; + $arguments[3] = 'COUNT'; + } + + parent::setArguments($arguments); + } + + /** + * {@inheritdoc} + */ + public function parseResponse($data) + { + $result = array(); + foreach ($data as $entry) { + $processed = array(); + $count = count($entry[1]); + + for ($i = 0; $i < $count; ++$i) { + $processed[$entry[1][$i]] = $entry[1][++$i]; + } + + $result[$entry[0]] = $processed; + } + + return $result; + } +} diff --git a/vendor/predis/predis/src/Command/Redis/XREVRANGE.php b/vendor/predis/predis/src/Command/Redis/XREVRANGE.php new file mode 100644 index 0000000..37ac931 --- /dev/null +++ b/vendor/predis/predis/src/Command/Redis/XREVRANGE.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Predis\Command\Redis; + +/** + * @link http://redis.io/commands/xrevrange + * + * @author Daniele Alessandri + */ +class XREVRANGE extends XRANGE +{ + /** + * {@inheritdoc} + */ + public function getId() + { + return 'XREVRANGE'; + } +} diff --git a/vendor/predis/predis/src/Command/Redis/XTRIM.php b/vendor/predis/predis/src/Command/Redis/XTRIM.php new file mode 100644 index 0000000..e181ba3 --- /dev/null +++ b/vendor/predis/predis/src/Command/Redis/XTRIM.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Predis\Command\Redis; + +use Predis\Command\Command as RedisCommand; + +/** + * @link http://redis.io/commands/xtrim + * + * @author Daniele Alessandri + */ +class XTRIM extends RedisCommand +{ + /** + * {@inheritdoc} + */ + public function getId() + { + return 'XTRIM'; + } + + /** + * {@inheritdoc} + */ + public function setArguments(array $arguments) + { + $args = []; + $options = $arguments[3] ?? []; + + $args[] = $arguments[0]; + // Either e.g. 'MAXLEN' or ['MAXLEN', '~'] + if (is_array($arguments[1])) { + array_push($args, ...$arguments[1]); + } else { + $args[] = $arguments[1]; + } + + $args[] = $arguments[2]; + if (isset($options['limit'])) { + $args[] = 'LIMIT'; + $args[] = $options['limit']; + } + + parent::setArguments($args); + } +} diff --git a/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php b/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php index 75b865f..961e471 100644 --- a/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php +++ b/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php @@ -22,6 +22,8 @@ use Predis\Connection\NodeConnectionInterface; use Predis\NotSupportedException; use Predis\Response\ErrorInterface as ErrorResponseInterface; +use Predis\Response\ServerException; +use Predis\Response\Error as ErrorResponse; /** * Abstraction for a Redis-backed cluster of nodes (Redis >= 3.0.0). @@ -54,6 +56,7 @@ class RedisCluster implements ClusterInterface, \IteratorAggregate, \Countable private $strategy; private $connections; private $retryLimit = 5; + private $retryInterval = 10; /** * @param FactoryInterface $connections Optional connection factory. @@ -82,6 +85,26 @@ public function setRetryLimit($retry) $this->retryLimit = (int) $retry; } + /** + * Sets the initial retry interval (milliseconds). + * + * @param int $retryInterval Milliseconds between retries. + */ + public function setRetryInterval($retryInterval) + { + $this->retryInterval = (int) $retryInterval; + } + + /** + * Returns the retry interval (milliseconds). + * + * @return int Milliseconds between retries. + */ + public function getRetryInterval() + { + return (int) $this->retryInterval; + } + /** * {@inheritdoc} */ @@ -207,6 +230,7 @@ public function buildSlotMap() private function queryClusterNodeForSlotMap(NodeConnectionInterface $connection) { $retries = 0; + $retryAfter = $this->retryInterval; $command = RawCommand::create('CLUSTER', 'SLOTS'); RETRY_COMMAND: { @@ -226,7 +250,10 @@ private function queryClusterNodeForSlotMap(NodeConnectionInterface $connection) throw new ClientException('No connections left in the pool for `CLUSTER SLOTS`'); } + usleep($retryAfter * 1000); + $retryAfter = $retryAfter * 2; ++$retries; + goto RETRY_COMMAND; } } @@ -482,24 +509,40 @@ protected function onAskResponse(CommandInterface $command, $details) */ private function retryCommandOnFailure(CommandInterface $command, $method) { - $failure = false; + $retries = 0; + $retryAfter = $this->retryInterval; RETRY_COMMAND: { try { $response = $this->getConnectionByCommand($command)->$method($command); - } catch (ConnectionException $exception) { - $connection = $exception->getConnection(); - $connection->disconnect(); - $this->remove($connection); + if ($response instanceof ErrorResponse) { + $message = $response->getMessage(); - if ($failure) { + if (strpos($message, 'CLUSTERDOWN') !== false) { + throw new ServerException($message); + } + } + } catch (\Throwable $exception) { + usleep($retryAfter * 1000); + $retryAfter = $retryAfter * 2; + + if ($exception instanceof ConnectionException) { + $connection = $exception->getConnection(); + + if ($connection) { + $connection->disconnect(); + $this->remove($connection); + } + } + + if ($retries === $this->retryLimit) { throw $exception; } elseif ($this->useClusterSlots) { $this->askSlotMap(); } - $failure = true; + ++$retries; goto RETRY_COMMAND; } diff --git a/vendor/predis/predis/src/Connection/Parameters.php b/vendor/predis/predis/src/Connection/Parameters.php index 5742073..1170425 100644 --- a/vendor/predis/predis/src/Connection/Parameters.php +++ b/vendor/predis/predis/src/Connection/Parameters.php @@ -26,6 +26,14 @@ class Parameters implements ParametersInterface 'port' => 6379, ); + /** + * Set of connection paramaters already filtered + * for NULL or 0-length string values. + * + * @var array + */ + protected $parameters; + /** * @param array $parameters Named array of connection parameters. */ diff --git a/vendor/predis/predis/src/Connection/Replication/SentinelReplication.php b/vendor/predis/predis/src/Connection/Replication/SentinelReplication.php index c145754..b91807a 100644 --- a/vendor/predis/predis/src/Connection/Replication/SentinelReplication.php +++ b/vendor/predis/predis/src/Connection/Replication/SentinelReplication.php @@ -70,6 +70,11 @@ class SentinelReplication implements ReplicationInterface */ protected $sentinels = array(); + /** + * @var int + */ + protected $sentinelIndex = 0; + /** * @var NodeConnectionInterface */ @@ -264,6 +269,12 @@ protected function createSentinelConnection($parameters) $parameters['database'] = null; $parameters['username'] = null; + // don't leak password from between configurations + // https://github.com/predis/predis/pull/807/#discussion_r985764770 + if (! isset($parameters['password'])) { + $parameters['password'] = null; + } + if (!isset($parameters['timeout'])) { $parameters['timeout'] = $this->sentinelTimeout; } @@ -282,11 +293,13 @@ protected function createSentinelConnection($parameters) public function getSentinelConnection() { if (!$this->sentinelConnection) { - if (!$this->sentinels) { + if ($this->sentinelIndex >= count($this->sentinels)) { + $this->sentinelIndex = 0; throw new \Predis\ClientException('No sentinel server available for autodiscovery.'); } - $sentinel = array_shift($this->sentinels); + $sentinel = $this->sentinels[$this->sentinelIndex]; + ++$this->sentinelIndex; $this->sentinelConnection = $this->createSentinelConnection($sentinel); } @@ -307,6 +320,7 @@ public function updateSentinels() ); $this->sentinels = array(); + $this->sentinelIndex = 0; // NOTE: sentinel server does not return itself, so we add it back. $this->sentinels[] = $sentinel->getParameters()->toArray(); diff --git a/vendor/predis/predis/src/Connection/StreamConnection.php b/vendor/predis/predis/src/Connection/StreamConnection.php index 7dab2f5..092440e 100644 --- a/vendor/predis/predis/src/Connection/StreamConnection.php +++ b/vendor/predis/predis/src/Connection/StreamConnection.php @@ -260,7 +260,7 @@ protected function write($buffer) $socket = $this->getResource(); while (($length = strlen($buffer)) > 0) { - $written = @fwrite($socket, $buffer); + $written = is_resource($socket) ? @fwrite($socket, $buffer) : false; if ($length === $written) { return; @@ -304,7 +304,7 @@ public function read() $bytesLeft = ($size += 2); do { - $chunk = fread($socket, min($bytesLeft, 4096)); + $chunk = is_resource($socket) ? fread($socket, min($bytesLeft, 4096)) : false; if ($chunk === false || $chunk === '') { $this->onConnectionError('Error while reading bytes from the server.');